资源描述
华中科技大学计算机学院课程设计
课 程 设 计 报 告
题目: 药房药品管理系统
课程名称: C语言与程序设计
专业班级: CS1305
学 号: U201314927
姓 名: 韩晓阳
指导教师: 王多强
报告日期: 2014年10月10日
计算机科学与技术学院
- 78 -
课程设计任务书
一、 课题名称
药房药品管理系统。
二、 课题内容
建立药房药品信息系统,提供创建、编辑和综合查询等基本业务管理和服务。
三、 课题任务要求
收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。
四、 同组设计者
无
五、 主要参考文献
[1]曹计昌,卢萍,李开. C语言与程序设计,北京:电子工业出版社,,2013
[2]张引. C程序设计基础课程设计, 杭州: 浙江大学出版社,2007
[3]黄明,梁旭,万洪莉. C语言课程设计,北京: 电子工业出版社,2006
目录
1 引言 - 1 -
1.1 课题背景和意义 - 1 -
1.2 国内外研究现状 - 1 -
1.3 课程设计的主要研究工作 - 2 -
2 系统需求分析与总体设计 - 2 -
2.1 系统需求分析 - 2 -
2.2 系统总体设计 - 2 -
3 系统详细设计 - 3 -
3.1 有关数据结构的定义 - 3 -
3.2 主要算法设计 - 5 -
4 系统实现与测试 - 13 -
4.1 系统实现 - 13 -
4.2 系统测试 - 20 -
5 总结与展望 - 37 -
5.1 全文总结 - 37 -
5.2 工作展望 - 38 -
体 会 - 39 -
参考文献 - 39 -
附录:源程序代码 - 39 -
1 引言
1.1 课题背景和意义
在当今网络化、信息化、数字化的社会中, 由于计算机已经深入各行各业,而且现代社会,各个领域信息量大、信息更新迅速、信息处理要求方便及时,因此在各行各业都需要一个数字化系统处理相应数据,药房药品的管理也是如此。我国拥有传统的中医和近现代随着时间文化交流传播发展所学习的西医,导致药品种类尤为繁多,规模很大,传统的手工记录、查询、修改等等操作极易出错而且工作效率底下,已经不适合现代化发展的需求。因此,当今社会,药房药品管理系统是非常为人们所需要的,它能够使得使用者提高工作效率,实现药房药品信息的科学有效管理,便于操作、应用前景广泛。
1.2 国内外研究现状
目前国内外已经有许多医院建立了较为完善的药品管理系统。但比较之下我国的医药管理系统却还不够完善,西方发达国家以及美国等发达国家,都已经全面建立起完善的网络化交互系统。随着我国市场经济的蓬勃发展和人们对医药产品需求的迅速增加,医药行业正处于一个高速发展的时期,各类新药层出不穷,行业的快速发展必然导致竞争的加剧,要想在激烈的市场竞争中谋求发展,客观上要求企业必须加强内部管理,提高运营效率。信息技术和计算机技术的迅速发展,改变了整个信息管理的面貌,从根本上加强并促进了群体工作成员之间的信息交流、资源共享、科学计算、技术合作及有效管理等,药房药品信息系统的应用,大大改变了药房管理模式和工作流程,对提高药房或者医院的管理水平、质量效益、经济效益和社会效益起到了巨大的促进作用。另外,由于医药产品种类繁多、销售模式特殊、业务最大,单凭手工记帐已很难适应工作的需要。医药作为一个关系到人们健康的特殊行业,国家对此又有一些不同于其他行业的管理政策,这些都加大了管理的难度。
1.3 课程设计的主要研究工作
本次课程设计主要研究的工作是利用C语言计出一款简易的药房药品管理系统,能够实现创建药房药品信息系统,实现编辑、查询、添加、删除药房信息、药品信息、记录信息等等功能,并由文本菜单界面完成人机交互界面,以及采用三重交叉链表实现数据的保存和数据之间的连接。
2 系统需求分析与总体设计
2.1 系统需求分析
作为药房药品管理系统的用户,主要需求是在建立系统后,实现查询、添加、删除等几大方面功能,主要由主函数和文本菜单界面实现,用户使用主要是执行功能函数的实现。流程大致是在主函数中实现文本菜单界面的构建,主要是窗口界面、主菜单和下拉子菜单的实现。采用顺序结构,由执行功能函数实现用户的自我选择功能使用,返回、系统的退出等等功能,功能函数的使用存在在子菜单中,相应实现。
2.2 系统总体设计
本部分为各模块功能说明,系统所以功能详见图2.1,功能包括信息的查询、信息的删除、信息的删除、信息更新保存几个模块。信息查询部分包括查找输出药房信息、查找输出某个药房的某个药品信息和查找输出某个药房的某个药品的出入库信息等功能;信息删除部分包括删除某个药房信息、删除某个药房的某个药品信息和删除某个药房的某个药品的出入记录信息等功能;信息添加部分包括添加一个新的药房信息、添加一个新药品信息到某药房和添加一个新的记录到某个药房的某个药品等功能;信息更新保存部分包括药品数量更新、保存药房信息至文件、保存药品信息至文件和保存记录信息至文件等功能,其中保存功能为系统自动执行的功能。具体如下:
功能
查找输出某个药房信息
查找输出某个药房某药品信息
查找输出某个药房的某个药品的出入库信息
查询
信息
图2.1
模块功能图
删除某个药房信息
删除某个药房的某个药品信息
删除某个药房的某个药品的出入库信息
删除
信息
添加一个新的药房信息
添加一个新药品信息到某药房
添加一个新的记录到某个药房的某个药品
添加
信息
更新某个药品库存数量
* 保存药房信息至文件
* 保存药品信息至文件
* 保存记录信息至文件
注:标有 * 的功能为保存至文件功能,退出该系统前会自动执行
信息更新保存
3 系统详细设计
3.1 有关数据结构的定义
本系统采取十字交叉链表结构,一个指向药房结构类型的结构指针作为整个链表的头指针,每一个药房信息作为一个结点,药房与药房之间的连接用的是药房结构类型中的第一个结构指针,每一个药房又作为一个头结点向另一个方向创建一个单链表,即药品结构信息,连接的方式与第一重类似,同样的,每个药品结点又作为一个头结点创建一个单链表,是为出入记录的信息储存。三重交叉链表的第一重、第二重、第三重结点分别用来保存药房、药品、记录信息。
第一重结点定义为药房信息结点,包含有药房的名称、地址和电话,以及两个结构指针,一个指向下一个药房信息结点,另一个是指向第二重结点即药品信息结点的结构指针。数据及数据项类型具体定义如下:
struct yaofang //第一类信息:药房信息结构类型声明
{
char name1[50]; //药房名称
char location1[50]; //药房地址
char tele1[20]; //药房电话
struct yaofang *next1; //指向下一药房的指针
struct yaopin *down1; //指向该药房第一个药品信息的指针
};
第二重结点定义为药品信息结点,包括药品的编号、药品名称、药品产地和药品数量等基本药品信息,以及两个结构类型指针,其中一个指向下一个药品信息结点,另一个指向该药品对应的第三重链表结点即出入记录结点的结构指针。数据及数据项类型具体定义如下:
struct yaopin //第二类信息:药品信息结构类型声明
{
int id; //药品编号
char name2[50]; //药品名称
char made_place[50]; //药品产地
int number; //药品数量
struct yaopin *next2; //指向下一药品的指针
struct jilu *down2; //指向该药品第一条记录的指针
};
第三重结点定义为记录信息结点,包括记录日期、记录标志(出或者入)、记录数量等基本记录信息,以及一个指向下一个记录的结构类型指针,数据及数据项类型具体定义如下:
struct jilu //第三类信息:出入记录信息结构类型声明
{
int date; //日期
int mark; //出入标志(出还是入)
int many; //数量
struct jilu *next3; //指向下一记录的指针
};
多重链表的具体组织和关联示意详见图3.1所示。
…
head
…
药品11
药品12
药品1m
药房1
药房2
药房n
出入记录111
…
出入记录11p
∧
∧
∧
图3.1
药房药品管理系统的三重交叉链表结构示意图
3.2 主要算法设计
本程序流程设计示意如图3.2所示,先完成文本菜单的构建,包括主菜单、界面、下拉子菜单等等,再创建三重交叉链表并同时完成信息的录入,进入含有函数指针数组的功能选择菜单,功能选择菜单含有五项选择的主菜单(即五个主要部分的功能选择菜单),每一个模块所调用的函数,以及功能图可以详见4.1系统实现部分。每一个主菜单又下设相应的子菜单,含有相应的执行功能,系统流程设计示意如图4.1所示,用户可以根据自己的选择,并且按照系统提示,每一次执行一项功能,每一次功能执行完毕之后会自动返回主菜单,用户可以继续进行操作,选择某项功能执行,只有当用户选择退出菜单中的退出系统功能之时时,系统才会退出。
开始
创建三重交叉链表
功能选择菜单
保存药房信息至文件
保存药房信息至文件
保存药房信息至文件
结束
1
29
30
文本菜单构建
1
查找输出药房信息
查找输出药品信息
查找输出记录信息
删除药房信息
删除药品信息
删除记录信息
增加药房信息
6
7
8
9
10
11
12
查询信息
删除信息
增加信息
更新信息
2
3
2
3
4
5
28
30
退出
增加药品信息
增加记录信息
更新药品数量
16
17
18
19
20
21
22
23
13
14
15
24
25
4
5
28
29
6
输入药房名称name1
药房查找函数赋给p
P为空
输出“无该药房”
调用药房输出函数
Y
N
16
7
输入药房名称name1
药房查找函数赋给p
p为空
输入药品名称name2
输出“无该药房”
N
Y
药品查找函数赋给t
t为空
输出“无该药品”
Y
调用药品输出函数
N
17
8
输入药房名称name1
药房查找函数赋给p
P为空
输入药品名称name2
N
药品查找函数赋给t
t为空
输出“无该药房”
Y
调用记录输出函数
N
Y
输出“无该药品”
18
9
head代入药房删除函数
19
10
输入所在药房name1
药房查找函数赋给p
&p->down1代入药品删除函数
20
11
输入所在药房name1
药房查找函数赋给p
输入药品名称name2
药品查找函数赋给t
&t->down2代入记录删除函数
21
12
head代入药房添加函数
22
13
输入所在药房name1
药房查找函数赋给p
p->down1代入药品添加函数
23
14
输入所在药房name1
药房查找函数赋给q
24
q为空
输出无该药房
Y
输入所找药品name2
N
药品查找函数赋给r
r为空
输出无该药品
Y
r->down2代入记录添加函数
N
15
输入所在药房name1
药房查找函数赋给q
q为空
输出无该药房
Y
26
N
27
25
26
输入所在药品name2
药品查找函数赋给r
r为空
输出无该药房
Y
&r带入数量更新函数
N
27
图3.2
程序流程图
4 系统实现与测试
4.1 系统实现
系统实现硬件环境如图4.1所示:
图4.1
系统硬件环境截图
系统实现软件环境为,codeblocks 12.11版。
结构类型详见3.1或源程序代码,下面4.1.1-4.1.13为详细说明各模块功能的实现。
4.1.1 主函数程序功能模块
主函数程序模块示意如图4.2所示,采用顺序结构,先调用相应函数构建好文本菜单界面,在构建完成之后调用清屏函数实现清屏,之后再调用三重交叉链表创建函数完成三重交叉链表的创建,链表创建完成之后进入用户界面,即显示出文本菜单用户界面,同时主函数调用运行函数运行系统,此时用户可以按照需求使用系统,并按照提示使用系统,选择功能、选择继续或退出,利用执行功能函数中函数指针数组的使用,每一次调用相应功能函数系统都会自动保存信息。用户使用相应退出操作之后,系统正常停止运行,正常退出该系统。
主函数
窗口初始设置
清除屏幕
调用三重交叉链表创建函数
显示主菜单
显示下拉菜单
运行系统
执行功能函数
图 4.2
主函数程序功能模块示意图
4.1.2 三重交叉链表创建函数程序功能模块
三重交叉链表创建函数程序功能模块示意如图4.3所示,含3个链表创建函数,采用两个while语句嵌套(详见附录源程序代码),实现三重交叉链表创建。
三重交叉链表创建函数
调用第一维链表创建函数
调用第二维链表创建函数
调用第三维链表创建函数
图 4.3
三重交叉链表创建函数模块示意图
4.1.3 执行功能函数程序功能模块
执行功能函数程序模块示意如图4.4所示,主菜单栏信息查询、信息删除、信息添加、记录更新和退出五项,前三项每一项下设三个相应功能的子菜单栏,分别用来调用相应功能执行函数,各功能函数的实现详见2.4-2.13。
菜单
信息查询
信息删除
信息添加
记录更新
退出
查找输出药房信息子菜单
查找输出药品信息子菜单
查找输出记录信息子菜单
删除药房信息子菜单
删除药品信息子菜单
删除记录信息子菜单
添加药房信息子菜单
添加药品信息子菜单
添加记录信息子菜单
图 4.4
执行函数程序功能模块示意图
4.1.4查找输出药房信息子菜单程序功能模块
查找输出药房信息子菜单依次调用药房查找函数和药房信息输出函数来实现本子菜单对应功能,如图4.5所示。
查找输出药房信息子菜单
调用药房查找函数
调用药房信息输出函数
图 4.5
查找输出药房信息子菜单程序功能模块示意图
4.1.5查找输出药品信息子菜单程序功能模块
查找输出药品信息子菜单示意如图4.6所示,先调用药房查找函数查找相应药房,找到时再调用药品查找函数查找相应药品,若找到,再调用药品信息输出函数实现药品信息的输出。
查找输出药品信息子菜单
调用药房查找函数
调用药品信息输出函数
调用药品查找函数
图 4.6
查找输出药品信息子菜单程序功能模块示意图
4.1.6查找输出记录信息子菜单程序功能模块
查找输出记录信息子菜单程序功能模块示意如图4.7所示,和2.5实现方式类似,先调用药房查找函数查找相应药房,找到时再调用药品查找函数查找相应药品,若找到,只是改换成调用药品记录信息输出函数来实现相应药品记录信息的输出。
查找输出记录信息子菜单
调用药房查找函数
调用记录信息输出函数
调用药品查找函数
图 4.7
查找输出记录信息子菜单程序功能模块示意图
4.1.7删除药房信息子菜单程序功能模块
删除药房信息子菜单程序功能模块示意如图4.8所示,因删除药房函数本身自带有药房查找函数(详见附录:源程序代码),故直接调用删除药房函数,即可实现删除药房信息这一功能。
删除药房信息子菜单
调用删除药房函数
图 4.8
删除药房信息子菜单程序功能模块示意图
4.1.8删除药品信息子菜单程序功能模块
删除药品信息子菜单程序功能模块示意如图4.9所示,先调用药房查找函数找到想要删除的药品所在药房,找到之后再调用药品删除函数(药品删除函数包含有查找药品功能)删除相应药品,来实现此项功能。
删除药品信息子菜单
调用药房查找函数
调用删除药品函数
图 4.9
删除药品信息子菜单程序功能模块示意图
4.1.9删除记录信息子菜单程序功能模块
删除记录信息子菜单程序功能模块示意如图4.10所示,与2.8类似,先调用药房查找函数找到想要删除的药品记录所在药房,找到之后再调用药品查找函数查找药品,找到之后最后调用记录删除函数来实现需要删除记录的删除,实现此项功能。
删除记录信息子菜单
调用药房查找函数
调用药品查找函数
调用记录删除函数
图 4.10
删除记录信息子菜单程序功能模块示意图
4.1.10添加药房信息子菜单程序功能模块
添加药房信息子菜单程序功能模块示意如图4.11所示,直接调用药房添加函数,在第一维链表后边创建一个新的药房结点,即可完成添加一个药房信息的功能。
添加药房信息子菜单
调用添加药房函数
图 4.11
添加药房信息子菜单程序功能模块示意图
4.1.11添加药品信息子菜单程序功能模块
添加药品信息子菜单程序功能模块如图4.12所示,先调用药房查找函数,查找需要添加在哪一个药房下边,找到之后,调用添加药品函数,添加一个新的药品在该药房明下,即可实现药品信息添加的功能。
添加药品信息子菜单
调用药房查找函数
调用添加药品函数
图 4.12
添加药品信息子菜单程序功能模块示意图
4.1.12添加记录信息子菜单程序功能模块
添加记录信息子菜单程序功能模块示意如图4.13所示,依次使用药房查找函数和药品查找函数找到需要添加哪一个药房哪一个药品的记录,在找到药品之后,调用添加记录函数,即可添加一条记录在指定的药品中,完成此项功能。
添加记录信息子菜单
调用药房查找函数
调用药品查找函数
调用添加记录函数
图 4.13
添加记录信息子菜单程序功能模块示意图
4.1.13更新药品数量信息子菜单程序功能模块
由于出入记录的添加或者删除,导致相应的药品数量会随之发生改变,此项功能通过遍历相应的第三维链表,可以实现更新药品的库存数量。更新药品数量信息子菜单程序功能模块示意如图4.14所示首先依次调用药房查找函数和药品查找函数,找到需要更新库存数量的药品,之后在调用数量更新函数,实现指定药品数量的更新,实现此项功能。
更新药品数量信息子菜单
调用药房查找函数
调用药品查找函数
调用数量更新函数
图 4.14
更新药品信息子菜单程序功能模块示意图
4.2 系统测试
本部分为各项模块功能的测试,具体各功能的测试数据的选取、测试步骤的描述和过程、测试的结果与截图详见4.2.1-4.2.12.
4.2.1 初始数据录入测试
首先进行数据初始化的调试,初始化数据见表4.1:
表4.1 初始数据表
药房
信息
药品信息
编号
名称
产地
数量
记录
药
房
1
龙胜药房
武汉市江汉路
88884444
1001
板蓝根颗粒
广州
542
①
1002
枇杷膏
北京
450
②
1003
克感敏
上海
604
③
药
房
2
怡康药房
西安市莲湖路
88880000
2001
葡萄糖
成都
353
④
2002
青霉素注射液
重庆
587
⑤
2003
云南白药
昆明
655
⑥
药
房
3
泰生医药
广州市广州大道
33557799
3001
甲硝锉
上海
512
⑦
3002
医用酒精
长沙
421
⑧
3003
高钙高
苏州
588
⑨
记录信息
记录日期
记录标志
记录数量
①
20131001
2
102
20131129
1
47
②
20131129
2
88
20140116
1
90
③
20140103
2
40
20140402
2
90
④
20131118
1
42
20140222
2
140
⑤
20130929
1
41
20131228
2
145
⑥
20131201
1
91
20131217
2
120
⑦
20131010
1
33
20140202
2
101
⑧
20131001
1
31
20140403
2
81
⑨
20140220
2
88
20140222
2
111
完成初始化,进入主菜单界面,如图4.15所示:
图4.15
初始化完成后界面截图
完成初始化文件内储存情况见图4.16、图4.17以及图4.18:
图4.16
初始化完成后文件内药房信息储存情况截图
图4.17
初始化完成后文件内药品信息储存情况截图
图4.18
初始化完成后文件内药品出入记录信息储存情况截图
4.2.2查找输出某个药房信息功能调试
本部分为查找输出某个药房信息功能调试,测试数据为查找“怡康药房”,检测结果如图4.19所示:
图4.19
查找输出某个药房信息功能调试截图
4.2.3查找输出某个药房的某个药品信息功能调试
本部分为查找输出某个药房的某个药品信息功能调试,测试数据为查找“泰生医药”药房的药品“医用酒精”,检测结果如图4.20所示:
图4.20
查找输出某个药房的某个药品信息功能调试截图
4.2.4查找输出某个药房的某个药品的记录信息功能调试
本部分为查找输出某个药房的某个药品的记录信息功能调试,测试数据为查找“龙胜药房”药房的药品“克感敏”的出入记录,检测结果如图4.21所示:
图4.21
查找输出某个药房的某个药品出入记录信息功能调试截图
4.2.5删除某个药房信息功能调试
本部分为删除某个药房信息功能调试,测试数据为删除“龙胜药房”药房,检测结果如4.22所示:
图4.22
删除某个药房信息功能调试截图1
删除完毕之后再使用查找功能,观察是否成功删除,结果如图4.23所示:
图4.23
删除某个药房信息功能调试截图2
删除完成之后在文件中查看如图4.24所示:
图4.24
删除某个药房信息功能调试截图3
4.2.6删除某个药房的某个药品信息功能调试
本部分为删除某个药房的某个药品信息功能调试,测试数据为删除“怡康药房”药房的药品“克感敏”,检测结果如图4.25所示:
图4.25
删除某个药房的某个药品信息功能调试截图1
删除完毕之后再使用查找功能,观察是否成功删除,结果如图4.26所示:
图4.26
删除某个药房的某个药品信息功能调试截图2
删除完成之后在文件中查看如图4.27所示:
图4.27
删除某个药房的某个药品信息功能调试截图3
4.2.7删除某个药房的某个药品的某个记录信息功能调试
本部分为删除某个药房的某个药品的某条记录信息功能调试,测试数据为删除“泰生医药”药房的药品“甲硝锉”的“20131010”日期的出入记录,检测结果如图4.28所示:
图4.28
删除某个药房的某个药品的某条记录信息功能调试截图1
删除完毕之后再使用查找功能,观察是否成功删除,结果如图4.29所示:
图4.29
删除某个药房的某个药品的某条记录信息功能调试截图2
删除完成之后在文件中查看如图4.30所示:
图4.30
删除某个药房的某个药品的某条记录信息功能调试截图3
4.2.8添加一个新药房功能调试
本部分为添加一个新药房功能调试,测试数据为添加刚才删除的“龙胜药房”药房检测结果如图4.31所示:
图4.31
添加一个新药房信息功能调试截图1
添加完毕之后再使用查找功能,观察是否成功添加,结果如图4.32所示:
图4.32
添加一个新药房信息功能调试截图2
添加完成之后在文件中查看如图4.33所示:
图4.33
添加一个新药房信息功能调试截图3
4.2.9添加一个药品信息到某个药房功能调试
本部分为添加一个新药品到某个药房功能调试,测试数据为添加刚才删除的药品“青霉素注射液”检测结果如图4.34所示:
图4.34
添加一个药品信息到某个药房功能调试截图1
添加完毕之后再使用查找功能,观察是否成功添加,结果如图4.35所示:
图4.35
添加一个药品信息到某个药房功能调试截图2
添加完成之后在文件中查看如图4.36所示:
图4.36
添加一个药品信息到某个药房功能调试截图3
4.2.10添加一个记录信息到某个药房的某个药品功能调试
本部分为添加一个新药品到某个药房功能调试,测试数据以及检测结果如图4.37所示:
图4.37
添加一个记录信息到某个药房的某个药品功能调试截图1
添加完毕之后再使用查找功能,观察是否成功添加,结果如图4.38所示:
图4.38
添加一个记录信息到某个药房的某个药品功能调试截图2
添加完成之后在文件中查看如图4.39所示:
图4.39
添加一个记录信息到某个药房的某个药品功能调试截图3
4.2.11更新某个药品库存数量功能调试
本部分为更新某个药品库存数量功能调试,测试数据为更新怡康医药的葡萄糖药品的库存数量,测试结果如图4.40-图4.42所示,首先,更新前文件如图4.40所示:
图4.40
更新某个药品库存数量功能调试截图1
然后更使用更新功能如图4.41所示:
图4.41
更新某个药品库存数量功能调试截图2
更新完成之后在文件中查看如图4.42所示:
图4.42
更新某个药品库存数量功能调试截图2
4.2.12退出系统功能调试
本部分为退出系统功能调试,调试结果如图4.43所示:
图4.43
退出系统功能调试截图
5 总结与展望
5.1 全文总结
对自己的工作做个总结,主要工作如下:
(1)对菜单选择,选择文本菜单,基本按照实验教材《C语言实验与课程设计》第3.4节内容设计文本菜单界面,包括主菜单,下拉菜单等等。在文本菜单制作好之后,出现了很多问题,由于我刚开始设计的简易菜单,转换成为的文本菜单,很多函数带有参量或者是返回值,但是功能调用函数ExeFunction中函数指针数组pFunction[]中,如果带入上述函数,会出现报错,于是我将所有功能需要调用的函数全部改成了BOOL XXXX(void)的类型。另外,再主菜单的间距上,用了最笨的办法,加空格,但是在下拉子菜单中就无所适从了,导致了子菜单稍微歪离主菜单的瑕疵。
(2)对链表选择,选择创建三重交叉链表,第一次我尝试将链表创建过程(即本程序的create_cross_link_list函数)放在主函数中,并且先创建链表,再进行赋值,可是后来发现,三重交叉链表不像单链表,创建后再赋值会使得程序不必要的复杂化,所以我改成了创建链表的同时完成赋值的工作。总体函数功能包括查找、添加、删除和更新库存信息几个内容。在写子函数的时候,一开始担心函数实参和形参的转换问题,滥用了很多二重指针,导致程序复杂化,后来基本改用简便可行的一重指针。另外,在写删除函数的时候,一开始忽略了删除头结点的情况,使得程序出现大的漏洞,幸好在调试的时候发现,及时改正。
(3)对总体来说,我觉得这次课程设计对我来说文本菜单的创建比三重交叉链表要困难很多,反映在结果上边也是如此,首先实验教材《C语言实验与课程设计》第3.4节内容自己定义头文件,而我简化了这个过程,另外课本上很多东西很难以理解,造成自己在局部调整和修改的时候无从下手,因此相比较而言,文本菜单的构建比三重交叉链表难一些,主要原因是文本菜单里边很多东西还是没有理解透彻,这也是今后需要努力的地方。
5.2 工作展望
在今后的研究中,围绕着如下几个方面开展工作:
(1)第一是三重交叉链表的创建,我每一重每一个方向都是调用创建单链表函数进行创建,显然这样属于效率最低的一种创建方式,如何用一种优于本程序的方式创建三重交叉链表,是今后研究的一个问题。
(2)第二,也是最主要的一点,就是文本菜单上边。首先是清屏函数,如何在清屏之后,可以使得新信息出现在原有清除位置,不至于出现空白;接着是文本菜单下拉子菜单和主菜单对齐的问题,需要今后研究;还有就是文本菜单如何能够像简易菜单一样,可以用鼠标滚动轮上下滚动查看先前的信息,也是今后深入研究的工作之一。
(3)第三,是一些系统舒适性的小变动,比如查询药房功能如果只输入药房部分名称,如何也使得可以查到,以及输入电话号码信息时如果输入非数字字符,系统能够提示不正确并重新输入等等问题,都是人机交互和谐性问题,都是以后需要改进和研究的问题。
体 会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
首先开始着手课程设计,感觉没有一个下手点,就像一道大菜不知道从哪里开始吃,心里就莫名的慌,不过后来我慢慢调整心态,想着一点点一步步来,总能完成,就这样一步步一点点,小溪终入大海。课程设计对于我们这些新手来说,这是很大的考验,从拿到题目到完成整个编程,从理论到实践,在整整两个月的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说链表……通过这次课程设计之后,一定把以前所学过的知识重新温故。
参考文献
[1]曹计昌,卢萍,李开. C语言程序设计,北京:科学出版社,2013
[2]李开,卢萍,曹计昌. C语言实验与课程设计,北京:科学出版社,2011
附录:源程序代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <wincon.h>
#include <conio.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
#include <ctype.h>
#include <time.h>
#ifndef TYPE_H_INCLUDED
#define TYPE_H_INCLUDED
#define SCR_ROW 25 /*屏幕行数*/
#define SCR_COL 80 /*屏幕列数*/
#define N 3 //药房初始数量定义
#define M 3 //药品初始数量定义
#define K 2 //记录初始数量定义
#define true 1
#define false 0
typedef struct jilu //第三类信息:出入记录信息结构类型声明
{
int date; //日期
int mark; //出入标志(出还是入)
int many; //数量
struct jilu *next3; //指向下一记录的指针
}JILU;
typedef struct yaopin //第二类信息:药品信息结构类型声明
{
int id; //药品编号
char name2[50]; //药品名称
char made_place[50]; //药品产地
int number; //药品数量
struct yaopin *next2; //指向下一药品的指针
struct jilu *down2; //指向该药品第一条记录的指针
}YAOPIN;
typedef struct yaofang //第一类信息:药房信息结构类型声明
{
char name1[50]; //药房名称
char location1[50]; //药房地址
long tele1; //药房电话
struct yaofang *next1; //指向下一药房的指针
struct yaopin *down1; //指向该药房第一个药品信息的指针
}YAOFANG;
//屏幕窗口信息链结点结构
typedef struct layer_node{
char LayerNo;
SMALL_RECT rcArea;
CHAR_INFO* pContent;
char* pScrAtt;
struct layer_node* next;
}LAYER_NODE;
//标签束结构
typedef struct label_bundle{
char** ppLabel;
COORD* pLoc;
int num;
}LABEL_BUNDLE;
//热区结构
typedef struct hot_area{
SMALL_RECT* pArea;
char* pSort;
char* pTag;
int num;
}HOT_AREA;
LAYER_NODE * gp_top_layer = NULL; //弹出窗口信息链链头
YAOFANG *
展开阅读全文