1.药店的药品销售统计系统(排序应用)

[问题描述]
设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。
[实现提示]
在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。药品编号共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;

2.设计思路

从本地文件读取药品的信息,构建各个方法的
void Allprint(SequenList S){//药库信息的输出
void Read(SequenList &S){//读入文本药品信息
void Numsort(SequenList &S)//编号的直接插入排序
void Pricesort(SequenList &S){//单价的冒泡排序
int Partition(SequenList &S,int low,int high){//对顺序表的子表进行一趟排序,返回枢轴位置
void Qsort(SequenList &S,int low,int high)//销售量的快速排序
void Quicksort(SequenList &S){//销售量的快速排序
void HeapAdjust(SequenList &S,int s,int m){//调整堆
void CreatHeap(SequenList &S){//创建堆
void Salesort(SequenList &S){//销售额的堆排序

3.药品文件的导入

void Allprint(SequenList S){//药库信息的输出printf("药品编号        药名     单价  销出数量  销售额\n");for (int i = 1;i <=S.length;i++){printf("%s\t%s\t%.2f\t%d\t%.2f\n",S.r[i].num,S.r[i].name,S.r[i].price,S.r[i].count,S.r[i].sale);}
}
void Read(SequenList &S){//读入文本药品信息FILE *fp=fopen("drug.txt","rb");//药品文本的信息if(fp== NULL){printf("找不到该文件!\n");exit(0);}else printf("找到该文件l了!\n");for(int i = 1;i<MaxSize;i++){int n = fscanf(fp,"%s%s%f%d%f",S.r[i].num,S.r[i].name,&S.r[i].price,&S.r[i].count,&S.r[i].sale);if (n == -1){S.length=i-1;fclose(fp);break;}}Allprint(S);fclose(fp);
}

药品的信息

H125 断肠草 989.9 1 989.9
U111 雷公腾 890.0 1 890.0
A123 鸩酒 654.5 1 654.5
N121 鹤顶红 2333.4 2 4666.8
G120 番木鳖 3452.8 1 3452.8
G134 天然砒霜 123.5 5 617.5
O220 砒石 321.5 3 964.5
N341 金刚石 5552.4 5 27762.0
G654 夹竹桃 645.5 1 645.5
L879 乌头 589.6 3 1768.8
I456 见血封喉 789.4 5 3947.0
A655 奎宁 432.4 4 1729.6
N231 甘草 21.6 500 10800.0
G542 含笑半步颠 1234.8 4 4939.2

剩下的源代码

#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
#define MaxSize 50
void Numsort(SequenList &S)//编号的直接插入排序
{int i,j;for(i=2;i<=S.length;++i){if(strcmp(S.r[i].num,S.r[i-1].num)<0){S.r[0]=S.r[i];S.r[i]=S.r[i-1];for(j=i-2;strcmp(S.r[0].num,S.r[j].num)<0;--j)S.r[j+1]=S.r[j];S.r[j+1]=S.r[0];}}  Allprint(S);
}
void Pricesort(SequenList &S){//单价的冒泡排序int m=S.length;int flag=1;int j;DataType t;while((m>0)&&(flag==1)){flag=0;for(j=1;j<m;j++)if(S.r[j].price>S.r[j+1].price){   flag=1;t=S.r[j]; S.r[j]=S.r[j+1];S.r[j+1]=t;}--m;}Allprint(S);
}
int Partition(SequenList &S,int low,int high){//对顺序表的子表进行一趟排序,返回枢轴位置S.r[0]=S.r[low];int piv=S.r[low].count;while(low<high){while(low<high&&S.r[high].count>=piv)--high;S.r[low]=S.r[high];while(low<high&&S.r[low].count<=piv)++low;S.r[high]=S.r[low];}S.r[low]=S.r[0];return low;
}
void Qsort(SequenList &S,int low,int high)//销售量的快速排序
{if(low<high){int piv=Partition(S,low,high);Qsort(S,low,piv-1);Qsort(S,piv+1,high);}
}
void Quicksort(SequenList &S){//销售量的快速排序Qsort(S,1,S.length);Allprint(S);
}
void HeapAdjust(SequenList &S,int s,int m){//调整堆,m为总长度,s为m折成两半左边的值DataType rc=S.r[s];for(int j=2*s;j<=m;j*=2){if(j<m&&S.r[j].sale<S.r[j+1].sale) ++j;if(rc.sale>=S.r[j].sale) break;S.r[s]=S.r[j];s=j;}S.r[s]=rc;
}
void CreatHeap(SequenList &S){//创建堆int n=S.length;for(int i=n/2;i>0;--i)HeapAdjust(S,i,n);
}
void Salesort(SequenList &S){//销售额的堆排序CreatHeap(S);DataType t;for(int i=S.length;i>1;--i){t=S.r[1];S.r[1]=S.r[i];S.r[i]=t;HeapAdjust(S,1,i-1);}Allprint(S);
}
void menu(){cout<<"****************药品销售统计系统****************"<<endl;cout<<"                0、查看该药库信息"<<endl;cout<<"                1、按编号排序"<<endl;cout<<"                2、按单价排序"<<endl;cout<<"                3、按销售量排序"<<endl;cout<<"                4、按销售额排序"<<endl;cout<<"                5、读入药品信息"<<endl;cout<<"                6、退出"<<endl;cout<<"************************************************"<<endl;cout<<"请选择..."<<endl;
}
int main(){SequenList S;int m;while(m!=6){menu();cin>>m;switch(m){case 0:Allprint(S);break;case 1:Numsort(S); break;case 2: Pricesort(S); break;case 3: Quicksort(S);break;case 4:  Salesort(S); break;case 5:  Read(S); break;case 6: cout<<"感谢您的使用!"<<endl; return 0;default: cout<<"没有该选项!"<<endl;}system("pause");system("cls");}return 0;
}

回过头来已经写好了,但却发现我少了一步,没认真读题“按药品编号进行排序时,可采用基数排序法”,写药品编号进行排序时却是按照简单的直接插入排序,现在有点不想重新写入进去,下次再将这个部分的代码迭代掉吧!
看来我还是太懒了,

数据结构课设任务内容相关推荐

  1. 南京航空航天大学2020数据结构课设

    南京航空航天大学2020数据结构课设 目录 1.系统进程设计 2.迷宫问题 3.家谱管理系统 4.Huffman编码与解码 5.地铁修建 6.公交线路提示 7.B-树应用 8.排序算法比较 9.数字排 ...

  2. 学生搭配问题数据结构报告c语言,数据结构课设学生搭配问题

    数据结构课设学生搭配问题 数 据 结 构 课程设计报告书 班级 学号 专业 姓名 课题描述: 一. 需求分析: 1. 设计内容 一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编 ...

  3. 数据结构课设_网页形式的景区导游

    一.前言 欢迎大家来到这里~~ 1.这次数据结构课设,笔者的题目是网页形式的导航系统. 2.数据结构方面应用了链表存储商品信息.图来存储景点和路径信息.在图的广度优先中还用到了队列: 3.具体的算法有 ...

  4. 神秘国度的爱情故事 数据结构课设-广州大学

    神秘国度的爱情故事 数据结构课设-广州大学 ps:本次课设程序不仅需要解决问题,更需要注重代码和算法的优化和数据测试分析      直接广度优先实现的方法时间复杂度为O(QN),优化后的方法是lca+ ...

  5. 数据结构课设+校园导航系统+西安邮电大学

    数据结构课设+校园导航系统+西安邮电大学 设计目的:在校园建设不断完善的现在,为在校学生提供合适的行走路径,为来访的客人提供各种服务的信息:对于这些问题,可用图结构来表示校园交通网络,编写程序完成校园 ...

  6. 《数据结构课设》弗洛伊德算法设计校园导游系统

    大二上学期的数据结构课设分享一下,具体题目如下: 题目27:"校园导游系统"的设计与实现 1.问题描述 设计一个校园导游系统,为来访的客人提供信息查询服务. 2.基本要求 (1)从 ...

  7. 数据结构课设城市公交查询系统(C语言)

    公交线路图 一. 设计要求: 1.需要用到多个文件,例如文本文件,文件名stations.txt,保存站点信息,格式可以自行设计,例如:编号 站名.等等 2.设计公交线路所需的存储结构,将文件中的数据 ...

  8. 数据结构课设城市公交完整代码(c语言)

    以下是城市公交的完整代码,如果需要实验报告的可以点击下面的链接: 数据结构课设城市公交查询系统(C语言) 代码如下: #include <stdio.h> #include <str ...

  9. 那些年,我的数据结构课设,现在满满的回忆!(现如今身处内卷之中,已经很难出现当初那份乐趣了)

    一.看到这个图标很有感觉 距离当初完成数据结构课设已经过去很久很久了,当初由于U盘失踪,也丢失了很多宝贵的东西,我也伤心的好久`(>﹏<)′!不过最近找到了失散多年的亲兄弟,打开U盘,感概 ...

最新文章

  1. python【蓝桥杯vip练习题库】ADV-306输出三个整数的最大数
  2. ReactiveCocoa初步
  3. Web安全之文件包含漏洞
  4. oracle for循环_浅谈Oracle的执行计划
  5. 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
  6. 【WEB API项目实战干货系列】- WEB API入门(一)
  7. C++Primer学习笔记:第2章 变量和基本类型
  8. 双线性插值算法c 语言实现,双线性插值 - CristianoC的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 10.Java面向对象(一)
  10. Autodesk CAD 2023简体中文正式版
  11. PROFINET通信基础知识
  12. Linux 多点电容触摸屏
  13. 华为服务器RH2288 V2 BIOS配置
  14. c语言调用calculate函数,关于c语言中int calculate函数求解。谢谢
  15. 如何去掉XP系统中文件夹的只读属性
  16. IP地址划分(子网划分)及是否同一网段计算
  17. CSS颜色的四种写法
  18. 在KEIL中生成bin文件的方法
  19. 插入页眉和页脚-----------毕业设计必备攻略
  20. 使用mat.at方法获取像素值

热门文章

  1. POST,PUT和PATCH的区别
  2. 乐优商城(三十九)—— 订单中心
  3. Jasperreport_6.18的吐血记录五之柱形图
  4. cdn缓存服务器有网站图片,CDN缓存服务器图片存储一致性hash算法的理解
  5. 1.1XAF框架开发视频教程-简单的订单管理实现过程,视频,提纲,及教程源码
  6. Qt显示PDF之四pdfium封装
  7. macbook上好用的软件
  8. 公历转农历的python实现
  9. Service ‘Jenkins‘ (Jenkins) failed to start. verify that you have sufficient privileges to start
  10. 「高可用架构设计」的入门秘籍