您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 数据结构课程设计+数据汇总(超市)
-1-得分:信电工程学院课程设计报告数据汇总系统课程:高级语言程序设计班级:12软件1学号:20120510116姓名:潘焕燚指导教师:丁宾2013年7月1日-2-目录1程序目标及功能---------------------------------------------------------------11.1课题背景-----------------------------------------------------------------11.2系统功能---------------------------------------------------------------31.3设计要求---------------------------------------------------------------32程序功能模块组成及流程图------------------------------------------------42.2系统功能模块-----------------------------------------------------------42.3各模块流程图-----------------------------------------------------------53程序主要数据结构及函数列表---------------------------------------------83.1程序中使用的数据结构----------------------------------------------83.2函数列表--------------------------------------------------------------104程序代码及运行结果-------------------------------------------------------145总结与体会------------------------------------------------------------------32-3-题目:数据汇总题目内容:在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。本人完成的工作:(1)编写实现将数据记录插入到数据文件的最后的函数;⑵编写以收款机为单位的数据分类处理函数。构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表;(3)编写以商品为单位的数据分类处理函数。构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表;(4)统计每台收款机的销售总额;(5)以收款机为单位,将所有收款机按销售总额的递增顺序构造一个单链表并输出。(6)以商品为单位,统计每种商品的销售总额。(7)以商品为单位,将所有销售的商品按销售总额的递增顺序构造一个单链表并输出。-4-(8)设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。所采用的数据结构:单链表销售商品数据记录结构定义:typedefstructGoods{intregNum;//收款机编号intgoodsNum;//商品编号intsalesVol;//销售数量doublesalesAmount;//销售单价}Goods;typedefstructGoodsElemType;//用于链表里的数据类型单链表结点定义:typedefstructNode{ElemTypedata;//链表所存的数据structNode*next;//指向下一个结点的指针}*LNode,*LinkList;所设计的函数:[1].将数据记录插入到文件data.dat最后的函数intAddrecord(Goods*goods)算法思想:首先判断参数是否非法,非法则返回FAIL,否则以以二进制的append方式打开文件data.dat;文件指针为空则打开失败返回FAIL,否则将数据记录写入文件,然后关闭文件,返回SUCCESS。-5-流程图:[2].以收款机为单位的数据分类处理函数LinkList*SortByReg(intn)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化n个收款机链表,并读相应记录,存到对应的收款机链表中的末尾结点,最后关闭文件,返回链表数组。流程图:开始参数为空?返回FAIL结束是打开文件失败?是否否把记录写入文件关闭文件,返回SUCCESS-6-[3]统计每台收款机的销售总额double*SumByReg(intn)算法思想:申请一个数组存储各台收款机的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByReg(n)函数得到分类好的收款机链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount流程图:开始打开文件失败?打印“打开文件失败”返回“FAIL”结束是分配链表指针数组内存不足?打印“内存不足”否是初始化n个收款机链表否读相应记录关闭文件,返回链表数组数据块个数不为1?是链表为空?否初始化链表是将记录存到相应链表的末尾结点否-7-开始结束申请一个数组储各台收款机的销售总额内存不足?否是打印“内存不足”返回“FAIL”调用SortByReg(n)函数得到分类好的收款机链表指针数组指针数组为空?释放之前申请的内存返回NULL是初始化总额数组否记录总额累加释放链表头指针的内存,释放总额数组返回总额amount初始化参数i=0in?是链表regArr[i]为空?否链表长度为recsrecs--0?结果打印,释放收款机的链表内存是i++否是否-8-[4].以商品为单位的数据分类处理函数LinkList*SortByGoods(intm)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化m个商品链表,并读相应记录,存到对应的商品链表中的末尾结点,最后关闭文件,返回链表数组。流程图:-9-[5].以商品为单位,统计每种商品的销售总额double*SumByGoods(intm)算法思想:申请一个数组存储各种商品的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByGoods(m)函数得到分类好的各种商品的链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount开始打开文件失败?打印“打开文件失败”返回“FAIL”结束是分配链表指针数组内存不足?打印“内存不足”否是初始化m个商品链表否读相应记录关闭文件,返回链表数组数据块个数不为1?是链表为空?否初始化链表是将记录存到相应链表的末尾结点否-10-流程图:开始结束申请一个数组储存各种商品的销售总额内存不足?否是打印“内存不足”返回“FAIL”调用SortByGoods(m)函数得到分类好的商品链表指针数组指针数组为空?释放之前申请的内存返回NULL是初始化总额数组否记录总额累加释放链表头指针的内存,释放总额数组返回总额amount初始化参数i=0im?是链表regArr[i]为空?否链表长度为recsrecs--0?结果打印,释放收款机的链表内存是i++否是否-11-[6].设计一个菜单,具有插入数据记录、按收款机统计销售总额voidRunMenu(void)算法思想:清除以前的无关输入,打印菜单,根据选择的菜单项进行相应的操作。开始清除以前的无关输入打印菜单根据选择的菜单项进行相应的操作结束1.插入数据记录2.按收款机统计销售总额4退出系统3.按商品统计销售总额-12-[7].用于输入一条新的记录开始goods-regNum0&&goods-regNum=allRegisters?打印“请输入商品信息”清除缓冲区输入收款机编号是否打印“收款机编号(1--%d):#”清除缓冲区输入商品编号goods-goodsNum0&&goods-goodsNum=allGoods?是否打印“商品编号(1--%d):#”打印“销售数量:n=”输入销售数量打印“销售单价”输入单价清除缓冲区结束-13-[8].GOODS的输出函数开始count=ListLength(L)L==NULL?node=L-nextnode==NULL?打印记录格式i=0icount?输出记录(i+1)%5==0?getch()i++;node=node-next;输出总额和记录条数是否否否是是结束-14-程序运行结果:1:主程序运行,菜单打印2插入数据记录-15-3.按收款机统计销售总额4.按商品统计销售总额-16-5.按商品销售记录排序6按收款机收款纪录排序7退出系统-17-源程序:#includestdio.h#includestdlib.h#includeconio.h#defineSUCCESS1//操作成功#defineFAIL0//操作失败#defineallRegisters15#defineallGoods30//销售的商品数据记录typedefstructGoods{intregNum;//收款机编号intgoodsNum;//商品编号intsalesVol;//销售数量doublesalesAmount;//销售单价}Goods;typedefstructGoodsElemType;//用于链表里的数据类型typedefstructNode{ElemTypedata;//链表所存的数据structNode*next;//指向下一个结点的指针}*LNode,*LinkList;//构造一个空的线性表LinkListInitList(void){LNodeHead;Head=(LNode)malloc(sizeof(structNode));//为链表的头结点分配空间if(!Head){printf(Outofspace!);returnNULL;}Head-next=NULL;-18-returnHead;//返回头结点,第一个结点head是不存任何数据的}//初始条件:线性表L已存在。操作结果:返回线性表L的最后一个结点(尾结点)。LNodeIsLast(LinkListL){LNodeP=L-next;if(P){while(P-next!=NULL)//遍历线性表LP=P-next;returnP;//返回线性表L的最后一个结点}elsereturnL;//链表只有头结点,而它不存数据的}//初始条件:线性表L已存在。操作结果:返回线性表L结点的个数。intListLength(LinkListL){LNodeP=L-next;intnum=0;while(P)//累积线性表L结点的个数{num++;P=P-next;}
本文标题:数据结构课程设计+数据汇总(超市)
链接地址:https://www.777doc.com/doc-5952362 .html