药店药品销售统计系统.docx
《药店药品销售统计系统.docx》由会员分享,可在线阅读,更多相关《药店药品销售统计系统.docx(14页珍藏版)》请在冰豆网上搜索。
药店药品销售统计系统
数据结构课程设计报告
项目名称:
药店药品销售统计系统
学号:
班级:
姓名:
指导老师:
计算机科学与技术
2014年12月22日
1.问题描述:
(1)设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。
(2)在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。
各药品的信息包括:
药品编号、药名、药品单价、销出数量、销售额。
药品编号共4位,采用字母和数字混合编号,如:
A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。
对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。
2.设计思路:
本次课程设计的任务是设计一个药店药品销售统计系统,实现对药店内药品的信息进行记录和对销售情况进行整理排序,更直观的了解药店的药品销售情况。
本次设计的系统主要采用C语言程序设计基本知识,通过文件来输入、记录、保存药品的编码、名称、单价、销售数量,运用乘法运算算出各类药品的销售总额,最后利用冒泡排序法(运用文件指针知识)将药品信息按照药品编码、药品名称、药品单价、药品销售数量、药品销售总额5个方面进行从大到小的排序。
该系统主要由1.输入记录并保存药品信息,2.在界面上显示所输入的药品信息,3.将药品信息根据5个方面进行排序并保存这三大模块所构成。
3.数据结构定义:
typedefstructnode//药品信息的存储结构类型定义
{
charnum[10];//药品编号
charname[30];
floatprice;//单价
intcount;//销售量
floatsale;//销售额
}DataType;
typedefstruct//存储药品信息的顺序表的定义
{
DataTyper[maxsize];
intlength;
inttype;
}SqList;
4.系统功能模块介绍:
5.运行与调试分析:
程序的调试分析主要由两大步骤组成。
首先认真阅读所编写好的程序,进一步进行检查。
在过程中修改一些常识性简单的错误,例如:
符号“}”“;”的缺失,对不必要的叙述进行修改删减,使程序更简洁美观,增强程序的可读性,区分函数与子函数,分析变量含义的变更是否会导致错误,在关键程序后面给上相关的注释,让程序变得更易理解。
其次在阅读检查程序并修改后,进行初步的调试,根据程序设计思路查看各变量的含义是否符合设计初衷,并作适当的修改,初步调试完成后运行程序针对所显示的错误信息进行修改与优化。
例如:
调试过程中发现scanf函数处报错,则经分析发现格式上缺少“&”符号。
如果调试过程中忽而出现几十上百条错误,则问题可能是头文件或者某一两处出现错误,此时应根据程序流程图仔细分析错误所在,同时可单步运行输入实验数据查看各变量含义是否出错,进而合理的修改。
输入药品种类数为3:
以下为三种药品信息
输入1:
输入2:
输入3:
输入4:
输入5
6.体会:
通过本次课程设计,培养了我关于系统的设计理念,掌握具体的编程方法,提高了个人的综合实践能力。
学会通过所学的知识和查阅相关资料,能够根据实际问题设计出实用并可靠的系统程序。
药店药品销售统计系统是由C语言编写而成的,该系统程序函数层次简练分明,可读性强。
对于商店来讲,一般销售额的统计都比较繁琐、容易出现错误。
药店药品的销售统计系统在这方面可以大大的减少人们对信息的处理,比较有实际意义。
并且该系统操作起来简单快捷,极大的降低了工作量。
不过系统仍然存在着不足之处,需要后续的补充和修改完善。
例如:
无法对输入的信息进行分类保存,无法再中途添加药品信息,没有一个完整的信息库等等。
完成本次课程设计,一方面对我的知识进行了巩固,另一方面提前让我养成了研发设计系统的思路和感受。
对今后的学习和实验相信有着积极的意义。
同时也认识到自己的不足和学习的永无止境,的确学如逆水行舟,不进则退!
时代在发展,很多系统就得跟上人们的需求,所以我们今后的发展前景还是很大的。
主程序
#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;
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;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);
}
voidnam(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].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;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);
}
voidpric(SqList*L)
{
inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;itype;i++)
for(j=i+1;jtype;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;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);
}
voidcoun(SqList*L)
{
inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;itype;i++)
for(j=i+1;jtype;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;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);
}
voidsales(SqList*L)
{
inti=0,j;
charnum1[10],name1[30];
floatprice1,sale1;
intcount1;
for(i=0;itype;i++)
for(j=i+1;jtype;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;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);
}
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>");
}
main()
{
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("请输入该药品的编号(格式如:
B12,前一位为大写字母,后二位为数字):
");
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;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);
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;
}
}
}