药品销售统计系统
原创,有疑问提问就行,写的太过简单,易懂。
//药品管理系统
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef struct store{
char score[MAX]; //编号 几种药品
char name[MAX];
int price; //单价
int num; //销售量
int sale; //销售额
}sto;
typedef struct{
sto r[MAX];
int length;
}List;
//向文件中输入信息;
void Insert(List &l){
FILE *fp;
if((fp=fopen("medicine","w"))==NULL){
printf("打开失败!\n");
exit(0);
}
printf("请输入要统计药品的数量:\n");
scanf("%d",&l.length);
for(int i=1;i<=l.length;i++){ //从下标为1开始存储
printf("请输入药品编号,名称,单价,销售数量:\n");
scanf("%s %s %d %d",l.r[i].score,l.r[i].name,&l.r[i].price,&l.r[i].num);//int 类型还是出了问题
l.r[i].sale=l.r[i].price*l.r[i].num; //销售额
fprintf(fp,"%s %s %d %d %d\n",l.r[i].score,l.r[i].name,l.r[i].price,l.r[i].num,l.r[i].sale);//把信息写入到文件中。
getchar();//
}
fclose(fp);
}
//遍历
void Out(List l){
FILE *fp;
if((fp=fopen("medicine","r"))==NULL){
printf("无法打开文件!\n");
exit(0);
}
printf("编号 名称 单价 销售数量 销售额");
for(int i=1;i<=l.length;i++){
printf("\n");
fscanf(fp,"%s %s %d %d %d",l.r[i].score,l.r[i].name,&l.r[i].price,&l.r[i].num,&l.r[i].sale); //从studata文件中把信息读出来
fprintf(stdout,"%s%9s%10d%10d%11d\n",l.r[i].score,l.r[i].name,l.r[i].price,l.r[i].num,l.r[i].sale);// 把读出来的信息输出到显示器上
}
fclose(fp);
}
//插入排序 单价 哨兵,与有序区的比较,从后往前比较,从无序区放在有序区,
void Sortprice(List &l){
int i,j;
for(i=2;i<=l.length;i++){
if((l.r[i].price)<(l.r[i-1].price)){
l.r[0].price=l.r[i].price;
l.r[i].price=l.r[i-1].price;
for(j=i-2;l.r[0].price<l.r[j].price;j--){
l.r[j+1].price=l.r[j].price;
}
l.r[j+1].price=l.r[0].price;
}
}
printf("====================药品单价直接插入排序为:======================\n");
for(int i=1;i<=l.length;i++){
printf("%d ",l.r[i].price);
}
printf("\n");
}
//冒泡排序 药品销量
void Sortnum(List &l){ //第一趟,比较n-1次,把最大的放在最后一个位置 第二趟 ,比较再减一次
int flag=1;
for(int i=1;i<l.length&&flag;i++){
flag=0;
for(int j=1;j<=l.length-i;j++){
if(l.r[j].num>l.r[j+1].num){
l.r[0].num=l.r[j].num;
l.r[j].num=l.r[j+1].num;
l.r[j+1].num=l.r[0].num;
flag=1;
}
}
}
printf("====================药品销售量冒泡排序为:======================\n");
for(int i=1;i<=l.length;i++){
printf("%d ",l.r[i].num);
}
printf("\n");
}
//简单选择排序 销售额
void Sortsale(List &l){ //第一趟 i=1,找最小的放在i=1的位置,第二趟i=2,再一次放
for(int i=1;i<l.length;i++){
int k=i;
for(int j=i+1;j<=l.length;j++){
if(l.r[k].sale>l.r[j].sale)
k=j;
}
if(i!=k){
l.r[0].sale=l.r[i].sale;
l.r[i].sale=l.r[k].sale;
l.r[k].sale=l.r[0].sale;
}
}
printf("====================药品销售额简单选择排序为:======================\n");
for(int i=1;i<=l.length;i++){
printf("%d ",l.r[i].sale);
}
printf("\n");
}
int main()
{
List l;
Insert(l);
Out(l);
Sortprice(l);
Sortnum(l);
Sortsale(l);
return 0;
}