1. 程式人生 > >數據庫終期大作業報告

數據庫終期大作業報告

編寫 負責 pan sql 坦克大戰 cte 建議 frame 開發環境

需求分析

現代社會,心血管疾病成為了老年人群體中高發的慢性病,一個社區醫生往往需要負責多位患者的診斷工作,如果每位患者都要頻繁上門問診,會給醫生帶來過大的工作壓力,也很難顧及到全部患者。

在信息技術高度普及的當下,完全可以利用互聯網思維解決問題,制作一個軟件用於實現:

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將成為我使用次數最多的語言。

而這一切的開始,最初不過是因為選修了一門叫做數據庫原理的課,真是奇妙。

數據庫終期大作業報告