需求分析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將成爲我使用次數最多的語言。
而這一切的開始,最初不過是由於選修了一門叫作數據庫原理的課,真是奇妙。