药店的药品销售统计系统的设计与实现.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&&lowchange(&data[low],&data[high]);
while(data[low].sell<=pocket&&lowchange(&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(tdata[t].money)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;itype;i++)
for(j=i+1;jtype;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;itype;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);
}