QT实现简单的医院管理系统
? ? 現代化的醫院也應該有現代化的管理系統。在科技日益發達的今天,人們的身體健康也在不斷受到重視。因此,醫院進行現代化管理就變得尤為重要。
一、系統需求分析
???通過一個醫院管理系統,使醫院的管理工作系統化、規范化、自動化,從而達到提高醫院管理效率的目的。
1.1 系統功能分析
????醫院管理系統需要完成功能主要有:
(1)各類信息的輸入。
????(2)員工各種信息的輸入,包括員工基本信息、職稱、崗位等。
????(3)員工各種信息的查詢、修改,包括員工基本信息、職稱、崗位、工資等。
????(4)員工的人事調動管理。
????(5)病人信息的管理。
????(6)醫院病床的管理。
????(7)藥劑資源管理。
????(8)儀器資源管理。
????(9)系統用戶管理、權限管理。
1.2 系統功能模塊設計(劃分)
????根據系統功能要求,可以將系統分解成幾個模塊來分別設計應用程序界面,如圖 1 所示。
1.3 系統的關系
????醫院管理系統是對醫院內各種信息資源的管理。在本系統中,員工管理、病床管理、病人管理、儀器管理、藥劑管理、部門管理和崗位管理是本系統的集合。各個管理又為系統的小模塊,各個小模塊之前又有著緊密的聯系,比如員工與部門崗位的聯系、病人與病床的聯系、員工與病人的聯系等等。
二、數據庫設計
2.1 數據庫需求分析
????通過對醫院管理的內容和數據關系分析,我們設計的數據項和數據結構如下:
????(1)員工基本狀況包括的數據項有員工號、員工姓名、性別、所在部門、身 ??份證號、生日、籍貫、國籍、民族、婚姻狀況、健康狀況、參加工作時間、員工 ??狀態、家庭住址、聯系電話等。
????(2)員工工資狀況包括的數據項有員工號、工資項別、工資金額等。
????(3)?醫院工作崗位信息包括的數據庫項有工作崗位代號、工作崗位名稱等。
????(4)醫院部門信息包括的數據項有部門代號、部門名稱、部門負責人等。
????(5)病人信息包括的數據項有病人姓名、病人性別、入院時間、病人所屬科室、病人狀況、病人主治醫生、房問號、病床號等。
????(6)藥劑資源管理信息包括的數據項有藥劑代號、藥劑名稱、藥劑價格、藥劑庫存數量、備注等。
????(7)醫療儀器管理包括的數據項有儀器代號、儀器名稱、儀器價格、儀器數量、備注等。
????有了上面的數據結構、數據項和數據關系,我們就能進行下面的數據庫設計。
2.2 數據庫概念結構設計
????本系統根據上面的設計規劃出的實體有員工實體、部門實體、崗位實體、病人實體、藥劑實體、儀器實體。實體和實體之間的關系 E-R 圖模型如圖 2?所示。
需要注意的是,關系需要設置好‘INSERT 和 UPDATE 規范’。既然提到這,那我們先了解下‘INSERT 和 UPDATE 規范’的類別:
(1)無操作:?顯示一條錯誤信息,告知用戶不允許執行該刪除(更新)操作,DELETE 將被回滾。
(2)級聯(層疊)?:刪除(更新)包含外鍵關系中所涉及的數據的所有行。
(3)設置空:如果表的所有外鍵列都可接受空值,則將該值設置為空。僅適用于 SQL Server 2005。
(4)設置默認值:?如果表的所有外鍵列均已定義默認值,則將該值設置為列定義的默認值。僅適用于 SQL Server 2005。
在本關系圖中,personnel__emp_no和salary__EMP_NO的更新操作和刪除操作都是層疊,因為員工信息的更新和刪除與員工工資的信息密切相關。而其他的關系的更新設置為層疊,刪除設置為空,例如:一個員工被開除了,那么病人的主治醫師將設置為空,如果更新,那么主治醫生的信息也將更新。
2.3 數據庫邏輯結構設計
????在上面的實體以及實體之間關系的基礎上,我們就可以形成數據庫中的表格以及各個表格之間的關系。醫院管理系統數據庫中各個表格的設計結果如下表所示。
說明:
emp_no————員工號(主鍵)
Emp_name———— 員工姓名
emp_dept_id ————所在的部門號
emp_duty ————職務
emp_xl ————學歷
emp_gender ————性別
emp_birthday ————生日
emp_hometown ————籍貫
emp_couniry ————國籍
emp_nation ————民族
emp_id ————身份證號
emp_marriage ————婚姻狀況
emp_health ————健康狀況
emp_startwork ————參加工作時間
emp_state ————員工狀態
emp_homeaddress ————家庭住址
emp_teleno ————聯系電話
emp_email ————聯系Email地址
emp_job_id ————工作崗位代號(外鍵)
說明:
Job_id ————工作崗位代號(主鍵)
Job_name ————工作崗位名稱
dept_id ———— 部門代號(外鍵)
說明:
dept_id ————部門代號(主鍵)
dept_name———— 部門名稱
dept_manager————部門主任代號
dept_vicemanager ————部門副主任代號
說明:
patient_name ————病人姓名(主鍵)
patient_gender ————病人性別
patient_date_start ————入院時間
patient_dept ————病人所屬科室
patient_state ————病人狀況
patient_doc ————病人主治醫生(外鍵)
patient_room———— 病人房間號
patient_bed ————病人病床號(外鍵)
說明:
TMS_USER————用戶名(主鍵)
TMS_PSWD————密碼
TMS_GG————判斷管理員權限(約束:GG(普通)/HH(高級))
說明:
EMP_NO————員工號(主鍵/外鍵)
SALARY————工資(默認值:5000)
說明:
BED ————病床號(主鍵)
STATE ————病床狀態(約束:free/employ)
需要注意的是,關系型數據庫提供了三類完整性規則,實體完整性規則,參照完整性規則,用戶自定義完成性規則:
(1)實體完整性規則:實體完整性規則是指關系的主屬性(就是俗稱主鍵的一些字段,主鍵的組成部分)不能為空值。
(2)參照完整性規則:指如果關系的外鍵R1和關系R2的主鍵相符,那么外鍵的每個值必須在關系R2中主鍵的值中可以找到或者是空值。
(3)用戶自定義的完整性規則:是指某一具體的實際數據庫的約束條件,由應用環境所決定,反映某一具體應用所涉及的數據必須滿足的要求(比如說一個人的年齡必須要大于零),根據現實生活中的一個實際情況用戶定義的一個用戶自定義完整性。
例如上表中,床位狀態約束、email地址等等。
2.4 數據庫的建立
2.4.1 數據庫的建立(表的創建與約束)
2.4.2 初始數據的輸入
數據庫初始數據輸入可以用SQL語句插入也可以直接在可視化表內輸入。
添加數據到tms表中:
INSERT INTO tms VALUES(‘admin’,’admin’,’GG’)
INSERT INTO tms VALUES(‘S66’,’S66’,’HH’)
添加數據到chuang表中:
添加數據到job表中:
數據添加到dept表中:
其他數據可以不初始化,而在軟件直接輸入保存在數據庫。
三、各功能模塊的設計與實現
3.1 功能說明
(1)各類信息的錄入。
? ? 此功能設計在菜單欄上,分別有員工信息錄入、病人信息錄入、病床信息錄入、儀器信息錄入、藥劑信息錄入、崗位信息錄入、部門信息錄入。點擊相應按鈕進入相應的信息錄入界面。需要注意的是,一、因為各類數據有著密切聯系的原因,錄入界面的輸入框和選擇框需要進行數據輸入約束,比如:在錄入病人信息的時候,病床號的信息必須是已經存在并且為空閑狀態的病床。二、在進行對數據庫的操作的時候,往往需要創建一個事務,比如:錄入員工信息的同時,員工工資的錄入。
(2)員工信息的管理。
? ? 員工信息的錄入已經在錄入模塊,那么員工信息的管理界面中,有一個表格視圖用于數據顯示,另外有六個按鈕,分別為員工一覽按鈕、條件查詢員工信息按鈕、刪除信息按鈕、員工信息修改按鈕、工資報表按鈕和人事調動按鈕。
? ? 其中員工一覽按鈕將員工信息顯示在本界面中的表格視圖,而其他的按鈕,點擊之后分別進入相應的信息管理界面,值得一提的是,工資報表按鈕和人事調動按鈕點擊之后不能立即進入管理界面,需要進行權限認證,輸入的管理員帳號和密碼與tms表中的超級管理員數據相對應才能進入管理界面。
? ? 條件查詢員工信息界面,可根據各字段對應的信息進行查詢,將查詢結果顯示于本界面中的表格視圖。
? ? 刪除信息界面,分為鼠標單擊單行進行刪除和根據字段信息進行批量刪除。
? ? 員工信息修改界面,除了需要權限才可以訪問的信息之外,其他信息可以在此頁面更改,修改方式是根據輸入需要修改的記錄與相應的字段信息。
? ? ?工資報表界面是需要權限才能進入的,一個表格視圖顯示數據,兩個按鈕分別是查看報表和打印報表。另外在菜單欄還有一個工資信息修改按鈕,進入工資信息修改界面。
? ? 人事調動界面也是需要權限才能進入的,界面內可以對員工的所屬部門、所在崗位、職務等等信息的修改。
(3)病人信息的管理。
? ? 病人信息管理界面實現了數據的顯示,以及數據的刪查改操作。查詢操作分所有病人查詢和條件查詢。修改操作是根據輸入需要修改的記錄與相應的字段信息。刪除操作分為鼠標單擊單行進行刪除和根據字段信息進行批量刪除。(需要注意的是:刪除操作會影響病床的狀態,變為free)每次執行操作后都會將操作后的信息顯示在表格視圖。
(4)醫院病床的管理。
病床管理界面實現了查詢操作,分所有病人查詢和條件查詢。床位信息錄入在菜單欄處。需要注意的是:病床信息錄入的時候,狀態默認值為free狀態,而病人信息錄入的時候,所選的病床號將變為?employ狀態,病人信息刪除操作會由?employ狀態變為free狀態。
(5)儀器資源的管理。
? ? 儀器資源管理界面實現了數據的顯示,以及數據的刪查改操作。查詢操作分所有病人查詢和條件查詢。修改操作是根據輸入需要修改的記錄與相應的字段信息。刪除操作分為鼠標單擊單行進行刪除和根據字段信息進行批量刪除。每次執行操作后都會將操作后的信息顯示在表格視圖。
(6)藥劑資源的管理。
? ? 藥劑資源管理界面實現了數據的顯示,以及數據的刪查改操作。查詢操作分所有病人查詢和條件查詢。修改操作是根據輸入需要修改的記錄與相應的字段信息。刪除操作分為鼠標單擊單行進行刪除和根據字段信息進行批量刪除。每次執行操作后都會將操作后的信息顯示在表格視圖。
(7)部門崗位信息的查詢。
? ? 部門崗位信息查詢界面只實現了所有部門信息和所有崗位信息的查詢。
(8)系統用戶管理、權限管理。
? ? 本系統有兩個管理員,一個是普通管理員,另一個是超級管理員。兩個管理員都可以登錄本系統,而且歡迎界面會不同。另外只有超級管理員才有權限進入工資報表界面和人事調動界面。
3.2 用戶界面設計(部分)
完成數據庫創建和功能說明以后,我們可以進行下一步工作, 即設計用戶界面。本系統的前端制作用的是QT Creator(C++),我們設計好醫院管理系統的窗體,如下圖所示。
(1)系統登錄歡迎界面及主界面設計
(2)員工管理模塊主界面及子頁面
(3)菜單欄模塊及子頁面
3.3 各功能模塊的實現(部分)
????下面是部分功能的核心代碼,雖說部分,但是對數據庫數據的增刪查改都已經實現了,而且不同數據的很多相同操作都有異曲同工之妙的。遺憾的是還沒學會使用事務處理數據,只能按先后順序操作。
(1)數據庫的連接
本系統前端和后端數據庫的連接使用的是ODBC數據源方式,實現的代碼如下:
void OpenDatabase() {QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");db.setDatabaseName(QString("DRIVER={SQL SERVER};""SERVER=%1;" //服務器名稱"DATABASE=%2;"//數據庫名).arg("HASEE-PC\\SQLEXPRESS").arg("hospital"));if (!db.open()){QMessageBox::critical(0, qApp->tr("Cannot open database"),db.lastError().databaseText(), QMessageBox::Cancel);} }(2)員工管理模塊設計
員工一覽:
void MainWindow::on_pushButton_5_clicked() {QSqlQueryModel *model = new QSqlQueryModel;model->setQuery("select * from personnel");//這里直接設置SQL語句,忽略最后一個參數ui->tableView_2->setModel(model);//以下是視覺方面的效果,不加也沒影響//隔行變色ui->tableView_2->setAlternatingRowColors(true);//設置行高int row_count = model->rowCount();for(int i =0; i < row_count; i++){ui->tableView_2->setRowHeight(i, 20);} }工資報表:
void Salary::on_pushButton_clicked() {QSqlQueryModel *model = new QSqlQueryModel;model->setQuery("select * from salary");//這里直接設置SQL語句,忽略最后一個參數ui->tableView->setModel(model);//以下是視覺方面的效果,不加也沒影響//隔行變色ui->tableView->setAlternatingRowColors(true);//設置行高int row_count = model->rowCount();for(int i =0; i < row_count; i++){ui->tableView->setRowHeight(i, 20);} }人事調動:
void Change::on_pushButton_clicked() {QMessageBox::StandardButton button;button = QMessageBox::question(this, tr("確認"),QString(tr("是否修改此信息?")),QMessageBox::Yes | QMessageBox::No);if (button == QMessageBox::No) {this->close(); //忽略退出信號,程序繼續運行}else if (button == QMessageBox::Yes) {QSqlQueryModel *model = new QSqlQueryModel;QString temStr,strSQL="update personnel set ";temStr="emp_dept_id=";strSQL+=temStr;strSQL+=""+this->ui->comboBox_2->currentText()+",";strSQL+="emp_duty=";strSQL+="'"+this->ui->a->text().trimmed()+"',";strSQL+="emp_job_id=";strSQL+=""+this->ui->comboBox_3->currentText()+"";strSQL+=" where emp_no=";strSQL+=""+this->ui->comboBox->currentText()+"";// query.exec(QObject::tr("update potion set id=333 where id=5"));// qDebug()<<strSQL;model->setQuery(strSQL);QMessageBox msgBox;msgBox.setText("修改成功");msgBox.exec();this->close();} }條件查詢員工信息:
void PersonnelCha::on_pushButton_clicked() {QSqlQueryModel *model = new QSqlQueryModel;QString temStr,strSQL="SELECT * FROM personnel where ";temStr=this->ui->comboBox->currentText();strSQL+=temStr+"=";strSQL+="'"+this->ui->a->text()+"'";model->setQuery(strSQL);//這里直接設置SQL語句,忽略最后一個參數ui->tableView->setModel(model);//以下是視覺方面的效果,不加也沒影響//隔行變色ui->tableView->setAlternatingRowColors(true);//設置行高int row_count = model->rowCount();for(int i =0; i < row_count; i++){ui->tableView->setRowHeight(i, 20);} }(3)病人管理模塊設計
病人信息修改:
void MainWindow::on_pushButton_22_clicked() {// QSqlQuery query;QSqlQueryModel *model = new QSqlQueryModel;QString temStr,strSQL="update patient set ";temStr=this->ui->comboBox_10->currentText();strSQL+=temStr+"=";strSQL+="'"+this->ui->patient_updata->text().trimmed()+"'";strSQL+=" where patient_name=";strSQL+="'"+this->ui->patient_id->text().trimmed()+"'";// query.exec(QObject::tr("update potion set id=333 where id=5"));model->setQuery(strSQL);//這里直接設置SQL語句,忽略最后一個參數model->setQuery("select * from patient");//這里直接設置SQL語句,忽略最后一個參數ui->tableView->setModel(model);//以下是視覺方面的效果,不加也沒影響//隔行變色ui->tableView->setAlternatingRowColors(true);//設置行高int row_count = model->rowCount();for(int i =0; i < row_count; i++){ui->tableView->setRowHeight(i, 20);} }(4)病床管理模塊設計
病床查詢:
void MainWindow::on_pushButton_13_clicked() {QSqlQueryModel *model = new QSqlQueryModel;QString temStr,strSQL="SELECT * FROM chuang where ";temStr=this->ui->comboBox_3->currentText();strSQL+=temStr+"=";strSQL+="'"+this->ui->chuang_cha->text()+"'";model->setQuery(strSQL);//這里直接設置SQL語句,忽略最后一個參數ui->tableView_3->setModel(model);//以下是視覺方面的效果,不加也沒影響//隔行變色ui->tableView_3->setAlternatingRowColors(true);//設置行高int row_count = model->rowCount();for(int i =0; i < row_count; i++){ui->tableView_3->setRowHeight(i, 20);} }項目代碼:GitHub - Killzone-CN/Hospital: 這是一個使用QT編寫的醫院管理系統。。。。。。。
總結
以上是生活随笔為你收集整理的QT实现简单的医院管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GD32低功耗:深度睡眠唤醒系统时钟变慢
- 下一篇: 《医院管理系统》项目研发总结