当前位置:文档之家› C语言 药品管理系统 源代码

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

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <conio.h>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;elsep=p->next;}return p;}//更新结点void drugmodify(DrugPtr &yaolist, DrugPtr yao){int choice;DrugPtr p=yaolist;float t=0;//没有这句出现float point not loadedwhile(*(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;}}}//找到结点返回 updatevoid 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);elseprintf("没有这种药\n");}}void deletedrug(DrugPtr &yaolist){char string[30];while (STRCMP(SECOND, string)){if (isdrugin(yaolist, string)){deletenode(yaolist, string);}elseprintf("药品不存在!");}}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;elsep=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;elsep=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;elsep=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;elsep=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;elsep=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;elsep=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;elsep=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;}elsecur=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;}}}。

相关主题