1、对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。药品信息的元素类型定义:typedef struct node char num4; /*药品编号*/char name10; /*药品名称*/float price; /*药品单价*/ int count; /*销售数量*/float sale; /*本药品销售额*/ DataType;存储药品信息的顺序表的定义:typedef struct DataType rMaxSize;
2、 int length;SequenList;2.算法设计分析首先从txt文件中读取数据信息并保存,本次试验采用了5中排序方法。其中编号排序是按照基数排序,采用多关键字进行排序。基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内排序方法。对单价的排序采用了直接插入排序和冒泡排序,直接插入排序就是首先将第一个元素看成是一个有序的,然后第二个元素和第一个比较,若大于第一个则放在其后面否则放前面,依次直至最后一个。冒泡排序就是采用两个循环,即将第一个元素和第二个比较若第一个大于第二个则交换,否则不变,然后第二个和第三个比较,同上。第一趟可将最大的一个放在最后,依次可得排序。销售量
3、是快速排序,快速排序就是首先设置一个关键字,然后让最后一个和其比较,直至找到一个比关键字小的,然后和其交换,接下来让第一个和其比较,直至找到一个比其大的,然后交换,在找到的位置分别做标记,依次执行即可。销售额使用的是堆排序,堆排序首先要建立一个完全二叉树的堆,其标准符合为父节点始终比子节点大。然后依次输出顶结点,然后在建立一个符合标准的堆重复操作即可。3.流程图四、调试分析与结果输入药品的信息按药品的编号。按药品的名称。按药品的销售额。五、课设总结六、附录(源代码)#includestdlib.hstring.h#define maxsize 100 /该医药公司药品最大种类typedef s
4、truct node /药品信息的存储结构类型定义 char num10; /药品编号 char name30; float price; /单价 /销售量 float sale; /销售额DataType;typedef struct /存储药品信息的顺序表的定义 DataType rmaxsize; int type;SqList;void number(SqList *L) /按药品编号排序 int i,j; char num110,name130; float price1,sale1; int count1; for(i=0;itype;i+) /循环 for(j=i+1;jrj.n
5、um,L-ri.num)0) /判断两个数的大小, strcpy(num1,L-rj.num); strcpy(L-ri.num);ri.num,num1); strcpy(name1,L-rj.name);rj.name,L-ri.name);ri.name,name1); price1=L-rj.price; L-rj.price=L-ri.price;ri.price=price1; count1=L-rj.count;rj.count=L-ri.count;ri.count=count1; sale1=L-rj.sale;rj.sale=L-ri.sale;ri.sale=sale1;
6、 printf(t按药品编号排序后:n);t药品编号 药品名称 药品单价 药品销售量 药品销售额ni+)t %st %st %ft %dt %fn,L-ri.num,L-ri.name,L-ri.price,L-ri.count,L-ri.sale);void nam(SqList *L) /按药品名称排序ri.name)0)t按药品名称排序后:void pric(SqList *L) /按药品单价排序 int i=0,j; if(L-rj.priceri.price) strcpy(num1,L- price1=L- printf(t按药品单价排序后:void coun(SqList *L)
7、 /按药品销售量排序rj.countri.count)t按药品销售量排序后:void sales(SqList *L) /按药品销售额排序rj.saleri.sale)t按药品销售额排序后:void menu()ttt销售记录排序nt-nt| 1)按药品编号 |nt| 2)按药品名称 |nt| 3)按药品单价 |nt| 4)按药品销售量 |nt| 5)按药品销售额 |nt| 0)退出系统 |n 请选择main() SqList *L; int n,i,m; FILE *fp; L=(SqList*)malloc(sizeof(SqList); fp=fopen(medince.txt,w /创
8、建文件 if(!fp) printf(Sorry! File open error!exit(0);请输入药品种类数(type=n;n;i+) 请输入该药品的编号(格式如:B125,前一位为大写字母,后三位为数字):%s,num1); getchar();请输入该药品的名称:,name1);请输入该药品的单价:%fprice1);请输入该药品的销售量:count1); sale1=price1*count1; /销售额=单价*销售量 fprintf(fp,%st%st%ft%dt%fn,num1,name1,price1,count1,sale1); fclose(fp); /关闭文件length=0;r fscanf(fp,ri.name,&ri.price,&ri.count,& /从文件中读信息length+; while(1) /循环结构 menu();m); switch(m) case 1:number(L);break; case 2:nam(L); case 3:pric(L); case 4:coun(L); case 5:sales(L); case 0: default:printf(抱歉!输入有误,请重新输入
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1