qt依靠文件以及链表实现简易HIS系统

记录这两个星期完成的qt依靠文件以及链表实现简易HIS系统,成就感拉满好吗!

有一些刷新表的操作为了图方便就没有封装成保护方法

内存管理存粹依靠qt的对象树

/*************************************/

 

//main.cpp

 

/*************************************/

 

#include "Mainwindow.h"

#include <QApplication>

 

int main(int argcchar *argv[])

{

    QApplication a(argcargv);

    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 _passwordQString _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 _passwordQString _name,int _identity);

 

    int getIdentity();

};

#endif // PHARMACYSTAFF_H

 

/**************************************************/

 

//药房工作人员.cpp

 

/**************************************************/

 

#include "PharmacyStaff.h"

 

PharmacyStaff::PharmacyStaff(int _account,int _passwordQString _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*>& medicineofListQList<Patient*>& patientofListQWidget *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(25500)));

            model->item(i,1)->setForeground(QBrush(QColor(25500)));

            model->item(i,2)->setForeground(QBrush(QColor(25500)));

            model->item(i,3)->setForeground(QBrush(QColor(25500)));

        }

        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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值