药店的药品销售统计系统排序应用.docx

上传人:b****8 文档编号:9866106 上传时间:2023-02-07 格式:DOCX 页数:28 大小:17.43KB
下载 相关 举报
药店的药品销售统计系统排序应用.docx_第1页
第1页 / 共28页
药店的药品销售统计系统排序应用.docx_第2页
第2页 / 共28页
药店的药品销售统计系统排序应用.docx_第3页
第3页 / 共28页
药店的药品销售统计系统排序应用.docx_第4页
第4页 / 共28页
药店的药品销售统计系统排序应用.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

药店的药品销售统计系统排序应用.docx

《药店的药品销售统计系统排序应用.docx》由会员分享,可在线阅读,更多相关《药店的药品销售统计系统排序应用.docx(28页珍藏版)》请在冰豆网上搜索。

药店的药品销售统计系统排序应用.docx

药店的药品销售统计系统排序应用

.

 

实验五药店的药品销售统计系统(排序应用)

 

一、实验目的

 

1.帮助读者复习C++语言程序设计中的知识。

 

2.对数据进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、

 

快速排序,直接选择排序等方法的实现。

[需求分析]

设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、

销售量或销售额做出排名。

二、实验容和要求

[问题要求]

设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、

销售量或销售额做出排名。

[问题分析]

在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。

各药品的信

息包括:

药品编号、药名、药品单价、销出数量、销售额。

药品编号共4位,采用字母和

数字混合编号,如:

125,前一位为大写字母,后三位为12数字,按药品编号进行排序时,

可采用基数排序法。

对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,

如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。

在本设计中,对单价的排序

采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。

三、算法设计

首先从txt文件中读取数据信息并保存,本次试验采用了

5中排序方法。

其中编号排序

是按照基数排序,采用多关键字进行排序。

基数排序是借助“分配”和“收集”两种操作对单逻

辑关键字进行排序的一种排序方法。

对单价的排序采用了直接插入排序和冒泡排序,

直接插

入排序就是首先将第一个元素看成是一个有序的,

然后第二个元素和第一个比较,

若大于第

一个则放在其后面否则放前面,

依次直至最后一个。

冒泡排序就是采用两个循环,

即将第一

个元素和第二个比较若第一个大于第二个则交换,

否则不变,然后第二个和第三个比较,同

上。

第一趟可将最大的一个放在最后,依次可得排序。

销售量是快速排序,

快速排序就是首

先设置一个关键字,然后让最后一个和其比较,

直至找到一个比关键字小的,

然后和其交换,

接下来让第一个和其比较,直至找到一个比其大的,然后交换,在找到的位置分别做标记,

依次执行即可。

销售额使用的是堆排序,堆排序首先要建立一个完全二叉树的堆,

其标准符

合为父节点始终比子节点大。

然后依次输出顶结点,然后在建立一个符合标准的堆重复操作

即可。

四、调试分析及数据测试

 

Word资料

.

 

输入药品

 

五、测试结果

 

Word资料

.

 

测试结果符合程序写作要求

 

#include

 

#include

 

#include

 

#definemaxsize100//该医药公司药品最大种类

 

typedefstructnode//药品信息的存储结构类型定义

 

{

 

charnum[10];//药品编号

 

charname[30];

 

floatprice;//单价

 

intcount;//销售量

 

floatsale;//销售额

 

}DataType;

 

typedefstruct//存储药品信息的顺序表的定义

 

{

 

DataTyper[maxsize];

 

intlength;

 

Word资料

.

 

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].nu

 

m);

 

strcpy(L->r[i].num,num1);

 

Word资料

.

 

strcpy(name1,L->r[j].name);

 

strcpy(L->r[j].name,L->r[i].na

 

me);

 

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");

 

Word资料

.

 

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)

 

Word资料

.

 

{strcpy(num1,L->r[j].num);

 

strcpy(L->r[j].num,L->r[i].nu

 

m);

 

strcpy(L->r[i].num,num1);

 

strcpy(name1,L->r[j].name);

 

strcpy(L->r[j].name,L->r[i].na

 

me);

 

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;

 

Word资料

.

 

}

 

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;

 

Word资料

.

 

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].nu

 

m);

 

strcpy(L->r[i].num,num1);

 

strcpy(name1,L->r[j].name);

 

strcpy(L->r[j].name,L->r[i].na

 

me);

 

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;

 

Word资料

.

 

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)

 

{

 

Word资料

.

 

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].nu

 

m);

 

strcpy(L->r[i].num,num1);

 

strcpy(name1,L->r[j].name);

 

strcpy(L->r[j].name,L->r[i].na

 

me);

 

strcpy(L->r[i].name,name1);

 

Word资料

.

 

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);

 

Word资料

.

 

}

 

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].nu

 

m);

 

strcpy(L->r[i].num,num1);

 

Word资料

.

 

strcpy(name1,L->r[j].name);

 

strcpy(L->r[j].name,L->r[i].na

 

me);

 

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药品编号药品名称

 

Word资料

.

 

药品单价药品销售量药品销售额\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)按药品

 

Word资料

.

 

销售量|\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(SqLi

 

st));

 

fp=fopen("medince.txt","w");

 

Word资料

.

 

//创建文件

 

if(!

fp){printf("Sorry!

Fileopen

 

error!

\n");exit(0);}

 

printf("请输入药品种类数

 

(<=100):

");

 

scanf("%d",&n);

 

L->type=n;

 

for(i=0;i

 

{

 

printf("请输入该药品的编号

 

(格式如:

B125,前一位为大写字母,后三位为数字):

");

 

scanf("%s",num1);

 

getchar();

 

printf("请输入该药品的名

 

称:

");

 

scanf("%s",name1);

 

getchar();

 

printf("请输入该药品的单

 

价:

");

 

scanf("%f",&price1);

 

printf("请输入该药品的销售

 

量:

");

 

Word资料

.

 

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!

Fileopen

 

error!

");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++;

 

Word资料

.

 

}

 

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;

 

Word资料

.

 

default:

printf("Sorry!

输入有

 

误!

");break;

 

}

 

}

 

}

 

Word资料

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1