需求分析java
现代社会,心血管疾病成为了老年人群体中高发的慢性病,一个社区医生每每须要负责多位患者的诊断工做,若是每位患者都要频繁上门问诊,会给医生带来过大的工做压力,也很难顾及到所有患者。mysql
在信息技术高度普及的当下,彻底能够利用互联网思惟解决问题,制做一个软件用于实现:sql
l 医生随时掌握所负责病人的血压数据,并为病人提供专业诊断意见。数据库
l 病人随时上传血压数据,并从医生处得到治疗意见。设计模式
概要设计数据结构
一、数据库框架
数据存放在名为dochelper的MySQL数据库中。模块化
数据库包含4张表:doctor,patient,suggestion,pressure工具
经过把.sql文件导入到MySQL数据库进行建立。学习
具体代码见详细设计。
二、Java程序
做为用户访问数据库的接口,使用Swing制做图形界面,使用JDBC链接数据库。
软件采用MVC设计模式,分红三大层次:
l 模型层entity:包含4个类,分别对应数据库中的4张表。
l 视图层ui:包含7个继承自JFrame的界面,用于实现人机交互。
l 业务逻辑层dao:包含4个类,分别用于链接模型层的4个类到数据库,根据要求执行具体的sql语句
另外有一个类DbUtil专门用于得到和数据库的链接。
详细设计
一、数据库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)
);
二、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将成为我使用次数最多的语言。
而这一切的开始,最初不过是由于选修了一门叫作数据库原理的课,真是奇妙。