记录这两个星期完成的qt依靠文件以及链表实现简易HIS系统,成就感拉满好吗!
有一些刷新表的操作为了图方便就没有封装成保护方法
内存管理存粹依靠qt的对象树
/*************************************/
//main.cpp
/*************************************/
#include "Mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
/**************************************************/
//人抽象类.h
/**************************************************/
#ifndef PERSON_H
#define PERSON_H
#include <QObject>
#include <QString>
class Person : public QObject
{
Q_OBJECT
public:
explicit Person(QObject *parent = nullptr);
virtual QString getName();
virtual int getAge();
virtual void setName(QString _name);
virtual void setAge(int _age);
virtual int getAccount();
virtual int getPassword();
virtual int getIdentity() = 0;
protected:
int m_Account;
int m_Password;
QString m_Name;
int m_Age;
int m_Identity; //1、挂号收费人员 2、医生 3、药房工作人员 4、病人
};
#endif // PERSON_H
/**************************************************/
//人抽象类.cpp
/**************************************************/
#include "Person.h"
Person::Person(QObject *parent) : QObject(parent)
{
}
QString Person::getName()
{
return this->m_Name;
}
int Person::getAge()
{
return this->m_Age;
}
void Person::setName(QString _name)
{
this->m_Name = _name;
}
void Person::setAge(int _age)
{
this->m_Age = _age;
}
int Person::getAccount()
{
return this->m_Account;
}
int Person::getPassword()
{
return this->m_Password;
}
/*************************************/
//挂号收费工作人员.h
/*************************************/
#ifndef CHARGESTAFF_H
#define CHARGESTAFF_H
#include "Person.h"
class ChargeStaff : public Person
{
public:
ChargeStaff(int _account,int _password,QString _name,int _identity);
int getIdentity();
};
#endif // CHARGESTAFF_H
/**************************************************/
//挂号收费人员.cpp
/**************************************************/
#include "ChargeStaff.h"
ChargeStaff::ChargeStaff(int _account,int _password,QString _name,int _identity)
{
this->m_Name = _name;
this->m_Account = _account;
this->m_Password = _password;
this->m_Identity = _identity;
}
int ChargeStaff::getIdentity()
{
return 1;
}
/**************************************************/
//医生.h
/**************************************************/
#ifndef DOCTOR_H
#define DOCTOR_H
#include "Person.h"
class Doctor : public Person
{
public:
Doctor(int _account,int _password, QString _name,int _identity);
int getIdentity();
};
#endif // DOCTOR_H
/**************************************************/
//医生.cpp
/**************************************************/
#include "Doctor.h"
Doctor::Doctor(int _account,int _password,QString _name,int _identity)
{
this->m_Name = _name;
this->m_Account = _account;
this->m_Password = _password;
this->m_Identity = _identity;
}
int Doctor::getIdentity()
{
return 2;
}
/**************************************************/
//药房工作人员.h
/**************************************************/
#ifndef PHARMACYSTAFF_H
#define PHARMACYSTAFF_H
#include "Person.h"
class PharmacyStaff : public Person
{
public:
PharmacyStaff(int _account,int _password, QString _name,int _identity);
int getIdentity();
};
#endif // PHARMACYSTAFF_H
/**************************************************/
//药房工作人员.cpp
/**************************************************/
#include "PharmacyStaff.h"
PharmacyStaff::PharmacyStaff(int _account,int _password, QString _name,int _identity)
{
this->m_Name = _name;
this->m_Account = _account;
this->m_Password = _password;
this->m_Identity = _identity;
}
int PharmacyStaff::getIdentity()
{
return 3;
}
/**************************************************/
//医生操作界面.h
/**************************************************/
#ifndef DOCTORDIALOG_H
#define DOCTORDIALOG_H
#include <QDialog>
#include <QIntValidator>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QStandardItemModel>
#include "Medicine.h"
#include "Patient.h"
namespace Ui {
class Doctordialog;
}
class Doctordialog : public QDialog
{
Q_OBJECT
public:
explicit Doctordialog(QList<Medicine*>& medicineofList, QList<Patient*>& patientofList, QWidget *parent = nullptr);
~Doctordialog();
private slots:
void on_makesure_pushButton_clicked();
void on_medicine_table_pushButton_clicked();
void on_doctorGiveMedicinepushButton_clicked();
void on_finish_pushButton_clicked();
void on_back_pushButton_clicked();
void on_exit_pushButton_clicked();
void on_refresh_pushButton_clicked();
private:
Ui::Doctordialog *ui;
QList<Medicine*>* medicineList;
QList<Patient*>* patientList;
};
#endif // DOCTORDIALOG_H
/**************************************************/
//医生操作界面.cpp
/**************************************************/
#include "Doctordialog.h"
#include "ui_Doctordialog.h"
#include <QString>
#include <QDebug>
Doctordialog::Doctordialog(QList<Medicine*>& medicineofList,QList<Patient*>& patientofList,QWidget *parent) :
QDialog(parent),
ui(new Ui::Doctordialog)
{
//初始化以及控件限制条件
ui->setupUi(this);
this->setWindowTitle("医生界面");
this->medicineList = &medicineofList;
this->patientList = &patientofList;
ui->patientNum_lineEdit->setMaxLength(6);
ui->patientNum_lineEdit->setValidator(new QIntValidator(000000,999999,this));
ui->medicine_Num_lineEdit->setMaxLength(1);
ui->medicine_Num_lineEdit->setValidator(new QIntValidator(0,9,this));
ui->medicineAccount_lineEdit->setMaxLength(5);
ui->medicineAccount_lineEdit->setValidator(new QIntValidator(00000,99999,this));
ui->widget_4->hide();
ui->medicine_control_widget->hide();
ui->medicine_table_pushButton->setEnabled(false);
ui->medicine_list_textEdit->setReadOnly(true);
ui->finish_pushButton->setEnabled(false);
ui->medicine_Num_lineEdit->setEnabled(false);
ui->medicineAccount_lineEdit->setEnabled(false);
ui->back_pushButton->setEnabled(false);
//设置病人表
QStandardItemModel *model = new QStandardItemModel();
model->setColumnCount(3);
model->setHeaderData(0,Qt::Horizontal,QString::fromUtf8("病人编号"));
model->setHeaderData(1,Qt::Horizontal,QString::fromUtf8("病人姓名"));
model->setHeaderData(2,Qt::Horizontal,QString::fromUtf8("是否完成诊断"));
ui->patientInfo_tableView->setModel(model);
int i = 0;
for(QList<Patient*>::iterator it = this->patientList->begin(); it != this->patientList->end();it++)
{
int account = (*it)->getNumber();
QString name = (*it)->getName();
model->setItem(i,0,new QStandardItem(QString::number(account)));
model->setItem(i,1,new QStandardItem(name));
QString filename1 = "D:/QT/QTprojects/HIS_QT/record/IsSeenADoctor/";
filename1 += QString::number((*it)->getNumber());
filename1 += ".txt";
QFile file1(filename1);
if(file1.exists())
{
model->setItem(i,2,new QStandardItem("√"));
}
else
{
model->setItem(i,2,new QStandardItem("×"));
}
ui->patientInfo_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->patientInfo_tableView->setModel(model);
i++;
}
}
Doctordialog::~Doctordialog()
{
delete ui;
}
void Doctordialog::on_makesure_pushButton_clicked()
{
if(ui->patientNum_lineEdit->text().length() < 6)
{
QMessageBox::warning(this,"医院信息系统病人账号警告","病人账号输入有误,请重新输入!");
ui->patientNum_lineEdit->clear();
ui->medicine_control_widget->hide();
ui->medicine_table_pushButton->setEnabled(false);
ui->name_label->clear();
ui->age_label->clear();
ui->sexy_label->clear();
}
else
{
bool flag = true;
for(QList<Patient*>::iterator it = this->patientList->begin(); it != this->patientList->end(); it++)
{
if((*it)->getNumber() == ui->patientNum_lineEdit->text().toInt())
{
QString filename1 = "D:/QT/QTprojects/HIS_QT/record/IsSeenADoctor/";
filename1 += ui->patientNum_lineEdit->text();
filename1 += ".txt";
QFile file(filename1);
if(!file.exists())
{
ui->name_label->setText((*it)->getName());
ui->age_label->setText(QString::number((*it)->getAge()));
if((*it)->getSexy() == 1)
{
ui->sexy_label->setText("男");
}
if((*it)->getSexy() == 0)
{
ui->sexy_label->setText("女");
}
flag = false;
ui->medicine_table_pushButton->setEnabled(true);
ui->doctorGiveMedicinepushButton->setEnabled(false);
ui->patientNum_lineEdit->setReadOnly(true);
ui->back_pushButton->setEnabled(true);
ui->makesure_pushButton->setEnabled(false);
ui->medicine_control_widget->hide();
ui->tableView->hide();
ui->widget_4->show();
break;
}
else
{
QMessageBox::warning(this,"医院信息系统病人账号警告","病人已就诊,请重新挂号!");
flag = false;
}
}
}
if(flag)
{
QMessageBox::warning(this,"医院信息系统病人账号警告","没有此病例,请重新输入!");
ui->patientNum_lineEdit->clear();
ui->name_label->clear();
ui->age_label->clear();
ui->sexy_label->clear();
ui->medicine_control_widget->hide();
ui->medicine_table_pushButton->setEnabled(false);
}
}
}
//开药表按钮
void Doctordialog::on_medicine_table_pushButton_clicked()
{
ui->tableView->show();
ui->medicine_control_widget->show();
ui->doctorGiveMedicinepushButton->setEnabled(true);
ui->medicine_Num_lineEdit->setEnabled(true);
ui->medicineAccount_lineEdit->setEnabled(true);
ui->back_pushButton->setEnabled(false);
ui->makesure_pushButton->setEnabled(false);
//设置药物表
QStandardItemModel *model = new QStandardItemModel();
model->setColumnCount(4);
model->setHeaderData(0,Qt::Horizontal,QString::fromUtf8("药物编号"));
model->setHeaderData(1,Qt::Horizontal,QString::fromUtf8("药物名称"));
model->setHeaderData(2,Qt::Horizontal,QString::fromUtf8("药物库存"));
model->setHeaderData(3,Qt::Horizontal,QString::fromUtf8("药物价格"));
ui->tableView->setModel(model);
int i = 0;
for(QList<Medicine*>::iterator it = this->medicineList->begin(); it!= this->medicineList->end();it++)
{
int account = (*it)->getNumber();
QString name = (*it)->getName().toUtf8();
int store = (*it)->getStore();
int value = (*it)->getValue();
model->setItem(i,0,new QStandardItem(QString::number(account)));
model->setItem(i,1,new QStandardItem(name));
model->setItem(i,2,new QStandardItem(QString::number(store)));
model->setItem(i,3,new QStandardItem(QString::number(value)));
if(store < 10)
{
model->item(i,0)->setForeground(QBrush(QColor(255, 0, 0)));
model->item(i,1)->setForeground(QBrush(QColor(255, 0, 0)));
model->item(i,2)->setForeground(QBrush(QColor(255, 0, 0)));
model->item(i,3)->setForeground(QBrush(QColor(255, 0, 0)));
}
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
ui->tableView->setModel(model);
i++;
}
ui->kaiyao_widget->show();
}
//开药按钮
void Doctordialog::on_doctorGiveMedicinepushButton_clicked()
{
ui->back_pushButton->setEnabled(false);
int account = ui->medicineAccount_lineEdit->text().toInt();
if(!ui->medicine_Num_lineEdit->text().isEmpty())
{
int num = ui->medicine_Num_lineEdit->text().toInt();
bool flag = true;
int patient = ui->patientNum_lineEdit->text().toInt();
QList<Patient*>::iterator itp;
for(itp = this->patientList->begin();itp!=this->patientList->end();itp++)
{
if((*itp)->getNumber() == patient)
{
break;
}
}
for(QList<Medicine*>::iterator it = this->medicineList->begin(); it != this->medicineList->end(); it++)
{
if(account == (*it)->getNumber())
{
if(num == 0)
{
QMessageBox::critical(this,"开药错误","不允许开药数目为0!");
flag = false;
}
else if(num <= (*it)->getStore())
{
QString string = (*it)->getName() + QString::number(num) +"盒";
(*it)->minusStore(num);
QMessageBox::information(this,"开药成功",string);
flag = false;
QFile file;
QString filename = "D:/QT/QTprojects/HIS_QT/patientInfo/medicineforPatient/";
filename += QString::number((*itp)->getNumber());
filename += ".txt";
file.setFileName(filename);
file.open(QFile::WriteOnly|QFile::Append);
QTextStream out(&file);
out<<(*it)->getNumber()<<endl;
out<<(*it)->getValue()<<endl;
out<<num<<endl;
file.close();
//给药房处方
QString filename2 = "D:/QT/QTprojects/HIS_QT/fangzi/";
filename2 += ui->patientNum_lineEdit->text();
filename2 += ".txt";
QFile file2(filename2);
file2.open(QIODevice::WriteOnly|QIODevice::Append);
QTextStream out2(&file2);
out2.setCodec("UTF-8");
out2<<"------------"<<endl;
out2<<(*it)->getName()<<endl;
out2<<num<<endl;
file2.close();
//显示已配药物
QString medicinelist;
medicinelist = QString::number((*it)->getNumber());
medicinelist += " ";
medicinelist += (*it)->getName();
medicinelist += " ";
medicinelist += QString::number(num);
medicinelist += "盒 ";
medicinelist += QString::number((*it)->getValue()*num);
medicinelist += "元";
ui->medicine_list_textEdit->moveCursor(QTextCursor::Start);
QString temp;
ui->medicine_list_textEdit->insertPlainText(temp += "\n");
ui->medicine_list_textEdit->insertPlainText(medicinelist);
//更新显示的药表
//设置药物表
QStandardItemModel *model = new QStandardItemModel();
model->setColumnCount(4);
model->setHeaderData(0,Qt::Horizontal,QString::fromUtf8("药物编号"));
model->setHeaderData(1,Qt::Horizontal,QString::fromUtf8("药物名称"));
model->setHeaderData(2,Qt::Horizontal,QString::fromUtf8("药物库存"));
model->setHeaderData(3,Qt::Horizontal,QString::fromUtf8("药物价格"));
ui->tableView->setModel(model);
int i = 0;
for(QList<Medicine*>::iterator it = this->medicineList->begin(); it!= this->medicineList->end();it++)
{
int account = (*it)->getNumber();
QString name = (*it)->getName();
int store = (*it)->getStore();
i