中南大学数据库课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据库课程设计报告
学院:信息科学与工程学院专业班级:物联网工程1201班指导老师:***
学号:**********
*名:**
日期:2015年1月10日
目录
课程设计要求 (3)
概要设计:(数据库) (5)
概要设计:(程序) (7)
详细设计(数据库) (8)
详细设计(程序) (11)
系统展示 (12)
安全性控制 (19)
关键技术 (20)
心得体会 (20)
《数据库课程设计》任务书
1 任务概述
某医院拟开发一个挂号系统,以方便患者就医,提高医疗服务水平。

患者在医院就诊前需要提供姓名、身份证号码、联系电话等个人信息并办理一张诊疗卡,该诊疗卡在每次挂号时需要出示给挂号的工作人员。

患者在挂号时,需说明科室名称以及医生的职称。

挂号以半个工作日为一个班次,系统中保存各科室门诊医生的排班表,每位医生每个班次能够接诊的病人人数可设置一个上限。

本次课程设计要求设计并实现一个虚拟的医院挂号系统。

系统中包含两个子系统,即由医院内部工作人员使用的挂号系统,以及患者使用的网上预约挂号系统。

其中网上预约挂号系统的前端要求是浏览器,即采用B/S模式开发。

医院工作人员使用的挂号系统采用C/S 模式开发,前端开发工具不限,可采用PowerBuilder, Delphi, VB,VC,Java等。

后台数据库要求采用SQL SERVER2005或Oracle 11g及以上版本。

2 功能描述
2.1 医院工作人员使用的挂号系统
该系统仅供医院内部工作人员使用,主要分为挂号人员和系统管理人员两类角色,需提供以下功能:
1)办理诊疗卡。

患者提供姓名、身份证号码、联系电话等个人信息,挂号人员为其办理一张长期有效的诊疗卡。

2)挂号。

挂号人员根据患者要求的科室、医生职称分配一个候诊号,并收取相应的诊疗费用,诊疗费用根据医生的职称分为不同的档次。

医生当班次接诊患者人数
不能超过预先设定的上限。

3)修改挂号。

患者可更改就诊的科室,挂号人员根据更改后的科室和医生职称,重新计算诊疗费用的差值,多退少补。

4)查询挂号情况。

挂号人员可查询某位医生目前的挂号情况。

5)挂号费当班结转。

系统对每个班次收取的挂号费生成相应的统计表,并提供查询功能,包括该班次总的挂号费用、各个挂号人员该班次总的挂号费用、各位医生
该班次总的挂号费用。

6)参数维护。

系统管理人员负责维护各种参数,包括科室、医生、医生排班表、号类字典。

医生的基本信息、排班表、诊疗费标准、各班次医生接诊人数上限都是
可以修改的,尽量提高系统的灵活性和可扩展性。

7)系统维护。

系统管理人员负责管理用户、分配权限、管理密码。

2.2 网上预约挂号系统
该系统供患者使用,需提供以下功能:
1)用户注册。

提供注册所需基本信息,必须实名注册。

2)用户可修改注册信息。

3)用户可查询指定时间的某科室的医生排班表。

4)用户可以在网上预约挂号。

系统不提供当日预约服务,用户可预约部分科室次日至一个月内的就诊号源。

同一患者实名(有效证件号)在同一就诊日、同一科室只能预约一次;在同一就诊日的预约总量不可超过两次;在一个月内的预约总量不可超过三次。

2.3 安全性控制要求
1)所有用户密码在数据库中都要求加密存储。

2)网上预约挂号系统要进行输入验证,防止SQL注入。

3)系统管理员只能进行系统维护和参数维护,不能进行挂号操作。

实验环境:
电脑:联想G460
操作系统:Windows8.1 64位
语言:Java、JavaScript、JSP、HTML、SQL
编程工具:Eclipse IDE for Java EE Developers(Kepler版)
数据库:MySQL 5.6.21
数据库工具:MySQLWorkbench 6.2 CE、navicat
其他工具:Sublime Text 2
概要设计:(数据库)
E-R图
除了上面的E-R图,数据库中还有另外三张表,分别是管理员表(Administrator)、员工表(Worker)、结算表(Calculate)
物理模型
用MySQLWorkbench所建
管理员表、员工表、结算表
备注:由于数据库模型是在课设最初建立的,后期根据编程的需求对表结构有了不少修改,虽然后来根据对表的修改已经对Model进行了更新,但可能仍有略微不同
概要设计:(程序)
系统主要功能
管理员更改科室更改职称排班表
管理用户管理密码
办理诊疗卡
挂号
员工
修改挂号
挂号结算详细设计(数据库)
表结构Doctor表(医生表)
Patient表(诊疗卡表)
Arrangement表(排班表)
Orderregist表(挂号表)
Calculate表(结算表)
DoctorLevel表(级别表)
备注:其他几张表结构太简单,就不一一列举了。

视图
该系统中暂时只用到了一个视图,用于将Doctor表、Arrangement表、Doctorlevel表、Department表Join起来,方便查询。

存储过程
一共用到了4个存储过程
分别是
procedure_calculate:用来结算
procedure_find_registinfo:用来找到挂号信息
procedure_regist:用来挂号
procedure_update_regist:用于修改挂号
下面是procedure_regist的部分代码:
if regcount > 0
THEN
insert into orderregist
V ALUES(null,patId,doId,deId,regDate,regTime,cost,worId,isCalculate);
update arrangement set ArrangeAccptCount = ArrangeAccptCount - 1;
END IF;
这里用来判断剩余的接诊人数是否大于零,如果大于零则能挂号,否则不能。

详细设计(程序)
如上图所示,整个系统写了很多个类,很多个jsp页面,以下介绍一下各个包的功能,然后就几个重要的类简单介绍一下。

Action包:主要是对用户和管理员的Action事件进行处理。

App包:许多个Thread类,用于务器与客户端进行通讯。

Bean包:许多bean类,也是为JavaBean技术服务的重要一部分。

Commom包:许多公共类,包括:
Conf类:通讯协议。

Constants类:SQL语句集合。

Dbcp类:获取数据库连接对象。

Log类:为了调试所用(跟系统功能关系不大)
PageBean类:分页类
Dao包:许多对数据库的操作。

ViewAdmin包:管理员界面包。

ViewWorker包:工作人员界面包。

WebContent中Main包,主要是包含很多JSP页面。

系统展示
C/S端
以员工身份登录后,可以看到如下图所示。

系统中有
诊疗卡的操作、预约挂号、挂号信息的查看与修改、排班表、挂号费结算。

添加诊疗卡的信息
双击表格后,弹出对信息修改界面
预约挂号界面,可以选择挂号的日期已经班次。

然后系统会根据时间和班次、科室、级别筛选出医生。

这里可以查到挂号的信息。

排班信息
挂号费的结算(前两条信息是我手动添加的)
以管理员身份登陆后,可以看到如下图所示。

系统中有
科室的操作、医生、排班表、工作人员、诊疗费标准。

可以对诊疗费用进行修改
其他功能大同小异,就不一一列举了。

B/S端
B/S端登录界面B/S端主界面
B/S端注册界面信息查看和修改查看医生排版表
预约挂号界面
安全性控制
MD5加密
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。

---摘自百度百科
关键代码如下:
private static String encodeByMD5(String originString){
if (originString != null){
try{
MessageDigest md = MessageDigest.getInstance("MD5");
//使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
byte[] results = md.digest(originString.getBytes());
//将得到的字节数组变成字符串返回
String resultString = byteArrayToHexString(results);
String pass = resultString.toUpperCase();
return pass;
} catch(Exception ex){
ex.printStackTrace();
}
}
return null;
}
防SQL注入
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。

前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。

基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

---摘自百度百科
在JSP中,我都是采用的setParameter的方法来传递参数,也就是采用post方式来传参,因此大大降低了SQL注入的风险
此外,在登录等含有输入框的地方,我也都验证了输入的合法性,过滤了所有的可疑字符。

关键技术
1、在C/S端,主要用到了信息的加密技术,防注入技术,其他的更多的是对Java编码能力
的考量。

2、在B/S端,用到了JavaBean、JSP、EL、JavaWeb对数据库的操作以及加密技术,防注
入等等技术
心得体会
经过近一个月紧张的数据库课程设计,加之中间还夹杂着两个考试,自己已经累得不成样子了。

不过,虽然很累,但是自己还是学到了不少的东西。

以下分几个方面谈谈自己的心得。

1、对Java编程能力的提高。

编完这个系统,我用Eclipse计算了一下,光Java代码就有
5800多行,中间也用到了继承、接口等高级一点的编程方法,近7000行代码对于大三的学生来说,不多不少吧。

以前也编过几个工程量大致相当的project,从project中锻炼
自己的能力,这一点对自己帮助还是挺大的。

毕竟嘴上说谁都会,但是动起手来就会遇到形形色色各种问题。

所以说,这次的课设对自己的逻辑锻炼还是蛮大的,对Java的理解也加深了一点。

也学会了很多新的API,诸如JTable、JInternalFrame、JComboBox等等。

2、JavaWeb入门。

以前虽然一直都想学习JavaWeb方面的知识,也一直有在看Web方面
的书籍,但是毕竟没有动力、导致学习效率低下。

这次接触了到数据库的课程设计,在Deadline的强大压力之下,逼着自己去快速的学习JavaWeb知识。

回想起当初,结合自己此前JavaSE、Android、HTML、XML的基础,其实JavaWeb入门很容易,不到一天就能编出像样的东西了。

后来由于时间有限,我B/S端做的并不是很好,寒假里再去深入去学习吧。

3、数据库知识加强。

虽然以前上过数据库的课程,也做了数据库的实验。

可是那个东西毕
竟太抽象,知识仅仅停留在纸面上。

此前做的几个project也经常用到数据库,但是也仅仅是几个简单的Select就能搞定的难度,像这样的完整做一个管理系统,此前还未曾尝试过。

所以这次无论是从SQL语法而言、还是对数据库知识的复习,自己的数据库知识的都有很大的提升。

系统中也用到了视图、存储过程等等,这些东西此前都没有真正实战过,所以这次还是有蛮大的收货,至少以后再次遇到就不会那么陌生了。

4、其他方面。

经过这次数据库的课设,自己也懂得了不少的道理。

没有压力就没有动力,
没有动力就会导致效率低下。

就拿JavaWeb而言,此前就很想学习了,可是一直就拖着,今天看一点明天看一点,导致在数据库课设之前,自己的JavaWeb基础几乎为零。

但是有了数据库课设的这个动力,也就几天时间就从Web零基础入门了,能写简单的几个页面了,也能实现几个简单的操作。

所以说,凡事不要总是拖着去做,有时间就赶紧学了,不要等到需要用的时候再去学习,到时候就来不及了。

书到用时方恨少。

5、关于数据库课设的一点建议。

这里仅仅是自己的一点看法,也许不一定对。

关于这个课
设,如果仅仅是只做一端(C/S、B/S仅做一方面,但是功能必须全)的话,如果把时间放久一点,就难度和工程量而言基本上是合理的。

但是如果是做两端的话,个人认为,这仅仅是数据库的课设,应该把重心放在数据库上面,而不是重点考察编程能力,对编程能力的考量以后还有Java课设等等。

所以这也是我为什么认为只需要做一端的主要原因。

因为做一端的话,数据库的知识基本上都考察到位了,也降低了不少的编程量。

就我个人而言,在整个工程上面,花在数据库部分的时间为10%-15%左右,其余时间基本上都在花在编程上面的。

这也是我认为不合理的地方,所以我认为应该对数据库的知识重点考量,相对的,编程量应该可以减少。

不过这也仅仅是一方面吧,难度大了,所以自己提高也就多了,这也是好处。

6、这次的课设做的还并不很完善,以后有机会再去完善一下。

相关文档
最新文档