药店的销售管理系统

目录

一. 实验目的

二. 系统设计

三. 设计步骤

四. 系统功能展示和调试 

五. 实验总结

六. 附录:完整源代码


一. 实验目的

        本实验旨在通过编程实现一个药店销售统计系统,包括药品信息管理、销售记录管理、库存警告及用户交互界面等功能。通过此系统,药店可以方便地管理药品库存、记录销售情况,并提供实时的库存警告,帮助药店提高管理效率和服务质量。

二. 系统设计

1.该系统设计了两个结构体,如下所示:

        药品信息结构(Medicine):包括药品ID、名称、价格和库存量。

        销售记录结构体(SaleRecord)包括销售的药品ID、销售数量、销售总价和销售时间。

2. 全局变量:

        药品信息数组(medicine)和销售记录数组(salerecord),分别用于存储药品信息和销售记录。

        药品数量(medicinecount)和销售记录数量(salecount)用于跟踪数组中实际存储的条目数。

        管理员密码(password)用于验证管理员身份。

3 . 详细设计

1)药品管理:

        添加药品功能(AddMedicine):根据用户输入的药品ID、名称、价格和库存量,将药品信息添加到药品信息数组中。

        删除药品功能(DeleteMedicine):根据用户输入的药品ID,从药品信息数组中删除对应的药品信息。

2)销售记录:

        购买药品功能(BuyMedicine):根据用户输入的药品ID和购买数量,更新药品库存,并创建销售记录。

3)库存警告:

        库存警告功能(warn):遍历药品信息数组,检查哪些药品库存量不足(例如,库存量为0或低于5),并输出警告信息。

4)管理员操作:

        管理员通过输入密码进行登录,登录成功之后就可以进入管理员操作界面,实现包括添加药品、删除药品、查看销售记录、查看库存警告和退出等功能。

5)用户交互:

        提供查看所有药品、查询药品、购买药品、退出以及管理员入口等功能选项。

三. 设计步骤

        1)首先定义好数据结构和一些必要的全局变量。

        2)接着根据所要实现的功能,完成菜单界面设计以及各个功能模块的设计。包括添加药品、删除药品、购买药品、库存警告、管理员操作和用户交互等。

        3)编写主函数,在主函数中初始化药店的信息,并提供交互界面供用户使用。

        4)测试,运行并调试程序。

该系统的主要设计流程图如下所示:

        

四. 系统功能展示和调试 

        进入药店的销售管理系统界面如图所示:

        接着进行相关查看药品操作,可以在主函数中自行初始化药店药品信息,或者进入管理员操作入口,进行相关的药品管理。

在知道了有哪些药品之后,客户就可以进行对应的药品购买:

 

最后,可以进行管理员操作系统界面,输入对应的管理员进入密码,这个也可以根据实际情况来进行设置:

由于我们上面已经进行了一个药品的购买,下面我们来看看是否药店系统中是否已经生成了药品的销售记录:

 

如上所示,当我们查看销售记录的时候,就可以得到相关的购买时间,购买数量和价格等等信息。

最后退出系统界面:

 

五. 实验总结

        本实验通过编程实现了一个完整的药店销售统计系统,涵盖了药品信息管理、销售记录管理、库存警告和用户交互等多个方面。通过此系统,药店可以方便地管理药品库存和销售情况,提高管理效率。在实验过程中,我深入理解了结构体、数组、函数、循环和条件判断等编程概念,并掌握了许多程序调试技巧。此外,本次实验还锻炼了我的逻辑思维能力和问题解决能力,为我后续的学习和工作打下了坚实的基础。 

六. 附录:完整源代码

//实现药店的销售统计系统,并设计一定的交互系统
#include<stdio.h>
#include<string.h>
#include<time.h>

#define MAXSIZE 100
//首先定义药品的信息结构体
typedef struct Medicine {
	int id;		//药品的id
	char name[MAXSIZE];		//药品的名称
	float price;	//药品的价格
	int inventory;	//药品的库存
}Medicine;

//接着定义药品销售记录的结构体
typedef struct SaleRecord {
	int Medicineid;		//记录销售药品的id编号
	int num;		//记录销售药品总共的销售数量
	int PriceSum;	//记录卖出药品的销售总价
	char time[80];	//用来记录卖出的时间
}SaleRecord;

//函数声明
void NowTime(char* buffer, size_t size);
void AddMedicine(int id, const char name[], float price, int inventory);
void DeleteMedicine(int id);
void SearchMedicine(int id);
void BuyMedicine(int id, int num);
void choice1();		//菜单1
void choice2();		//菜单2
void Allsee();
void warn();
void list();


//定义两个全局变量来作为信息库存储药品和药品的销售记录
Medicine medicine[10];		//这里最多销售10种药品,可自行修改数量
SaleRecord salerecord[MAXSIZE];
int medicinecount = 0;	//记录实际药品个数
int salecount = 0;	//用来记录实际销售单个数
char password[MAXSIZE] = "123123123";		//设置一个密码,供管理员登录管理员操作界面


int main() {
	AddMedicine(1, "阿司匹林", 3200, 20);
	AddMedicine(2, "布洛芬", 200, 50);
	AddMedicine(3, "板蓝根颗粒", 15, 500);
	AddMedicine(4, "九九感冒灵", 20, 200);
	while (1) {
		int num;	//用来接收用户所输入的操作编号
		choice1();
		scanf("%d", &num);
		switch (num) {
		case 1:
			Allsee();
			break;
		case 2:	
			int num1;
			printf("请输入您要进行查询的药品编号:\n");
			scanf("%d", &num1);
			SearchMedicine(num1);
			break;
		case 3:
			int num2, num3;
			printf("请输入您要购买药品的编号以及所要购买的数量(中间用空格隔开):\n");
			scanf("%d %d", &num2, &num3);
			BuyMedicine(num2, num3);
			break;
		case 4:
			return 0;
		case 10:
			char pass[MAXSIZE];
			printf("请输入管理员密码:\n");
			scanf("%s", &pass);
			if ((strcmp(pass, password)) != 0) {
				printf("输入密码错误!");
			}
			else {
				while (1) {
					int num4;	//用来接收管理员所输入的操作
					choice2();
					scanf("%d", &num4);
					switch (num4) {
					case 1:
						int id1;
						char name1[MAXSIZE];
						float price1;
						int inventory1;
						printf("请输入您要添加的药品编号:\n");
						scanf("%d", &id1);
						printf("请输入您要添加的药品名称:\n");
						scanf("%s", &name1);
						printf("请输入该药品的价格:\n");
						scanf("%f", &price1);
						printf("请输入要添加的数量:\n");
						scanf("%d", &inventory1);
						AddMedicine(id1, name1, price1, inventory1);
						break;
					case 2:
						int num5;
						printf("请输入要删除药品的编号:\n");
						scanf("%d", &num5);
						DeleteMedicine(num5);
						break;
					case 3:
						list();
						break;
					case 4:
						warn();
						break;
					case 5:
						return 0;
					}
				}
			}
		}

	}
}


//定义一个AddMedicine函数用来添加药品信息到信息库当中
void AddMedicine(int id,const char name[],float price,int inventory) {
	if (medicinecount <10) {	//当药品种数没有超过最大种数,就添加信息到信息库当中去
		int flag = 0;
		int number;
		for (int i = 0; i < medicinecount; i++) {	//看添加的药品编号是否已经存在
			if (medicine[i].id == id) {
				flag = 1;
				number = i;
			}
		}
		if(flag==1) {
			medicine[number].id = id;
			strcpy(medicine[number].name, name);
			medicine[number].price = price;
			medicine[number].inventory = inventory;
		}
		else {
			medicine[medicinecount].id = id;
			strcpy(medicine[medicinecount].name,name);
			medicine[medicinecount].price = price;
			medicine[medicinecount].inventory = inventory;
			medicinecount++;
		}
		
	}
	else {
		printf("药品种数已达最大值,不能再进行添加!");
	}
}

//定义一个DeleteMedicine函数来删除信息库中某一个药品
void DeleteMedicine(int id) {
	for (int i = 0; i < medicinecount; i++) {
		if (medicine[i].id == id) {
			medicine[i].id = 0;		//id为0的药品是没有,这步操作相当于删除了该药品
			strcpy(medicine[i].name,"\0");
			medicine[i].price = 0;
			medicine[i].inventory = 0;
			break;
		}
	}
}



//定义一个SearchMedicine函数来查看药品信息库中的药品信息
void SearchMedicine(int id) {
	for (int i = 0; i < medicinecount; i++) {
		if (medicine[i].id == id) {
			printf("该药品名称为:%s\n", medicine[i].name);
			printf("该药品的价格为:%.2f 元\n", medicine[i].price);
			printf("该药品现在的库存量为:%d 件\n", medicine[i].inventory);
			break;
		}
		else if(i==medicinecount-1){
			printf("没有id为%d的商品\n", id);
		}
	}
}

//定义一个函数BuyMedicine来处理客户的购买需求
void BuyMedicine(int id,int num) {
	float price = 0;
	SaleRecord newrecord;	//创建一个新销售记录
	for (int i = 0; i < medicinecount; i++) {	//查找那个要购买的药
		
		if (medicine[i].id == id){
			if (medicine[i].inventory >= num) {
				medicine[i].inventory -= num;
				price =num * medicine[i].price;
				printf("恭喜您,购买成功,请付款%f元\n", price);
				break;
			}
			else {
				printf("当前药品已经没有这么多的库存,仅剩%d件", medicine[i].inventory);
				return;
			}
		}
	}
	if (price == 0) {
		printf("没有该药品\n");
		return;
	}
	newrecord.Medicineid = id;
	newrecord.num = num;
	newrecord.PriceSum = price;
	char timebuffer[80];
	NowTime(timebuffer, sizeof(timebuffer));
	strcpy(newrecord.time, timebuffer);
	salerecord[salecount++] = newrecord;
}

void NowTime(char* buffer,size_t size) {
	time_t nowtime;
	// 使用time函数获取当前时间  
	time(&nowtime);
	// 声明一个tm结构体指针来接收本地时间  
	struct tm* timeinfo;
	// 使用localtime函数将rawtime转换为本地时间,并存储在timeinfo中  
	timeinfo = localtime(&nowtime);
	// 使用strftime函数将时间格式化为YYYY-MM-DD HH:MM:SS格式,并存储在buffer中  
	strftime(buffer, size, "%Y-%m-%d %H:%M:%S", timeinfo);
}

//定义一个菜单界面供用户交互
void choice1() {
	printf("**********欢迎来到本药店**********\n");
	printf("*******  1.查看本店所有药品 ******\n");
	printf("*******  2.药品的查询   ********\n");
	printf("*******  3.购买药品         ********\n");
	printf("*******  4.退出             ********\n");
	printf("**********很高兴为您服务**********\n");
	printf("******** 10.管理员操作入口 ********\n");
	printf("请输入您想要进行的操作(非管理员请勿进行10号操作哦):\n");
}

//定义另外一个菜单来供管理员操作
void choice2() {
	printf("\n");
	printf("您好,管理员\n");
	printf("***** 1.进行药品的添加 *****\n");
	printf("***** 2.进行药品的删除 *****\n");
	printf("***** 3.查看销售记录   *****\n");
	printf("***** 4.查看库存不足的药品 *\n");
	printf("***** 5.退出           *****\n");
	printf("****************************\n");
	printf("请输入您要进行的操作:\n");
}

//定义一个函数供用户查看现有的所有药品
void Allsee() {
	printf("本店所有药品如下所示:\n");
	for (int i = 0; i < medicinecount; i++) {
		printf("%s,该药品编号为%d\n", medicine[i].name,medicine[i].id);
	}
}

//定义一个函数warn供管理员查看哪些药品已经无库存或者将要无库存
void warn() {
	int flag = 0;
	for (int i = 0; i < medicinecount; i++) {
		if (medicine[i].inventory == 0 || medicine[i].inventory <= 5) {		//设置5为一个警示线
			printf("%s已经库存不足,仅剩%d件", medicine[i].name, medicine[i].inventory);
			flag = 1;
		}
	}
	if (flag == 0) {
		printf("暂无药品库存快不足\n");
	}
}


//定义一个函数list来给管理员查看销售记录
void list() {
	if (salecount == 0) {
		printf("暂无销售记录可查看");
	}
	else {
		for (int i = 0; i < salecount; i++) {
			printf("第%d份销售清单如下所示:\n", i+1);
			printf("%s\n", salerecord[i].time);
			printf("销售的药品id编号为:%d\n", salerecord[i].Medicineid);
			printf("该药品本次销售中共卖出%d件\n", salerecord[i].num);
			printf("卖出的价格为:%d\n", salerecord[i].PriceSum);
		}
	}
}

 

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值