【数据结构】药品销售系统

问题描述

药店每到月底就要对所售药品进行统计,以方便药店对药品进行有效管理。现对该药店销售的药品进行统计,并按药品的单价、销售量或销售额进行排序。其中每种药品包括:药品编号、药品名称、单价、销售数量和销售额。
一堆废话
很久没有更新博客了,小白刚刚历经考试周的打击,百废待兴,赶紧跑来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文件
在这里插入图片描述

发布了19 篇原创文章 · 获赞 8 · 访问量 3864

猜你喜欢

转载自blog.csdn.net/weixin_45087775/article/details/103986588
今日推荐