版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、得分:课程设计报告数据汇总系统课程:高级语言程序设计班级:12软件1学号:20120510116姓名:潘焕籁指导教师:丁宾2013年7月1日1程序目标及功能11.1 课题背景11.2 系统功能31.3 设计要求32程序功能模块组成及流程图4系统功能模块4各模块流程图53程序主要数据结构及函数列表8程序中使用的数据结构8函数列表104程序代码及运行结果145总结与体会32题目:数据汇总题目内容:在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。假设某超级市场销售有m种商品(假设商品的编号为1,2,3,初,有n台前台收款机(假设收款机的编号为1,
2、2,3,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。本人完成的工作:(1)编写实现将数据记录插入到数据文件的最后的函数;编写以收款机为单位的数据分类处理函数。构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表;编写以商品为单位的数据分类处理函数。构造m个单链
3、表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表;统计每台收款机的销售总额;(5)以收款机为单位,将所有收款机按销售总额的递增顺序构造一个单链表并输出。(6)以商品为单位,统计每种商品的销售总额。(7)以商品为单位,将所有销售的商品按销售总额的递增顺序构造一个单链表并输出。(8)设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。所采用的数据结构:单链表销售商品数据记录结构定义:typedefstruct
4、Goods(intregNum;/收款机编号intgoodsNum;/商品编号intsalesVol;/销售数量doublesalesAmount;/销售单价Goods;typedefstructGoodsElemType;/用于链表里的数据类型单链表结点定义:typedefstructNode(ElemTypedata;/链表所存的数据structNode*next;/指向下一个结点的指针*LNode,*LinkList;所设计的函数:1.将数据记录插入到文件data.dat最后的函数intAddrecord(Goods*goods)算法思想:首先判断参数是否非法,非法则返回FAIL,否则以
5、以二进制的append方式打开文件data.dat;文件指针为空则打开失败返回FAIL,否则将数据记录写入文件,然后关闭文件,返回SUCCESS流程图:2,以收款机为单位的数据分类处理函数LinkList*SortByReg(intn)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化n个收款机链表,并读相应记录,存到对应的收款机链表中的末尾结点,最后关闭文件,返回链表数组。流程图:3统计每台收款机的销售总额double*SumByReg(intn)算法思想:中请一个数组存储各台
6、收款机的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByReg(n)函数得到分类好的收款机链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount流程图:4,以商品为单位的数据分类处理函数LinkList*SortByGoods(intm)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化m个商品链表,并读相应记录,
7、存到对应的商品链表中的末尾结点,最后关闭文件,返回链表数组。流程图:5,以商品为单位,统计每种商品的销售总额double*SumByGoods(intm)算法思想:中请一个数组存储各种商品的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByGoods(m)函数得到分类好的各种商品的链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount6,设计一个菜单,具有插入数据记录、按收款机统计销售总额voidRunMenu(void)算法思想
8、:清除以前的无关输入,打印菜单,根据选择的菜单项进行相应的操作。7,用于输入一条新的记录8.GOODS输出函数程序运行结果:I叵HIM1:主程序运行,菜单打印3课程设计_12软件16海蟋口山闻号=“欢迎使用超市数据汇总基本操作程序学号n6姓名:潘焕獭班级:12软件工系统主菜单2按收款2插入数据记录、D:课程制JL2软件1_16雌摘DebugnXcxe欢迎使用超市数据汇总基本操作程序学号姓名:潘焕簌班级:12软件工系统主菜单l|B厚耀整舞爵额5接收裁机收款记录轮序6递出索统请输入你的选择S-G:15:1:1$自心一30;信1一n=价品号1.一单-11号0|善入露数销,物螫瞿目朋请完3.按收款机统
9、计销售总额欢迎使用超市数据汇总基本操作程序学号76姓名:潘懊簌班级:工2软件工系统主菜单1插入销售记录5曩限懒源翳飙!销售数量请懒入隹的选择(1-G:2注蠢掾打印5个记录,将会暂停,收款机No.!商品NoG?.!R*1G*1$1.00n=l错售总题7记录条鹦T注意莓打印5个记超喜生普停,、按entc谴坞一_4.按商品统计销售总额12软件1系统主菜单No.$3.0M000000NoNo记录条数=工品No(DG*1介面!销售数量$1.005.按商品销售记录排序学号16姓名:潘焕籁班级:12软件系统主菜单役W录2II隘序:臀印厚收款机HoCRX:1E*1B*1=0.0QflftR0.记录条鬻打印5个
10、记录,窖占曾震总I屐机Ho.I商队将会暂停,或Mtcr继续”品Ho.I电J3一铜售数量G*1$1.00G*1$2.00n=ln=2n*2品No.G*2=2停,fcntcr继续!?於:箱售数量$2.00Cnn=2舞噌髓糕泻鬻收款机Nd.:商品No.H*1G*3打印h个记录,半销售总额=3皿萌的.记录条数=1,亭,:W:销售数量$3.00n36按收款机收款纪录排序学号姓名,满焕簌班皴:12软件mmr-每轩印5个记录,将会暂停,或m趣缭?收款机No.;商品NoGX!单价!销售数量E*1G*1打.00n=lH*1G*1$2,00n-2R*1G*3$3.0n3销售后趣加一萌萌萌.记录条里=?汪秀售打印5
11、个记录,漏套皆停,击日nt”继续H收款机No.:商品No.:单彳介($:错售数量fl*2G*2$2.00n27退出系统销售总颤4.眄08眄,记录条数=1源程序:#include#include#includedefineSUCCESS1/操作成功defineFAIL0/操作失败defineallRegisters15defineallGoods30/销售的商品数据记录typedefstructGoodsintregNum;/收款机编intgoodsNum;/商用编pintsalesVol;/销售数量doublesalesAmount;/销售单价Goods;typedefstructGoodsE
12、lemType;/用于链表里的数据类型typedefstructNode/链表所存的数据/指向下一个结点的指针ElemTypedata;structNode*next;*LNode,*LinkList;/构造一个空的线性表LinkListInitList(void)LNodeHead;为链表的头结点分配空间Head=(LNode)malloc(sizeof(structNode);/if(!Head)printf(Outofspace!);returnNULL;Head-next=NULL;returnHead;/返回头结点,第一个结点head是不存任何数据的/初始条件:线性表L已存在。操作结
13、果:返回线性表L的最后一个结点(尾结点)LNodeIsLast(LinkListL)(LNodeP=L-next;if(P)遍历线性表Lwhile(P-next!=NULL)/P=P-next;returnP;/返回线性表L的最后一个结点elsereturnL;/链表只有头结点,而它不存数据的初始条件:线性表L已存在。操作结果:返回线性表L结点的个数。intListLength(LinkListL)LNodeP=L-next;intnum=0;while(P)/累积线性表L结点的个数(num+;P=P-next;returnnum;/返回线性表L结点的个数/构造一个数据域为X的新结点LNode
14、NewLNode(ElemTypeX)LNodeS;为新结点分配空间S=(LNode)malloc(sizeof(structNode);/if(!S)printf(Outofspace!);returnNULL;)S-data=X;S-next=NULL;returnS;/返回新结点)初始条件:线性表L已存在。操作结果:销毁线性表L。voidDestroyList(LinkList*L)LNodeHead,P;if(*L)/若线性表L已存在Head=*L;P=Head-next;while(P!=NULL)/把链表中除头结点外的所有结点释放free(Head);Head=P;P=Head-n
15、ext;)free(Head);/释放头结点)*L=NULL;)/初始条件:线性表L中结点P已找到,新结点S已构造。操作结果:在该结点之后插入新结点X。voidListInsert(LNodePre,LNodeS)S-next=Pre-next;Pre-next=S;)/用于输入一条新的记录/缺点就是没对输入的数据各种检查/一旦输入字母就不行了Goods*Newrecord(Goods*goods)printf(n”请输入商品信息:n);/收款台号,保证录入正确的数据while(1)(fflush(stdin);printf(收款机编号(1-%d):#,allRegisters);scanf(
16、%d,&goods-regNum);if(goods-regNum0&goods-regNumgoodsNum);if(goods-goodsNum0&goods-goodsNumsalesVol);/销量单价printf(商品销售单价:$);scanf(%lf,&goods-salesAmount);/清除可能输入缓冲区fflush(stdin);returngoods;/专为GOODS写的输出函数voidListPrint(LinkListL,doubleamount)(LNodenode;inti;intcount=ListLength(L);if(L=NULL)return;/第一个结
17、点不存记录,所以从第二个开始node=L-next;if(node=NULL)return;/打印出表头printf(注意:每打印5个记录,将会暂停,按enter继续!!n);printf(收款机No(R).|商品No(G).|单价($)|销售数量(n)n);/将全部记录按格式打印出来i=0;while(idata.regNum,node-data.goodsNum,node-data.salesAmount,node-data.salesVol);if(i+1)%5=0)getch();i+;node=node-next;/这个就是打出总额了,Total则是记录的条数printf(销售总额=
18、%lf,记录条数=%dn,amount,i);/1.将数据记录插入到文件data.dat最后的函数intAddrecord(Goods*goods)FILE*ofp;/非法参数if(goods=NULL)returnFAIL;/以二进制的append方式打开文件data.datif(ofp=fopen(data.dat,ab)=NULL)printf(Openfail!n);returnFAIL;/把记录写入文件中fwrite(goods,sizeof(structGoods),1,ofp);/关闭文件fclose(ofp);returnSUCCESS;/2,编写以收款机为单位的数据分类处理函
19、数LinkList*SortByReg(intn)(inti,count;FILE*ifp;Goodstemp;LinkList*regArr;/收款机的链表数组if(ifp=fopen(data.dat,rb)=NULL)(printf(OpenFail.n);returnFAIL;)/分配链表指针数组regArr=(LinkList*)malloc(n*sizeof(LinkList);if(regArr=NULL)(printf(Notenoughmemoryn);returnFAIL;)/n个收款机链表初始化for(i=0;in;i+)regArri=NULL;/开始根据收款机的编号将
20、所读的记录进行分类/注意数组下标是从0开始,而收款机是从1开始数的while(1)(/读相应白记录,正确读取时count为所读的字节数count=fread(&temp,sizeof(structGoods),1,ifp);/出错或是到文件尾了if(count!=1)break;/第一次要初始化链表if(regArrtemp.regNum-1=NULL)regArrtemp.regNum-1=InitList();/存到对应的收款机链表中的末尾结点ListInsert(IsLast(regArrtemp.regNum-1),NewLNode(temp);)/关闭文件fclose(ifp);re
21、turnregArr;/3统计每台收款机的销售总额double*SumByReg(intn)(inti,recs;double*amount;LNodenode;LinkList*regArr;/申请一个数组存储各台收款机的销售总额if(amount=(double*)malloc(n*sizeof(double)=NULL)(printf(Notenoughmemory!n);returnFAIL;)/得到了分类好的收款机链表指针数组regArr=SortByReg(n);if(regArr=NULL)(free(amount);/释放之前申请的内存returnNULL;)/初始化总额数组f
22、or(i=0;in;i+)amounti=0;/进行分析累加for(i=0;inext;/链表是空的if(recs=ListLength(regArri)=0)continue;/遍历一个收款机链表里有的所有记录while(recs-0)(/将该台收款机销售的商品记录的总额进行累加amounti+=node-data.salesAmount*node-data.salesVol;node=node-next;)/释放收款机的链表内存for(i=0;in;i+)(if(regArri=NULL)continue;/打印出后再释放内存ListPrint(regArri,amounti);Destr
23、oyList(®Arri);/释放链表指针头的内存free(regArr);/释放总额数组free(amount);returnamount;/4排序收款机销售总额double*PaixuByReg(intn)(inti,recs,k,l,temp;double*amount;LNodenode;LinkList*regArr;/申请一个数组存储各台收款机的销售总额if(amount=(double*)malloc(n*sizeof(double)=NULL)(printf(Notenoughmemory!n);returnFAIL;/得到了分类好的收款机链表指针数组regArr=Sor
24、tByReg(n);if(regArr=NULL)(free(amount);/释放之前申请的内存returnNULL;/初始化总额数组for(i=0;in;i+)amounti=0;/进行分析累加for(i=0;inext;/链表是空的if(recs=ListLength(regArri)=0)continue;/遍历一个收款机链表里有的所有记录while(recs-0)/将该台收款机销售的商品记录的总额进行累加amounti+=node-data.salesAmount*node-data.salesVol;node=node-next;for(k=0;ki-1;k+)for(l=k+1;
25、lamountl)temp=amountk;amountk=amountl;amountl=temp;printf(排序后的数组为n);/释放收款机的链表内存for(i=0;in;i+)if(regArri=NULL)continue;/打印出后再释放内存ListPrint(regArri,amounti);DestroyList(®Arri);/释放链表指针头的内存free(regArr);/释放总额数组free(amount);returnamount;/5.编写以商品为单位的数据分类处理函数LinkList*SortByGoods(intm)(inti,count=0;FILE*i
26、fp;Goodstemp;各种商品的链表数组LinkList*goodsArr;/if(ifp=fopen(data.dat,rb)=NULL)(printf(OpenFail.n);returnFAIL;/分配链表指针数组goodsArr=(LinkList*)malloc(m*sizeof(LinkList);if(goodsArr=NULL)(printf(Notenoughmemoryn);returnFAIL;/m种商品的链表初始化for(i=0;im;i+)goodsArri=NULL;/开始根据商品的编号将所读的记录进行分类/注意数组下标是从0开始,而商品编号是从1开始数的whi
27、le(1)(/读相应的记录count=fread(&temp,sizeof(structGoods),1,ifp);/出错或是到文件尾了if(count!=1)break;/第一次要初始化链表if(goodsArrtemp.goodsNum-1=NULL)goodsArrtemp.goodsNum-1=InitList();/存到对应的商品链表中的末尾结点ListInsert(IsLast(goodsArrtemp.goodsNum-1),NewLNode(temp);/关闭文件fclose(ifp);returngoodsArr;/6.以商品为单位,统计每种商品的销售总额double*Sum
28、ByGoods(intm)(inti,recs;double*amount;LNodenode;LinkList*goodsArr;/申请一个数组存储各种商品的销售总额if(amount=(double*)malloc(m*sizeof(double)=NULL)(printf(Notenoughmemory!n);returnFAIL;/得到了分类好的各种商品的链表指针数组goodsArr=SortByGoods(m);if(goodsArr=NULL)(free(amount);/释放之前申请的内存returnNULL;/初始化总额数组for(i=0;im;i+)amounti=0;/进行
29、分析累加for(i=0;inext;/链表是空的if(recs=ListLength(goodsArri)=0)continue;/遍历一个商品链表里有的所有记录while(recs-0)(/将某种商品的销售记录的总额进行累加amounti+=node-data.salesAmount*node-data.salesVol;node=node-next;/释放商品的链表内存for(i=0;im;i+)/链表存在的话if(goodsArri=NULL)continue;/打印出后再释放内存ListPrint(goodsArri,amounti);DestroyList(&goodsArri);/
30、释放链表指针头的内存free(goodsArr);/释放总额数组free(amount);returnamount;/7以商品为单位,排序每种商品的销售总额double*PaixuByGoods(intm)(inti,recs,k,l,temp;double*amount;LNodenode;LinkList*goodsArr;/申请一个数组存储各种商品的销售总额if(amount=(double*)malloc(m*sizeof(double)=NULL)(printf(Notenoughmemory!n);returnFAIL;/得到了分类好的各种商品的链表指针数组goodsArr=Sor
31、tByGoods(m);if(goodsArr=NULL)(free(amount);/释放之前申请的内存returnNULL;/初始化总额数组for(i=0;im;i+)amounti=0;/进行分析累加for(i=0;inext;/链表是空的if(recs=ListLength(goodsArri)=0)continue;/遍历一个商品链表里有的所有记录while(recs-0)/将某种商品的销售记录的总额进行累加amounti+=node-data.salesAmount*node-data.salesVol;node=node-next;for(k=0;ki-1;k+)for(l=k+1;lamountl)temp=amountk;amountk=amountl;amountl=temp;printf(排序后的数组为n);/释放商品的链表内存for(i=0;im;i+)/链表存在的话if(goodsArri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程渣土外运(04版)合同
- 商务瑜伽合同协议书范本模板
- 技术顾问咨询协议书
- 2024年度版权许可合同的许可使用与担保2篇
- 黑龙江省鹤岗市工农区鹤岗一中2024年高三第二学期月考二数学试题
- 黑龙江齐齐哈尔普高联谊校2024年高三5月月考(二统模拟)数学试题
- 基于二零二四年度5G技术的智能安防系统合同
- 2024年度软件开发与维护合同详细条款及技术指标3篇
- 2024年度个人借款合同的借款金额与还款方式3篇
- 人投资合作协议书范本
- 新版苏教版二年级上册数学认识厘米
- tm倒虹吸开挖高边坡施工安全专项方案
- 炼油厂卫生防护距离标准
- 控制性详细规划案例课件
- 应急演练记录表(含内容)
- 分行业每度电产出
- 小学三年级上册道德与法治课件-9.心中的110-部编版(12张)ppt课件
- 中国象棋盘WORD版大小可调整编辑打印实用象棋棋盘网格
- 鸡的尸体病理剖检
- 绿化管护合同交接过渡期的服务承诺方案
- 小学数学校本主题教研活动案例
评论
0/150
提交评论