电子医嘱录入系统.docx
- 文档编号:30104370
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:71
- 大小:818.75KB
电子医嘱录入系统.docx
《电子医嘱录入系统.docx》由会员分享,可在线阅读,更多相关《电子医嘱录入系统.docx(71页珍藏版)》请在冰豆网上搜索。
电子医嘱录入系统
课程设计报告
题目电子医嘱录入系统
系别
年级专业
班级学号
学生姓名
指导教师职称讲师
设计时间
1绪论
1.1课题背景和意义
随着社会的信息化,各个行业的管理与运营都逐渐开始使用电子系统来取代传统的管理模式。
使用电子医嘱管理可以帮助医院更为便捷的管理医嘱,通过计算机技术给医院的管理人员和就诊病人在病历创建、预约查询以及记录统计等方面带来便利,为医院在管理医嘱方面提供一种更好的方式。
1.2主要研究内容
本系统使用C语言编写了电子医嘱管理系统,主要实现医院中医生医嘱的电子管理。
通过此系统可对医嘱进行管理和维护操作,实现电子医嘱管理的一般功能。
主要内容包括:
(1)电子医嘱查询。
提供按照科室信息、病人信息查询;
(2)电子医嘱创建。
提供病人信息、预约记录的录入功能;
(3)电子医嘱编辑。
提供对系统数据的修改、删除等功能;
(4)电子医嘱维护。
提供对系统数据的保存、读取等功能。
系统采用菜单方式作为人机交互界面,为用户提供便捷的使用方式。
用户根据菜单提示,选择所需要的服务,系统自动做出相应的响应。
医嘱信息包含病人姓名、身份证号、科室名称、就诊科室等。
科室信息、病人信息的读取和保存要求有一定的格式规范,录入的信息以文件的形式保存并可以对其进行浏览、查询、修改、删除等基本操作。
整个程序基于链表实现,一个就诊信息的更改不影响其他的就诊记录。
2系统功能设计
电子医嘱管理系统是由五大功能模块组成:
预约模块、查看预约信息模块、删除预约信息模块、创建病人信息模块、修改病人信息模块、查看病人信息模块、保存信息并退出模块以及初始化模块如图2.1所示。
图2.1电子医嘱管理系统的功能模块
2.1初始化模块
创建链表并将文件中的格式化信息读取到内存链表中。
2.2预约模块
预约模块的操作流程包括选择预约科室,输入预约人员身份证号,若存在病人则预约,若不存在则返回主界面。
2.3查看预约信息模块
查看预约信息模块的操作流程包括输入预约人员身份证号码得到相关预约科室信息,若存在病人则预约,若不存在则返回主界面。
2.4删除预约信息模块
删除预约信息模块的操作流程包括输入预约人员身份证号码得到相关预约科室信息,选择删除预约科室删除成功返回主界面。
2.5创建病人信息模块
创建病人信息模块的操作流程依次输入身份证号码、姓名、年龄、性别、联系电话、住址、密码并回车添加病人信息。
2.6修改病人信息模块
修改病人信息模块的操作流程输入病人身份证号显示病人信息输入修改项并输入修改的内容,若退出则按0返回主界面。
2.7查看病人信息模块
查看病人信息模块的操作流程输入病人身份证号码显示病人信息按回车返回主界面。
2.8保存信息并退出模块
保存信息并退出模块的操作流程直接退出程序将链表中的信息保存到文件。
3系统详细设计
3.1数据表的存储组织
根据2.3节中设计,系统建立病人基本信息和病人预约信息表。
在系统实现中,采用内存链表和磁盘文件二级的数据存储结构来存放这些数据信息。
系统将文件信息转换为内存链表,再将链表转换成磁盘文件形式。
系统首先将磁盘文件数据转入内存链表,在通过对链表数据的处理,对用户请求作出响应。
本系统以病人信息文件以及预约信息二份文本文件作为表单对应的磁盘存储,在内存中以结构变量的方式分别存放基本信息,并以链表的形式将所有的数据组织起来。
3.1.1病人信息数据结构
病人信息在内存中采用结构类型进行描述。
病人结构成员包括:
病人姓名、身份证号、性别、年龄、联系方式、家庭住址、密码。
病人姓名、身份证号、性别、年龄、联系方式、家庭住址、密码均以字符数组的形式存储。
在病人结构中有一个个结构指针,指向下一个病人结构,通过这个指针可以组成病人链表。
该结构变量实现病人信息表在计算机上的存储,其结构声明如图3.1所示。
typedefstructpatientinf{
charname[10];
charnumber[19];
charsex[10];
charage[10];
chartel[20];
charaddr[20];
charPassWord[5];
structpatientinf*next;
}patinf;
图3.1病人结构
3.1.2科室信息数据结构
科室信息在内存中采用结构类型进行描述。
科室结构成员包括:
科室名称。
科室名称以指针数组的形式存储。
在科室结构中有二个结构指针,一个指向下一个科室结构,通过这个指针可以组成科室信息链表,一个指向下一个病人结构,通过这个指针可以组成病人链表。
该结构变量实现病人信息表在计算机上的存储,其结构声明如图3.2所示。
typedefstructhead{
char*name;
structhead*next;
structpat*next_;
}class_;
图3.2科室结构
3.1.3病人预约信息数据结构
病人预约信息在内存中采用结构类型进行描述。
预约结构成员包括:
病人身份证号。
病人身份证号以字符数组的形式存储。
在预约结构中有一个结构指针,指向下一个预约结构通过该指针可以将某一科室的所有预约病人链接起来,组成就诊链表。
该结构变量实现病人预约信息表在计算机上的存储,其结构声明如图3.3所示。
typedefstructpat{
charnumber[19];
structpat*next;
}patient;
图3.3预约结构
3.1.4三种结构的关联
本系统数据之间以指针相结合的方式来链接系统中各类对象。
系统中,科室结构中的病人身份证号以及科室编号的值将科室和预约病人关联起来。
在系统实现中为了提高查询效率,查询模块实现中采用了值的相等对记录进行定位。
科室、预约病人之间存在着层次关系,为了在内存中较好的体现这种层次关系,本系统采用二重链表的方式组织信息之间的关联关系。
具体结构如图3.4所示。
科室信息存放在二重链表的主链结点上,每个主链结点除了保存下一个结点的地址,还保存该科室的预约病人的基本信息链表头结点地址;预约病人信息存放在二重链表中相应科室的预约病人链结点上,每个结点保存下一个预约病人基本信息结点的地址。
图3.4二重链表存储结构示意图
病人信息存放在单链表中,具体结构如图3.5所示。
病人信息结点除了保存病人信息还保存下一个结点的地址。
NULL
病人信息
PatInfHEAD
图3.5单链表存储结构示意图
3.2主要算法设计
本系统在算法设计上采用“自顶向下,逐步求精”的设计方法。
由全局到局部、由整体到细节、由抽象到具体,逐步将系统的问题分解为相对简单的小规模问题。
本系统依照使用功能分成几个子模块:
预约模块、查看预约信息模块、删除预约信息模块、创建病人信息模块、修改病人信息模块、查看病人信息模块、保存信息并退出模块以及初始化模块。
系统的总控模块的算法流程如图3.1所示。
图3.1主程序运行流程图
3.2.1初始化模块
初始化模块负责将文本文件转换成内存链表。
在第2章的概要设计中,系统数据分为二种基础数据,这二种系统数据要求储存到数据文件中。
为便于处理每个文件,本系统将三种数据分别存放在二个文本文件中。
为了实现上述功能编辑了三个子函数与一个创建单链表语句:
structhead*TreeListCreat(intn);
voidPatInfToListRead();
voidAppointedInfToListRead();
PatInfHEAD->next=NULL;
初始化的过程包括将预约信息文件、病人信息文件从数据文件中读取并存放到所创建的链表中。
算法流程如图3.2所示。
图3.2初始化模块运行流程图
3.2.2预约模块
预约模块中包括找到对应预约科室尾部结点并添加结点其中使用到四个函数:
structpat*mainListLocatedSearch(char*str);
structpat*leafListTailSearch(structpat*head);
patinf*PatInfNodeSearch(char*number);
structpat*leafListnodeAdd(patient*previous);
过程包括找到所预约科室头结点然后根据头结点找到添加链表的尾结点输入信息在添加结点。
算法流程如图3.3所示。
图3.3预约模块运行流程图
3.2.3查看预约模块
查看预约模块中包括找到病人预约二重链表中所有的预约信息使用到两个子函数:
voidAppointNumDisplay();
voidPatAppointedSearch(char*str);
过程包括遍历分科室遍历二级链表然后显示预约信息。
算法流程如图3.4所示。
图3.4查看预约模块运行流程图
3.2.4删除预约模块
删除预约模块中包括找到结点位置,和找到结点前一个位置用到四个子函数:
structpat*leafListLocatedSearch(structpat*secondlist,char*num);
structpat*mainListLocatedSearch(char*str);
structpat*leafListLocatedSearchPrevious(structpat*secondlist,char*num);
structpat*leafListLocatedSearch(structpat*secondlist,char*num);
过程包括先找到要删除结点的前一个结点位置和删除结点位置然后删除结点然后将前一个结点的位置指向下一个结点。
算法流程如图3.5所示。
图3.5删除预约模块运行流程图
3.2.5创建病人信息模块
创建病人信息模块中包括找到病人信息链表的尾结点然后添加结点使用到两个子函数:
patinf*PatInfListTailSearch()
voidPatInfListnodeAdd(patinf*tail)
过程包括找到病人结点尾部然后在病人结点尾部添加一个结点。
算法流程如图3.6所示。
图3.6创建病人信息模块运行流程图
3.2.6修改病人信息模块
修改病人信息模块中使用到一个子函数:
patinf*PatInfNodeSearch(char*number);
过程包括找到结点然后修改内容。
算法流程如图3.7所示。
图3.7修改病人信息模块运行流程图
3.2.7查看病人信息模块
查看病人信息模块中使用到一个子函数:
patinf*PatInfNodeSearch(char*number);
过程包括找到结点然后显示内容。
算法流程如图3.8所示。
图3.8查看病人信息模块运行流程图
3.2.8保存信息并退出模块
保存信息并退出模块中使用到两个子函数:
voidPatListInfSave();
voidAppointListInfSave();
过程包括保存格式化的病人信息到文件和保存格式化的预约信息到文件然后退出程序。
算法流程如图3.9所示。
图3.9保存信息并退出模块运行流程图
4系统测试
软件测试即使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
随着软件测试技术的不断发展,测试方法也越来越多样化,针对性更强;选择合适的软件测试方法可以让测试事半功倍。
常用的软件测试方法有:
黑盒测试、白盒测试、静态测试、动态测试、自动化测试、功能测试、集成测试、场景测试、系统测试等。
本系统的测试针对系统的功能进行检查,以功能进行分类,对几个模块进行测试。
4.1病人信息管理测试
运行程序首先创建病人信息如图4.1.1所示
图4.1.1创建病人信息
然后可选择修改病人信息如图4.1.2所示
图4.1.2修改病人信息
可修改多项病人信息如图4.1.3所示
图4.1.3修改多项病人信息
也可查看病人信息如图4.1.4所示
图4.1.4查看病人信息
4.2病人预约信息管理测试
创建病人信息后便可开始预约如图4.2.1所示
图4.2.1预约科室
也可查输入病人身份证查看预约信息如图4.2.2所示
图4.2.2查看预约信息
还可删除预约如图4.2.3所示
图4.2.4删除预约信息
4.3文件信息存取测试
初始化会打开”病人信息.txt”与”科室信息.txt”读取信息如果文件不存在则会创建,程序退出选择”7.保存信息并退出”,链表中的信息会保存到文件中
5总结与展望
5.1全文总结
本文使用C语言实现了《电子医嘱管理系统》,实现了课程设计的功能要求,能够正确运行。
从实用和性能方面可以进一步加以改善。
(1)完整性。
可通过增加科室名单表等方法,对输入信息进行完整性检查。
如果输入科室名称与名单表不符,则该信息视为无效。
对年龄设置上下限,以保证数据的合理性。
(2)安全性。
在系统中可以增加多种角色的登陆方式,提高系统的安全性。
对于不同角色的用户,给与不同的操作权限,从而保证系统内部数据的安全性。
在登陆时可加入口令认证,确保用户身份的正确性。
(3)性能优化。
对内部数据建立索引表,对索引表进行二分查找,提高查询速度。
对链表可以采用双向十字链表结构存储,提高信息处理的速度。
心得体会
刚开始看到题目时一头雾水,不知该从何处下手,,因为平时只做过一些输入输出的普通小程序,根本没有界面的概念。
于是我就想如果先运行一下书上提供的样例程序,脑中大概也就有了一些概念和想法。
可是把书上提供的几个代码拿来一运行编译error就有几十行,面对那上千行的代码,我就不知该怎么下手了。
后来实在没办法,首先拿起那本《C语言实验与课程设计》看了三天,大概懂了一些函数的用法,就开始将书上的代码一段一段的输入进去跑一跑,慢慢的就大概懂了怎么来实现那些界面。
首先把那个任务说明看了几遍,就将程序主要分成五大块内容:
(1)文件处理功能:
首先得有将数据信息保存的功能,这就得用到老师讲的“文件”那章的知识,我又拿起课本看了几遍。
其次还得有数据备份的功能,以备在重大失误后能找回一些数据,将损失降低。
有了备份,还得有恢复备份数据地功能。
最后必须有安全退出系统的功能。
(2)数据处理功能:
首先得让系统能读入操作者输入的数据并将数据存储在文件中。
然后如果操作者输入数据有误那还得有对数据修改,部分数据删除,以及数据添加的功能。
(3)查询功能:
第一可以按照科室编号来查询,第二还可以按照病人身份证号查询,第三还可以按照科室编号,病人身份证及就诊日期进行多条件统计查询。
(4)统计信息功能:
最重要的要有日就诊人数统计功能,其次还可以有病人就诊历史,就诊病人年龄分类的统计。
(5)系统帮助功能:
第一得告诉操作者本系统的用途,然后告诉怎样操作使用系统以及一些基本的操作快捷功能。
最后,当屏幕上显示的信息过多时还得有清理屏幕的功能,以方便用户观看数据。
接下来就是一一实现那些功能。
通过运用课堂上讲过的数组,指针,文件等知识,编写了链表的创建,之后是将链表的内容写入到文件中保存,并将文件中写入的内容再次逐条读取出来,显示在屏幕上。
这个主体写完了,接下来就开始写科室、病人等信息的查询函数,这个就比较容易点。
还有就是我想写一个能将同一病人在不同科室下的所有就诊记录全部显示的功能,方便病人查询自己就诊历史。
最后就是调试程序了。
这个应该是整个课程设计中最为复杂和难搞的部分。
首先是整个系统,光是函数就有几十个,而且经常是一个函数中又调用着若干其它函数,这样调试起来就比较困难,因为就算一个函数里,一点小小的错误就会引起连锁反应导致其它函数都出错,而且有些错误时隐性的,就是可能在这个函数中运行没问题,可在哪个函数中运行起来又有大问题。
所以调试也是最耗时间和精力的一个环节,有时候我为了测试一个函数的功能是否稳定,我得将程序跑很多次,一遍又一遍的运行,看看有没有一些不足的地方,有没有一些隐藏的问题,然后又得静下心来仔细分析问题原因所在并慢慢地纠正并再次调试运行,直到满意为止。
差不多有连续十来天我有空就将程序跑一跑,看看有没有大问题潜藏在其中,一经发现立刻将它修正。
这十来天我也体会调试员真还得过硬的基础知识,能敏锐觉察出代码中的错误,而且还得有足够的精力和耐力。
尽管程序系统算是完成了,但是开始写报告时才发现原来课程设计才刚完成了一半而已。
还得将当初的构思、想法、到实现、再到最后的调试,这其中每个环节的步骤用文字的形式记录下来,好让其他人也能了解你当初的想法。
其实有些想法有你自己特异的思维方式,也许口头说说还行,真得写下来,并让别人也看懂,并不那么容易。
在本次C课程设计构思创作过程中,得到了老师的大力帮助和支持,在此表示衷心的感谢,感谢提供无私的帮助和支持的老师们!
感谢他们默默无闻的奉献!
另外也要感谢热心的同学们,他们在我的设计过程中给与了很多的建议与帮助。
参考文献
[1]曹计昌,卢萍,李开.C语言程序设计,北京:
科学出版社,2008
[2]张引.C程序设计基础课程设计,杭州:
浙江大学出版社,2007
[3]黄明,梁旭,万洪莉.C语言课程设计,北京:
电子工业出版社,2006
[4]BrainWKernighan,DennisMRitchie.THECPROGRAMMINGLANGUAGE.北京:
清华大学出版社。
PRENTICEHALL,2011.
[5]ISO/IEC的C语言标准。
ISO/IEC9899:
2011
[6]秦友淑,曹化工。
C语言程序设计教程(第二版)。
[7]田淑清.二级教程-C语言程序设计(2008年版)
[8]刘振安.C语言程序设计[M].机械工业出版社,2007
#include
#include
#include
#include
#include
#include
#defineN5/*科室数量*/
time_t_Curtime=(time_t)0;
structtm*_RetTime=NULL;
/*
*@功能:
定义patient结构体
*@输入:
*@返回:
*@
*/
typedefstructpatientinf{
charnumber[19];
charPassWord[5];
charname[10];
charage[10];
charsex[10];
chartel[20];
charaddr[20];
structpatientinf*next;
}patinf;
/*
*@功能:
定义patient结构体
*@输入:
*@返回:
*@
*/
typedefstructpat{
charnumber[19];
chartime[20];
structhead*_next;
structpat*next;
}patient;
/*
*@功能:
定义class_结构体
*@输入:
*@返回:
*@
*/
typedefstructhead{
char*name;
structhead*next;
structpat*next_;
}class_;
/*定义一个大头*/
class_*ALL=(structhead*)malloc(sizeof(structhead));
/*定义病人信息链表头*/
patinf*PatInfHEAD=(patinf*)malloc(sizeof(patinf));
charstrhead2[5]={"头"};
charSTR[N][12]={"内科","外科","儿科","骨科","皮肤科"};
charStrfilepat[17]="病人信息.txt";
charStrfileappointed[17]="预约信息.txt";
/*
*@功能:
从文件中读入预约信息
*@输入:
*@返回:
*@
*/
voidAppointListInfSave();
/*
*@功能:
从文件中读入预约信息
*@输入:
*@返回:
*@
*/
voidAppointedInfToListRead();
/*
*@功能:
显示各个科室预约人数信息
*@输入:
*@返回:
*@
*/
voidAppointNumDisplay();
/*
*@功能:
从文件中读入科室信息
*@输入:
*@返回:
*@
*/
voidClassMessageDisplay(intnumber);
/*
*@功能:
遍历链表所有元素
*@输入:
链表头结点,匹配元素
*@
*@返回:
结点位置(结点地址)
*@
*/
structpat*leafListLocatedSearch(structpat*secondlist,char*num);
/*
*@功能:
遍历链表所有元素
*@输入:
链表头结点,匹配元素
*@
*@返回:
结点位置的上一个位置
*@
*/
structpat*leafListLocatedSearchPrevious(structpat*secondlist,char*num);
/*
*@功能:
向结点尾部添加结点
*@输入:
叶子结点
*@返回:
尾结点
*@
*/
structpat*leafListnodeAdd(patient*previous);
/*
*@功能:
向结点尾部添加结点
*@输入:
叶子结点
*@返回:
尾结点
*@
*/
structpat*leafListnodeandNumAdd(char*Num,patient*previous);
/*
*@功能:
遍历链表所有元素
*@输入:
链表头结点
*@
*@返回:
结点个数
*@
*/
charleafListnumSearch(structpat*secondlist);
/*
*@功能:
找到树枝尾部
*@输入:
树枝头部结点
*@返回:
尾部位置(尾部地址)
*@
*/
structpat*leafListTailSearch(structpat*head);
/*
*@功能:
遍历链表所有元素
*@输入:
链表头结点(structhead*mainlist,char*str)
*@
*@返回:
副链表头
*@
*/
structpat*mainListLocatedSearch(char*str);
/*
*@功能:
遍历链表所有元素
*@输入:
链表头结点(structhead*mainlist)
*@
*@返回:
结点位置(结点地址)
*@
*/
char
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 医嘱 录入 系统