药店管理系统

药店管理系统

#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>

typedef struct medicine
{
	int number;//药品编号
	char name[20];//药品名称
	int price;//药品价格
	int sum;//药品总量
	int residue;//药品剩余量
}Item;
typedef struct node
{
	Item item;
	struct node* next;
}Node;
typedef Node* List;


int source (void);//初始界面
int denglu (void);//登录界面
int zhuce (void);//注册界面
int count (List);//返回链表节点数量
List daochu (List);//导出文件中节点内容
void fre (List);//释放掉指向的链表
void save (List);//保存链表到文件中
void initia (List);//新建一个链表,录入信息并保存到文件中
void print (List);//打印出文件中的信息
void deleteitem (List);//删除指定项
void ask (List);//查询信息
void change (List);//更改信息
void surplus (List);//显示各药品剩余量
void sort (List);//信息排序并打印
void add (List);//添加

int main (void)
{
	if(source()==2)
		return 0;
	else
	{
		List head;
		head=(List)malloc(sizeof(Node));
		klkl:
		system("cls");
		printf("--------欢迎进入系统--------\n");
		printf("输入数字表示想法:\n");
		printf("1.新建一个库并覆盖\n2.打印所有信息\n3.删除指定信息\n4.查询特定信息\n5.更改指定信息\n6.显示各药品剩余量\n7.排序并打印\n8.添加药品信息\n0.退出\n");
		int p;
		scanf("%d",&p);
		switch(p)
		{
			case 1:initia(head);
			break;
			case 2:print(head);
			break;
			case 3:deleteitem(head);
			break;
			case 4:ask (head);
			break;
			case 5:change(head);
			break;
			case 6:surplus(head);
			break;
			case 7:sort(head);
			break;
			case 8:add(head);
			break;
		case 0:
			default:return 0;
		}
		goto klkl;
	}
	return 0;
}





int count (List head)
{
	int n=0;
	List cur;
	cur=head;
	while(cur!=NULL)
	{
		n++;
		cur=cur->next;
	}
	return n;
}

void fre (List head)
{
	List cur,use;
	cur=head;
	while(cur!=NULL)
	{
		use=cur->next;
		free(cur);
		cur=use;
	}
	return;
}

List daochu (List head)
{
	FILE * fg;
	head=NULL;
	fg=fopen("data.bin","rb");
	List pre,cur;
	lplp:
	cur=(List)malloc(sizeof(Node));
	while((fread(cur,sizeof(Node),1,fg))==1)
	{
		if(head==NULL)
			head=cur;
		else
			pre->next=cur;
		cur->next=NULL;
		pre=cur;
		goto lplp;
	}
	if(head==NULL)
	{
		printf("导出信息失败");
		free(cur);
		cur=NULL;
	}
	fclose(fg);
	return head;
}

void save (List head)
{
	List cur;
	FILE * fl;
	fl=fopen("data.bin","wb+");
	if(head==NULL)
	{
		printf("指定信息为空");
	}
	else
	{
		cur=head;
		while(cur!=NULL)
		{
			fwrite(cur,sizeof(Node),1,fl);
			cur=cur->next;
		}
	}
	fclose(fl);
	return;
}

int source (void)
{
	system("cls");
	printf("------欢迎登录药店管理系统------\n");
	printf("输入数字以表示接下来的指令\n");
	int yuyu;
	printf("1.登录\n2.注册\n3.退出系统\n");
	scanf("%d",&yuyu);
	switch(yuyu)
	{
		case 1:{
			if(denglu()==2)
				return 2;
			else
				return 3;
		}
		break;
		case 2:{
			if(zhuce()==2)
				return 2;
			else
				return 3;
		}
		break;
		case 3:return 2;
		default:return 2;
	}
}


int zhuce (void)
{
	system("cls");
	char a[20],b[20];
	printf("请输入要创建的账户(不超过二十个字符)");
	jujuju:
	printf("\n输入0以退出\n");
	scanf("%s",a);
	if(strcmp(a,"0")==0)
		return 2;
	if(strlen(a)>20)
	{
		printf("用户名过长,请重新输入");
		goto jujuju;
	}
	FILE * fp;
	fp=fopen("account.txt","ab+");//
	int ar=0;
	fseek(fp,0L,2);
	if(ftell(fp)==0)
	{
		goto lpl;
	}
	rewind(fp);
	while(feof(fp)==0)
	{
		fscanf(fp,"%s",b);
		if(strcmp(a,b)==0)
		{
			ar=1;
			break;
		}
	}
	if(ar==1)
	{
		printf("该账户已注册(即将退出)\n");
		system("pause");
		system("cls");
		fclose(fp);
		return 2;
	}
	else
	{
		lpl:
		fseek(fp,0L,SEEK_END);
		char l='\n';
		fwrite(&l,1,1,fp);
	    fwrite(a,strlen(a),1,fp);
	    fclose(fp);
	    printf("成功注册");
	    system("cls");
	    return 3;
	}
}

int denglu (void)
{
	char a[21],b[21];
	int ffl=0;
	char ch;
	int i=0;
	FILE * fp;
	fp=fopen("account.txt","rb"); 
	printf("请输入账户(不超过二十个字符)\n");
	printf("\n输入0以退出\n");
	while((ch=getch())!='\r')
	{
		if(ch=='0')
		{
			fclose(fp);
			return 2;
		}
		if(ch!='\b')
		{
			a[i]=ch;
			i++;
			putchar('*');
		}
		else
			printf("\b");
		
	}
	a[i]='\0';
	while(feof(fp)==0)
	{
		fscanf(fp,"%s",b);
		if(strcmp(a,b)==0)
		{
			ffl=1;
			break;
		}
	}
	if(ffl==1)
	{
		printf("成功登录!");
		fclose(fp);
		return 3;
	}
	else
	{
		fclose(fp);
		printf("账号错误!");
		return 2;
	}
}

void initia(List head)
{
	int num,pri,su,res;
	char nam[20];
	system("cls");
	head=NULL;
	List pre,cur;
	kpl:
	num=-1;
	pri=-1;
	su=-1;
	res=-1;
	strcpy(nam,"ppppp");
	printf("输入1以继续,输入0以退出");
	int hjk;
	scanf("%d",&hjk);
	if(hjk==0)
	{
		save(head);
		return;
	}
	printf("请输入\n药品编号:\n药品名称:\n药品价格:\n药品总量:\n药品剩余量:\n");
	scanf("%d %s %d %d %d",&num,nam,&pri,&su,&res);
	if(num==-1||pri==-1||su==-1||res==-1||strcmp("ppppp",nam)==0)
	{
		save(head);
		printf("\n输入信息格式错误,即将退出\n");
		Sleep(2000);
		system("cls");
		return;
	}
	cur=(List)malloc(sizeof(Node));
	if(head==NULL)
		head=cur;
	else
		pre->next=cur;
	cur->next=NULL;
	cur->item.number=num;
	strcpy(cur->item.name,nam);
	cur->item.price=pri;
	cur->item.residue=res;
	cur->item.sum=su;
	pre=cur;
	printf("录入成功");
	Sleep(2000);
	system("cls");
	goto kpl;
}

void print (List head)
{
	List cur;
	system("cls");
	head=daochu(head);
	cur=head;
	tyty:
	if(cur==NULL)
		printf("\n暂无更多无药品信息\n");
	else
	{
		printf("药品编号:%d\n药品名称:%s\n药品价格:%d\n药品总量:%d\n药品剩余量:%d\n\n",cur->item.number,cur->item.name,cur->item.price,cur->item.sum,cur->item.residue);
		cur=cur->next;
		goto tyty;
	}
	system("pause");
	system("cls");
	return;
}

void deleteitem (List head)
{
	system("cls");
	List pre,cur;
	head=daochu(head);
	printf("请输入要删除的药品编号:\n");
	int q,flag=0;
	scanf("%d",&q);
	cur=head;
	while(cur!=NULL)
	{
		if(q!=cur->item.number)
		{
			pre=cur;
			cur=cur->next;
		}
		else
		{
			if(cur==head)
			{
				head=cur->next;
				printf("删除成功");
				cur=NULL;
				flag=1;
			}
			else
			{
				if(cur->next==NULL)
					pre->next=NULL;
				else
				pre->next=cur->next;
				printf("删除成功");
				cur=NULL;
				flag=1;
			}    
		}
	}
	if(flag==0)
		printf("删除失败:未找到相关编号");
	save(head);
	fre(head);
	Sleep(2000);
	system("cls");
	return;
}

void ask(List head)
{
	system("cls");
	List cur;
	head=daochu(head);
	int ifpri=0;
	int a=0;
	int b=0;
	int c=0;
	int d=0;
	int e=0;
	int mainnn=0;
	int num,pri,su,res;
	char nam[20];
	printf("请输入要查找的药品编号(输入0表示不使用该检索信息):\n");
	scanf("%d",&num);
	if(num==0)
		a=1;
	printf("请输入要查找的药品名称(输入0表示不使用该检索信息):\n");
	scanf("%s",nam);
	if(strcmp(nam,"0")==0)
		b=1;
	printf("请输入要查找的药品价格(输入0表示不使用该检索信息):\n");
	scanf("%d",&pri);
	if(pri==0)
		c=1;
	printf("请输入要查找的药品总量(输入0表示不使用该检索信息):\n");
	scanf("%d",&su);
	if(su==0)
		d=1;
	printf("请输入要查找的药品剩余量(输入0表示不使用该检索信息):\n");
	scanf("%d",&res);
	if(res==0)
		e=1;
	if(num==0&&strcmp(nam,"0")==0&&pri==0&&su==0&&res==0)
		return;
	Sleep(2000);
	system("cls");
	cur=head;
	while(cur!=NULL)
	{
		if(a!=1)
		{
			mainnn=1;
			if(num==cur->item.number)
				mainnn=0;
		}
		if(b!=1)
		{
			mainnn=1;
			if(strcmp(nam, cur->item.name) == 0)
				mainnn=0;
		}
		if(c!=1)
		{
			mainnn=1;
			if(pri==cur->item.price)
				mainnn=0;
		}
		if(d!=1)
		{
			mainnn=1;
			if(su==cur->item.sum)
				mainnn=0;
		}
		if(e!=1)
		{
			mainnn=1;
			if(res==cur->item.residue)
				mainnn=0;
		}
		if(mainnn==0)
		{
			printf("药品编号:%d\n药品名称:%s\n药品价格:%d\n药品总量:%d\n药品剩余量:%d\n",cur->item.number,cur->item.name,cur->item.price,cur->item.sum,cur->item.residue);
			ifpri=1;
		}
		cur=cur->next;
	}
	if(ifpri==0)
		printf("未找到相关信息!");
	fre(head);
	system("pause");
	return;
}

void change(List head)
{
	system("cls");
	head=daochu(head);
	int nu,num,pri,su,res,flag=0;
	char nam[20];
	printf("请输入要更改的药品编号:\n");
	scanf("%d",&nu);
	Sleep(2000);
	printf("请输入要改成的信息:药品编号:\n药品名称:\n药品价格:\n药品总量:\n药品剩余量:\n");
	scanf("%d %s %d %d %d",&num,nam,&pri,&su,&res);
	List cur;
	cur=head;
	while(cur!=NULL)
	{
		if(cur->item.number==nu)
		{flag=1;
			break;}
		cur=cur->next;
	}
	if(flag==1)
	{
		strcpy(cur->item.name,nam);
		cur->item.number=num;
		cur->item.price=pri;
		cur->item.sum=su;
		cur->item.residue=res;
		printf("更改成功!\n");
		save(head);
	}
	else
		printf("更改失败:未找到相关编号");
	Sleep(2000);
	system("cls");
	fre(head);
	return;
}

void surplus (List head)
{
	head=daochu(head);
	List cur;
	cur=head;
	while(cur!=NULL)
	{
		printf("药品名称:%s\n药品剩余量:%d\n",cur->item.name,cur->item.residue);
		cur=cur->next;
	}
	fre(head);
	system("pause");
	system("cls");
	return;
}

void sort(List head)
{
	system("cls");
	head=daochu(head);
	List cur,pre;
	//List cur,q,w,temp;
	cur=head;
	int i=count(head);
	printf("%d",i);
	int n;
	printf("请输入数字表示将要排序的方式:(输入0以退出)\n");
	printf("1.按价格升序\n2.按价格降序\n");
	scanf("%d",&n);
	if(n==1)
	{
		for(int y=0;y<i-1;y++)
		{
			cur=head;
			for(int u=0;u<i-y-1;u++)
			{
				pre=cur->next;
				if(cur->item.price>pre->item.price)
				{
					//swap
					int n1,p3,s4,r5;
					char n2[20];//
					n1=cur->item.number;
					strcpy(n2,cur->item.name);
					p3=cur->item.price;
					s4=cur->item.sum;
					r5=cur->item.residue;//
					cur->item.number=pre->item.number;
					strcpy(cur->item.name,pre->item.name);
					cur->item.price=pre->item.price;
					cur->item.sum=pre->item.sum;
					cur->item.residue=pre->item.residue;//
					pre->item.number=n1;
					pre->item.price=p3;
					strcpy(pre->item.name,n2);
					pre->item.sum=s4;
					pre->item.residue=r5;
				}
				cur=cur->next;
			}
		}
		cur=head;
		while(cur!=NULL)
		{
			printf("药品编号:%d  药品名称:%s  药品价格:%d  药品总量%d  药品剩余量:%d\n",cur->item.number,cur->item.name,cur->item.price,cur->item.sum,cur->item.residue);
			cur=cur->next;
		}
		system("pause");
		system("cls");
		fre(head);
		return;
	}
	else if(n==2)
	{
		for(int y=0;y<i-1;y++)
		{
			cur=head;
			for(int u=0;u<i-y-1;u++)
			{
				pre=cur->next;
				if(cur->item.price>pre->item.price)
				{
					//swap
					int n1,p3,s4,r5;
					char n2[20];//
					n1=cur->item.number;
					strcpy(n2,cur->item.name);
					p3=cur->item.price;
					s4=cur->item.sum;
					r5=cur->item.residue;//
					cur->item.number=pre->item.number;
					strcpy(cur->item.name,pre->item.name);
					cur->item.price=pre->item.price;
					cur->item.sum=pre->item.sum;
					cur->item.residue=pre->item.residue;//
					pre->item.number=n1;
					pre->item.price=p3;
					strcpy(pre->item.name,n2);
					pre->item.sum=s4;
					pre->item.residue=r5;
				}
				cur=cur->next;
			}
		}
		cur=head;
		while(cur!=NULL)
		{
			printf("药品编号:%d  药品名称:%s  药品价格:%d  药品总量%d  药品剩余量:%d\n",cur->item.number,cur->item.name,cur->item.price,cur->item.sum,cur->item.residue);
			cur=cur->next;
		}
		system("pause");
		system("cls");
		fre(head);
		return;
	}
	else
	{
		printf("输入了无效数字,即将退出");
		Sleep(2000);
		system("cls");
		fre(head);
		return;
	}
}

void add (List head)
{
	system("cls");
	int flag=0;
	head=daochu(head);
	int n;
	int num,pri,su,res;
	char nam[20];
	List cur,pre,temp;
	cur=head;
	printf("请输入要添加药品的前一个药品编号:\n");
	scanf("%d",&n);
	printf("请输入要添加的药品信息:\n药品编号:\n药品名称:\n药品价格:\n药品总量:\n药品剩余量:\n");
	scanf("%d %s %d %d %d",&num,nam,&pri,&su,&res);
	while(cur!=NULL)
	{
		if(cur->item.number==n)
		{
			if(cur->next==NULL)
				flag=1;
			else
				pre=cur->next;
			temp=(List)malloc(sizeof(Node));
			temp->item.number=num;
			temp->item.price=pri;
			temp->item.residue=res;
			temp->item.sum=su;
			strcpy(temp->item.name,nam);
			if(flag==1)
				temp->next=NULL;
			else
			temp->next=pre;
			cur->next=temp;
			printf("添加成功\n");
			system("pause");
			system("cls");
			save(head);
			fre(head);
			return;
		}
		else
		{
			cur=cur->next;
		}
	}
	printf("添加失败\n");
	system("pause");
	system("cls");
	fre(head);
	return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值