问题描述
药店每到月底就要对所售药品进行统计,以方便药店对药品进行有效管理。现对该药店销售的药品进行统计,并按药品的单价、销售量或销售额进行排序。其中每种药品包括:药品编号、药品名称、单价、销售数量和销售额。
一堆废话
很久没有更新博客了,小白刚刚历经考试周的打击,百废待兴,赶紧跑来CSDN和小伙伴们取暖安慰受伤的心灵。近期会陆续写四篇数据结构课设的博客,然后再写两篇编写小游戏的博客,一个是基于Python的飞机大战,另一个是基于C++并在funcode上完成的海底世界游戏。
数据描述
(1)首先定义一个结构体,用来存放每个药品的信息,包括药品编号(int)、药品名称(char)、药品价格(float)、销售量(int)、销售额(sale)
//定义药品信息结构体
typedef struct {
int number; //编号
char name[20]; //药品名称
float price ; //价格
int sum; //销售量
float sale;//销售额
}Medicine;
(2)再定义一个顺序表,用具有50个元素顺序表来存放50个药品的信息。每个元素分别表示一个药品信息的结构体。
//顺序表存储
typedef struct {
Medicine m[Size+1]; //定义结构体数组
int length;
}SqList;
程序代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define Size 50
//定义药品信息结构体
typedef struct {
int number; //编号
char name[20]; //药品名称
float price ; //价格
int sum; //销售量
float sale;//销售额
}Medicine;
//顺序表存储
typedef struct {
Medicine m[Size+1]; //定义结构体数组
int length;
}SqList;
//初始化药品信息
void CreatMedicine(SqList &L,int count)
{
L.length = 1;
for(int i=1;i<count+1;i++)
{
printf("输入第%d个药品信息\n",i);
printf ("请输入编号:");
scanf("%d",&L.m[i].number);
printf ("请输入药品名称:");
scanf("%s",L.m[i].name);
printf ("请输入价格:");
scanf("%f",&L.m[i].price);
printf ("请输入销售量:");
scanf("%d",&L.m[i].sum);
L.m[i].sale = L.m[i].price * L.m[i].sum;
L.length++;
}
FILE *fp;
fp=fopen("medicine.txt","w+");
for(int i=1;i<L.length;i++)
{
fprintf(fp,"%d %s %f %d %f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
fclose(fp);
}
//按单价进行排序(直接插入排序)
void InsertSort(SqList &L){
int i=0;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
fclose(fp);
for(i=1;i<=L.length;i++)
{
Medicine temp;
if(L.m[i].price<L.m[i-1].price)
{
temp=L.m[i];
L.m[i]=L.m[i-1];
int j;
for(j=i-2;temp.price<L.m[j].price;j--)
{
L.m[j+1]=L.m[j];
}
L.m[j+1]=temp;
}
}
printf("按单价排序为:\n");
for(int i=0;i<=L.length;i++)
{
printf("药品编号:%d 药品名称:%s 药品单价:%f 销售数量:%d 销售额:%f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
//按销售量排序(希尔排序)
void ShellInsert(SqList &L,int dk){
for(int i=dk;i<=L.length;i++){
Medicine temp;
if(L.m[i].sum>L.m[i-dk].sum){
temp = L.m[i];
int j;
for(j=i-dk;j>=0&&temp.sum>L.m[j].sum;j-=dk)
L.m[j+dk] = L.m[j];
L.m[j+dk] = temp;
}
}
}
void ShellSort(SqList &L){
int i=0;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
fclose(fp);
for(int i=0;i<=L.length;i++)
ShellInsert(L,i);
printf("按销售量排序为:\n");
for(int i=0;i<=L.length;i++)
{
printf("药品编号:%d 药品名称:%s 药品单价:%f 销售数量:%d 销售额:%f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
//按销售额排序(冒泡排序)
void BubbleSort(SqList &L){
int i=0;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
fclose(fp);
int flag=1;
for(int i=1;i<=L.length&&flag;i++){
flag = 0;
for(int j=0;j<=L.length-i;j++){
Medicine temp;
if(L.m[j].sale>L.m[j+1].sale){
temp = L.m[j];
L.m[j] = L.m[j+1];
L.m[j+1] = temp;
flag=1;
}
}
}
printf("按销售额排序为:\n");
// printf("药品编号: 药品名称: 药品单价: 销售数量: 销售额:\n");
for(int i=0;i<=L.length;i++)
{
printf("药品编号:%d 药品名称:%s 药品单价:%f 销售数量:%d 销售额:%f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
//显示
void Show(SqList &L)
{
int i=0;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
fclose(fp);
printf("\n");
for(i=0;i<=L.length;i++)
{
printf("%5d%10s%10f%10d %10f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
//添加或修改药品信息
void Add(SqList &L){
int i=0;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
i--;
fclose(fp);
// printf("%d",L.length);
int flag = 0;
printf("添加药品请输入1,修改药品信息请输入2:");
scanf("%d",&flag);
if(flag == 1){
int k=0;
L.length +=1;
printf("输入需要添加的药品信息\n",i);
printf ("请输入编号:");
scanf("%d",&L.m[L.length].number);
for(int i=0;i<L.length;i++)
{
if(L.m[i].number==L.m[L.length].number)
k=1;
}
if(k==1){
printf("有该药品,添加失败!\n");
}
else{
printf ("请输入药品名称:");
scanf("%s",L.m[L.length].name);
printf ("请输入价格:");
scanf("%f",&L.m[L.length].price);
printf ("请输入销售量:");
scanf("%d",&L.m[L.length].sum);
L.m[L.length].sale = L.m[L.length].price * L.m[L.length].sum;
FILE *fp;
fp=fopen("medicine.txt","w+");
for(int i=0;i<=L.length;i++)
{
fprintf(fp,"%d %s %f %d %f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
fclose(fp);
for(int i=0;i<=L.length;i++)
{
printf("%5d%10s%10f%10d %10f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
}
else if(flag == 2){
char name[20];
printf("请输入需要修改的药品的名称:");
scanf("%s",name);
int i=0,n;
L.length = 0;
FILE *fp;
fp=fopen("medicine.txt","r+");
while(!feof(fp))
{
fscanf(fp,"%d %s %f %d %f\n",&L.m[i].number,L.m[i].name,&L.m[i].price,&L.m[i].sum,&L.m[i].sale);
L.length++;
i++;
}
L.length--;
fclose(fp);
for(int i=0;i<=L.length;i++)
{
if(strcmp(L.m[i].name,name) == 0){
printf ("请输入现在编号:");
scanf("%d",&L.m[i].number);
printf ("请输入现在药品名称:");
scanf("%s",L.m[i].name);
printf ("请输入现在价格:");
scanf("%f",&L.m[i].price);
printf ("请输入新售出数量:");
scanf("%d",&n);
L.m[i].sum+=n;
L.m[i].sale = L.m[i].price * L.m[i].sum;
FILE *fp;
fp=fopen("medicine.txt","w+");
for(int i=0;i<=L.length;i++)
{
fprintf(fp,"%d %s %f %d %f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
fclose(fp);
for(int i=0;i<=L.length;i++)
{
printf("%5d%10s%10f%10d %10f\n",L.m[i].number,L.m[i].name,L.m[i].price,L.m[i].sum,L.m[i].sale);
}
}
}
// printf("药品名称不合法!\n");
}
else{
printf("选择不合法!\n");
}
}
int main()
{
SqList L;
//统计药品个数
int count;
//定义服务标准位
int service;
printf("****************欢迎进入药品销售统计系统*****************");
// Show(L);
printf("\n*********************************************************");
while(1)
{
printf("\n***1.初始化药品销售统计系统\t2.按单价对药品进行排序***");
printf("\n***3.按销售量对药品进行排序\t4.按销售额对药品进行排序*");
printf("\n***5.添加药品或修改药品信息\t6.退出药品销售统计系统***\n");
printf("*********************************************************\n");
printf("********************请选择需要的服务:********************\n");
scanf("%d",&service);
system("cls");
if(service == 1){
printf("请输入药品个数:");
scanf("%d",&count);
CreatMedicine(L,count);
Show(L);
}
if(service == 2){
InsertSort(L);
}
if(service == 3){
ShellSort(L);
}
if(service == 4){
BubbleSort(L);
}
if(service == 5){
Add(L);
}
if(service == 6){
exit(0);
}
}
return 0;
}
测试数据
(1)初始化药品系统(即将药品信息存入文件)
(2)按单价进行排序
(3)按销售量进行排序
(4)按销售额进行排序
(5)添加药品信息
若需要添加药品编号与文件中药品编号相同,添加失败!
修改药品信息
(6)存放药品信息的medicine.txt文件