VS+Qt+C++医院排队叫号系统

news2024/11/24 17:50:58

程序示例精选

VS+Qt+C++医院排队叫号系统

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<VS+Qt+C++医院排队叫号系统>>编写代码,带用户登录,管理员登录,增删改查,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

       3. 运行结果

三、在线协助

一、所需工具软件

1. VS, Qt

2. C++

二、使用步骤

1.引入库

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_AdminManager.h"


#include <QWidget>

#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlError>
#include <QtSql/QtSql>

2. 代码实现

代码如下:

namespace
{
    using namespace std;

    // 结构体
    struct Person
    {
        int id;
        QString name;
    };

    // 类
    class AddressBooks
    {
    public:
        std::vector<Person> datas;
    public:
        void InitAddrssBooks();
        bool AddPerson(Person p);
        bool DeletePerson(QString personid);
        bool UpdatePerson(Person p);
        Person* FindPerson(QString personid);

    };

    Person* AddressBooks::FindPerson(QString personid)
    {
        Person* p = NULL;
        int index = -1;

        for (size_t i = 0; i < datas.size(); i++)
        {
            auto person = datas.at(i);
            if (QString::number(person.id) == personid)
            {
                index = i;
                break;
            }
        }

        if (index != -1)
        {
            p = &datas.at(index);
        }
        return p;
    }

    bool AddressBooks::AddPerson(Person p)
    {
        qDebug() << "iddd: " << QString::number(p.id);

        if (FindPerson(QString::number(p.id)))
        {
            qDebug() << "iddddd: " << p.id;
            return false;
        }

        datas.push_back(p);
        qDebug() << "data size:" << datas.size();
        return true;
    }

    bool AddressBooks::UpdatePerson(Person p)
    {
        auto person = FindPerson(QString::number(p.id));
        if (!person) return false;
        person->id = p.id;
        person->name = p.name;

        return true;
    }

    bool AddressBooks::DeletePerson(QString personid) {

        if (!FindPerson(personid)) return false;
        int index = -1;
        for (size_t i = 0; i < datas.size(); i++)
        {
            auto person = datas.at(i);
            if (person.id == personid.toInt())
            {
                index = i;
                break;
            }
        }

        datas.erase(datas.begin() + index);
        return true;
    }
    AddressBooks AddrDatabase;
}


AdminManager::AdminManager(QWidget* parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(on_addButton_clicked()));
    QObject::connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(on_delButton_clicked()));
    QObject::connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(on_updateButton_clicked()));
    QObject::connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(on_findButton_clicked()));
    QObject::connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(on_check_clicked()));
    QObject::connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(on_backLoginWindow()));

    //背景色
    ui.tableWidget->setStyleSheet("QTableView::Item{background-color:green}");


}

//显示所有
void AdminManager::on_findButton_clicked()
{
    qDebug() << "显示所有********************************** ";

    memset(&AddrDatabase, 0, sizeof(AddrDatabase)); //清空结构体

    readCSV(); //读取csv

    ui.tableWidget->clearContents();
    ui.tableWidget->setRowCount(0);
    for (int i = 0; i < AddrDatabase.datas.size(); i++)
    {
        auto person = AddrDatabase.datas.at(i);
        //qDebug() << "aaa: " << person.id;
        //qDebug() << "aaa: " << person.name;
        //qDebug() << "aaa: " << person.gender;
        //qDebug() << "aaa: " << person.age;
        //qDebug() << "aaa: " << person.classL;

        //std::cout << "test_add2 " << person.name<< std::endl;

        int rowCount = ui.tableWidget->rowCount();
        ui.tableWidget->insertRow(rowCount);

        QTableWidgetItem* columnItem0 = new QTableWidgetItem(
            QString::number(person.id));
        QTableWidgetItem* columnItem1 = new QTableWidgetItem(
            person.name);

        //QTableWidgetItem* columnItem5 = new QTableWidgetItem(
        //    query.value(5).toString());

        ui.tableWidget->setItem(rowCount, 0, columnItem0);
        ui.tableWidget->setItem(rowCount, 1, columnItem1);

        //ui.tableWidget->setItem(rowCount, 5, columnItem5);

    }



}

//删除
void AdminManager::on_delButton_clicked()
{

    Person p;
    p.id = ui.idLineEdit->text().toInt();
    qDebug() << p.id;

    AddrDatabase.DeletePerson(QString::number(p.id));
    qDebug() << "test2";
    exportCSV(); //输出到csv
    on_findButton_clicked();
}

//修改
void AdminManager::on_updateButton_clicked()
{
    qDebug() << "修改********************************** ";

    memset(&AddrDatabase, 0, sizeof(AddrDatabase)); //清空结构体

    readCSV(); //读取csv

    ui.tableWidget->clearContents();
    ui.tableWidget->setRowCount(0);
    for (int i = 0; i < AddrDatabase.datas.size(); i++)
    {
        auto person = AddrDatabase.datas.at(i);
        qDebug() << "aaa: " << person.id;
        qDebug() << "aaa: " << person.name;


        if (person.id == ui.idLineEditUpdate->text().toInt())
        {
            qDebug() << "testIf -----------------------";
            qDebug() << "person.id" << person.id;
            person.name = ui.comboBox->currentText();
            qDebug() << "person.name" << person.name;

            AddrDatabase.UpdatePerson(person);

        }
    }
    exportCSV(); //输出到csv
    on_findButton_clicked(); //执行显示所有信息函数
}

//添加
void AdminManager::on_addButton_clicked()
{
    on_findButton_clicked(); //执行显示所有信息函数

    std::cout << "test_add " << std::endl;
    Person p;
    p.id = ui.idLineEdit_2->text().toInt();
    qDebug() << p.id;


    AddrDatabase.AddPerson(p); //执行添加函数

    exportCSV(); //输出到csv

    on_findButton_clicked(); //执行显示所有信息函数

}

//查找
void AdminManager::on_check_clicked()
{
    qDebug() << "查找********************************** ";

    memset(&AddrDatabase, 0, sizeof(AddrDatabase)); //清空结构体

    readCSV(); //读取csv

    ui.tableWidget->clearContents();
    ui.tableWidget->setRowCount(0);
    for (int i = 0; i < AddrDatabase.datas.size(); i++)
    {
        auto person = AddrDatabase.datas.at(i);
        qDebug() << "aaa: " << person.id;
        qDebug() << "aaa: " << person.name;


        if (person.id == ui.lineEdit_2->text().toInt())
        {

            int rowCount = ui.tableWidget->rowCount();
            ui.tableWidget->insertRow(rowCount);

            QTableWidgetItem* columnItem0 = new QTableWidgetItem(
                QString::number(person.id));
            QTableWidgetItem* columnItem1 = new QTableWidgetItem(
                person.name);

            //QTableWidgetItem* columnItem5 = new QTableWidgetItem(
            //    query.value(5).toString());

            ui.tableWidget->setItem(rowCount, 0, columnItem0);
            ui.tableWidget->setItem(rowCount, 1, columnItem1);

            //ui.tableWidget->setItem(rowCount, 5, columnItem5);

        }
    }
}

void AdminManager::readCSV()
{
    qDebug() << "test readCSV ";

    QFile file("data.csv");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "Can't open the file!" << endl;
    }

    //一行一行直接读取文件
    while (!file.atEnd()) {
        qDebug() << "test readCSV ";
        QByteArray line = file.readLine();
        qDebug() << "line: " << line;
        QString str(line);
        str.replace("\n", "");
        qDebug() << str;

        auto list = str.split(",");


        Person p;
        p.id = list[0].toInt();
        p.name = list[1];


        AddrDatabase.AddPerson(p);
        //AddrDatabase.datas.push_back(p);

        for (int i = 0; i < AddrDatabase.datas.size(); i++)
        {
            auto person = AddrDatabase.datas.at(i);
            //qDebug() << "aaa: " << person.id;
            //qDebug() << "aaa: " << person.name;
            //qDebug() << "aaa: " << person.gender;
            //qDebug() << "aaa: " << person.age;
            //qDebug() << "aaa: " << person.classL;
        }

    }
    file.close();
}


void AdminManager::exportCSV()
{
    QString fileNamePath = "data.csv";
    QFile file(fileNamePath);
    if (!file.open(QIODevice::WriteOnly)) {
        qDebug() << "Can't open the file!" << endl;
        return;
    }

    QTextStream filestream(&file);//QTextStream 与file关联
    filestream.setCodec("utf-8");

    QStringList lines;
    for (size_t i = 0; i < AddrDatabase.datas.size(); i++)
    {
        Person p = AddrDatabase.datas.at(i);
        QString strline = QString::number(p.id) + "," + p.name;
        lines << strline;
    }

    QString str = lines.join("\n");

    qDebug() << str;

    filestream << str;
    file.flush();
    file.close();
}


//返回登录窗口
void AdminManager::on_backLoginWindow()
{
    std::cout << "test_ " << std::endl;

    this->close();
    LoginResiger* ad;
    ad = new LoginResiger;
    ad->show();

}


3. 运行结果

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

                         Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源进展 | WeIdentity v3.1.0 发布,新增数据库部署和使用模式

作为连接实体对象&#xff08;人或物&#xff09;的现实身份与链上身份的可信映射&#xff0c;实现实体对象之间安全可信的数据授权与交换&#xff0c;分布式身份技术解决方案在推动区块链应用繁荣及可信数据流转的过程中扮演着重要角色。 WeIdentity是由微众银行自主研发并完全…

荟萃金融科技成果,展现数字金融力量丨通付盾受邀出席中国国际金融展

2023年4月27日&#xff0c;中国国际金融展在北京顺利落下帷幕。本届金融展以“荟萃金融科技成果&#xff0c;展现数字金融力量&#xff0c;谱写金融服务中国式现代化新篇章”为主题&#xff0c;由中国金融电子化集团有限公司和北京市石景山区政府联合主办。来自国内外的众多金融…

教室资源管理系统【纯控制台】(Java课设)

系统类型 纯控制台类型&#xff08;没有用到数据库&#xff09; 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Idea或eclipse 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87753360 更多系统…

helm部署nacos

1.去helm仓库拉取nacos包 https://artifacthub.io/packages/helm/kubegemsapp/nacos?modalinstall helm repo add kubegemsapp https://charts.kubegems.io/kubegemsapp helm pull kubegemsapp/nacos tar -zxvf nacos-0.1.5.tgz mkdir -p nacos/ci/test2.修改chart配置文件 …

如何根据期刊缩写查找期刊?

英文论文写作中&#xff0c;经常会插入参考文献。参考文献中的期刊名称&#xff0c;时常需要使用缩写。或者是手头有期刊缩写后的名称&#xff0c;但是有时候&#xff0c;查了半天也查不到期刊期刊全称&#xff0c;费时费力让人崩溃。今天就给各位学者老师总结一些查询期刊缩写…

如何在 Python 开发环境中调用 ChatGPT 模型?

本文将演示在本地的 python 项目中调用 ChatGPT 模型。 写在前面第一步&#xff1a;获取 API Key第二步&#xff1a;安装 OpenAI 第三方库第三步&#xff1a;Python 开发环境中调用 ChatGPT 模型 写在前面 作为一名程序员&#xff0c;在开发过程当中时常需要使用 ChatGPT 来完…

项目创建第一天 搭建前端环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、环境是什么&#xff1f;二、使用步骤1.前台搭建方式1.创建项目2.目录结构3. 安装elementui4. 创建路由5.使用axios6.bug记录6.1出现跨域问题6.2 解决方式6.…

硬盘数据突然消失怎么回事?硬盘数据突然消失怎么找回

硬盘上的数据对每个人都至关重要&#xff0c;它可能是我们的珍贵回忆&#xff0c;多年学习的总结&#xff0c;或者一些不可告人的秘密。而硬盘中的数据可能会在不知情的情况下消失或被删除&#xff0c;这种情况对我们来说十分痛苦和困扰。然而&#xff0c;我们不必担心&#xf…

SLAM论文速递:SLAM—(2021)Amos-SLAM:一种基于视觉和几何的抗动态双阶段SLAM方法—5.65(1)

论文信息 题目&#xff1a; Visual SLAM in dynamic environments based on object detection 基于目标检测的动态环境下的视觉SLAM论文地址&#xff1a; https://www.sciencedirect.com/science/article/pii/S2214914720304402发表期刊&#xff1a; Defence Technology,&…

【python】pytorch包:深度学习(序章)

今日听闻师姐说pytorch实现深度学习要比keras更好用一些&#xff0c;特此记录 Part 0. 机器学习 与 深度学习 的联系与区别 参考B站视频链接 联系 深度学习是机器学习的分支&#xff0c;人工神经网络为基础&#xff0c;对数据的特征进行学习的方法 区别 特征抽取 机器学…

TensorRT入门实战,TensorRT Plugin介绍以及TensorRT INT8加速

文章目录 一、TensorRT介绍,工作流程和优化策略TensorRT是什么TensorRT的工作流程TRT优化策略介绍 二、TensorRT的组成和基本使用流程三、TensorRT的基本使用流程四、TensorRT Demo代码 : SampleMNISTCaffe Parser方式构建 五. TensorRT Plugin基本概念工作流程API介绍Dynamic …

复旦微的 JFM7K325T 国产化设计资料(PCIE711)

板卡概述 PCIE711 是一款基于 PCIE 总线架构的高性能数据预处理 FMC载板&#xff0c;板卡采用复旦微的 JFM7K325T FPGA 作为实时处理器&#xff0c;实现 各个接口之间的互联。该板卡可以实现 100%国产化。 板卡具有 1 个 FMC&#xff08;HPC&#xff09;接口&#xff0c;1 路…

字符设备注册与注销

1、对于字符设备驱动而言&#xff0c;当驱动模块加载成功以后需要注册字符设备&#xff0c;同样&#xff0c;卸载驱动模 块的时候也需要注销掉字符设备。字符设备的注册和注销函数原型如下所示 static inline int register_chrdev(unsigned int major, const char *name,const…

虹科方案 | HK-Edgility系统随时随地保护您的远程工作

通过上次的文章&#xff0c;我们了解到虹科HK-Edgility软件系统《将云计算扩展到边缘》的解决方案。今天的文章&#xff0c;我们将带您了解虹科系统在远程工作的方案简介。 一、时代背景 在当今新的数字化工作空间中&#xff0c;员工需要从家中、远程办公室和旅途中访问公司业务…

作为团队管理者,如何获得团队成员的信任和认可?

作为团队管理者&#xff0c;获得团队成员的信任和认可是非常重要的。只有当团队成员信任你并认可你的领导能力&#xff0c;才能更好地协同工作&#xff0c;提高工作效率和完成团队目标。那么&#xff0c;如何才能获得团队成员的信任和认可呢&#xff1f;以下是一些实用的建议。…

全球首个天基蜂窝语音通话,打通了,这个重大新闻非常值得关注

4月25日&#xff0c;美国卫星通信初创公司——AST SpaceMobile&#xff0c;宣布打通了全球首个天基蜂窝语音通话。 对于卫星通信乃至整个通信行业来说&#xff0c;这是一个重大新闻&#xff0c;非常值得关注。 去年&#xff0c;我们还只是实现了手机和卫星之间的双向短消息通信…

柯桥学习商务英语的四个阶段

商务英语第一阶段   第一阶段也被称为“商务零基础”&#xff0c;这个课程主要针对零起点或长期没接触英语的学习者&#xff1b;有一定英语基础&#xff0c;想提高英语发音的学员。   从零入门&#xff0c;从ABC开始。通过对英语的初步了解与认识&#xff0c;最终使学员达…

用 Yjs + React 写一个支持协同的 TODO 应用

大家好&#xff0c;我是前端西瓜哥。 为了测试 Yjs 的协同能力&#xff0c;我实现了支持协同简单的 TODO 应用。 支持的功能 创建房间&#xff1b;新增、删除、完成、清空所有待办&#xff1b;撤销重做&#xff1b;显示其他用户的光标位置&#xff1b; 技术栈 列一下用到的…

多线程并发编程学习笔记11(小滴课堂)数据同步接口

中间表设计&#xff1a; 我们原来有一张学生表。 然后我们去设计中间表&#xff1a; 基础环境搭建&#xff1a; 既然是搭建环境那肯定要先从maven入手&#xff0c;引入依赖&#xff1a; 然后我们需要去配置我们的mybatis的xml文件。 同样中间表的数据库我们也要进行配置&#…

Python+opencv:图像修复

简介&#xff1a;OpenCV 是一个开源的计算机视觉库&#xff0c;它包含了许多图像处理和计算机视觉算法。使用 OpenCV 进行图像修复主要依赖于传统的图像处理技术。 OpenCV 图像修复方法及其原理&#xff1a; 1、去噪&#xff1a;图像去噪是消除图像中的噪声&#xff0c;提高图…