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 数据库的建立表的创建与约束

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[potion]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[potion](
	[药剂代号] [int] NOT NULL,
	[药剂名称] [varchar](50) NULL,
	[药剂价格] [int] NULL,
	[药剂库存数量] [int] NULL,
	[备注] [varchar](50) NULL,
 CONSTRAINT [PK_potion] PRIMARY KEY CLUSTERED 
(
	[药剂代号] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[apparatus]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[apparatus](
	[仪器代号] [int] NOT NULL,
	[仪器名称] [varchar](50) NULL,
	[仪器价格] [int] NULL,
	[仪器数量] [int] NULL,
	[备注] [varchar](50) NULL,
 CONSTRAINT [PK_apparatus] PRIMARY KEY CLUSTERED 
(
	[仪器代号] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tms]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[tms](
	[TMS_USER] [varchar](50) NOT NULL,
	[TMS_PSWD] [varchar](50) NULL,
	[TMS_GG] [varchar](50) NULL,
 CONSTRAINT [PK_tms] PRIMARY KEY CLUSTERED 
(
	[TMS_USER] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[chuang]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[chuang](
	[BED] [varchar](50) NOT NULL,
	[STATE] [varchar](50) NULL,
 CONSTRAINT [PK_chuang_1] PRIMARY KEY CLUSTERED 
(
	[BED] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[dept]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[dept](
	[dept_id] [int] NOT NULL,
	[dept_name] [varchar](50) NULL,
	[dept_manager] [int] NULL,
	[dept_vicemanager] [int] NULL,
 CONSTRAINT [PK_dept] PRIMARY KEY CLUSTERED 
(
	[dept_id] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[job]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[job](
	[job_id] [int] NOT NULL,
	[job_name] [varchar](50) NULL,
	[dept_id] [int] NULL,
 CONSTRAINT [PK_job] PRIMARY KEY CLUSTERED 
(
	[job_id] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[salary]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[salary](
	[EMP_NO] [int] NOT NULL,
	[SALARY] [int] NULL CONSTRAINT [DF_salary_SALARY]  DEFAULT ((5000)),
 CONSTRAINT [PK_salary] PRIMARY KEY CLUSTERED 
(
	[EMP_NO] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[patient]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[patient](
	[patient_name] [varchar](50) NOT NULL,
	[patient_gender] [varchar](50) NULL,
	[patient_date_start] [varchar](50) NULL,
	[patient_dept] [varchar](50) NULL,
	[patient_state] [varchar](50) NULL,
	[patient_doc] [int] NULL,
	[patient_room] [int] NULL,
	[patient_bed] [varchar](50) NULL,
 CONSTRAINT [PK_patient] PRIMARY KEY CLUSTERED 
(
	[patient_name] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[personnel]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[personnel](
	[emp_no] [int] NOT NULL,
	[emp_name] [varchar](50) NULL,
	[emp_dept_id] [int] NULL,
	[emp_duty] [varchar](50) NULL,
	[emp_xl] [varchar](50) NULL,
	[emp_gender] [varchar](50) NULL,
	[emp_birthday] [varchar](50) NULL,
	[emp_hometown] [varchar](50) NULL,
	[emp_couniry] [varchar](50) NULL,
	[emp_nation] [varchar](50) NULL,
	[emp_id] [varchar](50) NULL,
	[emp_marriage] [varchar](50) NULL,
	[emp_health] [varchar](50) NULL,
	[emp_startwork] [varchar](50) NULL,
	[emp_state] [varchar](50) NULL,
	[emp_homeaddress] [varchar](50) NULL,
	[emp_teleno] [varchar](50) NULL,
	[emp_email] [varchar](50) NULL,
	[emp_job_id] [int] NULL,
 CONSTRAINT [PK_personnel] PRIMARY KEY CLUSTERED 
(
	[emp_no] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_job_dept]') AND parent_object_id = OBJECT_ID(N'[dbo].[job]'))
ALTER TABLE [dbo].[job]  WITH CHECK ADD  CONSTRAINT [FK_job_dept] FOREIGN KEY([dept_id])
REFERENCES [dbo].[dept] ([dept_id])
ON UPDATE CASCADE
ON DELETE SET NULL
GO
ALTER TABLE [dbo].[job] CHECK CONSTRAINT [FK_job_dept]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_salary_personnel]') AND parent_object_id = OBJECT_ID(N'[dbo].[salary]'))
ALTER TABLE [dbo].[salary]  WITH CHECK ADD  CONSTRAINT [FK_salary_personnel] FOREIGN KEY([EMP_NO])
REFERENCES [dbo].[personnel] ([emp_no])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[salary] CHECK CONSTRAINT [FK_salary_personnel]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_patient_chuang]') AND parent_object_id = OBJECT_ID(N'[dbo].[patient]'))
ALTER TABLE [dbo].[patient]  WITH CHECK ADD  CONSTRAINT [FK_patient_chuang] FOREIGN KEY([patient_bed])
REFERENCES [dbo].[chuang] ([BED])
ON UPDATE CASCADE
ON DELETE SET NULL
GO
ALTER TABLE [dbo].[patient] CHECK CONSTRAINT [FK_patient_chuang]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_patient_personnel1]') AND parent_object_id = OBJECT_ID(N'[dbo].[patient]'))
ALTER TABLE [dbo].[patient]  WITH CHECK ADD  CONSTRAINT [FK_patient_personnel1] FOREIGN KEY([patient_doc])
REFERENCES [dbo].[personnel] ([emp_no])
ON UPDATE CASCADE
ON DELETE SET NULL
GO
ALTER TABLE [dbo].[patient] CHECK CONSTRAINT [FK_patient_personnel1]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_personnel_job]') AND parent_object_id = OBJECT_ID(N'[dbo].[personnel]'))
ALTER TABLE [dbo].[personnel]  WITH CHECK ADD  CONSTRAINT [FK_personnel_job] FOREIGN KEY([emp_job_id])
REFERENCES [dbo].[job] ([job_id])
ON UPDATE CASCADE
ON DELETE SET NULL
GO
ALTER TABLE [dbo].[personnel] CHECK CONSTRAINT [FK_personnel_job]

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);
    }
}

 

项目代码:https://github.com/Killzone-CN/Hospital

 

猜你喜欢

转载自blog.csdn.net/qq_34490018/article/details/81188829