第一篇:C语言药房管理系统
#include
char name[20];
//药品名称 char number[50];
//药品编号 char price[50];
//单价 char inventory[50];
//库存数量 char brand[20];
//品牌
}
medicine[100];
//假设最大数为100.//定义全局变量num
int num;
int menu_select(){
char s[80];int a;/*定义整形变量*/ system(“cls”);printf(“tt-------------您好!您已进入药房管理系统-----------nn”);printf(“ttt1.输入药品信息n”);printf(“ttt2.查看药品信息n”);printf(“ttt3.修改药品信息n”);printf(“ttt4.按编号查找药品n”);printf(“ttt5.按价格排序 n”);printf(“ttt6.删除药品信息n”);printf(“ttt7.退出n”);printf(“tt-----------nn”);
do{
} printf(“Enter you choice(1~7):”);
scanf(“%s”,s);
a=atoi(s);
while(a<1 || a>7);
return a;}
int addmedicine(){
printf(“ttt--------------请输入您要保存的信息------------n”);printf(“ttt输入药品名称:n”);scanf(“%s”,medicine[num].name);printf(“ttt输入药品编号:n”);scanf(“%s”,medicine[num].number);printf(“ttt单价:n”);scanf(“%s”,medicine[num].price);
printf(“ttt品牌:n”);
} scanf(“%s”,medicine[num].brand);printf(“ttt库存数量 :n”);scanf(“%s”,medicine[num].inventory);num++;printf(“ttt是否继续添加?(Y/N):n”);if(getch()=='y' || getch()=='Y')
addmedicine();return(0);void modifybyname()
//按药品名称修改 {
char c;int i,mark=0;char name[20];printf(“ntt请输入要修改的药品名称:”);scanf(“%s”,name);if(num==0){ printf(“ntt文件中无相关药品”);printf(“ntt按任意键返回主菜单”);getch();mark++;return;} for(i=0;i if(strcmp(medicine[i].name,name)==0){ printf(“ntt以下是您要修改的药品信息”);printf(“ntt药品名称: %s”,medicine[i].name); printf(“ntt药品编号: %s”,medicine[i].number); printf(“ntt单价: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ntt库存数量: %s”,medicine[i].inventory); printf(“ntt是否修改(y/n)”); if(getch()=='y'){ printf(“nt----------------------请选择修改信息-------------------------”);printf(“nt 1-修改药品名称 ”);printf(“nt 2-修改药品编号 ”); printf(“nt 3-修改单价 ”); printf(“nt 4-修改品牌 ”); printf(“nt 5-修改库存数量 ”);printf(“nt------------”);printf(“nt请选择您所要的服务:”);scanf(“%s”,&c);switch(c){ case '1': printf(“nt请输入新药品名称: ”); scanf(“%s”,medicine[i].name);break; case'2':printf(“nt请输入新药品编号: %s”); scanf(“%s”,medicine[i].number);break; case'3':printf(“nt请输入新单价: ”); scanf(“%s”,medicine[i].price);break; case'4':printf(“nt请输入新品牌: ”); scanf(“%s”,medicine[i].brand);break; case'5':printf(“nt请输入新库存数量: ”); } } scanf(“%s”,medicine[i].inventory);break;} } if(mark==0){ printf(“ntt药品信息修改完毕”);printf(“nt是否继续修改?(Y/N):”);if(getch()=='y')modifybyname();return;} } void list(){ int i;system(“cls”);if(num!=0){ printf(“ttt----------已为您显示所有药品信息----------n”); for(i=0;i { printf(“ttt药品名称:%sn”,medicine[i].name);printf(“ttt药品编号:%sn”,medicine[i].number);printf(“ttt单价:%sn”,medicine[i].price); printf(“ntt品牌: %sn”,medicine[i].brand); } int searchbyname()printf(“ttt库存数量:%sn”,medicine[i].inventory); if(i+1 { system(“pause”); } } printf(“ttt------------------------------n”);} else printf(“ttt系统中无任何记录n”); printf(“ttt按任意键返回主菜单:n”); getch(); return;{ int mark=0;int i;printf(“ttt----------按药品名称查找----------n”);char name[20];printf(“ttt请输入药品名称:n”);scanf(“%s”,name);for(i=0;i if(strcmp(medicine[i].name,name)==0) { printf(“ttt-------以下是您查找的药品信息-------n”);printf(“ttt药品名称: %s”,medicine[i].name);printf(“ttt药品编号: %s”,medicine[i].number);printf(“ttt单价: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand);printf(“ttt库存数量:%sn”,medicine[i].inventory);printf(“ttt-----------------------n”); mark++; if((i+1) { printf(“ttt是否继续查找相同名称的药品信息:(y/n)n”); if(getch()=='y' || getch()=='Y') { continue; } else return(0); } else } } { printf(“ttt请按任意键返回主菜单”); getch(); return(0); } } if(mark == 0){ } return 0; printf(“ttt没有您要查找的药品记录n”); printf(“ttt请按任意键返回主菜单n”); getch(); return(0);int searchbynumber(){ int mark=0;int i;printf(“ttt---------------按药品编号查找--------------n”);char number[10];printf(“ttt请输入药品编号:n”);scanf(“%s”,number);for(i=0;i printf(“ttt---------------以下是您查找的药品信息---------------n”); printf(“ttt药品名称: %s”,medicine[i].name); printf(“ttt药品编号: %s”,medicine[i].number); printf(“ttt单价: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt库存数量:%sn”,medicine[i].inventory); } void deletebynumber(){ int i,j;int deletemark=0;char number[20];printf(“ttt请输入要删除药品编号:n”);scanf(“%s”,number);if(num==0){ printf(“ttt对不起,系统中无任何记录n”); printf(“ttt------------------n”); printf(“ttt请按任意键返回主菜单n”); mark++; getch(); return(0);} } if(mark==0){ printf(“ttt没有改药品的信息n”);printf(“ttt请按任意键返回主菜单n”);getch();return(0);} return(0); printf(“ttt请按任意键返回主菜单n”); getch();return;} for(i=0;i if(strcmp(medicine[i].number,number)==0) { printf(“ttt以下是您要删除的用户记录:n”);printf(“ttt药品名称: %s”,medicine[i].name);printf(“ttt药品编号: %s”,medicine[i].number);printf(“ttt单价: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt库存数量:%sn”,medicine[i].inventory); } printf(“ttt是否删除?(y/n)”); if(getch()=='y' || getch()=='Y') { } else return; for(j=i;j medicine[j]=medicine[j+1]; num--; deletemark++; printf(“ttt删除成功”); printf(“ttt是否继续删除?(y/n)”); if(getch()=='y' || getch()=='Y') deletebynumber(); return; } continue;if(deletemark==0){ printf(“ttt没有该药品的记录”); printf(“ttt是否继续删除?(y/n)”); if(getch()=='y' || getch()=='Y') deletebynumber(); return; } } void deletebyname(){ int a=0;int findmark=0;int j;int deletemark=0;int i;char name[20];printf(“ttt请输入要删除药品名称:n”);scanf(“%s”,name);for(i=a;i printf(“ttt以下是您要删除的药品信息:”); findmark++; printf(“ttt________________________________”); printf(“ttt药品名称: %s”,medicine[i].name);return; printf(“ttt药品编号: %s”,medicine[i].number); printf(“ttt单价: %s”,medicine[i].price); printf(“ntt品牌: %s”,medicine[i].brand); printf(“ttt库存数量:%sn”,medicine[i].inventory); printf(“ttt________________________________”); printf(“ttt是否删除?(y/n)”); if(getch()=='y' || getch()== 'Y') { for(j=i;j medicine[j]=medicine[j+1]; num--; deletemark++; printf(“ttt删除成功”); if((i+1) { printf(“ttt是否继续删除相同名称的药品信息?(y/n)”); if(getch()=='y') { a=i; continue; } } printf(“ttt是否继续删除?(y/n)”); if(getch()=='y') deletebyname(); return; } if((i+1) { printf(“ttt是否继续删除相同名称的药品信息?(y/n)”); if(getch()=='y' || getch()== 'Y') { a=i; continue; } } } else continue;} if((deletemark==0)&&(findmark==0)){ printf(“ttt没有该药品的记录”);printf(“ttt是否继续删除?(y/n)”);if(getch()=='y' || getch()== 'Y') deletebynumber();return;} else if(findmark!=0){ printf(“ttt没有重名信息”);printf(“ttt没有该药品的记录”);printf(“ttt是否继续删除?(y/n)”);if(getch()=='y' || getch()== 'Y') deletebynumber();return;} } int dele() //删除记录 { } char choic;printf(“ttt1-按药品编号删除 2-按药品名称删除”);printf(“ttt请选择:”);choic=getch();switch(choic){ case '1':deletebynumber();break;case '2':deletebyname();break;} return(0);int sortbyprice() //按药品单价进行排序 { int i,j;struct medicine tmp;for(i=1;i tmp=medicine[i]; j=i-1; do { medicine[j+1]=medicine[j]; j--; }while((strcmp(tmp.price,medicine[j].price)<0&&j>=0)); medicine[j+1]=tmp;} } printf(“ttt排序成功,是否显示?(y/n)”); } if(getch()=='y') list();return(0);int main(){ printf(“tt--------------------------n”); printf(“tt---------Welcome to management system----------n”); printf(“tt----------Made By 蒋俊杰 李梁伟 郑奈春-------------n”); printf(“tt--------------------------n”); printf(“请按任意键进入主菜单:)n”); getch(); int selectnum; while(1) { selectnum = menu_select();switch(selectnum){ case 1: { } case 2: { addmedicine(); //添加药品信息 break; list(); break; } case 3: { modifybyname(); //修改药品信息 break; } case 4: { searchbynumber(); //按药品编号查找 break; } case 5: { sortbyprice();//按药品单价排序 break; } case 6: { dele(); break; } case 7: { printf(“BYE BYE!n”);system(“pause”);getchar(); exit(0);} } } getchar(); return 0;} 医院药房管理系统 1.需求分析 1.1概述 药品管理主要是药品管理员对药品库存进行的相关管理。在该管理系统中,药品管理员主要需要对药品的库存信息进行记录,查询和统计功能。药品管理是医院日常管理事务中的重要内容,药品管理过程的准确性和高效性至关重要。利用计算机高效,准确的特点能够很好的满足医院药品管理过程的需求,在保证管理过程准确性的基础上,最大程度地提高管理效率。目前,大多数医院都已采用医院管理系统进行医院药品管理业务的计算机管理。医院药品管理系统主要是为医院药品管理人员提供药品信息的记录,查询和统计功能,为管理人员提供重要的信息参考。通过医院药品管理系统,管理人员可以对医院药品的入库,出库以及库存信息进行管理,系统提供方便的药品管理信息的查询和统计功能,能够满足医院药品管理人员的基本管理需求。1.2 可行性分析 本次课程设计主要是为医院药品库存管理系统设计合理的数据库,基于所研究的课题是我们日常生活中比较常接触的,所以从以下三个方面对其可行性进行分析: 经济可行性:本次课程设计主要在自己的电脑上开发,而且从老师给的初始条件结合平时自己对这个业务的理解,而且我们获取需求的时候有很多人帮 助。所以在完成这次课程设计的时候基本上没有什么经济开销。所以就经济可行性而言,我就的我也有能力独立完成这次课程设计。技术可行性:本次课程设计的核心问题是要为药品管理系统设计一个理的数据库。就我学习的数据库课程中,重点讲述的就是如何设计和实现一个合理的数据库,而且我们在数据库课程学习的过程中做过实现一个简单的数据库的试验,因此这方面有一定的基础。这次课程设计主要添加的内容是需要我们自己去进行需求分析,自己从客户那里获取相应的功能需求。这一方面的知识我在软件工程和软件需求中都有学习,所以是可行的。另一方面,本次课程设计可以使用 1 比较简单的jsp为数据库设计相 应的前台界面。所以就技术而言,可以完成这次课程设计.操作可行性:本次课程设计所做的是药品管理系统,主要完成的功能是为医院药品管理人员提供药品信息的记录,查询和统计功能,为管理人员提供重要的信息参考。鉴于药品管理员对药品信息管理已经很熟悉,而且本次课程设计出的数据库的操作非常简单,所以操作可行性也没有什么问题.综上所述,我觉得我有相应的技术和能力独立完成本次课程设计,而且我所设计出的数据库功能齐全,简单明了,方便客户使用。所以我认为本次 课程设计是可行的。1.3用户需求 本次课程设计的主要任务是为药品管理系统设计一个合理的数据库,在实现该系统的过程中,必须满足该系统的基本目标:医院药品管理人员提供药品信息的记录,查询和统计功能,为管理人员提供重要的信息参考。我所设计的药品管理数据库正是基于这个目标而开发的。在实现该系统的同时,也相应的锻炼了我们的动手能力,让我们有机会将课本上的知识运用到实际中来,加深了我们对知识的理解,我认为这也是该系统的目标之一。该系统的主要任务是为了完成医院药品管理人员提供药品信息的记录,查询和统计功能,为管理人员提供重要的信息参考。但是基于该系统的功能比较简单,所以可以在此基础上相应的增加一些相关的功能:当管理员发现某类药品的库存数量低于某个标准时,管理员要联系供应商购买相应的药品来补充该药品的库存;当医院的某个部门缺少某类药品时,需向管理员申请提取相应的药品时,管理员可以根据该药品的库存情况为该部门分配相应数量的药品。2.开发和运行环境 2.1 网络逻辑结构 本次课程设计采用B/S模式来实现,B/S模式是三层C/S模式的一种实现方式,其结构为:浏览器/WEB服务器/数据库服务器。其中表示层(浏览器)负责处理用户的输入和向客户输出。功能层(WEB服务器)负责建立数据库的连接,2 根据用户的请求生成访问数据库的SQL语句,并把结果返回给客户端。数据层(数据库服务器)负责实际的数据库存储和检索,响应功能层的数据处理请求,并将结果返回给功能层。在B/S模式中,用户要运行某个应用程序时只需在浏览器上键入相应的网址。调用WEB服务器上的应用程序并对数据库进行操作完成数据处理工作,最后将结果通过浏览器返回给用户。供 应商 药品管理员 药品管理数WEB服务器 据库(mysql)(Tomcat) 医生 所以用户的操作非常简单,而且客户端要求的配置也不高,这2.2 软件支撑环境及开发工具 本次课程是我选择这中模式的主要原因。设计主要是设计一个合理的数据库,而我的电脑上安装了Mysql,所以可以在自己的电脑上完成本次课程设计,运行环境为WindowsXP,而且和数据库的联系也比较简单,方便.考虑使用JSP来完成前台的设计。所以涉及到的工具为:Mysql, Eclipse,WINDOWSXP.3.概念结构设计 3 3.1总体DFD 药品管理系统中的主要功能是在药品入库和药品出库时,方便药品管理员对药品入库信息,药品出库信息和药品库存信息进行查询和统计的功能。所以该系统主要是对药品入库管理和药品出库管理进行设计的,所以设计基于药品入库管理和药品出库管理的数据流图如下: 药品入库单 供应 供应商 药品库存信息 提取 部门 药品出库单 3.2功能结构 本次课程设计主要是针对医院药品管理人员设计的,主要是为了方便药品管理人员在进行购买药品时药品入库,和提出药品时药品出库时对药品进行记录查询和统计。所以本次课程设计主要分成4个大的功能模块:用户管理,药品的入库,药品出库,库存清点: 4 医院药品管理系统 用药药库户品品存管供提清理 应 取 点 3.2.1用户管理 该课程设计中主要有2类用户,一类是系统管理员,一类是药品仓库管理员。其中由于该数据库主要针对药品管理员而设计,所以在这里主要讲述药品管理员的功能需求:药品管理员主要是负责药品的入库和药品的出库管理和库存的清点工作。 管理员 用户管理 供应商 医生 5 3.2.2供应药品 供应药品主要是供应商为药品仓库提供药品补给,其中主要要求药品管理员对供应清单进行记录,而后药品入库后,会对库存的药品产生一定的影响,药品管理员需对相应的变化对药品记录做相应的改变 填写供应单 保存供应单 供应药品 编辑入库药品信息 药品入库 3.2.3提取药品 提取药品主要是某个部门申请提取药品,主要要求药品管理员对提取单做相应的修改和记录。而后药品出库后,会对库存的药品产生一定的影响,药品管理员需对相应的变化对药品记录做相应的改变 填写提取单 保存提取单 提取药品 编辑出库药品信息 药品出库 6 3.2.4库存清点功能 该功能主要是针对药品的现有库存信息进行查询和统计功能,在每次进行药品入库和药品出库后药品的库存信息将有所改变,所以需要对库存的药品进行清点功能,提醒药品管理员进行药品入库或其他操作。库存信息查询 库存信息浏览 库存清点 出库信息查询 入库信息查询 3.3 局部视图设计 3.3.1数据字典 数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果,并且数据字典的内容将在数据库的设计过程中不断的修改、充实和完善。数据字典有多种表示方法,在这里,我使用的书上介绍的,一般包含:数据项,数据结构,数据流,这几个部分。库存药品的数据项描述: 数据项名 数据项含义 类型 长度 约束 药品编号 药品的编号 int 2 每个药品有一个唯一的编号 仓库编号 仓库的编号 int 2 必须与某个仓库编号一至 药品名称 药品的名称 varchar 20 必须是炒菜,汤,煲类之一 药品种类 药品的种类 varchar 10 药品属于中药或西药之一 7 单价 药品的单价 int 5 必须大于0 生产日期 输入必须符合日期的格式 药品的生产日datetime 期 过期日期 药品的过期日datetime 过期日期必须大于生产日期 期 库存数量 药品的数量 int 10 必须大于0 供货商数据项描述: 数据项名 数据项含义 类型 长度 约束 int 2 每个供货商有一个唯供货商编号 供货商编号 一的编号 名称 名称 VARCHAR 20 电话 供货商电话 bigint 8 地址 供货商地址 VARCHAR 20 管理员的数据项描述: 数据项名 数据项含义 类型 长度 备注 int 2 每个管理员有唯一一个管理员编号 管理员的编编号 号 VARCHAR 20 姓名 管理员的性VARCHAR 10 性别必须是男或女 性别 别 年龄 厨师的年龄 int 2 0到60之间,60岁退休 仓库编号 仓库的编号 int 2 必须与某个仓库编号一至 药品仓库的数据项描述: 数据项名 数据项含义 类型 长度 备注 8 仓库编号 仓库的编号 int 2 每个仓库有唯一一个编号 地址 仓库的地址 VARCHAR 20 地址不能为空 电话 仓库的电话 BIGINT 8 电话号码不能为空 面积 仓库的大小 int 4 必须大于0 部门数据项描述: 数据项名 数据项含义 类型 长度 约束 部门编号 部门编号 int 2 每个部门有一个唯一的编号 名称 名称 VARCHAR 20 电话 供货商电话 bigint 8 3.3.2 实体-联系图 根据上面的功能需求分析过程可以看出,可以将本系统划分成3个大的功能模块,所以可以将本系统画出3个局部E—R图,如下所示: 由于本次课程设计中没有涉及到前台的操作,所以这里画出药品管理员这个实体和该实体的属性: 管理员编性别 名称 年龄 号 药品管理员 供应药品子系统的分E—R图: 9 n 药品 库存 供应商编号 1 名称 供 n 货 1 药品仓库 供应 地址 商 m 电话 管理 1 药品管理员 供应标识 时间 供应量 提取药品子系统的分E—R图: 10 药品管理员 n 提取标识 提取时间 库存 1 提取量 1 药品仓库 提取 1 部门编号 n 部门名称 管理 部门 m 电话 药品管理员 11 药品管理系统E—R图: 供应 标识 提取标识 时间 时间 提取量 供应量 m m 供应 药品 提取 n n n 库存 供应商 部门 1 药品仓库 1 管理 n 药品管理员 4.逻辑结构设计 本次课程设计中的逻辑设计采用关系模型来设计,根据概念设计中的E-R图,将图中的实体和实体间的关系转化成关系模式,在将E-R图转化成关系模型的时候,由于在我所设计的E-R图中存在实体间的联系,根据课本中提到的情况: 药品管理员(管理员编号,名称,性别,年龄,仓库编号)12 药品仓库(仓库编号,地址,电话,面积)库存药品(药品编号,仓库编号,药品名称,药品种类,库存数量,单价,生产日期,过期日期) 供应商(供应商编号,名称,地址,电话) 供应(供应标识,供应商编号,药品编号,仓库编号,时间,供应量,单价)13 部门(部门编号,部门名称,电话) 提取(提取标识,部门编号,药品编号,仓库编号,时间,提取量) 5.应用系统界面设计 在把数据库设计完成之后,转而投入了实现了前台界面与后台数据库的交互,我此次用的是JSP实现的一个小型界面,这正是B/S模式的体现,通过程序与数据库连接,可以对数据库里面的信息进行修改,删除,查看等操作。1.药房管理员工作流程如下图: 14 输入相应的编号,系统会与数据库取得联系,判断该用户是哪类用户,若输入10则表示是药房管理员: 选择要进行的操作,按提交,这里有三种操作供选择,这里选择查看库存信息: 2.供应商的工作流程如下: 输入编号20表示是供应商,进入界面: 输入响应信息后,显示此次的供应单并计算总价: 3.医生提取药品的工作流程: 输入编号30表示是医生,进入界面: 输入相应信息后,点显示此次的 提取单并计算价钱: 6.经验总结 在这一周的课程设计实习过程中,我的收获良多。在一周的时间中,其实画在建立数据库这个环节上的时间不是很多。在学习数据库这门课程的时候,我记得书上有讲过:“数据库设计的特点之一是三分技术,七分管理,十二分基础数据”。在这一周的课程设计中我深有体会,在开始的需求分析和基础数据的获取阶段我差不多花了3天的时间来收集整理材料,由于我对于医院的药品管理这个领域比较陌生,所以花了比较长的时间来了解这个行业的情况和信息。当收集的资料差不多之后,接下来的任务就比较轻松:因为在需求分析阶段了解可以将整个系统中划分成几个实体,每个实体有什么属性,以及实体和实体之间有什么联系。所以在接下来的概念设计中的E—R图的设计就比较简单,而且在画E—R图的时候就可以大致知道整个系统需要划分成几个基本表来实现,所以逻辑设计阶段也比较轻松,至于物理阶段的设计,使用的是MYSQL数据库,是出于操作简单,运行速度快的特点选用的。在把数据库设计完成之后,转而投入了实现了前台界面与后台数据库的交互,在这里我使用的是JSP语言,起初对JDBC只有概念上的认识,通过这次设计,我对 JDBC 中的ResultSet,Statement,PreparedStatement等有了很大认识,主要是在设计的时候对出错原因进行了分析,使得自己对JDBC的理解更加清晰。在本次课程设计过程中,我最大的体会就是了解了一个具体的数据库设计的过程,以及每个过程之间的紧密联系和他们不同的重要性。就像前面提到的一样,在书上看到“数据库设计的特点之一是三分技术,七分管理,十二分基础数据”这句话的时候,并没有引起我什么注意,可是在这次课程设计过程中,我深深的体会到其实要建立数据库中的几个基本表其实很容易,难的是从我所不熟悉的现实领域收集提取建立数据库所需要的基本数据。在这次课程设计中,我了解 17 到将书本上的知识运用到实际中的时候,会使我对原有的知识有更深层次的理解以及掌握。而且通过这次课程设计,我掌握了为某个具体系统建立数据库的流程和方法,肯定会对我将后的学习和实践有很大的帮助。7.参考文献 [1]王珊 编著 数据库系统简明教程,高等教育出版社 [2]王智学 等编著 ROSE对象建摸方法与技术,机械工业出版社 18 药房管理: 药房划价: 在药房管理内找到 药房划价 窗口点击进入,进入后,需选择 药房名称; 进行 药品划价 前,需要进行处方类型选择; 在药品名后的窗口内输入需划价的药品名称首拼,进行划价:(如:阿莫西林颗粒的划价;只需输入: a m x l ,点击空格键查询,在查询出的药品信息中选择相应的药品的 规格,对于农合报销的药品,必须查看药品是否 保内,如果药品是保外的,需协同药房或库房管理人员进行调解,看药品是的农合编码是否能对成保内的,选择中后点击回车键选择,在弹出的药品划价信息中,操作员只需要输入其处方信息中需开的 数量。核对一下 价格,若;价格有误,可在此修改价格,注意:此窗口所调的价格为临时调价。若需将价格彻底调为最新的价格,需到库房管理内找到成本调价与零售调价窗口,进行调价方才将价格彻底调过来。核对信息完毕后看,点击回车键确定划价。 在药品划价的过程中,操作员可将药品的用量、频次、用法编辑在药品信息内。 在所有的药品划价完毕后,点击 保存单据。系统将自动生成一个 处方号; 药房操作员需将处方号编辑于纸张处方单上明显的地方,方便收费人员能再第一时间查询到已划价的药品信息。 划价单查询; 找到划价单查询窗口进入 , 选择药房位置,常用时间段、查询条件的设置。 药品划价单查询共分为 已划价未收费 的处方单据与 已划价已收费 的处方单据信息。若需 3 要查看已经收费的处方,须将已经收费的标准勾上。点击查询。 ( 注:已划价未收费的单据可作废或修改药品信息,增加药品与删除药品。)增加药品: 门诊发药与住院发药: 在药房管理内找到门或住院诊发药窗口点击进入,在处方号、姓名窗口内,输入患者的姓名或处方号,点击 查询。 选择需发药的患者药品信息。点击发药按钮。系统自动药发出去,相应的药品库存将自动减少。 注:住院发药流程与门诊一致不同的是住院发药可输入患者的住院号: 门诊退药: 步骤:药房管理内找到门诊退药窗口,点击进入,在处方号后的小窗口内输入 处方号(输入的处方只要求输入后四位即可)。点击空格键查找,操作员也可直接点击空格键,查询出需退药的患者姓名。选择后点击回车键,点击 查询 按钮。 确定与处方信息一致后。点击确定退药按钮,系统会自动将药品退回药房。(注:门诊退药为全退。) 住院退药: 步骤:药房管理内找到住院退药窗口,点击进入,在处方号后的小窗口内输入 住院号或者处方号(输入的处方只要求输入后四位即可)。点击空格键查找,操作员也可直接点击空格键,查询出需退药的患者姓名。选择后点击回车键 点击查询按钮。 在查询出药品信息后,若只需退其中一种药品,可点击药品名称,在自动弹出的窗口内编辑需退的药品 数量,点击回车键保存退药信息 系统根据编辑所退的数量自动生成退药的数量,在退要信息窗口内会自动生成选重的药品信息。,退药信息编辑完毕后;点击确定退药按钮。 若需要将整张处的药品信息全退的,可点击全退按钮。再点击确定退药按钮。 注:住院退药可全退,可单独退某一种药品信息。 源程序: # include #define MAX 60 //下列字符数组的大小 struct Date{//日期 char year[MAX];//年 char month[MAX];//月 char day[MAX];//日 };struct Goods{//药品信息 char name[MAX];//药品名称 char price[MAX];//药品价格 char number[MAX];//药品数量 char cost[MAX];//药品总价 char kind[MAX];//药品的种类 Date indate;//入库日期 Date xiaoqi;//到期时间 Goods * next;//下一个结点 }; class Cangkuguanli { //类定义与实现 private: int length;//客户数量 Goods * head;//列表的头结点 Goods * current;//当前结点 public: Cangkuguanli()//构造函数 { head=new Goods;//创建头结点 current=head; current->next=NULL; length=0;//长度为0 } void Creatlist()//创建新的列表 { char g='Y'; int s=0; length=0;//初始长度为0; current=head; do { Goods * temp=new Goods;//构建新结点信息 length++;//每加一个结点 链表长度增1 temp->next=NULL; cout<<“ 请输入药品名称: ”; cin>>temp->name; cout<<“ 请输入单价 : ”; cin>>temp->price; cout<<“ 请输入药品数量: ”; cin>>temp->number; cout<<“ 请输入总费用 : ”; cin>>temp->cost; cout<<“ 请输入日期(**** ** **): ”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“ 请输入药品有效期(**** ** **):”; cin>>temp->xiaoqi.year>>temp->xiaoqi.month>>temp->xiaoqi.day; cout<<“ 请输入药品种类: ”; cin>>temp->kind; if(head==NULL){head=temp;current=temp;} //head头指针,current尾指针 else {current->next=temp,current=temp;} do{ cout<<“ next ?(Y N)”;//是否继续存入新产品 cin>>g; if(g!='Y'&&g!='N') { cout<<“n error!!n ”; } }while(g!='Y'&&g!='N'); }while(g=='Y');//判断是否继续插入新结点 } void Open()//打开一个数据文件,并建立链表关联 和文件中的记录对应 { char fname[20];//文件名称 cout<<“ input the name of the file n”; cin>>fname;//输入要打开的文件名 ifstream infile(fname);//创建输入文件流 infile>>length; cout<<“n length is: ”< //if(length==0)cout<<“ 数据为空n”; for(int i=0;i { Goods * t=new Goods; t->next=NULL; infile>>t->name>>t->price>>t->number>>t->cost>>t->kind>> t->indate.year>>t->indate.month>>t->indate.day; if(head==NULL){head=t;current=t;}//跟上面的链表创建相似 else {current->next=t,current=t;} } infile.close();//关闭文件流 }//open void Save()//保存链表信息到文件 { if(length==0) { cout<<“ 列表为空 不需存盘 n”; return; } char fname[20];//文件名称 cout<<“ input the name of the file you want to put data in n”; cin>>fname; ofstream outfile(fname);//创建输出文件流 Goods * temp=head->next; outfile< while(temp!=NULL)//把所有结点写入到文件fname { outfile< << “ ”< //写入每个结点信息 temp=temp->next; } outfile.close();//关闭文件流 } void printinfor(Goods * current)//输出一个结点的信息到字符界面 { if(current==NULL) { cout<<“n元素为空!!n ”;return; } cout.fill(' ');cout< cout.width(8); cout.width(8);cout< cout< cout.width(10);cout< void Show()//输出所有结点信息到字符界面 { current=head->next;if(current==NULL){ cout<<“列表为空 n”;return;} cout.fill(' ');cout.width(2);cout<<“名称”; cout.width(8);cout<<“价格”;cout.width(8);cout<<“数量”;cout.width(8);cout<<“总费用”;cout.width(10);cout<<“药品的种类”;cout.width(15);cout<<“购进时间”;cout.width(15);cout<<“有效期”;cout< //循环输出所有结点 printinfor(current); current=current->next;} }//show Goods *Searchindate(Date t){ //按购入日期搜索 返回结点指针temp //结构体t含有t.year t.month t.day三个信息块 Date d;bool f=false;Goods * temp;current=head->next; while(current!=NULL) { d=current->indate; if(!strcmp(d.year,t.year)&&!strcmp(d.month,t.month)&&!strcmp(d.day,t.day)) { temp=current; f=true; break; } current=current->next; } if(f==false) { cout<<“n 没有满足要求的信息 n”; return NULL; } return temp;} void Queryindate()//按入库日期查询 { Date t;cout<<“ input the date(**** ** **): ”;cin>>t.year>>t.month>>t.day; printinfor(Searchindate(t));}//Queryindate()Goods * Searchname(char r[])//搜索药品名 返回结点指针temp { Goods * temp; current=head->next;bool f=false; while(current!=NULL) { if(strcmp(current->name,r)==0) { temp=current; f=true; break; } current=current->next; } if(f==false) { cout<<“n 商品名为 : ”< return NULL; } return temp;} void Queryname()//按药品名查询 { char r[MAX];cout<<“ input the name: ”;cin>>r;printinfor(Searchname(r));} void Query()//查询函数 一个次级菜单 { char m;do{ cout<<“ ********************************************************** ”< cout<<“******* 按入库的时间查询 ***********”< cout<<“******* 按药品的名称查询 ***********”< cout<<“******* ***********”< case 'a': Queryindate();break;case 'b': Queryname();break; case 'c': return;default: cout<<“error!”;} }while(m!='h');}//Query void Removebynumber()//按总量删除某个结点 { char t[MAX];//需要删除的总量值 bool f=false;//表示是否找到满足要求的结点 Goods * temp;//指向找到的结点,并删除 cout<<“ 请输入药品的数量: ”; cin>>t; current=head; while(current->next!=NULL) { if(strcmp(current->next->number,t)==0)//判断是否满足条件 { temp=current->next; current->next=temp->next; length--;//没删除一个结点,链表长度减1 f=true; delete temp;//释放结点 cout<<“已删除此药品n”; //break; 此处屏蔽break,也就是说找到第一个满足条件的结点,并不退出循环,而是继续删除 } else{ current=current->next; } } if(f==false)//false没有改动,表示没有满足条件的结点 { cout<<“此药品不存在 ,无须删除 n”; } }//Removebynumber void Removebyname()//按名称删除某个结点 { char t[20]; bool f=false;; Goods * temp; cout<<“ 请输入药品的名称:”; cin>>t; current=head; while(current->next!=NULL) { if(strcmp(current->next->name,t)==0) { temp=current->next; current->next=temp->next; length--; f=true; delete temp;cout<<“已删除此药品n”;//break;此处屏蔽break,也就是说找到第一个满足条件的结点,并不退出循环,而是继 续删除 } else{ current=current->next; } } if(f==false) { cout<<“此药品不存在 ,无须删除 n”; } }//Removebyname void Removebyindate()//按购进时间删除某个结点 { Date t,d; bool f=false; Goods * temp; cout<<“ 请输入查找药品的日期: ”; cin>>t.year>>t.month>>t.day; current=head; while(current->next!=NULL) { d=current->next->indate; if(d.year==t.year&&d.month==t.month&&d.day==t.day) { temp=current->next; current->next=temp->next; length--; f=true; delete temp;cout<<“已删除此药品n”; } else{ current=current->next; } } if(f==false) { cout<<“此元素不存在 ,无须删除 n”; } }//Removebyindate void Remove()//删除函数 { char g='Y'; do{ cout<<“ ********************************************************** ”< ***********”< ***********”< ***********”< ***********”< case 'a': Removebynumber();break;case 'b': Removebyname();break;case 'c': Removebyindate();break;case 'd': return;default: cout<<“error!”;} } while(g!='d');} void Add(){ Goods * temp;current=head;while(current->next!=NULL)//找到尾指针 { current=current->next;} temp=new Goods;temp->next=NULL;length++;//链表长加1 cout<<“ 请输入药品名称: ”; cin>>temp->name; cout<<“ 请输入单价 : ”; cin>>temp->price; cout<<“ 请输入药品数量 : ”; cin>>temp->number; cout<<“ 请输入总费用 : ”; cin>>temp->cost; cout<<“ 请输入入购日期(**** ** **)”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“请输入有效期(**** ** **)”; cin>>temp->xiaoqi.year>>temp->xiaoqi.month>>temp->xiaoqi.day; cout<<“ 请输入药品的种类:”< cin>>temp->kind; current->next=temp;//这时current指向尾指针,将要插入的结点接到current后面 current=temp;}//add void Modify(){//通过药品名找到要修改的数据项 char n[MAX];cout<<“请输入您要修改的药品名:”< Goods * temp=Searchname(n);//按商品名查找 cout<<“ 请输入单价:”; cin>>temp->price; cout<<“ 请输入药品的总费用:n”; cin>>temp->cost; cout<<“ 请输入日期(**** ** **):n”; cin>>temp->indate.year>>temp->indate.month>>temp->indate.day; cout<<“ 请输入药品的数量:n”; cin>>temp->number; cout<<“ 请输入药品的种类:n”; cin>>temp->kind;} void operation(){ char g='Y';do{ cout<<“t”;cout.fill('*');cout.width(21);cout<<'*';cout<<“医院药房管理系统”;cout.fill('*');cout.width(19);cout<<'*'; cout<<“n”; cout<<“t********************************************************n”; cout<<“t MWDICINE STORE MANAGEMENT SYSTERMn”; cout<<“t********************************************************n”;cout<<“t && && &&&&&&&&&&&&&&& cout<<”t && && &&&&&&&&&&&&&&& n“;n”; cout<<“t && && &&& n”; cout<<“t && && &&& n”; cout<<“t && && &&&&&&&&&&&&&&& n”; cout<<“t && && &&&&&&&&&&&&&&& n”; cout<<“t &&& &&& n”; cout<<“t &&& &&& n”; cout<<“t &&& &&& n”; cout<<“t &&& 退出 &&& n”; cout<<“t********************************************************n”; cout<<“t********************************************************n”;cout<<“t”;cout.fill('*');cout.width(18);cout<<'*';cout<<“医院药房管理系统”;cout.fill('*');cout.width(22);cout<<'*';cout< cin>>g;switch(g){ case 'C': Creatlist();break;case 'A': Add();break;case 'M': Modify();break;case 'D': Show();break;case 'Q': Query();break;case 'R': Remove();break;case 'O': Open();break;case 'S': Save();break;case 'N': system(“cls”);break;case 'E': return;default: cout<<“ error! input the right character!!!n”;}//switch }while(g!='E');}//operation };//Cangkuguanli int main(){ Cangkuguanli A; A.operation();return 0;} #include “stdio.h” #include “string.h” #define N 20 struct mem { char name[20]; char tel[20]; char wu[20]; char dz[20];}mem[N];void sorttel(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){ printf(“不能打开文件n”);} for(i=0;i for(j=0;j if(strcmp(mem[j+1].tel,mem[j].tel)<0) { temp=mem[j]; mem[j]=mem[j+1]; mem[j+1]=temp; } for(i=0;i void sortname(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c: elephone.txt”,“rb”))==NULL){ printf(“不能打开文件n”);} for(i=0;i for(j=i+1;j if(strcmp(mem[j].name,mem[i].name)<0) { temp=mem[i]; mem[i]=mem[j]; mem[j]=temp; } for(i=0;i void sor(){int k; do{printf(“--------------------排序菜单-------------------n”); printf(“------------------------n”); printf(“ 1:按号码排序n”); printf(“ 2:按姓名排序n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-2选择功能n”); scanf(“%d”,&k);getchar(); switch(k) { case 1:sorttel(mem);break; case 2:sortname(mem);break; case 0:return; } }while(1);} void add(){ char name[10];char tel[10]; char wu[10]; char dz[10];FILE *fp;if((fp=fopen(“c: elephone.txt”,“a”))==NULL){ printf(“不能打开文件n”); exit(0);} printf(“请输入姓名”); gets(name); printf(“请输入电话号码”); gets(tel); printf(“请输入工作单位”); gets(wu); printf(“请输入地址”); gets(dz);printf(“n”); fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz); fclose(fp);} void del(){ FILE *fp; int i=0,n; char name[10]; printf(“请输入删除名字”); gets(name); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)!=0)i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} for(n=0;n fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“ 姓名 电话号码 工作单位 地址n”); if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) {fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;} fclose(fp); n=i; for(i=0;i printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10]; printf(“请输入要修改的姓名”);gets(name);printf(“请输入修改后的姓名”);gets(nn);printf(“请输入修改后的电话号码”);gets(nt);printf(“请输入修改后的工作单位”);gets(nwu);printf(“请输入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c: elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)==0) {strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);} i++; } fclose(fp);if((fp=fopen(“c: elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} n=i; for(i=0;i fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); fclose(fp);} void main(){ int choose; while(1) { printf(“--------------------电话簿管理系统--------------------n”); printf(“------------------------n”); printf(“ 1:添加一个新号码n”); printf(“ 2:删除一个号码n”); printf(“ 3:显示所有保存的号码n”); printf(“ 4:修改号码n”); printf(“ 5:排序n”); printf(“ 6:查询n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-6选择功能n”); scanf(“%d”,&choose);getchar(); if(choose!=0) switch(choose) { case 1:add();break; case 2:del();break; case 3:dis();break; case 4:mod();break; case 5:sor();break; case 6:/*que();break*/; } else exit(0); } }第二篇:医院药房管理系统
第三篇:药房管理:
第四篇:源程序(医院药房药品管理系统C++)
保存文件 药品查询
第五篇:c语言 电话簿管理系统