药品管理系统C语言实现 BME讲座记录

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#include<time.h>

struct user
{
    
    
	char useword[100];
	char password[100];
};

typedef struct medicine
{
    
    
	char num[5];//品编号
	char name[20];//品名
	char otc;是否为OTC,是为T否为N
	int lye;保质期:2020年
	int lmo;//1月
	int lda;//1日
	int number;//剩余量
}doc;

char nu[5];
char nam[20];
char ot;
int ly;
int lm;
int ld;
int num;

typedef struct lnode
{
    
    
	doc data;
	struct lnode *next;
}linklist;

void surface()
{
    
    
	printf("                      *********************************************************\n");
	printf("                      *                                                       *\n");
	printf("                      *                  欢迎使用药品管理系统                 *\n");
	printf("                      *                                                       *\n");
	printf("                      *             生物医学工程创新实践团队讲座用            *\n");
	printf("                      *                                                       *\n");
	printf("                      *                     按任意键进入                      *\n");
	printf("                      *                                                       *\n");
	printf("                      *********************************************************\n");
}

void menu()
{
    
    
	printf("                      *********************************************************\n");
	printf("                      *                                                       *\n");
	printf("                      *                   药店药品管理系统                    *\n");
	printf("                      *                  1:增加药品信息                      *\n");
	printf("                      *                  2:删除药品信息                      *\n");
	printf("                      *                  3:修改药品信息                      *\n");
	printf("                      *                  4:查找药品信息                      *\n");
	printf("                      *                  5:按照药品剩余量排序                *\n");
	printf("                      *                  6:查找是否有过期药品                *\n");
	printf("                      *                  7:统计总药品剩余量                  *\n");
	printf("                      *                  8:将信息保存至文件                  *\n");
	printf("                      *                  0:退出系统                          *\n");
	printf("                      *                                                       *\n");
	printf("                      *********************************************************\n");
}

linklist* loadfile()
{
    
    
	linklist* q, * k, * head = (linklist*)malloc(sizeof(linklist));
	linklist temp;
	FILE* r = fopen("medicine.txt", "r");
	k = q = head;
	head->next = NULL;
	if (r == NULL){
    
    
		r = fopen("medicine.txt", "w");
		if (r == NULL){
    
    
			printf("打开文件出错!\n");
			return NULL;
		}
		fclose(r);
		return head;
	}
	while (fscanf(r, "%s\t%s\t%c\t%d\t%d\t%d\t%d\n", temp.data.num, temp.data.name, &temp.data.otc, &temp.data.lye, &temp.data.lmo, &temp.data.lda, &temp.data.number) != EOF){
    
    
		temp.next = NULL;
		q = (linklist*)malloc(sizeof(linklist));
		*q = temp;
		k->next = q;
		k = q;
	}
	k->next = NULL;
	fclose(r);
	return head;
}

int password()//密码
{
    
    
	int n=5,i;
	struct user use;
	struct user constrast;
	struct user write;
	FILE* fp = fopen("user.txt", "a");  
	FILE* fu = fopen("user.txt", "r");
	while (1) {
    
    
		system("cls");
		printf("                      *********************************************************\n");
		printf("                      *                                                       *\n");
		printf("                      *                       1:登录用户                     *\n");
		printf("                      *                       2:注册用户                     *\n");
		printf("                      *                                                       *\n");
		printf("                      *********************************************************\n");
		scanf("%d", &i);
		system("cls");
		if (i == 1) {
    
    
				if ((fscanf(fu, "%s\t%s\n", constrast.useword, constrast.password) != EOF)) {
    
    
					while (1) {
    
    
						printf("剩余次数:%d 次\n", n--);
						printf("请输入用户名:");
						scanf("%s", write.useword);
						printf("\n");
						printf("请输入密码:");
						scanf("%s", write.password);
						if ((strcmp(write.useword, constrast.useword) == 0) && (strcmp(write.password, constrast.password)) == 0)
							return 1;
						else {
    
    
							system("cls");
							printf("请再尝试一次:\n");
						}
						if (n == 0) {
    
    
							printf("抱歉,登陆失败\n");
							return 0;
						}
					}
				}
				else {
    
    
					printf("请先注册!\n");
					n++;
					break;
				}
		}
		else if (i == 2) {
    
    
			printf("请输入用户名:");
			scanf("%s", use.useword);
			printf("\n");
			printf("请输入密码:");
			scanf("%s", use.password);
			fprintf(fp, "%s\t%s\n", use.useword,use.password);
			fclose(fp);
			system("cls");
			printf("注册成功!\n");
		}
		else
			printf("请输入正确的选项\n");
	}
}

void addmedicine(linklist *L)//增加药品信息
{
    
    
	printf("请输入药品信息:\n");
	printf("药品编号:");
	scanf("%s", nu);
	linklist* q = L;
	while (q->next != NULL){
    
    
		if (strcmp(q->next->data.num, nu) == 0){
    
    
			printf("此药品已存在\n");
			getchar(); getchar();
			break;
		}
		q = q->next;
	}
	if (q->next == NULL){
    
    
		linklist* p;
		p = (linklist*)malloc(sizeof(linklist));
		strcpy(p->data.num, nu);
		printf("药品名:");
		scanf("%s", nam);
		strcpy(p->data.name, nam);
		printf("是否为OTC,是为T否为N:");
		getchar();
		scanf("%c", &ot);
		p->data.otc = ot;
		printf("保质期\n年份:");
		scanf("%d", &ly);
		printf("月份:");
		scanf("%d", &lm);
		printf("日期:");
		scanf("%d", &ld);
		p->data.lye = ly;
		p->data.lmo = lm;
		p->data.lda = ld;
		printf("剩余量:");
		scanf("%d", &num);
		p->data.number = num;
		p->next = q->next;
		q->next = p;
		/*
		FILE* med = fopen("medicine.txt", "a");
		fprintf(med, "药品序号:%s 名称:%s OTC:%c 生产日期:%d年%d月%d日 剩余量:%d\n", p->data.num, p->data.name, p->data.otc, p->data.lye, p->data.lmo, p->data.lda, p->data.number);
		fclose(med);*/
	}
}

void deletemedicine(linklist *L)//删除药品信息
{
    
    
	printf("请输入药品信息:\n");
	printf("药品编号:");
	scanf("%s", nu);
	linklist *q = L,*p;
	while (q->next != NULL) {
    
    
		if (strcmp(q->next->data.num, nu) == 0) {
    
    
			p = q->next;
			q->next = p->next;
			free(p);
			printf("删除成功!");
			getchar(); getchar();
			break;
		}
		q = q->next;
	}
	if (q->next == NULL) {
    
    
		printf("没有当前药品信息!");
		getchar(); getchar();
	}
}

void changemedicine(linklist *L)//修改药品信息
{
    
    
	printf("请输入药品信息:\n");
	printf("药品编号:");
	scanf("%s", nu);
	linklist *q = L,*p;
	while (q->next != NULL) {
    
    
		if (strcmp(q->next->data.num, nu) == 0) {
    
    
			p = q->next;
			printf("已查到药品信息\n");
			printf("请输入新药品信息:\n");
			printf("药品名:");
			scanf("%s", nam);
			strcpy(p->data.name, nam);
			printf("是否为OTC,是为T否为N:");
			getchar();
			scanf("%c", &ot);
			p->data.otc = ot;
			printf("保质期\n年份:");
			scanf("%d", &ly);
			printf("月份:");
			scanf("%d", &lm);
			printf("日期:");
			scanf("%d", &ld);
			p->data.lye = ly;
			p->data.lmo = lm;
			p->data.lda = ld;
			printf("剩余量:");
			scanf("%d", &num);
			p->data.number = num;
			printf("修改成功!");
			getchar(); getchar();
			break;
		}
		q = q->next;
	}
	if (q->next == NULL) {
    
    
		printf("没有当前药品信息!");
		getchar(); getchar();
	}
}

void findmedicine(linklist *L)//查找药品信息
{
    
    
	printf("请输入药品信息:\n");
	printf("药品编号:");
	scanf("%s", nu);
	linklist* q = L, * p;
	while (q->next != NULL) {
    
    
		if (strcmp(q->next->data.num, nu) == 0) {
    
    
			p = q->next;
			printf("药品名:%s\n",p->data.name);
			printf("是否为OTC:%c\n", p->data.otc);
			printf("保质期:%d年%d月%d日\n", p->data.lye,p->data.lmo,p->data.lda);
			printf("剩余量:%d\n", p->data.number);
			getchar(); getchar();
			break;
		}
		q = q->next;
	}
	if (q->next == NULL) {
    
    
		printf("没有当前药品信息!");
		getchar(); getchar();
	}
}

void ranknumber(linklist* L)//按照药品剩余量排序
{
    
    
	long int sum = 0;
	linklist* r = L->next,*q,*p;
	if (r == NULL) {
    
    
		printf("当前没有任何药品信息!");
		getchar(); getchar();
		return;
	}
	while (r != NULL) {
    
    
		p = r;
		q = r->next;
		linklist* tmp;//用于排序时暂存节点  
		tmp = (linklist*)malloc(sizeof(linklist));
		while (q != NULL){
    
    
			if (q->data.number > p->data.number){
    
    
				/*先复制q结点信息到tmp*/
				strcpy(tmp->data.num, q->data.num);
				strcpy(tmp->data.name, q->data.name);
				tmp->data.otc = q->data.otc;
				tmp->data.lye = q->data.lye;
				tmp->data.lmo = q->data.lmo;
				tmp->data.lda = q->data.lda;
				tmp->data.number = q->data.number;
				/*再复制p结点信息到q*/
				strcpy(q->data.num, p->data.num);
				strcpy(q->data.name, p->data.name);
				q->data.otc = p->data.otc;
				q->data.lye = p->data.lye;
				q->data.lmo = p->data.lmo;
				q->data.lda = p->data.lda;
				q->data.number = p->data.number;
				/*最后复制exchange结点信息到p*/
				strcpy(p->data.num, tmp->data.num);
				strcpy(p->data.name, tmp->data.name);
				p->data.otc = tmp->data.otc;
				p->data.lye = tmp->data.lye;
				p->data.lmo = tmp->data.lmo;
				p->data.lda = tmp->data.lda;
				p->data.number = tmp->data.number;
			}
			q = q->next;
		}
		r = r->next;
	}
	printf("排序后的药品信息为:\n");
	linklist* c=L->next;
	while (c != NULL) {
    
    
		FILE* med = fopen("medicine.txt", "a");
		printf("%s\t%s\t%c\t%d\t%d\t%d\t%d\n", c->data.num, c->data.name, c->data.otc, c->data.lye, c->data.lmo, c->data.lda, c->data.number);
		c = c->next;
	}
	getchar(); getchar();
}

void finddelayed(linklist* L)//查找是否有过期药品
{
    
    
	int flag = 1;
	int year, month, day;
	time_t timep;
	struct tm* p;
	time(&timep);
	p = gmtime(&timep);
	day = p->tm_mday;/*获取当前月份日数,范围是1-31*/
	month = 1 + p->tm_mon;/*获取当前月份,范围是0-11,所以要加1*/
	year = 1900 + p->tm_year;/*获取当前年份,从1900开始,所以要加1900*/
	linklist* q = L->next;
	if (q == NULL) {
    
    
		printf("当前没有任何药品信息!");
		getchar(); getchar();
		return;
	}
	while (q != NULL) {
    
    
		if (q->data.lye < year) {
    
    
			printf("%s已过期\n", q->data.name);
			flag = 0;
		}
		else if (q->data.lye == year && q->data.lmo < month) {
    
    
			printf("%s已过期\n", q->data.name);
			flag = 0;
		}	
		else if (q->data.lye == year && q->data.lmo == month && q->data.lda < day) {
    
    
			printf("%s已过期\n", q->data.name);
			flag = 0;
		}	
		q = q->next;
	}
	if(flag)
		printf("当前没有过期药品\n");
	getchar(); getchar();
}

void medicinesum(linklist* L)//统计总药品剩余量
{
    
    
	long int sum=0;
	linklist* p = L->next;
	if (p == NULL) {
    
    
		printf("当前没有任何药品信息!");
		getchar(); getchar();
		return;
	}
	while (p != NULL) {
    
    
		sum += p->data.number;
		p = p->next;
	}
	printf("总药品剩余量为:%ld",sum);
	getchar(); getchar();
}

void document(linklist* L)//将信息保存至文件
{
    
    
	linklist* p = L->next;
	if (p == NULL) {
    
    
		printf("当前没有任何药品信息!");
		getchar(); getchar();
		return;
	}
	FILE* med = fopen("medicine.txt", "w");
	while (p!=NULL) {
    
    
		fprintf(med, "%s\t%s\t%c\t%d\t%d\t%d\t%d\n", p->data.num, p->data.name, p->data.otc, p->data.lye, p->data.lmo, p->data.lda, p->data.number);
		p = p->next;
	}
	fclose(med);
	printf("保存成功!");
	getchar(); getchar();
}

int main(void)
{
    
    
	int i, n, flag=1;
	system("cls");//清屏
	surface();
	getchar();
	system("cls");
	i=password();
	if (i == 0)
		return 0;
	linklist* L;
	L = loadfile();
	while(1)
	{
    
    
		system("cls");
		menu();
			scanf("%d", &n);
		switch (n)
		{
    
    
			case 0:
				printf("谢谢使用");
				return 0;
			case 1:
				addmedicine(L);
				break;
			case 2:
				deletemedicine(L);
				break;
			case 3:
				changemedicine(L);
				break;
			case 4:
				findmedicine(L);
				break;
			case 5:
				ranknumber(L);
				break;
			case 6:
				finddelayed(L);
				break;
			case 7:
				medicinesum(L);
				break;
			case 8:
				document(L);
				break;
			default:
				printf("请输入正确的选项\n");
				break;
		}
	}
}


猜你喜欢

转载自blog.csdn.net/qq_45281807/article/details/116565921
BME