当前位置: 代码迷 >> MySQL >> 基于RFID,QT,MYSQL开发的治疗电子病历系统
  详细解决方案

基于RFID,QT,MYSQL开发的治疗电子病历系统

热度:138   发布时间:2016-05-05 16:57:18.0
基于RFID,QT,MYSQL开发的医疗电子病历系统

没事做,跟着模版随便做了一个电子病历系统,功能很简陋,界面也不太好看,各位大神看到别见怪啊~

 

功能包括有通过RFID读写器读取S50卡中的卡号把病人详细信息存入数据库、通过RFID读写器读取S50卡把病人的详细信息从数据库中进行读取并显示到QT程序界面上、在QT程序中进行病人信息的查询,包括修改与删除、计费功能(通过读取卡号,可进行对账户的充值与扣费)

随着物联网技术的成熟,物联网可以应用到各方各面,无论家居,农业,医疗等等都可以利用到物联网技术。而物联网技术的核心技术有:应用技术、网络技术和感知技术。我们所设计的系统正正利用了物联网的核心技术:感知技术中的RFID。在以前,病人去医院看病必须带上病历,而纸质不易保存,易潮,易脏。于是我们设计的电子病历既解决了纸质病历的问题,更加在此中增加了结算和电子钱包的功能。

 

电子病历是高质量,更快捷,更方便的医疗系统,电子病历不仅可以用于病人的随身携带,而且只需要带一张不到20克的卡,就可以不带钱去看医生。电子病历系统更加合理化,信息化,对医院也便于统计和整理病人数据。所以电子病历对医院和病人都有着莫大的好处,电子病历在当今社会是发展趋势。

1.  用户:

(1)       随身携带:轻便,简单。

(2)       电子钱包:预存费用,方便结算。

2.  医生:

(1)       过往病史:方便医生对症下药,对过往病史、过敏病史清楚了解。

(2)       记录病历:写入数据库,节约资源。

3.  管理员:

(1)       用户管理:用户的增加,删除,修改,查询。

(2)       余额管理:用户余额的增加与减少。

 

管理员登陆相关代码:

dialog.h

#ifndef DIALOG_H

#define DIALOG_H

#include <QDialog>

namespace Ui {

class Dialog;

}

class Dialog : public QDialog

{

    Q_OBJECT

 

public:

    explicit Dialog(QWidget *parent = 0);

    ~Dialog();

 

private slots:

    void on_login_clicked();

    void on_cancel_clicked();

private:

    Ui::Dialog *ui;

};

#endif // DIALOG_H

dialog.cpp

#include "dialog.h"

#include "ui_dialog.h"

#include"QMessageBox"

#include"mainwindow.h"

Dialog::Dialog(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::Dialog)

{

    ui->setupUi(this);

}

 

Dialog::~Dialog()

{

    delete ui;

}

void Dialog::on_login_clicked()

{

    if(ui->username->text().trimmed()=="admin" && ui->password->text().trimmed()=="admin")

    {

 

        MainWindow *m=new MainWindow;

        m->show();

        this->hide();

    }

    else

    {

        QMessageBox::critical(this,"error",tr("用户名或密码出错!"));

    }

}

 

void Dialog::on_cancel_clicked()

{

    this->close();

}

                                                                                            

RFID读卡界面相关代码:

reader.h

#ifndef    READER_H

#define READER_H

//#include "function.h"         

#include <QLibrary>

#include <QDebug>

#include "function.h"    

class Reader

{

public:

    Reader(QWidget *parent);

    ~Reader();

    bool LoadDll();

    bool CloseDll();

    MF_Read_Func MF_Read;

    MF_Write_Func MF_Write;

    MF_InitValue_Func MF_InitValue;

    MF_Dec_Func MF_Dec;

    MF_Inc_Func MF_Inc;

    MF_Halt_Func MF_Halt;

    MF_Getsnr_Func MF_Getsnr;

    ControlBuzzer_Func ControlBuzzer;

    ControlLED_Func ControlLED;

    GetVersionNum_Func GetVersionNum;

    SetSerNum_Func SetSerNum;

    GetSerNum_Func GetSerNum;    

    TypeB_Request_Func TypeB_Request;

    TYPEB_SFZSNR_Func TYPEB_SFZSNR;

       TypeB_TransCOS_Func TypeB_TransCOS;

    UL_Request_Func UL_Request;

    UL_HLRead_Func UL_HLRead;

    UL_HLWrite_Func UL_HLWrite;

    ISO15693_Inventory_Func ISO15693_Inventory;

    ISO15693_Read_Func ISO15693_Read;

    ISO15693_Write_Func ISO15693_Write;

       ISO15693_GetSysInfo_Func ISO15693_GetSysInfo;

       ISO15693_Lock_Func ISO15693_Lock;

       ISO15693_Select_Func ISO15693_Select;

       ISO15693_WriteAFI_Func ISO15693_WriteAFI;

       ISO15693_LockAFI_Func ISO15693_LockAFI;

       ISO15693_WriteDSFID_Func ISO15693_WriteDSFID;

       ISO15693_LockDSFID_Func ISO15693_LockDSFID;

       ISO15693_GetMulSecurity_Func ISO15693_GetMulSecurity;

private:

    QLibrary *functionLib;

    int DeviceAddress;

};

#endif

reader.cpp

#include "reader.h"

#include<QMessageBox>

 

Reader::Reader(QWidget *parent)

{

       DeviceAddress = 0;

       functionLib = new QLibrary("function.dll");

       if (!LoadDll())

       {

              QMessageBox::critical(parent,"Error",QString::fromLocal8Bit("???function.dll???"));

       }

}

Reader::~Reader()

{

       CloseDll();

}

 

bool Reader::LoadDll()

{

       if ( !functionLib->load() )

       {

              qDebug()<<"Failed to load function.dll";

              return false;

       }    

       qDebug()<<"Succeed to load function.dll";

       MF_Read        = (MF_Read_Func)functionLib->resolve("MF_Read");

       MF_Write       = (MF_Write_Func)functionLib->resolve("MF_Write");

       MF_InitValue   = (MF_InitValue_Func)functionLib->resolve("MF_InitValue");

       MF_Dec         = (MF_Dec_Func)functionLib->resolve("MF_Dec");

       MF_Inc         = (MF_Inc_Func)functionLib->resolve("MF_Inc");

       MF_Halt        = (MF_Halt_Func)functionLib->resolve("MF_Halt");

    MF_Getsnr      = (MF_Getsnr_Func)functionLib->resolve("MF_Getsnr");

       ControlLED           = (ControlLED_Func)functionLib->resolve("ControlLED");

    ControlBuzzer        = (ControlBuzzer_Func)functionLib->resolve("ControlBuzzer");

       GetVersionNum        = (GetVersionNum_Func)functionLib->resolve("GetVersionNum");

    SetSerNum            = (SetSerNum_Func)functionLib->resolve("SetSerNum");

       GetSerNum            = (GetSerNum_Func)functionLib->resolve("GetSerNum");

       TypeB_Request        = (TypeB_Request_Func)functionLib->resolve("TypeB_Request");

    TYPEB_SFZSNR         = (TYPEB_SFZSNR_Func)functionLib->resolve("TYPEB_SFZSNR");

       TypeB_TransCOS          = (TypeB_TransCOS_Func)functionLib->resolve("TypeB_TransCOS");

    ISO15693_Inventory            = (ISO15693_Inventory_Func)functionLib->resolve("ISO15693_Inventory");

    ISO15693_Read                   = (ISO15693_Read_Func)functionLib->resolve("ISO15693_Read");

       ISO15693_Write                  = (ISO15693_Write_Func)functionLib->resolve("ISO15693_Write");

       ISO15693_GetSysInfo   = (ISO15693_GetSysInfo_Func)functionLib->resolve("ISO15693_GetSysInfo");

       ISO15693_Lock                   = (ISO15693_Lock_Func)functionLib->resolve("ISO15693_Lock");

       ISO15693_Select                 = (ISO15693_Select_Func)functionLib->resolve("ISO15693_Select");

       ISO15693_WriteAFI            = (ISO15693_WriteAFI_Func)functionLib->resolve("ISO15693_WriteAFI");

       ISO15693_LockAFI             = (ISO15693_LockAFI_Func)functionLib->resolve("ISO15693_LockAFI");

       ISO15693_WriteDSFID = (ISO15693_WriteDSFID_Func)functionLib->resolve("ISO15693_WriteDSFID");

       ISO15693_LockDSFID  = (ISO15693_LockDSFID_Func)functionLib->resolve("ISO15693_LockDSFID");

ISO15693_GetMulSecurity=(ISO15693_GetMulSecurity_Func)functionLib->resolve("ISO15693_GetMulSecurity");

    UL_Request           = (UL_Request_Func)functionLib->resolve("UL_Request");

       UL_HLRead            = (UL_HLRead_Func)functionLib->resolve("UL_HLRead");

    UL_HLWrite           = (UL_HLWrite_Func)functionLib->resolve("UL_HLWrite");

    if(//14443A

              MF_Read        == NULL       ||

           MF_Write            == NULL       ||

           MF_InitValue       == NULL       ||

           MF_Dec              == NULL       ||     

           MF_Inc               == NULL       ||

           MF_Getsnr          == NULL       ||

           MF_Halt             == NULL       ||

           SetSerNum            == NULL       ||

           GetSerNum           == NULL       ||

        ControlLED           == NULL       ||

           ControlBuzzer        == NULL       ||

           GetVersionNum      == NULL       ||

           TypeB_Request      == NULL       ||

           TYPEB_SFZSNR   == NULL       ||

           TypeB_TransCOS   == NULL       ||

         ISO15693_Inventory     == NULL ||

           ISO15693_Read            == NULL||

           ISO15693_Write           == NULL ||

           ISO15693_GetSysInfo == NULL ||

              ISO15693_Lock            == NULL ||

              ISO15693_Select          == NULL ||

              ISO15693_WriteAFI     == NULL ||

              ISO15693_LockAFI      == NULL ||

              ISO15693_WriteDSFID == NULL ||

              ISO15693_LockDSFID  == NULL ||

           UL_Request                 == NULL  ||

           UL_HLRead                 == NULL  ||

           UL_HLWrite                 == NULL)

       {

              qDebug()<<"Failed to resolve function";

              return false;

       }

  qDebug()<<"Succeed to resolve function";

  return true;

}

 

bool Reader::CloseDll()

{

       if(functionLib)

       {

              functionLib->unload();

              return true;

       }

       return false;

}

                                                                                           

showsick.h

#ifndef SHOWALLSICK_H

#define SHOWALLSICK_H

#include <QDialog>

#include <QtSql>

namespace Ui {

class ShowAllSick;

}

 

class ShowAllSick : public QDialog

{

    Q_OBJECT

 

public:

    explicit ShowAllSick(QWidget *parent = 0);

    ~ShowAllSick();

    void connectMySql();

private slots:

    void on_delete_2_clicked();

    void on_update_clicked();

    void on_insert_clicked();

    void gettotalrecords();

    void showdata();

    void on_select_clicked();

    void on_first_clicked();

    void on_next_clicked();

    void on_pre_clicked();

    void on_last_clicked();

    void on_go_clicked();

private:

    Ui::ShowAllSick *ui;

    QSqlTableModel *tablemodel;

    int page;

    int records;

    int totalrecords;

    int totalpages;};

#endif // SHOWALLSICK_H

showsick.cpp

#include "showsick.h"

#include "ui_showsick.h"

#include<QMessageBox>

showsick::showsick(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::showsick)

{

    ui->setupUi(this);

 

    //timer read rfid

    timer=new QTimer;

    connect(timer,SIGNAL(timeout()),this,SLOT(readcardid()));

   //rfid

    cardReader = new Reader(this);

    //mysql

    connectMySql();

}

showsick::~ showsick ()

{

    delete ui;

}

 

void showsick::on_read_clicked()

{

    if(ui->id->text()=="")

    {

    timer->start(1000);

    ui->read->setEnabled(false);

    }

    QSqlQuery query;

    query.prepare("select no,sex,intro intro,image from tbl_sick where id=?");

    query.addBindValue(ui->id->text());

    query.exec();

    if(query.next())

    {

        ui->no->setText(query.value(0).toString());

        ui->sex->setText(query.value(1).toString());

        ui->intro->setText(query.value(2).toString());

        QPixmap photo;

        photo.loadFromData(query.value(3).toByteArray());

        ui->img->setPixmap(photo.scaled(ui->img->size()));

    }}

void showsick::on_stop_clicked()

{

    timer->stop();

    ui->read->setEnabled(true);

}

//读取卡号

void showsick::readcardid()

{

    unsigned int cardid;

    unsigned char snr[7];

    unsigned char mode =00;

    int result = cardReader->UL_Request(mode, snr);

    if(result==0)

    {

    cardid= (snr[0]<<24) |(snr[1]<<16) | (snr[2]<<8) | (snr[3]);

    //根据读出的卡号查询数据

    showdata(cardid);    }}

//rfid beer

void showsick::beer()

{

    int freq =20;

    int duration = 1;

    unsigned char buffer;

    int result = cardReader->ControlBuzzer(freq, duration, &buffer);}

//mysql

void showsick::connectMySql()

{

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // becomes the new default connection

    db.setUserName("root");//用户名

    db.setPassword("root");//密码

    db.setHostName("172.16.170.47");

    db.setDatabaseName("book");//数据库名

    db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL

    db.setPort(3306);//端口

    if(db.open())

    {

          QMessageBox::information(this,"open","OK!");

    }

    else

    {

        QMessageBox::information(this,"open","False");

    }

}

//mysql

void showsick::showdata(unsigned int cardid)

{

    //根据读出的卡号查询数据

    QSqlQuery query;

    query.prepare("SELECT id,no,sex,intro,image FROM tbl_sick WHERE rfidno = ?");

    query.addBindValue(QString::number(cardid,16));

    query.exec();

    while (query.next())

     {

         if (query.isNull(0) == false)

         {

         //显示病人数据

         ui->id->setText(query.value(0).toString());//身份证

         ui->no->setText(query.value(1).toString());//姓名

         ui->intro->setText(query.value(2).toString());//病症

         ui->sex->setText(query.value(3).toString());//性别

        //显示病人头像

         QPixmap photo;

         photo.loadFromData(query.value(3).toByteArray());

         ui->img->setPixmap(photo.scaled(ui->img->size()));

          qDebug()<<"Query success";

          beer();         }

         else

         {

             qDebug()<<"Query failed";

         }     }}

                                                                                            显示全部病人信息界面:

showallsick.h

#ifndef SHOWALLSICK_H

#define SHOWALLSICK_H

#include <QDialog>

//mysql

#include <QtSql>

namespace Ui {

class ShowAllSick;}

class ShowAllSick : public QDialog

{

    Q_OBJECT

 

public:

    explicit ShowAllSick(QWidget *parent = 0);

    ~ShowAllSick();

    void connectMySql();

private slots:

    void on_delete_2_clicked();

    void on_update_clicked();

    void on_insert_clicked();

    void gettotalrecords();

    void showdata();

    void on_select_clicked();

    void on_first_clicked();

    void on_next_clicked();

    void on_pre_clicked();

    void on_last_clicked();

    void on_go_clicked();

private:

    Ui::ShowAllSick *ui;

    QSqlTableModel *tablemodel;

    int page;

    int records;

    int totalrecords;

    int totalpages;};

#endif // SHOWALLSICK_H

showallsick.cpp

#include "showallsick.h"

#include "ui_showallsick.h"

#include"sickinfo.h"

#include"updatesickinfo.h"

#include<QMessageBox>

QString globaldata;

ShowAllSick::ShowAllSick(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::ShowAllSick)

{

 

    ui->setupUi(this);

    ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Stretch);

    connectMySql();

    tablemodel=new QSqlTableModel(this);

    tablemodel->setTable("tbl_sick");

    tablemodel->setEditStrategy(QSqlTableModel::OnFieldChange);

    tablemodel->select();

    tablemodel->removeColumn(8);

    tablemodel->setHeaderData(0,Qt::Horizontal,QObject::tr("卡号"));

    tablemodel->setHeaderData(1,Qt::Horizontal,QObject::tr("姓名"));

    tablemodel->setHeaderData(2,Qt::Horizontal,QObject::tr("身份证号"));

    tablemodel->setHeaderData(3,Qt::Horizontal,QObject::tr("性别"));

    tablemodel->setHeaderData(4,Qt::Horizontal,QObject::tr("出生日期"));

    tablemodel->setHeaderData(5,Qt::Horizontal,QObject::tr("病症"));

    tablemodel->setHeaderData(6,Qt::Horizontal,QObject::tr("照片"));

    tablemodel->setHeaderData(7,Qt::Horizontal,QObject::tr("余额"));

    ui->tableView->setModel(tablemodel);}

ShowAllSick::~ShowAllSick()

{

    delete ui;

}

//mysql

void ShowAllSick::connectMySql()

{

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // becomes the new default connection

    db.setUserName("root");//用户名

    db.setPassword("root");//密码

    db.setHostName("172.16.170.47");

    db.setDatabaseName("book");//数据库名

    db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL

    db.setPort(3306);//端口

    if(!db.open())

    {

       QMessageBox::information(this,"open","False");

    }}

void ShowAllSick::on_delete_2_clicked()

{

    QItemSelectionModel *selections = ui->tableView->selectionModel();

    QModelIndexList selected = selections->selectedIndexes();

    QSqlQuery query;

    int ok = QMessageBox::warning(this,QObject::tr("删除当前行!"),QObject::tr("确定删除当前行?"),

            QMessageBox::Yes,QMessageBox::No);

    if(ok==QMessageBox::Yes)

    {

        foreach (QModelIndex index, selected)

        {

            QString no=index.sibling(index.row(),0).data().toString();

            query.prepare("delete from tbl_sick where rfidno =?");

            query.addBindValue(no);

            query.exec();        }

        tablemodel->select();

    }}

void ShowAllSick::on_update_clicked()

{

    int curRow = ui->tableView->currentIndex().row();

    QModelIndex index = ui->tableView->currentIndex();

    globaldata=index.sibling(curRow,2).data().toString();

    UpdateSickInfo *updatesickinfo=new UpdateSickInfo;

    updatesickinfo->show();}

void ShowAllSick::on_insert_clicked()

{

   SickInfo *sickinfo=new SickInfo;

   sickinfo->show();

   sickinfo->resize(600,450);

}

void ShowAllSick::on_select_clicked(){

    QString id=ui->id->text().trimmed();

    if(id!="")    {

        tablemodel->setFilter(QString("id=%1").arg(id));

        tablemodel->select();

    }else{

        tablemodel->setTable("tbl_sick");

        tablemodel->select();

    }}

void ShowAllSick::gettotalrecords()

{

    QSqlQuery query;

    query.clear();

    query.exec("select count(*) from tbl_sick");

    query.next();

    totalrecords=query.value(0).toInt();

    records=ui->record->text().toInt();

    totalpages=(totalrecords%records)?(totalrecords/records)+1:(totalrecords/records);

    ui->totalpage->setText("totalpage:"+QString::number(totalpages));}

void ShowAllSick::showdata()

{

    QString strFilter = QString("1=1 LIMIT %1,%2;").arg(0).arg(records);

    tablemodel->setFilter(strFilter);

    tablemodel->select();

    ui->tableView->setModel(tablemodel);

}

 

void ShowAllSick::on_first_clicked()

{

    showdata();

    ui->page->setText("1");}

void ShowAllSick::on_next_clicked()

{

    page=ui->page->text().trimmed().toInt();

    records=ui->record->text().trimmed().toInt();

    if(page<totalpages)

    {

        QString strFilter = QString("1=1 LIMIT %1,%2;").arg(page*records).arg(records);

        tablemodel->setFilter(strFilter);

        tablemodel->select();

        ui->tableView->setModel(tablemodel);

        ui->page->setText(QString::number(page+1));

    }}

void ShowAllSick::on_pre_clicked()

{

    page=ui->page->text().trimmed().toInt();

    records=ui->record->text().trimmed().toInt();

    if(page>1)    {

        QString strFilter = QString("1=1 LIMIT %1,%2;").arg((page-2)*records).arg(records);

        tablemodel->setFilter(strFilter);

        tablemodel->select();

        ui->tableView->setModel(tablemodel);

        ui->page->setText(QString::number(page-1));

    }}

void ShowAllSick::on_last_clicked(){

    records=ui->record->text().trimmed().toInt();

    int lastpages=(totalrecords%records)?(totalrecords/records):(totalrecords/records)-1;

    QString strFilter=QString("1=1 LIMIT %1,%2").arg((lastpages)*records).arg(records);

    tablemodel->setFilter(strFilter);

    tablemodel->select();

    ui->tableView->setModel(tablemodel);

    ui->page->setText(QString::number(lastpages+1));}

void ShowAllSick::on_go_clicked(){

    page=ui->page->text().trimmed().toInt();

    records=ui->record->text().trimmed().toInt();

    totalpages=(totalrecords%records)?(totalrecords/records)+1:(totalrecords/records);

    if(page<=totalpages)    {

        QString strFilter=QString("1=1 LIMIT %1,%2").arg((page-1)*records).arg(records);

        tablemodel->setFilter(strFilter);

        tablemodel->select();

        ui->tableView->setModel(tablemodel);

    }else{

        QString strFilter=QString("1=1 LIMIT %1,%2;").arg(0).arg(records);

        tablemodel->setFilter(strFilter);

        tablemodel->select();

        ui->tableView->setModel(tablemodel);

        ui->page->setText("1");    }

    ui->totalpage->setText(tr("totalpage:")+QString::number(totalpages));}

                                                                                            

增加用户数据:

sickinfo.c

#ifndef SICKINFO_H

#define SICKINFO_H

#include <QDialog>

//rfid

#include"reader.h"

//mysql

#include <QtSql>

namespace Ui {

class SickInfo;}

class SickInfo : public QDialog{

    Q_OBJECT

public:

    explicit SickInfo(QWidget *parent = 0);

    ~SickInfo();

    //rfid

    void beer();

    //mysql

    void connectMySql();

private slots:

    void on_ok_clicked();

    void on_openimage_clicked();

    void on_readcard_clicked();

private:

    Ui::SickInfo *ui;

    QString fileName;

    //rfid

    Reader *cardReader;

    //mysql

    QSqlDatabase db;

};

sickinfo.cpp

#endif // SICKINFO_H

#include "sickinfo.h"

#include "ui_sickinfo.h"

#include<QMessageBox>

#include<QFileDialog>

SickInfo::SickInfo(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::SickInfo){

    ui->setupUi(this);

    //rfid

    cardReader = new Reader(this);

    //mysql

    connectMySql();}

SickInfo::~SickInfo()

{

    delete ui;

}

//mysql的save

void SickInfo::on_ok_clicked()

{

    QString s="";

    s.append(ui->rfidno->text()+"\n");

    s.append(ui->no->text()+"\n");

    s.append(ui->id->text()+"\n");

    s.append(fileName+"\n");

    s.append(ui->sex->checkedButton()->text()+"\n");

    s.append(ui->birthday->text()+"\n");

    s.append(ui->textEdit->toPlainText());

    QMessageBox::information(this,tr("infromation"),tr("%1").arg(s));    //读取数据  

    QString rfidno=ui->rfidno->text().trimmed();

    QString no=ui->no->text().trimmed();

    QString id=ui->id->text().trimmed();

    QString sex=ui->sex->checkedButton()->text().trimmed();

    QString birthday=ui->birthday->text();

    QString intro=ui->textEdit->toPlainText();

    //读取图片数据为二进制数据

     QByteArray bytes;

     QBuffer buffer(&bytes);

     buffer.open(QIODevice::WriteOnly);

     ui->img->pixmap()->save(&buffer, "PNG");

     QByteArray data;

     QFile* file=new QFile(fileName);

     file->open(QIODevice::ReadOnly);

     data = file->readAll();

     file->close();

     QVariant var(data);

    //mysql的insert操作

    QSqlQuery query;

    bool value;

    query.prepare("insert into tbl_sick(rfidno,no,id,sex,intro,birthday,image) values(?,?,?,?,?,?,?)");

    query.addBindValue(rfidno);

    query.addBindValue(no);

    query.addBindValue(id);

    query.addBindValue(sex);

    query.addBindValue(intro);

    query.addBindValue(birthday);

    query.addBindValue(var);

    value=query.exec();

    if(value)      {

           QMessageBox::information(this,"adduser","Add user successed!");

     }

       else

     {

        QMessageBox::information(this,"adduser","Add user failed!");

     }}

void SickInfo::on_openimage_clicked()

{

    fileName = QFileDialog::getOpenFileName(this,

                                            tr("Open File"), QDir::currentPath());

        if (!fileName.isEmpty())

        {

            QMessageBox::information(this, tr("Image Viewer"),

                                         tr("path: %1.").arg(fileName));

 

            QImage image(fileName);

            if (image.isNull())

            {

                QMessageBox::information(this, tr("Image Viewer"),

                                             tr("Cannot load %1.").arg(fileName));

                return;

            }

            //ui->img->setPixmap(QPixmap::fromImage(image));

            ui->img->setPixmap(QPixmap(fileName).scaled(ui->img->size()));        }}

//rfid

void SickInfo::on_readcard_clicked()

{

    unsigned int cardid;

    unsigned char snr[7];

    unsigned char mode =00;

    int result = cardReader->UL_Request(mode, snr);

    if(result==0)

    {

    cardid= (snr[0]<<24) |(snr[1]<<16) | (snr[2]<<8) | (snr[3]);

    ui->rfidno->setText(QString::number(cardid,16));

    beer();    }}

//rfid

void SickInfo::beer()

{

    int freq =20;

    int duration = 1;

    unsigned char buffer;

    int result = cardReader->ControlBuzzer(freq, duration, &buffer);

}//mysql

void SickInfo::connectMySql(){

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // becomes the new default connection

    db.setUserName("root");//用户名

    db.setPassword("root");//密码

    db.setHostName("172.16.170.47");

    db.setDatabaseName("book");//数据库名

    db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL

    db.setPort(3306);//端口

    if(db.open())    {

          QMessageBox::information(this,"open","OK!");

    }

    else

    {

        QMessageBox::information(this,"open","False");

    }}                                                                                           

更新病人资料:

updatesickinfo.c

#ifndef UPDATESICKINFO_H

#define UPDATESICKINFO_H

#include <QDialog>

//rfid

#include"reader.h"

//mysql

#include <QtSql>

namespace Ui {

class UpdateSickInfo;

}

class UpdateSickInfo : public QDialog

{

    Q_OBJECT

public:

    explicit UpdateSickInfo(QWidget *parent = 0);

    ~UpdateSickInfo();

    void connectMySql();

    void beer();

private slots:

    void on_openimage_clicked();

    void on_readcard_clicked();

    void on_ok_clicked();

private:

    Ui::UpdateSickInfo *ui;

    QString fileName;    //rfid

    Reader *cardReader;

};

 

#endif // UPDATESICKINFO_H

updatesickinfo.cpp

#include "updatesickinfo.h"

#include "ui_updatesickinfo.h"

#include<QDebug>

#include<QMessageBox>

#include<QFileDialog>

extern QString globaldata;

UpdateSickInfo::UpdateSickInfo(QWidget *parent) :

    QDialog(parent),

    ui(new Ui::UpdateSickInfo)

{

    ui->setupUi(this);

    //rfid

    cardReader = new Reader(this);

    //mysql读数据

    QSqlQuery query;

    query.prepare("select * from tbl_sick where id=?");

    query.addBindValue(globaldata);

    if(query.exec())    {

        query.next();

        ui->rfidno->setText(query.value(0).toString());

        ui->no->setText(query.value(1).toString());

        ui->id->setText(query.value(2).toString());

        ui->birthday->setDateTime(query.value(4).toDateTime());

        ui->textEdit->setText(query.value(5).toString());        //显示学生头像

        QPixmap photo;

        photo.loadFromData(query.value(6).toByteArray());

        ui->img->setPixmap(photo.scaled(ui->img->size()));  }}

UpdateSickInfo::~UpdateSickInfo()

{

    delete ui;

}

 

//mysql的save

void UpdateSickInfo::on_ok_clicked()

{

    QString s="";

    s.append(ui->rfidno->text()+"\n");

    s.append(ui->no->text()+"\n");

    s.append(ui->id->text()+"\n");

    s.append(fileName+"\n");

    s.append(ui->sex->checkedButton()->text()+"\n");

    s.append(ui->birthday->text()+"\n");

    s.append(ui->textEdit->toPlainText());

    QMessageBox::information(this,tr("infromation"),tr("%1").arg(s));

    //读取数据

    QString rfidno=ui->rfidno->text().trimmed();

    QString no=ui->no->text().trimmed();

    QString id=ui->id->text().trimmed();

    QString sex=ui->sex->checkedButton()->text().trimmed();

    QString birthday=ui->birthday->text();

    QString intro=ui->textEdit->toPlainText();

    //读取图片数据为二进制数据

     QByteArray bytes;

     QBuffer buffer(&bytes);

     buffer.open(QIODevice::WriteOnly);

     ui->img->pixmap()->save(&buffer, "PNG");

     QByteArray data;

     QFile* file=new QFile(fileName);

     file->open(QIODevice::ReadOnly);

     data = file->readAll();

     file->close();

     QVariant var(data);

    //mysql的insert操作

    QSqlQuery query;

    bool value;

    query.prepare("update tbl_sick set rfidno=?,no=?,sex=?,birthday=?,intro=?,image=? where id=?");

    query.addBindValue(rfidno);

    query.addBindValue(no);

    query.addBindValue(sex);

    query.addBindValue(birthday);

    query.addBindValue(intro);

    query.addBindValue(var);

    query.addBindValue(id);

    value=query.exec();

    if(value)    {

        QMessageBox::information(this,"adduser","update user successed!");

    }else{

        QMessageBox::information(this,"adduser","update user failed!");

    }}

void UpdateSickInfo::on_openimage_clicked()

{

    fileName = QFileDialog::getOpenFileName(this,

                                            tr("Open File"), QDir::currentPath());

        if (!fileName.isEmpty())

        {

            QMessageBox::information(this, tr("Image Viewer"),

                                         tr("path: %1.").arg(fileName));

 

            QImage image(fileName);

            if (image.isNull())

            {

                QMessageBox::information(this, tr("Image Viewer"),

                                             tr("Cannot load %1.").arg(fileName));

                return;

            }

            //ui->img->setPixmap(QPixmap::fromImage(image));

            ui->img->setPixmap(QPixmap(fileName).scaled(ui->img->size()));        }}

//rfid

void UpdateSickInfo::on_readcard_clicked()

{

    unsigned int cardid;

    unsigned char snr[7];

    unsigned char mode =00;

    int result = cardReader->UL_Request(mode, snr);

    if(result==0)    {

    cardid= (snr[0]<<24) |(snr[1]<<16) | (snr[2]<<8) | (snr[3]);

    ui->rfidno->setText(QString::number(cardid,16));

    beer();

    }}

//rfid

void UpdateSickInfo::beer()

{

    int freq =20;

    int duration = 1;

    unsigned char buffer;

    int result = cardReader->ControlBuzzer(freq, duration, &buffer);}

//mysql

void UpdateSickInfo::connectMySql()

{

    QSqlDatabase db =QSqlDatabase::addDatabase("QMYSQL"); // becomes the new default connection

    db.setUserName("root");//用户名

    db.setPassword("root");//密码

    db.setHostName("172.16.170.47");

    db.setDatabaseName("book");//数据库名

    db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");//使用SSL

    db.setPort(3306);//端口

    if(!db.open())    {

          QMessageBox::information(this,"open","False");    }

}

 

1)        管理者登录页面:

 

2)        系统首界面:

 

3)        增加用户资料界面:

 

4)        RFID读取用户资料界面:

 

 

5)        操作全部用户资料界面:

 

6)        用户充值扣费界面:

 

  相关解决方案