药店管理系统
#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;
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)
{
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)
{
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;
}