电子医嘱录入系统Word文档格式.docx

上传人:b****5 文档编号:17699215 上传时间:2022-12-08 格式:DOCX 页数:61 大小:788.22KB
下载 相关 举报
电子医嘱录入系统Word文档格式.docx_第1页
第1页 / 共61页
电子医嘱录入系统Word文档格式.docx_第2页
第2页 / 共61页
电子医嘱录入系统Word文档格式.docx_第3页
第3页 / 共61页
电子医嘱录入系统Word文档格式.docx_第4页
第4页 / 共61页
电子医嘱录入系统Word文档格式.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

电子医嘱录入系统Word文档格式.docx

《电子医嘱录入系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《电子医嘱录入系统Word文档格式.docx(61页珍藏版)》请在冰豆网上搜索。

电子医嘱录入系统Word文档格式.docx

创建链表并将文件中的格式化信息读取到存链表中。

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{

structpat*next;

}patient;

图3.3预约结构

3.1.4三种结构的关联

本系统数据之间以指针相结合的方式来系统中各类对象。

系统中,科室结构中的病人号以及科室编号的值将科室和预约病人关联起来。

在系统实现中为了提高查询效率,查询模块实现中采用了值的相等对记录进行定位。

科室、预约病人之间存在着层次关系,为了在存中较好的体现这种层次关系,本系统采用二重链表的方式组织信息之间的关联关系。

具体结构如图3.4所示。

科室信息存放在二重链表的主链结点上,每个主链结点除了保存下一个结点的地址,还保存该科室的预约病人的基本信息链表头结点地址;

预约病人信息存放在二重链表中相应科室的预约病人链结点上,每个结点保存下一个预约病人基本信息结点的地址。

图3.4二重链表存储结构示意图

病人信息存放在单链表中,具体结构如图3.5所示。

病人信息结点除了保存病人信息还保存下一个结点的地址。

图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*leafListLocatedSearchPrevious(structpat*secondlist,char*num);

过程包括先找到要删除结点的前一个结点位置和删除结点位置然后删除结点然后将前一个结点的位置指向下一个结点。

算法流程如图3.5所示。

图3.5删除预约模块运行流程图

3.2.5创建病人信息模块

创建病人信息模块中包括找到病人信息链表的尾结点然后添加结点使用到两个子函数:

patinf*PatInfListTailSearch()

voidPatInfListnodeAdd(patinf*tail)

过程包括找到病人结点尾部然后在病人结点尾部添加一个结点。

算法流程如图3.6所示。

图3.6创建病人信息模块运行流程图

3.2.6修改病人信息模块

修改病人信息模块中使用到一个子函数:

过程包括找到结点然后修改容。

算法流程如图3.7所示。

图3.7修改病人信息模块运行流程图

3.2.7查看病人信息模块

查看病人信息模块中使用到一个子函数:

过程包括找到结点然后显示容。

算法流程如图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<

stdio.h>

malloc.h>

stdlib.h>

string.h>

time.h>

Windows.h>

#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;

typedefstructpat{

chartime[20];

structhead*_next;

structpat*next;

定义class_结构体

typedefstructhead{

char*name;

structhead*next;

structpat*next_;

/*定义一个大头*/

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)

charmainListnumSearch(structhead*mainlist);

从病人链表中遍历病人信息

voidPatAppointedSearch(char*str);

改变病人信息

病人号

voidPatInfChange(char*number);

向病人信息链表末端添加元素

patinf*tail

voidPatInfListnodeAdd(patinf*tail);

找到病人信息链表末端

末端结点地址

patinf*PatInfListTailSearch();

遍历病人信息链表找到病人结点的前一结点

病人节点的前一结点位

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1