数据结构课程设计校园超市商品销售统计系统汇总.docx
- 文档编号:24725006
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:19
- 大小:193.81KB
数据结构课程设计校园超市商品销售统计系统汇总.docx
《数据结构课程设计校园超市商品销售统计系统汇总.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计校园超市商品销售统计系统汇总.docx(19页珍藏版)》请在冰豆网上搜索。
数据结构课程设计校园超市商品销售统计系统汇总
目录
1.需求分析1
1.1问题描述1
1.2设计内容1
2.概要设计1
2.1数据结构算法选择1
2.2算法要点归纳1
2.3下面是针对本程序专门定义的数据结构类型4
2.4各组织结构与功能分析5
3测试结果及其分析6
4小结8
参考文献9
附录:
程序源代码9
1.需求分析
1.1问题描述
设计一系统,实现超市定期对销售各商品的记录进行统计,可按商品的编号、单价、销售量或销售额做出排名。
1.2设计内容
在本设计中,首先从数据文件中读出各商品的信息记录,存储在顺序表中。
各商品的信息包括:
商品编号、商品名、单价、销出数量、销售额。
商品编号共4位,采用字母和数字混合编号,如:
A125,前一位为大写字母,后三位为数字,按商品编号进行排序时,可采用基数排序法。
对各商品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。
在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。
2.概要设计
2.1数据结构算法选择
本设计主要采用了顺序表。
共用四种排序方法:
冒泡排序法,快速排序法,堆排序法,基数排序法。
2.2算法要点归纳
1.冒泡排序:
冒泡排序的算法思想是:
通过无序区中相邻元素关键字间的比较和位置的交换,使关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”。
整个算法是从最下面的元素开始,对每两个相邻元素的关键字进行比较,且使关键字较小的元素换至关键字较大的元素之上,使得经过一趟冒泡排序后,关键字最小的元素到达最上端。
接着,再在剩下的元素中找关键字次小的元素,并把它换在第二个位置上。
依次类推,一直到所有元素都有序为止。
图1:
冒泡排序算法思想
2.快速排序:
快速排序是对冒泡排序的一种改进。
它的基本思想是:
通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
图2:
快速排序算法思想
3.堆排序:
堆排序只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
它的基本思想是:
首先按大根堆的定义将R[1…n]调整为堆(这个过程为初始建堆),交换R[1]和R[n](将最大元素R[1]归位,放到排序序列的最后);然后,将R[1…n-1]调整为堆,交换R[1]和R[n-1];如此反复进行,直到交换了R[1]和R[2]为止。
图3:
堆排序算法思想
4.基数排序:
基数排序是属于“分配式排序”,基数排序法又称“桶子法”。
顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性排序法。
图4:
基数排序算法思想
2.3下面是针对本程序专门定义的数据结构类型
1.商品信息的元素类型定义:
typedef struct node
{
char num[4]; /*商品编号*/
char name[10]; /*商品名称*/
float price; /*单价*/
int count; /*销售数量*/
float sale; /*本商品销售额*/
}DataType;
2.存储商品信息的顺序表的定义:
typedef struct
{
DataType r[MaxSize];
int length;
}SequenList;
2.4各组织结构与功能分析
各商品信息在设计系统中的主要功能:
按照各商品信息排序,根据要求所需的排序算法对商品编号、商品名称、单价、销售量和销售额进行一个排序。
图5:
功能分析图
3测试结果及其分析
图6:
输入商品编号、商品名称、商品单价和商品销售量
图7:
按商品编号排序
图8:
按商品名称排序
图9:
分别按商品单价和商品销出数量排序
图10:
按商品销售额排序
4小结
通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c++语言语法的应用,以及深刻的掌握了数据结构和c/c++语言的结合运用。
在编程过程中,遇到了许多问题,在一次次的运行错误后,问题被一步步改正,也从中学到了许多知识。
虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。
参考文献
[1]王昆仑,李红等编著.数据结构与算法.北京:
中国铁道出版社,2007.
[2]苏仕华等编著.数据结构课程设计.北京:
机械工业出版社,2005.
[3]苏仕华编著.数据结构与算法解析.合肥:
中国科学技术大学出版社,2004.
[4]郭嵩山等著.国际大学生程序设计竞赛例题解.北京:
电子工业出版社,2008.
[5]刘大有,唐海鹰等编著.数据结构.北京:
高等教育出版社,2001.
[6]徐孝凯编著.数据结构实用教程.北京:
清华大学出版社,1999.
[7]严蔚敏,陈文博编著.数据结构及算法教程.北京:
清华大学出版社,2001.
[8]刘振安,刘燕君等编著.C程序设计课程设计.北京:
机械出版社,2004.
[9]胡学钢.数据结构与算法设计指导.北京:
清华大学出版社,1999.
附录:
程序源代码
#include
#include
#include
#definemaxsize100//该超市商品最大种类
typedefstructnode//商品信息的存储结构类型定义
{charnum[10];//商品编号
charname[30];
floatprice;//单价
intcount;//销售量
floatsale;//销售额
}DataType;
typedefstruct//存储商品信息的顺序表的定义
{
DataTyper[maxsize];
intlength;
inttype;
}SqList;
voidnumber(SqList*L)//按商品编号排序
{
inti,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;i
for(j=i+1;j
if(strcmp(L->r[j].num,L->r[i].num)>0)
{strcpy(num1,L->r[j].num);
strcpy(L->r[j].num,L->r[i].num);
strcpy(L->r[i].num,num1);
strcpy(name1,L->r[j].name);
strcpy(L->r[j].name,L->r[i].name);
strcpy(L->r[i].name,name1);
price1=L->r[j].price;
L->r[j].price=L->r[i].price;
L->r[i].price=price1;
count1=L->r[j].count;
L->r[j].count=L->r[i].count;
L->r[i].count=count1;
sale1=L->r[j].sale;
L->r[j].sale=L->r[i].sale;
L->r[i].sale=sale1;
}
printf("\t按商品编号排序后:
\n");
printf("\t商品编号商品名称单价销出数量销售额\n");
for(i=0;i
printf("\t%s\t%s\t%f\t%d\t%f\n",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
}
voidnam(SqList*L)//按商品名称排序
{inti,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;i
for(j=i+1;j
if(strcmp(L->r[j].name,L->r[i].name)>0)
{strcpy(num1,L->r[j].num);
strcpy(L->r[j].num,L->r[i].num);
strcpy(L->r[i].num,num1);
strcpy(name1,L->r[j].name);
strcpy(L->r[j].name,L->r[i].name);
strcpy(L->r[i].name,name1);
price1=L->r[j].price;
L->r[j].price=L->r[i].price;
L->r[i].price=price1;
count1=L->r[j].count;
L->r[j].count=L->r[i].count;
L->r[i].count=count1;
sale1=L->r[j].sale;
L->r[j].sale=L->r[i].sale;
L->r[i].sale=sale1;
}
printf("\t按商品编号排序后:
\n");
printf("\t商品编号商品名称单价销出数量销售额\n");
for(i=0;i
printf("\t%s\t%s\t%f\t%d\t%f\n",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
}
voidpric(SqList*L)//按商品单价排序
{inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;i
for(j=i+1;j
if(L->r[j].price>L->r[i].price)
{strcpy(num1,L->r[j].num);
strcpy(L->r[j].num,L->r[i].num);
strcpy(L->r[i].num,num1);
strcpy(name1,L->r[j].name);
strcpy(L->r[j].name,L->r[i].name);
strcpy(L->r[i].name,name1);
price1=L->r[j].price;
L->r[j].price=L->r[i].price;
L->r[i].price=price1;
count1=L->r[j].count;
L->r[j].count=L->r[i].count;
L->r[i].count=count1;
sale1=L->r[j].sale;
L->r[j].sale=L->r[i].sale;
L->r[i].sale=sale1;
}
printf("\t按商品编号排序后:
\n");
printf("\t商品编号商品名称单价销出数量销售额\n");
for(i=0;i
printf("\t%s\t%s\t%f\t%d\t%f\n",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
}
voidcoun(SqList*L)//按商品销出数量排序
{inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;i
for(j=i+1;j
if(L->r[j].count>L->r[i].count)
{strcpy(num1,L->r[j].num);
strcpy(L->r[j].num,L->r[i].num);
strcpy(L->r[i].num,num1);
strcpy(name1,L->r[j].name);
strcpy(L->r[j].name,L->r[i].name);
strcpy(L->r[i].name,name1);
price1=L->r[j].price;
L->r[j].price=L->r[i].price;
L->r[i].price=price1;
count1=L->r[j].count;
L->r[j].count=L->r[i].count;
L->r[i].count=count1;
sale1=L->r[j].sale;
L->r[j].sale=L->r[i].sale;
L->r[i].sale=sale1;
}
printf("\t按商品编号排序后:
\n");
printf("\t商品编号商品名称单价销出数量销售额\n");
for(i=0;i
}
voidsales(SqList*L)//按商品销售额排序
{inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;i
for(j=i+1;j
if(L->r[j].sale>L->r[i].sale)
{strcpy(num1,L->r[j].num);
strcpy(L->r[j].num,L->r[i].num);
strcpy(L->r[i].num,num1);
strcpy(name1,L->r[j].name);
strcpy(L->r[j].name,L->r[i].name);
strcpy(L->r[i].name,name1);
price1=L->r[j].price;
L->r[j].price=L->r[i].price;
L->r[i].price=price1;
count1=L->r[j].count;
L->r[j].count=L->r[i].count;
L->r[i].count=count1;
sale1=L->r[j].sale;
L->r[j].sale=L->r[i].sale;
L->r[i].sale=sale1;
}
printf("\t按商品编号排序后:
\n");
printf("\t商品编号商品名称单价销出数量销售额\n");
for(i=0;i
printf("\t%s\t%s\t%f\t%d\t%f\n",L->r[i].num,L->r[i].name,L->r[i].price,L->r[i].count,L->r[i].sale);
}
voidmenu()
{
printf("\t\t\t销售记录排序\n");
printf("\t-----------------------------------------------\n");
printf("\t|1)按商品编号|\n");
printf("\t|2)按商品名称|\n");
printf("\t|3)按商品单价|\n");
printf("\t|4)按商品销出数量|\n");
printf("\t|5)按商品销售额|\n");
printf("\t|0)退出系统|\n");
printf("\t-----------------------------------------------\n");
printf("请选择<0~5>");
}
intmain()
{
SqList*L;
intn,i,m;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
FILE*fp;
L=(SqList*)malloc(sizeof(SqList));
fp=fopen("medince.txt","w");//创建文件
if(!
fp)
{printf("Sorry!
Fileopenerror!
\n");
exit(0);
}
printf("请输入商品种类数(<=100):
");
scanf("%d",&n);
L->type=n;
for(i=0;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,"%s\t%s\t%f\t%d\t%f\n",num1,name1,price1,count1,sale1); printf("\n"); } fclose(fp); L->length=0; fp=fopen("medince.txt","r"); if(! fp) { printf("Sorry! Fileopenerror! "); exit(0); } for(i=0;i {fscanf(fp,"%s\t%s\t%f\t%d\t%f\n",L->r[i].num,L->r[i].name,&L->r[i].price,&L->r[i].count,&L->r[i].sale);//从文件中读信息 L->length++; } fclose(fp); printf("\t商品编号商品名称单价销出数量销售额\n"); for(i=0;i while (1) {menu(); scanf("%d",&m); switch(m) {case1: //按商品编号排序 number(L); break; case2: //按商品名称排序 nam(L); break; case3: //按单价排序 pric(L); break; case4: //按销出数量排序 coun(L); break; case5: //按销售额排序 sales(L); break; case0: //退出系统 exit(0); break; default: printf("Sorry! 输入有误! "); break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 校园 超市 商品 销售 统计 系统 汇总