药店的药品销售统计系统的设计与实现.docx
- 文档编号:26811752
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:12
- 大小:171.50KB
药店的药品销售统计系统的设计与实现.docx
《药店的药品销售统计系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《药店的药品销售统计系统的设计与实现.docx(12页珍藏版)》请在冰豆网上搜索。
药店的药品销售统计系统的设计与实现
程序设计与算法综合训练》设计报告7
学号:
E11514064姓名:
汪泓章年级:
大一专业:
计科
项目名称:
药店的药品销售统计系统的设计与实现完成日期:
2016年7月6日
1.需求分析
(1)问题描述
设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。
(2)基本要求
1)药品的信息包括:
药品编号、药名、药品单价、销出数量、销售额。
其中药品编号共4位,采用字母和数字混合编号,如:
A125,前一位为大写字母,后三位为数字;
2)从数据文件中读出各药品的信息记录,存储在顺序表中;
3)按药品编号进行排序时,可采用基数排序法。
4)对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法。
要求对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。
5)按照题意要求独立进行设计,设计结束后按要求写出设计报告。
①输入的形式和输入值的范围:
8种药品的编号、名称、单价、销售量、销售额。
②输出的形式:
药品按单价、销售量、销售额由低到高输出。
③程序所能达到的功能:
通过三种不同的排序方法实现对药品信息的处理,极大的降低了药店的工作量。
2.概要设计
(1) 数据结构
药品信息的元素类型定义:
typedefstructnode
{charnum[4];
charname[10]
floatprice;
intcount;
floatsale;
}Datatype;
存储药品信息的顺序表定义:
Typedefstruct
{DataTyper[MaxSize];
(2)程序模块
(3) 各模块之间的调用关系以及算法设计
3.详细设计
程序设计主要分为以下几个步骤:
1)建立主函数
先进行文件读取,然后通过swtich函数来完成对用户需求的读取,调用三个排序函数。
2)设置用户操作菜单
3)三种排序算法的设计
a.按单价排序(冒泡)
voidpricebubble(medicine*data)
{inti,j;
i=9;
while(i>=1)
{for(j=1;j<=i;j++)
if(data[j].price>data[j+1].price)
change(&data[j],&data[j+1]);
i=j-2;
}
b.按销售量排序(快速排序)
voidsellsort(medicine*data,intlow,inthigh)
{inti,j;
if(low {j=sellpartition(data,low,high); sellsort(data,low,j-1); sellsort(data,j+1,high); } c.按销售额排序(堆排序) voidmoneysort(medicine*data) {inti; for(i=5;i>=1;i--) moneyhead(data,i,10); change(&data[1],&data[10]); for(i=1;i<=8;i++) {moneyhead(data,1,10-i); change(&data[1],&data[10-i]);} d.按编号排序(冒泡法) 注: 由于是后来做的,不同于前三种排序程序中的变量名。 4.测试与分析 按编号排序: 5.总结 通过本次实验,培养了我关于系统的设计理念,掌握具体的编程方法,提高了个人的综合实践能力。 另外,自己对于基数排序法这一块还不够熟悉,得重新学习一遍。 6.附录 源程序清单: 主程序代码: #include typedefstruct { charnumber[5]; charname[10]; floatprice; intsell; intmoney; }medicine; voidchange(medicine*p1,medicine*p2) {medicinea; strcpy(a.number,p1->number);strcpy(a.name,p1->name); a.money=p1->money;a.price=p1->price;a.sell=p1->sell; strcpy(p1->number,p2->number);strcpy(p1->name,p2->name); p1->money=p2->money;p1->price=p2->price;p1->sell=p2->sell; strcpy(p2->number,a.number);strcpy(p2->name,a.name); p2->money=a.money;p2->price=a.price;p2->sell=a.sell; } voidpricebubble(medicine*data) {inti,j; i=9; while(i>=1) {for(j=1;j<=i;j++) if(data[j].price>data[j+1].price) change(&data[j],&data[j+1]); i=j-2; } printf("按单价排序: \n"); printf("编号名字单价销售量销售额\n"); for(i=1;i<=10;i++) printf("%s%-8s%-4.1f%-4d%-5d\n",data[i].number,data[i].name,data[i].price,data[i].sell,data[i].money); } intsellpartition(medicine*data,intlow,inthigh) {intpocket; pocket=data[low].sell; while(low {while(data[high].sell>=pocket&&low change(&data[low],&data[high]); while(data[low].sell<=pocket&&low change(&data[low],&data[high]); } return(low); } voidsellsort(medicine*data,intlow,inthigh) {inti,j; if(low {j=sellpartition(data,low,high); sellsort(data,low,j-1); sellsort(data,j+1,high); } if(low==1&&high==10) {printf("按销售量排序: \n"); printf("编号名字单价销售量销售额\n"); for(i=1;i<=10;i++) printf("%s%-8s%-4.1f%-4d%-5d\n",data[i].number,data[i].name,data[i].price,data[i].sell,data[i].money);} } voidmoneyhead(medicine*data,ints,intm) {intt; t=s*2; while(t<=m) {if(t if(data[t].money>data[s].money)change(&data[t],&data[s]); s=t;t=s*2; } } voidmoneysort(medicine*data) {inti; for(i=5;i>=1;i--) moneyhead(data,i,10); change(&data[1],&data[10]); for(i=1;i<=8;i++) {moneyhead(data,1,10-i); change(&data[1],&data[10-i]);} printf("按销售额排序: \n"); printf("编号名字单价销售量销售额\n"); for(i=1;i<=10;i++) printf("%s%-8s%-4.1f%-4d%-5d\n",data[i].number,data[i].name,data[i].price,data[i].sell,data[i].money); } voidmenu() { printf("\t\t\t销售记录排序\n"); printf("\t----------------------------\n"); printf("\t|1.按药品单价|\n"); printf("\t|2.按药品销售量|\n"); printf("\t|3.按药品销售额|\n"); printf("\t|0.退出系统|\n"); printf("\t----------------------------\n"); printf("请选择<0~3>"); } voidmain() {intm; medicinedata[11];FILE*fp; fp=fopen("ElemTypedata","rb"); fread(&data[1],sizeof(medicine),10,fp); while (1) {menu(); scanf("%d",&m); switch(m) { case1: pricebubble(data);break; case2: sellsort(data,1,10);break; case3: moneysort(data);break; case0: exit(0);break; default: printf("抱歉! 输入有误,请重新输入! ");break; } } } 按编号排序: #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; count1=L->r[j].count; L->r[j].count=L->r[i].count; L->r[i].count=count1; sale1=L->r[i].sale; L->r[i].sale=sale1; //判断两个数的大小 } printf("\t按药品编号排序后: \n"); printf("\t药品编号药品名称药品单价药品销售量药品销售额\"); 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); } 读取文件程序代码: #include typedefstruct { charbh[5]; charname[8]; intprice; intnum; intmoney; }ElemType; voidmain() {FILE*fp;ElemTypedata[10];inti; fp=fopen("ElemTypedata","wb"); for(i=0;i<10;i++) scanf("%s%s%d%d%d",data[i].bh,data[i].name,&data[i].price,&data[i].num,&data[i].money); fwrite(data,sizeof(ElemType),10,fp); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 药店 药品 销售 统计 系统 设计 实现