药店的药品销售统计系统(排序应用)
来源:互联网 发布:关于宇宙的软件 编辑:程序博客网 时间:2024/06/11 09:55
药店的药品销售统计系统(排序应用)
[问题描述]
设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。
[实现提示]
在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。
药品信息的元素类型定义:
typedef struct node{ char num[4]; /*药品编号*/ char name[10]; /*药品名称*/ float price; /*药品单价*/ int count; /*销售数量*/ float sale; /*本药品销售额*/ }DataType;存储药品信息的顺序表的定义:typedef struct{ DataType r[MaxSize]; int length;}SequenList;
源码:
#include<stdio.h>#include<cstdio>#include<string>#include<cstring>#include<string.h>#include<vector>#include<algorithm>#include<queue>#include<stack>#include<math.h>#include<cmath>#include<iomanip>#include<stdlib.h>#include<list>#include<map>#include<fstream>#include<ostream>#include<iostream>using namespace std;#define MAXSIZE 100int N = 0;typedef struct node /*药品信息的元素定义*/{string num; /*药品编号*/string name; /*药品名称*/float price; /*药品单价*/int count; /*销售数量*/float sale; /*本药品销售额*/}Datatype;typedef struct /*存储药品信息的顺序表的定义*/{Datatype r[MAXSIZE + 1];int length;}Sequnenlist;Sequnenlist *l = new Sequnenlist;int line(){//获取文件中的药品种数int len=0; string str;ifstream file1("drug.txt");while(file1){getline(file1,str);//每次读取一行if(str.length()>4) //长度4是随便写的,代表本行有数据len++; //记录药品种类数}return len;}void show(){//输出cout<<"====序号=====编号=====名称=====单价=====销售量=====销售额===="<<endl;for(int i=1;i<=N;i++)cout<<" ["<<i<<"] "<<setw(7)<<l->r[i].num<<setw(10)<<l->r[i].name<<setw(8)<<l->r[i].price<<setw(9)<<l->r[i].count<<setw(12)<<l->r[i].sale<<endl;}void read(){//读文件ifstream ofile;string nu;string na;float pr;int co;float sa;ofile.open("drug.txt",ios::in);if(ofile.is_open()){for(int i=1;i<=N;i++){ofile>>nu>>na>>pr>>co>>sa;l->r[i].num=nu;l->r[i].name=na;l->r[i].price=pr;l->r[i].count=co;l->r[i].sale=sa;if(i==N){cout<<"文件导入成功。=^_^="<<endl;cout<<"药品种类数:"<<i<<endl;show();}}}elsecout<<"文件打开失败"<<endl;}void write(){//写文件ofstream ifile("drug_1.txt");for(int i=1;i<=N;i++){ifile<<l->r[i].num<<" "<<l->r[i].name<<" "<<l->r[i].price<<" "<<l->r[i].count<<" "<<l->r[i].sale<<endl;}show();cout<<"药品全部导出到文件 “drug_1.txt”"<<endl;}int Partition(int low,int high){//一趟比较,返回枢纽所在位置l->r[0]=l->r[low];//将枢纽key暂存在r[0]int pivotkey=l->r[0].count;while(low<high){while(low<high&&l->r[high].count>=pivotkey)--high;l->r[low]=l->r[high];//将比枢纽小的移到低端while(low<high&&l->r[low].count<=pivotkey)++low;l->r[high]=l->r[low];//将比枢纽大的移到高端}l->r[low]=l->r[0];return low;//返回枢纽位置}void QSort(int low,int high){if(low<high){int pivotloc=Partition(low,high);QSort(low,pivotloc-1);QSort(pivotloc+1,high);}}void quick_sort(){//销售量快排cout<<"按销售量从小到大(快排):"<<endl<<endl;QSort(1,l->length);show();}void Swap(int i,int j){//交换第i和第j个药品l->r[MAXSIZE].count=l->r[i].count;l->r[MAXSIZE].name=l->r[i].name;l->r[MAXSIZE].num=l->r[i].num;l->r[MAXSIZE].price=l->r[i].price;l->r[MAXSIZE].sale=l->r[i].sale;l->r[i].count=l->r[j].count;l->r[i].name=l->r[j].name;l->r[i].num=l->r[j].num;l->r[i].price=l->r[j].price;l->r[i].sale=l->r[j].sale;l->r[j].count=l->r[MAXSIZE].count;l->r[j].name=l->r[MAXSIZE].name;l->r[j].num=l->r[MAXSIZE].num;l->r[j].price=l->r[MAXSIZE].price;l->r[j].sale=l->r[MAXSIZE].sale;}void bubbling_sort(){//单价排序冒泡排序法cout<<"按单价从小到大(冒泡排序):"<<endl<<endl;for(int i=1;i<=N-1;i++)for(int j=i+1;j<=N;j++)if(l->r[i].price>l->r[j].price)Swap(i,j);show();}void HeapAdjust(int s,int m){//堆排序筛选算法Datatype rc;rc.count=l->r[s].count;rc.name=l->r[s].name;rc.num=l->r[s].num;rc.price=l->r[s].price;rc.sale=l->r[s].sale;for(int j=2*s;j<=m;j*=2){//沿key较大的孩子节点向下筛选if((j<m)&&l->r[j].sale<l->r[j+1].sale) ++j;//j为key较大的记录的下标if(rc.sale>=l->r[j].sale) break;//rc应插入在位置s上l->r[s].count=l->r[j].count;l->r[s].name=l->r[j].name;l->r[s].num=l->r[j].num;l->r[s].price=l->r[j].price;l->r[s].sale=l->r[j].sale;s=j;}l->r[s].count=rc.count;l->r[s].name=rc.name;l->r[s].num=rc.num;l->r[s].price=rc.price;l->r[s].sale=rc.sale;}void Heap_sort(){//销售额的排序堆排序法cout<<"按销售额从小到大(堆排序):"<<endl<<endl;for(int i=l->length/2;i>=1;i--)HeapAdjust(i,l->length);for(int i=l->length;i>1;i--){Swap(1,i);//将堆顶记录和当前未经排序子序列中//的最后一个记录交换HeapAdjust(1,i-1);//将l->r[1~i-1]重新调整为大顶堆}show();}void Radix_sort(){//编号基数排序cout<<"按编号从小到大(基数排序):"<<endl<<endl;queue<Datatype>A,B,C,D,E,F,G,H,I,J,K,L,M,NN,O,P,Q,R,S,T,U,V,W,X,Y,Z;//创建A~Z一共26个队列实现基数排序int k,i,j;for(i=3;i>=0;i--){//从低位往高位依次排序if(i){//后三位数字的排序for(j=1;j<=N;j++){//进队里if(l->r[j].num[i]=='0')A.push(l->r[j]);else if(l->r[j].num[i]=='1')B.push(l->r[j]);else if(l->r[j].num[i]=='2')C.push(l->r[j]);else if(l->r[j].num[i]=='3')D.push(l->r[j]);else if(l->r[j].num[i]=='4')E.push(l->r[j]);else if(l->r[j].num[i]=='5')F.push(l->r[j]);else if(l->r[j].num[i]=='6')G.push(l->r[j]);else if(l->r[j].num[i]=='7')H.push(l->r[j]);else if(l->r[j].num[i]=='8')I.push(l->r[j]);else if(l->r[j].num[i]=='9')J.push(l->r[j]);}k=1;//出队列while(!A.empty()){l->r[k++]=A.front();A.pop();}while(!B.empty()){l->r[k++]=B.front();B.pop();}while(!C.empty()){l->r[k++]=C.front();C.pop();}while(!D.empty()){l->r[k++]=D.front();D.pop();}while(!E.empty()){l->r[k++]=E.front();E.pop();}while(!F.empty()){l->r[k++]=F.front();F.pop();}while(!G.empty()){l->r[k++]=G.front();G.pop();}while(!H.empty()){l->r[k++]=H.front();H.pop();}while(!I.empty()){l->r[k++]=I.front();I.pop();}while(!J.empty()){l->r[k++]=J.front();J.pop();}}else{//第一位字母的排序for(int j=1;j<=N;j++){//进队列if(l->r[j].num[i]=='A')A.push(l->r[j]);else if(l->r[j].num[i]=='B')B.push(l->r[j]);else if(l->r[j].num[i]=='C')C.push(l->r[j]);else if(l->r[j].num[i]=='D')D.push(l->r[j]);else if(l->r[j].num[i]=='E')E.push(l->r[j]);else if(l->r[j].num[i]=='F')F.push(l->r[j]);else if(l->r[j].num[i]=='G')G.push(l->r[j]);else if(l->r[j].num[i]=='H')H.push(l->r[j]);else if(l->r[j].num[i]=='I')I.push(l->r[j]);else if(l->r[j].num[i]=='J')J.push(l->r[j]);else if(l->r[j].num[i]=='K')K.push(l->r[j]);else if(l->r[j].num[i]=='L')L.push(l->r[j]);else if(l->r[j].num[i]=='M')M.push(l->r[j]);else if(l->r[j].num[i]=='N')NN.push(l->r[j]);else if(l->r[j].num[i]=='O')O.push(l->r[j]);else if(l->r[j].num[i]=='P')P.push(l->r[j]);else if(l->r[j].num[i]=='Q')Q.push(l->r[j]);else if(l->r[j].num[i]=='R')R.push(l->r[j]);else if(l->r[j].num[i]=='S')S.push(l->r[j]);else if(l->r[j].num[i]=='T')T.push(l->r[j]);else if(l->r[j].num[i]=='U')U.push(l->r[j]);else if(l->r[j].num[i]=='V')V.push(l->r[j]);else if(l->r[j].num[i]=='W')W.push(l->r[j]);else if(l->r[j].num[i]=='X')X.push(l->r[j]);else if(l->r[j].num[i]=='Y')Y.push(l->r[j]);else if(l->r[j].num[i]=='Z')Z.push(l->r[j]);}int k=1;//出队列while(!A.empty()){l->r[k++]=A.front();A.pop();}while(!B.empty()){l->r[k++]=B.front();B.pop();}while(!C.empty()){l->r[k++]=C.front();C.pop();}while(!D.empty()){l->r[k++]=D.front();D.pop();}while(!E.empty()){l->r[k++]=E.front();E.pop();}while(!F.empty()){l->r[k++]=F.front();F.pop();}while(!G.empty()){l->r[k++]=G.front();G.pop();}while(!H.empty()){l->r[k++]=H.front();H.pop();}while(!I.empty()){l->r[k++]=I.front();I.pop();}while(!J.empty()){l->r[k++]=J.front();J.pop();}while(!K.empty()){l->r[k++]=K.front();K.pop();}while(!L.empty()){l->r[k++]=L.front();L.pop();}while(!M.empty()){l->r[k++]=M.front();M.pop();}while(!NN.empty()){l->r[k++]=NN.front();NN.pop();}while(!O.empty()){l->r[k++]=O.front();O.pop();}while(!P.empty()){l->r[k++]=P.front();P.pop();}while(!Q.empty()){l->r[k++]=Q.front();Q.pop();}while(!R.empty()){l->r[k++]=R.front();R.pop();}while(!S.empty()){l->r[k++]=S.front();S.pop();}while(!T.empty()){l->r[k++]=T.front();T.pop();}while(!U.empty()){l->r[k++]=U.front();U.pop();}while(!V.empty()){l->r[k++]=V.front();V.pop();}while(!W.empty()){l->r[k++]=W.front();W.pop();}while(!X.empty()){l->r[k++]=X.front();X.pop();}while(!Y.empty()){l->r[k++]=Y.front();Y.pop();}while(!Z.empty()){l->r[k++]=Z.front();Z.pop();}}}show();}void menu(){//菜单cout<<endl;cout<< " ◆-------◆---------◆---------◆-------◆"<<endl;cout<< " 药品信息管理系统 "<<endl;cout<< " ◇ ◇"<<endl;cout<< " 1、导入药品信息 "<<endl;cout<< " ◇ 2、导出药品信息 ◇" << endl;cout<< " 3、编号排序 " << endl;cout<< " ◇ 4、单价排序 ◇" << endl;cout<< " 5、销售额排序 " << endl;cout<< " ◇ 6、销售量排序 ◇" << endl;cout<< " 7、退出管理系统 " << endl;cout<< " ◇ ◇" << endl;cout<< " MADE BY CWB " << endl;cout<< " ◆-------◆---------◆---------◆-------◆" << endl;cout<<endl<<endl<<"请选择功能:";}void exit(){//退出cout<<endl;cout<< " ◆-------◆---------◆---------◆-------◆"<<endl;cout<< endl;cout<< " ◇ 感谢您的使用!=^_^= ◇"<<endl;cout<<endl;cout<< " ◆-------◆---------◆---------◆-------◆"<< endl;cout<<endl;}int main(){int n;system("color 37");l->length=N=line()-1;while(1){system("cls");menu();cin>>n;switch(n){case 1:{system("cls");read();system("pause");break;}case 2:{system("cls");write();system("pause");break;}case 3:{system("cls");Radix_sort();system("pause");break;}case 4:{system("cls");bubbling_sort();system("pause");break;}case 5:{system("cls");Heap_sort();system("pause");break;}case 6:{system("cls");quick_sort();system("pause");break;}case 7:{system("cls");exit();return 0;}default:{cin.clear();cin.sync();cout<<"输入有误,请重新输入!"<<endl;system("pause");break;}}}return 0;}/*W123 忘情水 9.9 50 495X256 相思豆 12 40 480M198 六神丸 12.5 55 687.5B852 回魂丹 8 20 160D584 大力丸 10 33 330M665 孟婆汤 8.4 20 168Y532 隐身草 6.6 23 151.8M661 软筋散 13 42 546D591 风油精 4.5 35 157.5*/
0 0
- 药店的药品销售统计系统(排序应用)
- 五、药店的药品销售统计系统(排序应用)
- 数据结构课设--5药店的药品销售统计系统(排序应用)
- 药店药品管理方案,药店药品的盘点方案,如果进行药店药品的高效盘点?药品盘点步骤是?
- 药品盘点机的简介及分类,药店盘点机
- 药店盘点机的用途?怎么实现高效的药品盘点?药店盘点方案,药品仓储管理信息化
- 药品销售管理系统 系统开发 PB9.0
- 博信药店管理系统的破解
- 利用JDBC和Oracle数据库的连接建立药品疫苗应用系统索引测试
- 药品的包装(标签)
- 药店管理系统
- 销售排行榜(map的排序)
- 电信人的数据应用:销售指引系统
- 药品管理-排序
- mysql的药店
- 药品盘点机,药店盘点机,无线移动智能终端条码解决方案实现药店仓储管理信息化
- 精诚药店管理系统 官网
- SBO系统中销售订单日志的跟踪统计思路分析
- 总结71+2
- [HDU3065]病毒持续侵袭中(AC自动机)
- CH22.P438.....直接对元素和属性访问;
- 不同操作系统上屏蔽oracle的操作系统认证方式
- jQuery带筛选功能垂直导航代码-兼容IE8和Chrome浏览器
- 药店的药品销售统计系统(排序应用)
- 巧用边框:使用三个div画出一个八卦图形
- Nachos操作系统课设 浅谈优先级调度
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
- 745 A. Hongcow Learns the Cyclic Shift codeforces
- 编程的好习惯--摘自知乎
- 745 B. Hongcow Solves A Puzzle codeforces
- Android群英传笔记-第3章 Android控件架构与自定义控件详解
- 745 C. Hongcow Builds A Nation codeforces (并查集)