数据结构课程设计校园超市商品销售统计系统方案_第1页
数据结构课程设计校园超市商品销售统计系统方案_第2页
数据结构课程设计校园超市商品销售统计系统方案_第3页
数据结构课程设计校园超市商品销售统计系统方案_第4页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、,如:A125 ,前一位为大写字母 ,后三位为数字 ,按商品编号进行排序时,可采用基数排序法 。 对各商品的单价 、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序 ,直接选择排序等方法。在本设计中 ,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。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)

5、 ,其中 r 为所采取的基数 ,而 m 为堆数,在某些时候 ,基数排序法的效率高于其它的比较性排序法 。图 4:基数排序算法思想2.3 下面是针对本程序专门定义的数据结构类型1.商品信息的元素类型定义:.专业 .专注.typedef struct nodechar num4;/* 商品编号 */char name10;/* 商品名称 */float price;/* 单价 */int count;/* 销售数量 */float sale;/* 本商品销售额 */DataType;2.存储商品信息的顺序表的定义:typedef structDataType rMaxSize;int length

6、;SequenList;2.4 各组织结构与功能分析各商品信息在设计系统中的主要功能:按照各商品信息排序,根据要求所需的排序算法对商品编号 、商品名称 、单价、销售量和销售额进行一个排序。.专业 .专注.系统功能商商商商商品品品品品销销编名单售售号称价量额用用用用用基冒冒快堆数泡泡速排排排排排序序序序序图 5:功能分析图.专业 .专注.3 测试结果及其分析图 6:输入商品编号 、商品名称 、商品单价和商品销售量.专业 .专注.图 7:按商品编号排序图 8:按商品名称排序图 9:分别按商品单价和商品销出数量排序.专业 .专注.图 10:按商品销售额排序4 小结通过这次课设 ,我学会了如何把数据结

7、构的知识应用到实践当中,同时也进一步加深了对 c/c+ 语言语法的应用 ,以及深刻的掌握了数据结构和c/c+ 语言的结合运用 。在编程过程中 ,遇到了许多问题 ,在一次次的运行错误后 ,问题被一步步改正 ,也从中学到了许多知识 。虽然我的程序还不够完善,还需加以改进以实现更多的功能 ,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美 。.专业 .专注.参考文献 1王昆仑 ,李红等编著 . 数据结构与算法 . 北京 :中国铁道出版社 ,2007. 2苏仕华等编著 . 数据结构课程设计 . 北京:机械工业出版社 ,2005. 3苏仕华编著 . 数据结构与算法解析 . 合肥 :中国

8、科学技术大学出版社 ,2004. 4 郭嵩山等著 . 国际大学生程序设计竞赛例题解 . 北京 :电子工业出版社 ,2008. 5刘大有 ,唐海鹰等编著 . 数据结构 . 北京 :高等教育出版社 ,2001. 6徐孝凯编著 .数据结构实用教程 . 北京 : 清华大学出版社 ,1999. 7严蔚敏 ,陈文博编著 . 数据结构及算法教程 . 北京 : 清华大学出版社 ,2001. 8刘振安 ,刘燕君等编著 . C 程序设计课程设计 . 北京 : 机械出版社 ,2004. 9胡学钢 . 数据结构与算法设计指导 . 北京 : 清华大学出版社 , 1999.附录:程序源代码#include<stdi

9、o.h>#include<stdlib.h>#include<string.h>#define maxsize 100 /该超市商品最大种类.专业 .专注.typedef struct node/ 商品信息的存储结构类型定义 char num10; / 商品编号 char name30;float price; / 单价intcount; / 销售量float sale; / 销售额DataType;typedef struct/ 存储商品信息的顺序表的定义DataType rmaxsize;int length;inttype;SqList;void numbe

10、r(SqList *L)/ 按商品编号排序int i,j;char num110,name130;float price1,sale1;int count1;for(i=0;i<L->type;i+)for(j=i+1;j<L->type;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.nam

11、e);strcpy(L->,L->);strcpy(L->,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按商品

12、编号排序后 :n");printf("t商品编号商品名称单价销出数量销售额 n");for(i=0;i<L->type;i+)printf("t%st%st%ft%dt%fn",L->ri.num,L->,L->ri.price,L->ri.count,L->ri.sale);.专业 .专注.void nam(SqList *L)/ 按商品名称排序 int i,j;char num110,name130;float price1,sale1;int count1;for(i=0;i<

13、L->type;i+)for(j=i+1;j<L->type;j+)if(strcmp(L->,L->)>0) strcpy(num1,L->rj.num); strcpy(L->rj.num,L->ri.num); strcpy(L->ri.num,num1); strcpy(name1,L->); strcpy(L->,L->); strcpy(L->,name1); price1=L->rj.price; L->

14、;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;i<L->type;i+)pr

15、intf("t%st%st%ft%dt%fn",L->ri.num,L->,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;i<L->type;i+)for(j=i+1;j<L->type;j+)if(L->rj.price>L->ri.price) strcpy(num1,

16、L->rj.num); strcpy(L->rj.num,L->ri.num);strcpy(L->ri.num,num1);strcpy(name1,L->);strcpy(L->,L->);strcpy(L->,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

17、;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;i<L->type;i+)printf("t%st%st%ft%dt%fn",L->ri.num,L->,L->ri.price,L->ri.count,L->ri.sale);

18、void coun(SqList *L)/按商品销出数量排序 int i=0,j;char num110,name130;float price1,sale1;int count1;.专业 .专注.for(i=0;i<L->type;i+)for(j=i+1;j<L->type;j+)if(L->rj.count>L->ri.count)strcpy(num1,L->rj.num);strcpy(L->rj.num,L->ri.num);strcpy(L->ri.num,num1);strcpy(name1,L->rj.n

19、ame);strcpy(L->,L->);strcpy(L->,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按

20、商品编号排序后 :n");printf("t商品编号商品名称单价销出数量销售额 n");for(i=0;i<L->type;i+).专业 .专注.printf("t%st%st%ft%dt%fn",L->ri.num,L->,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

21、;i<L->type;i+)for(j=i+1;j<L->type;j+)if(L->rj.sale>L->ri.sale)strcpy(num1,L->rj.num);strcpy(L->rj.num,L->ri.num);strcpy(L->ri.num,num1);strcpy(name1,L->);strcpy(L->,L->);strcpy(L->,name1);price1=L->rj.price;L->rj.price=L-

22、>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;i<L->type;i+)printf("t

23、%st%st %ft%dt%fn",L->ri.num,L->,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");printf(&

24、quot;t|5)按商品销售额|n");printf("t|0)退出系统|n");.专业 .专注.printf("t-n");printf("请选择 <05>");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");/ 创建文件i

25、f (!fp) printf("Sorry! File open error!n"); exit(0);printf(" 请输入商品种类数 (<=100):");scanf("%d",&n);L->type=n;for (i=0; i<n; i+)printf(" 请输入该商品的编号 :");.专业 .专注.scanf("%s",num1);getchar();printf(" 请输入该商品的名称 :");scanf("%s",name1);getchar();printf(" 请输入该商品的单价 :");scanf("%f",&price1);printf(" 请输入该商品的销售量 :");scanf("%d",&count1);getchar();sale1=price1*count1;fprintf(fp,"%st%st%ft%d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论