数据结构课程设计校园超市商品销售统计系统.doc

上传人:文库蛋蛋多 文档编号:3816190 上传时间:2023-03-23 格式:DOC 页数:19 大小:293KB
返回 下载 相关 举报
数据结构课程设计校园超市商品销售统计系统.doc_第1页
第1页 / 共19页
数据结构课程设计校园超市商品销售统计系统.doc_第2页
第2页 / 共19页
数据结构课程设计校园超市商品销售统计系统.doc_第3页
第3页 / 共19页
数据结构课程设计校园超市商品销售统计系统.doc_第4页
第4页 / 共19页
数据结构课程设计校园超市商品销售统计系统.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《数据结构课程设计校园超市商品销售统计系统.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计校园超市商品销售统计系统.doc(19页珍藏版)》请在三一办公上搜索。

1、目录1.需求分析11.1 问题描述11.2 设计内容12.概要设计12.1 数据结构算法选择12.2 算法要点归纳12.3 下面是针对本程序专门定义的数据结构类型42.4 各组织结构与功能分析53 测试结果及其分析64 小结8参考文献9附录:程序源代码91.需求分析1.1 问题描述 设计一系统,实现超市定期对销售各商品的记录进行统计,可按商品的编号、单价、销售量或销售额做出排名。1.2 设计内容 在本设计中,首先从数据文件中读出各商品的信息记录,存储在顺序表中。各商品的信息包括:商品编号、商品名、单价、销出数量、销售额。商品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后

2、三位为数字,按商品编号进行排序时,可采用基数排序法。对各商品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。2.概要设计2.1 数据结构算法选择本设计主要采用了顺序表。共用四种排序方法:冒泡排序法,快速排序法,堆排序法,基数排序法。2.2 算法要点归纳1. 冒泡排序: 冒泡排序的算法思想是:通过无序区中相邻元素关键字间的比较和位置的交换,使关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”。整个算法是从最下面的元素开始,对每两个相邻

3、元素的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之上,使得经过一趟冒泡排序后,关键字最小的元素到达最上端。接着,再在剩下的元素中找关键字次小的元素,并把它换在第二个位置上。依次类推,一直到所有元素都有序为止。图 1:冒泡排序算法思想2. 快速排序:快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字,则可分别对这两部分记录继续进行排序,以达到整个序列有序。图 2:快速排序算法思想3. 堆排序:堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。它的基本思想是:首先按大根堆的定义

4、将R1n调整为堆(这个过程为初始建堆),交换R1和Rn(将最大元素R1归位,放到排序序列的最后);然后,将R1n-1调整为堆,交换R1和Rn-1;如此反复进行,直到交换了R1和R2为止。图 3:堆排序算法思想4.基数排序:基数排序是属于“分配式排序”,基数排序法又称“桶子法”。顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。图 4:基数排序算法思想2.3 下面是针对本程序专门定义的数据结构类型1.商品信

5、息的元素类型定义:typedefstructnode charnum4; /*商品编号*/charname10; /*商品名称*/floatprice; /*单价*/intcount; /*销售数量*/floatsale; /*本商品销售额*/DataType;2.存储商品信息的顺序表的定义:typedefstruct DataTyperMaxSize; intlength;SequenList;2.4 各组织结构与功能分析各商品信息在设计系统中的主要功能:按照各商品信息排序,根据要求所需的排序算法对商品编号、商品名称、单价、销售量和销售额进行一个排序。图 5:功能分析图 3 测试结果及其分析

6、图 6:输入商品编号、商品名称、商品单价和商品销售量图 7:按商品编号排序图 8:按商品名称排序图 9:分别按商品单价和商品销出数量排序图 10:按商品销售额排序4 小结通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c+语言语法的应用,以及深刻的掌握了数据结构和c/c+语言的结合运用。 在编程过程中,遇到了许多问题,在一次次的运行错误后,问题被一步步改正,也从中学到了许多知识。虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。参考文献1王昆仑,李红等编著. 数据结构与算法. 北京:中国铁

7、道出版社,2007.2苏仕华等编著. 数据结构课程设计. 北京:机械工业出版社 ,2005.3苏仕华编著. 数据结构与算法解析. 合肥:中国科学技术大学出版社,2004.4郭嵩山等著. 国际大学生程序设计竞赛例题解. 北京:电子工业出版社,2008.5刘大有,唐海鹰等编著. 数据结构. 北京:高等教育出版社,2001.6徐孝凯编著.数据结构实用教程. 北京: 清华大学出版社,1999.7严蔚敏,陈文博编著. 数据结构及算法教程. 北京: 清华大学出版社,2001.8刘振安,刘燕君等编著. C 程序设计课程设计. 北京: 机械出版社,2004.9胡学钢. 数据结构与算法设计指导. 北京: 清华大

8、学出版社, 1999.附录:程序源代码#include#include#include#define maxsize 100 /该超市商品最大种类typedef struct node /商品信息的存储结构类型定义char num10; /商品编号 char name30; float price; /单价 int count; /销售量 float sale; /销售额DataType;typedef struct /存储商品信息的顺序表的定义 DataType rmaxsize; int length; int type;SqList;void number(SqList *L) /按商品

9、编号排序 int i,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) for(j=i+1;jtype;j+) if(strcmp(L-rj.num,L-ri.num)0) strcpy(num1,L-rj.num); strcpy(L-rj.num,L-ri.num); strcpy(L-ri.num,num1); strcpy(name1,L-rj.name); strcpy(L-rj.name,L-ri.name); strcpy(L-ri.name,name1); price1=L-rj.

10、price; L-rj.price=L-ri.price; L-ri.price=price1; count1=L-rj.count; L-rj.count=L-ri.count; L-ri.count=count1; sale1=L-rj.sale; L-rj.sale=L-ri.sale; L-ri.sale=sale1; printf(t按商品编号排序后:n); printf(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;itype;i+)printf(t%st%st%ft%dt%fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count

11、,L-ri.sale);void nam(SqList *L) /按商品名称排序 int i,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) for(j=i+1;jtype;j+) if(strcmp(L-rj.name,L-ri.name)0) strcpy(num1,L-rj.num); strcpy(L-rj.num,L-ri.num); strcpy(L-ri.num,num1); strcpy(name1,L-rj.name); strcpy(L-rj.name,L-ri.name);

12、 strcpy(L-ri.name,name1); price1=L-rj.price; L-rj.price=L-ri.price; L-ri.price=price1; count1=L-rj.count; L-rj.count=L-ri.count; L-ri.count=count1; sale1=L-rj.sale; L-rj.sale=L-ri.sale; L-ri.sale=sale1; printf(t按商品编号排序后:n); printf(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;itype;i+)printf(t%st%st%ft%dt%fn,L-

13、ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale);void pric(SqList *L)/按商品单价排序int i=0,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) for(j=i+1;jtype;j+) if(L-rj.priceL-ri.price) strcpy(num1,L-rj.num); strcpy(L-rj.num,L-ri.num); strcpy(L-ri.num,num1); strcpy(name1,L-rj.name

14、); strcpy(L-rj.name,L-ri.name); strcpy(L-ri.name,name1); price1=L-rj.price; L-rj.price=L-ri.price; L-ri.price=price1; count1=L-rj.count; L-rj.count=L-ri.count; L-ri.count=count1; sale1=L-rj.sale; L-rj.sale=L-ri.sale; L-ri.sale=sale1; printf(t按商品编号排序后:n); printf(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;ityp

15、e;i+) printf(t %st %st %ft %dt %fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale);void coun(SqList *L)/按商品销出数量排序int i=0,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) for(j=i+1;jtype;j+) if(L-rj.countL-ri.count) strcpy(num1,L-rj.num); strcpy(L-rj.num,L-ri.num); strcpy

16、(L-ri.num,num1); strcpy(name1,L-rj.name); strcpy(L-rj.name,L-ri.name); strcpy(L-ri.name,name1); price1=L-rj.price; L-rj.price=L-ri.price; L-ri.price=price1; count1=L-rj.count; L-rj.count=L-ri.count; L-ri.count=count1; sale1=L-rj.sale; L-rj.sale=L-ri.sale; L-ri.sale=sale1; printf(t按商品编号排序后:n); printf

17、(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;itype;i+) printf(t%st%st%ft%dt%fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale);void sales(SqList *L)/按商品销售额排序int i=0,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) for(j=i+1;jtype;j+) if(L-rj.saleL-ri.sale) strcpy(num1,L-rj.num); s

18、trcpy(L-rj.num,L-ri.num); strcpy(L-ri.num,num1); strcpy(name1,L-rj.name); strcpy(L-rj.name,L-ri.name); strcpy(L-ri.name,name1); price1=L-rj.price; L-rj.price=L-ri.price; L-ri.price=price1; count1=L-rj.count; L-rj.count=L-ri.count; L-ri.count=count1; sale1=L-rj.sale; L-rj.sale=L-ri.sale; L-ri.sale=sa

19、le1; printf(t按商品编号排序后:n); printf(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;itype;i+) printf(t %st %st %ft %dt %fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale);void menu() printf(ttt销售记录排序n); printf(t-n); printf(t| 1)按商品编号 |n); printf(t| 2)按商品名称 |n); printf(t| 3)按商品单价 |n); printf(t| 4)按商品销出数量 |n); pri

20、ntf(t| 5)按商品销售额 |n); printf(t| 0)退出系统 |n); printf(t-n); printf( 请选择);int main() SqList *L; int n,i,m; char num110,name130; float price1,sale1; int count1; FILE *fp; L=(SqList*)malloc(sizeof(SqList); fp=fopen(medince.txt,w); /创建文件 if (!fp) printf(Sorry! File open error!n);exit(0); printf(请输入商品种类数(typ

21、e=n; for (i=0; ilength=0; fp=fopen(medince.txt,r); if (!fp) printf(Sorry! File open error!);exit(0); for(i=0;iri.num,L-ri.name,&L-ri.price,&L-ri.count,&L-ri.sale); /从文件中读信息 L-length+; fclose(fp); printf(t商品编号 商品名称 单价 销出数量 销售额n); for(i=0;itype;i+) printf(t%st%st%ft%dt%fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale); while(1) menu(); scanf(%d,&m); switch(m)case 1: /按商品编号排序number(L);break; case 2: /按商品名称排序nam(L);break; case 3: /按单价排序pric(L);break; case 4: /按销出数量排序coun(L);break; case 5: /按销售额排序sales(L);break; case 0: /退出系统exit(0);break; default:printf(Sorry!输入有误!);break;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号