C语言 药品管理系统 源代码

C语言 药品管理系统 源代码
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;

}

}

}

相关主题
相关文档
最新文档