C语言 药品管理系统 源代码
#include
#include
#include
#include
#include
typedef struct Drug {
char Drug_id[30]; //编号char Drug_name[50]; //药品名称
char Drug_type[10]; //类型
float Drug_price; //价格
int amount; //库存数量
char Drug_time[30]; //入库时间
char remark[30]; //备注
struct Drug *next;
}Drug,*DrugPtr;
#define MENU "欢迎进入药品管理系统\n"\
"1: 查看已有药品列表\n"\
"2: 添加新的药品\n"\
"3: 删除药品信息\n"\
"4: 修改药品信息\n"\
"5: 分类查询\n"\
"0: 退出\n"\
"请您选择:"
#define MENU41 "请选择要修改的选项\n"\
"1:修改药品名称\n"\
"2:修改药品价格\n"\
"3:修改药品数量\n"\
"4:修改药品类型\n"\
"5:修改药品备注\n"\
"0:返回主菜单\n"\
"请您选择:"
#define MENU5 "欢迎进入分类查询页面\n"\
"1: 按编号查询\n"\
"2: 按名称查询\n"\
"3: 按类型查询\n"\
"4: 按价格查询\n"\
"5: 按库存数量查询\n"\
"6: 按入库时间查询\n"\
"0: 返回主菜单\n"\
"请您选择:"
#define MENU50 "按药品编号查询\n"\
"请输入要查询的药品编号:"
#define MENU51 "按药品名称查询\n"\
"请输入要查询的药品名称:"
#define MENU52 "按药品类型查询\n"\
"请输入要查询的药品类型:\n"\
"1: 中药\n"\
"2: 中成药\n"\
"3: 西药\n"\
"0: 返回查询菜单\n"\
"请您选择:"
#define MENU53 "按药品价格查询\n"\
"请输入要查询的药品价格:"
#define MENU54 "按药品库存数量查询\n"\
"请输入要查询的药品的库存数量:"
#define MENU55 "按药品入库时间查询\n"\
"请输入要查询的药品入库时间:"
#define STRCMP(NAME, STR) strcmp((char *)GetStdin("请输入药品的编号(按0结束):", "%s", STR), "0")
DrugPtr insert(DrugPtr head, int id, char* name); //添加药品
void save_to_file( DrugPtr &yaolist); //将更新后的链表保存到文件中
void read_to_list(DrugPtr &yaolist); //将文件读入链表
void *GetStdin(const char *numstr, char *control, void *ret);
DrugPtr getvalue(); //取值
void druginsert(DrugPtr &yaolist, DrugPtr yao); //插入操作
int isdrugin(DrugPtr yaolist, DrugPtr yao); //判断
void drugmodify(DrugPtr &yaolist, DrugPtr yao); //修改操作
void deletenode(DrugPtr &yaolist,char drug_id[]); //删除操作
void deletedrug(DrugPtr &yaolist);
void updatedrug(DrugPtr &yaolist);
void listshow(DrugPtr yaolist); //显示操作
void drug_find_name(DrugPtr head, char *name); //以名称查询void drug_find_id(DrugPtr head,char *id); //以编号查询void drug_find_type_z(DrugPtr head); //查询中药
void drug_find_type_zc(DrugPtr head); //查询中成药void drug_find_type_x(DrugPtr head); //查询西药
void drug_find_price(DrugPtr head,float price); //以价格查询void drug_find_amout(DrugPtr head,int amout); //以库存数量查询void drug_find_time(DrugPtr head,char *time); //以入库时间查询void drug_type_choose(DrugPtr head); //查询主菜单void choose_type(DrugPtr head); //类型查询
int main()
{
int choice;
DrugPtr head=NULL;
DrugPtr yao;
read_to_list(head);
while (*(int *)GetStdin(MENU, "%d", &choice))
{
switch (choice){
case 1:
listshow(head);//显示药品列表
break;
case 2:
{
yao=getvalue();
druginsert(head,yao);//添加药品 printf("药品添加成功\n");
break;
}
case 3:
deletedrug(head);
//删除药品
break;
case 4:
updatedrug(head);//修改药品信息
break;
case 5: //分类查询
drug_type_choose(head);
break;
case 0: //退出
break;
}
}
save_to_file(head);
return 0;
}
void *GetStdin(const char *numstr, char *control, void *ret)
{
cputs(numstr);
while (! scanf(control, ret)) {
fflush(stdin);
system("cls");
cputs(numstr);
}
system("cls");
return ret;
}
//显示列表
void listshow(DrugPtr yaolist)
{
printf ("%5s%13s%10s%10s%13s%10s%10s\n", "药品编号", "名称", "价格", "类型", "入库时间","库存数量
","备注");
DrugPtr p=yaolist;
if(!p)
printf("kong");
while(p)
{
printf ("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
p->Drug_id, p->Drug_name, p->Drug_price,p->Drug_type,p->Drug_time,p->amount,p->remark);
p=p->next;
}
}
DrugPtr getvalue()
{
DrugPtr yao=(DrugPtr)malloc(sizeof(Drug));
printf("请输入药品编号:");
scanf("%s",&yao->Drug_id);
printf("\n");
printf("请输入药品名称:");
scanf("%s",&yao->Drug_name);
printf("\n");
printf("请输入药品价格:");
scanf("%f",&yao->Drug_price);
printf("\n");
printf("请输入药品数量:");
scanf("%d",&yao->amount);
printf("\n");
printf("请输入药品入库时间:");
scanf("%s",&yao->Drug_time);
printf("\n");
printf("请输入药品类型:");
scanf("%s",&yao->Drug_type);
printf("\n");
printf("请输入药品备注:");
scanf("%s",&yao->remark);
printf("\n");
yao->next=NULL;
return yao;
}
void druginsert(DrugPtr &yaolist, DrugPtr yao) {
if(!yaolist)
yaolist=yao;
else
{
yao->next=yaolist->next;
yaolist->next=yao;
}
}
DrugPtr isdrugin(DrugPtr yaolist,char drug_id[]) {
DrugPtr p=yaolist;
while(p)
{
if(!strcmp(p->Drug_id,drug_id))
break;
else
p=p->next;
}
return p;
}
//更新结点
void drugmodify(DrugPtr &yaolist, DrugPtr yao)
{
int choice;
DrugPtr p=yaolist;
float t=0;//没有这句出现float point not loaded
while(*(int *)GetStdin(MENU41, "%d", &choice))
{
switch(choice)
{
case 1:
GetStdin("请输入药品的新名称:", "%s",yao->Drug_name);
printf("\n");
cputs("更新成功!请继续选择\n");
printf("\n");
break;
case 2:
GetStdin("请输入药品的新价格:", "%f", &yao->Drug_price);
printf("\n");
cputs("更新成功!请继续选择\n");
printf("\n");
break;
case 3:
GetStdin("请输入药品的修改数量:", "%d",&yao->amount);
printf("\n");
cputs("更新成功!请继续选择\n");
printf("\n");
break;
case 4:
GetStdin("请输入药品的新类型:", "%s",yao->Drug_type);
printf("\n");
cputs("更新成功!请继续选择\n");
printf("\n");
break;
case 5:
GetStdin("请输入药品的新备注:", "%s",yao->remark);
printf("\n");
cputs("更新成功!请继续选择\n");
printf("\n");
break;
case 0:
break;
}
}
}
//找到结点返回 update
void updatedrug(DrugPtr &yaolist)
{
char string[30];
DrugPtr yao;
while (strcmp((char *)GetStdin("请输入药品编号(按0结束):\n", "%s", string), "0"))
{
yao=isdrugin(yaolist,string);
if(yao)//判断药是否存在
drugmodify(yaolist,yao);
else
printf("没有这种药\n");
}
}
void deletedrug(DrugPtr &yaolist)
{
char string[30];
while (STRCMP(SECOND, string))
{
if (isdrugin(yaolist, string))
{
deletenode(yaolist, string);
}
else
printf("药品不存在!");
}
}
void deletenode(DrugPtr &yaolist,char drug_id[])
{
DrugPtr q,p;
q=yaolist;
p=q->next;
if(!strcmp(yaolist->Drug_id,drug_id))
{
yaolist=yaolist->next;
free(q);
}
else
{
while(p)
{
if(!strcmp(p->Drug_id,drug_id))
break;
q=q->next;
p=p->next;
}
q->next=p->next;
free(p);
}
printf("药品已删除!");
}
void read_to_list( DrugPtr &yaolist)
{
FILE *fp=fopen("E:/yao.txt","r");
if(!fp)
printf("error");
while( !feof(fp))
{
DrugPtr yao=(DrugPtr)malloc(sizeof(Drug));
yao->next=NULL;
fscanf(fp, "%s%s%f%s%s%d%s\n", yao->Drug_id,yao->Drug_name,&yao->Drug_price,yao->Drug_type,yao
->Drug_time,&yao->amount,yao->remark);
druginsert(yaolist,yao);
}
fclose(fp);
}
void save_to_file( DrugPtr yaolist)
{
DrugPtr p=yaolist;
FILE *fp=fopen("E:/yao.txt","w");
if(!fp)
printf("error");
while(p)
{
fprintf(fp,"%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
p->Drug_id, p->Drug_name, p->Drug_price,p->Drug_type,p->Drug_time,p->amount,p->remark);
p=p->next;
}
fclose(fp);
}
void drug_find_name(DrugPtr head, char *name)
{
DrugPtr cur,p;
p=head;
cur = head;
int i=0;
while(p)
{
if(!strcmp(p->Drug_name,name))
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(!strcmp(cur->Drug_name,name))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有名称为%s的数量为%d\n",name,i);
printf("\n");
}
else
{
printf("\n");
printf("没有找到该药名!\n");
printf("\n");
}
}
void drug_find_type_z(DrugPtr head)
{
DrugPtr cur,p;
cur = head;
p=head;
int i=0;
while(p)
{
if(!strcmp(p->Drug_type,"中药"))
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(!strcmp(cur->Drug_type, "中药"))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有中药的数量为%d\n",i);
printf("\n");
}
else
{
printf("\n");
printf("没有该类型的药!\n");
printf("\n");
}
}
void drug_find_type_zc(DrugPtr head)
{
DrugPtr cur,p;
cur = head;
p=head;
int i=0;
while(p)
{
if(!strcmp(p->Drug_type,"中成药"))
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(!strcmp(cur->Drug_type, "中成药"))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有中成药的数量为%d\n",i);
printf("\n");
}
else
{
printf("\n");
printf("没有该类型的药!\n");
printf("\n");
}
}
void drug_find_type_x(DrugPtr head)
{
DrugPtr cur,p;
cur = head;
p=head;
int i=0;
while(p)
{
if(!strcmp(p->Drug_type,"西药"))
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(!strcmp(cur->Drug_type, "西药"))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有西药的数量为%d\n",i);
printf("\n");
}
else
{
printf("\n");
printf("没有该类型的药!\n");
printf("\n");
}
}
void drug_find_price(DrugPtr head,float price)
{
DrugPtr cur,p;
cur = head;
int i=0;
p=head;
while(p)
{
if(p->Drug_price==price)
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(cur->Drug_price==price)
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有药品价格为%f的数量为%d\n",price,i);
printf("\n");
}
else
{
printf("\n");
printf("没有该价格的药品!\n");
printf("\n");
}
}
void drug_find_amout(DrugPtr head,int amout)
{
DrugPtr cur,p;
cur = head;
int i=0;
p=head;
while(p)
{
if(p->amount==amout)
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(cur->amount==amout)
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有药品库存量为%d的数量为%d\n",amout,i);
printf("\n");
}
else
{
printf("\n");
printf("没有库存量为%d的药品!\n",amout);
printf("\n");
}
}
void drug_find_time(DrugPtr head,char *time)
{
DrugPtr cur,p;
cur = head;
int i=0;
p=head;
while(p)
{
if(!(strcmp(p->Drug_time, time)))
break;
else
p=p->next;
}
if(p)
{
while(cur!=NULL)
{
if(!(strcmp(cur->Drug_time, time)))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name, cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
i++;
}
cur=cur->next;
}
printf("\n");
printf("所有药品入库时间为%s的数量为%d\n",time,i);
printf("\n");
}
else
{
printf("\n");
printf("没有找到入库时间为%s的药品!\n",time);
printf("\n");
}
}
void drug_find_id(DrugPtr head,char *id)
{
DrugPtr cur;
cur = head;
while(cur!=NULL)
{
if(!strcmp(cur->Drug_id,id))
{
printf("%-5s%-18s%-10.2f%-10s%-13s%-6d%-10s\n",
cur->Drug_id, cur->Drug_name,
cur->Drug_price,cur->Drug_type,cur->Drug_time,cur-
>amount,cur->remark);
printf("\n");
break;
}
else
cur=cur->next;
}
if(!cur)
{
printf("\n");
printf("没有找到该编号的药品!\n");
printf("\n");
}
}
void drug_type_choose(DrugPtr head)
{
int choice2;
while (*(int *)GetStdin(MENU5, "%d", &choice2)) {
switch(choice2)
{
case 1:
char id[30];
GetStdin(MENU50, "%s", id);
drug_find_id(head,id);
break;
case 2: //名称
char name[50];
GetStdin(MENU51, "%s", name);
drug_find_name(head,name);
break;
case 3: //类型
choose_type(head);
break;
case 4: //价格
float price;
GetStdin(MENU53, "%f", &price);
drug_find_price(head,price);
break;
case 5: //库存
int amount;
GetStdin(MENU54, "%d", &amount);
drug_find_amout(head,amount);
break;
case 6: //入库时间
char time[30];
GetStdin(MENU55, "%s", time);
drug_find_time(head,time);
break;
case 0:
break;
}
}
}
void choose_type(DrugPtr head)
{
int choice3;
while (*(int *)GetStdin(MENU52, "%d", &choice3)) {
switch(choice3)
{
case 1: //中药
printf("药库中的中药有:\n");
drug_find_type_z(head);
break;
case 2: //中成药
printf("药库中的中成药有:\n");
drug_find_type_zc(head);
break;
case 3: //西药
printf("药库中的西药有:\n");
drug_find_type_x(head);
break;
case 0: //返回查询菜单
break;
}
}
}