首页 > 代码库 > 数据库终期大作业报告
数据库终期大作业报告
需求分析
现代社会,心血管疾病成为了老年人群体中高发的慢性病,一个社区医生往往需要负责多位患者的诊断工作,如果每位患者都要频繁上门问诊,会给医生带来过大的工作压力,也很难顾及到全部患者。
在信息技术高度普及的当下,完全可以利用互联网思维解决问题,制作一个软件用于实现:
l 医生随时掌握所负责病人的血压数据,并为病人提供专业诊断意见。
l 病人随时上传血压数据,并从医生处获得治疗意见。
概要设计
1、数据库
数据存放在名为dochelper的MySQL数据库中。
数据库包含4张表:doctor,patient,suggestion,pressure
通过把.sql文件导入到MySQL数据库进行创建。
具体代码见详细设计。
2、Java程序
作为用户访问数据库的接口,使用Swing制作图形界面,使用JDBC连接数据库。
软件采用MVC设计模式,分成三大层次:
l 模型层entity:包含4个类,分别对应数据库中的4张表。
l 视图层ui:包含7个继承自JFrame的界面,用于实现人机交互。
l 业务逻辑层dao:包含4个类,分别用于连接模型层的4个类到数据库,根据要求执行具体的sql语句
另外有一个类DbUtil专门用于获得和数据库的连接。
详细设计
1、数据库sql文件:
create database DocHelper;
use DocHelper;
create table doctor(
doc_id smallint unsigned not null auto_increment,
doc_name varchar(20) not null unique key,
doc_password varchar(50) not null,
primary key(doc_id)
);
create table patient(
pat_id smallint unsigned not null auto_increment,
pat_name varchar(20) not null,
pat_password varchar(50) not null,
pat_doctor smallint unsigned,
primary key(pat_id),
foreign key(pat_doctor) references doctor(doc_id)
);
create table pressure(
pre_id smallint unsigned not null auto_increment,
pre_high int(10) not null,
pre_low int(10) not null,
pre_date date,
pre_pat smallint unsigned not null,
primary key(pre_id),
foreign key(pre_pat) references patient(pat_id)
);
create table suggestion(
sug_id smallint unsigned not null auto_increment,
sug_sug text not null,
sug_doc smallint unsigned not null,
sug_pat smallint unsigned not null,
sug_date date,
primary key(sug_id),
foreign key(sug_pat) references patient(pat_id),
foreign key(sug_doc) references doctor(doc_id)
);
2、Java程序
源代码过于庞大,无法在此一一展示,只能展示连接数据库代码和ui界面:
连接数据库代码:
package dochelper.util;
import java.sql.*;
/**
* 连接数据库
* @author zhjl
*
*/
public class DbUtil {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/dochelper";
static final String USER = "root";
static final String PASS = "123456";
/**
* 获取数据库连接
* @return
* @throws Exception
*/
public Connection getConnection() throws Exception{
Class.forName(JDBC_DRIVER);
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
return conn;
}
/**
* 关闭连接
* @param conn
* @throws Exception
*/
public void closeConnection(Connection conn) throws Exception{
if(conn!=null)
conn.close();
}
}
登录界面:
医生注册界面:
患者注册界面:
医生端:
医生端账户设置界面:
患者端:
患者端账户设置界面:
用户使用手册
你好!欢迎来到绿叶医生,成为心血管健康社区的一分子。我们致力于实现医生和患者的便捷沟通,为解决心血管健康咨询问题提供最佳的解决方案。
软件的界面分为三大部分:主界面、医生端、患者端。请根据具体情况查看你需要的帮助。
主界面(打开程序后直接进入):
登录:输入已存在的用户名和密码,选择“医生”或“患者”身份,单击“登录”
注册:创建新的账户,选择“医生”或“患者”身份,单击“注册”,在跳出的新界面中输入注册信息并确认。
医生端(从主界面选择医生身份登陆成功后进入):
查看病人血压数据:在左上方表格中选择病人,即可查看其血压数据
向病人提建议:在左上方表格中选择要提建议的病人对象,在输入框输入建议,单击“添加建议”按钮。
查看建议:在左上方表格中选择病人,即可在下方表格看到其诊断历史。
修改建议:在下方表格选中需要修改的建议,在输入框中输入新内容,单击“修改建议”按钮
删除建议:在下方表格选中需要删除的建议,单击“删除建议”按钮
修改账户信息:单击“账户设置”按钮,跳转至账户设置界面。在验证旧密码成功后可以输入新的用户名和密码并确认。
返回:退出登录并返回到主界面。
病人端(从主界面选择病人身份登录成功后进入):
查看自身血压数据:见血压数据显示框。
添加血压数据:填写“收缩压”和“舒张压”后点击添加。
查看医生给出的建议:见医生建议显示框。
修改账户信息:单击“账户设置”按钮,跳转至账户设置界面。在验证旧密码成功后可以输入新的用户名和密码并确认。
修改医生关联:单击“账户设置”按钮,跳转至账户设置界面。在医生列表中查询并选择医生,点击“关联”以完成关联。
返回:退出登录并返回到主界面。
反思总结(开发日志)
回顾制作数据库大作业的这三个月,于我而言是一次百感交集的旅程。
第一次听说数据库实验的要求时,其实我是懵逼的:竟然要用Java,而我连C都没写熟,对于面向对象的Java更是基本一窍不通。第一次课用SWT/JFace开发GUI,完全是听得云里雾里,虽然会用WindowBuilder拖个JButton、JLabel上去,但对背后的代码却一无所知。
没有办法,只能从头开始学习Java,跟着网上的MOOC教程和《Core Java》,花了整整两周时间,才基本掌握了JSE的知识。过程很辛苦却也很有成就感,慢慢体会到了面向对象程序设计的强大之处:用对象存储数据,用类封装代码,能够最大限度地实现程序的结构化模块化,把大的任务分解为一个个小任务。更是体会到写程序也像盖房子一样,地基(框架)极其重要,好的程序背后往往有经过千锤百炼的设计模式,以作业中用到的MVC设计模式为例,将程序分为实体层、视图层、数据库连接层,设计时只考虑一个层次内的事情,开发效率大大提高,代码简洁性和可维护性都好了很多。
学习使用SWT其实是挺郁闷的,一方面图形界面不是Java的强项,Swing这样的开发工具也已经基本被时代淘汰了,另一方面Swing控件种类繁多,继承关系复杂,有时候为了找一个方法,需要花很多时间查阅API文档,第一次使用效率不太高,但用熟了以后还好。由于这学期正好在学习通识课《平面制作基础》,就顺手用矢量制作软件CorelDraw给GUI做了一个logo,确实比Swing原生界面好看了很多。从朋友们的反馈来看,软件最重要的果然还是UI啊,毕竟一个界面糟糕的软件很难让人有冲动去了解它功能的丰富和强大。
接下来的数据库搭建倒是没花太多时间,使用集成度比较高的开发环境如PowerDesigner或者SQL Server、MySQL workbench等可以在很短时间内完成,时间主要花在设计表上。出于练习SQL语句的考虑和对开源的支持,我选择用记事本写数据库创建的代码,并使用MySQL命令行进行查询、修改等操作。
接下来是最关键的地方:连接数据库。助教给出的示例中使用了Spring框架的JDBCTemplate,虽然已经学习了JSE,但是仍然看不懂写的是什么,也不会读.xml文件。查到学Spring框架又需要不少时间,而且现在不会Web开发,学会了以后很难用得上,所以还是选择了更为经典朴素的jdbc。用DbUtil类存放数据库连接,Dao类负责根据不同查询要求向数据库提交相应的sql语句。
最后老实说,我觉得实验课程的要求有点过高了,似乎偏离了数据库课程的核心,为此它占据了我大量的课余时间,但这也是我第一次写大型项目,第一次接触面向对象的程序设计语言,某种程度上它激发了我的潜能,困难同时带来的成就感让我觉得兴奋。甚至在完成作业后我还尝试使用Swing编写了一个坦克大战程序,作为数据结构的额外作业,另外我还计划在暑假入门JEE和SSM框架,在可见的未来,Java将成为我使用次数最多的语言。
而这一切的开始,最初不过是因为选修了一门叫做数据库原理的课,真是奇妙。
数据库终期大作业报告