基于C++的医院挂号系统的终端

project

做了一个可以手机号登录、挂号、查看挂号信息、实时显示时间、查看排队情况,还可以与服务端信息交互的一个挂号终端

系统界面的交互用的是简单的图片刷新和切换,点击某个按钮则切换下一张图片实现界面的切换

手机号登录:用字库显示输入的手机号码,字符串记录存储到的手机号码,退格删除的话则将字符串最后一位置为\0

MFont* f1 = MFont::instance();
        f1->show(buf,45,403,56,0xffffffff,306,60,20,13);

        if(x>315 && x<411 && y>160 && y<208)
        {
            cout<<"key:1"<<endl;
            strcat(buf,"1");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>453 && x<550 && y>160 && y<208)
        {
            cout<<"key:2"<<endl;
            strcat(buf,"2");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>593 && x<690 && y>160 && y<208)
        {
            cout<<"key:3"<<endl;
            strcat(buf,"3");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>315 && x<411 && y>241 && y<290)
        {
            cout<<"key:4"<<endl;
            strcat(buf,"4");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>453 && x<550 && y>241 && y<290)
        {
            cout<<"key:5"<<endl;
            strcat(buf,"5");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>593 && x<690 && y>241 && y<290)
        {
            cout<<"key:6"<<endl;
            strcat(buf,"6");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>315 && x<411 && y>326 && y<374)
        {
            cout<<"key:7"<<endl;
            strcat(buf,"7");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>453 && x<550 && y>326 && y<374)
        {
            cout<<"key:8"<<endl;
            strcat(buf,"8");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>593 && x<690 && y>326 && y<374)
        {
            cout<<"key:9"<<endl;
            strcat(buf,"9");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>315 && x<411 && y>404 && y<452)
        {
            cout<<"return"<<endl;
            MainWidget w1;
            w1.exec();
        }
        else if(x>691 && x<763 && y>152 && y<283)
        {
            cout<<"key:0"<<endl;
            strcat(buf,"0");
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>691 && x<763 && y>318 && y<443)
        {
            cout<<"delete"<<endl;
            len = strlen(buf);
            if(len > 0)
            {
                buf[len - 1] = '\0';
            }
            f1->show(buf,45,403,56,0xffffffff,306,60,20,13);
        }
        else if(x>593 && x<690 && y>404 && y<452)
        {
            cout<<"determine"<<endl;
            if(strlen(buf)==11)
            {
                patient.set_phone(buf);
                flag = true;
                PhotoWidget p;  // 实例化一个图片界面类的对象
                p.exec();
                break;
            }
        }

挂号:通过点击选择科室、医生和时间,然后存储到病人类里,方便之后读取和发送给服务器

if(!flag)
        {
            cout<<"已进入"<<endl;
            Bmp b1("./appointment.bmp");
            b1.show();
            sleep(3);
            std::string buf;
            buf += patient.get_name() + "|";
            buf += patient.get_office() + "|";
            buf += patient.get_doctor() + "|";
            buf += patient.get_time() + "|";
            cout<<buf<<endl;
            tcp.sendMsg(buf);
            MainWidget w1;
            w1.exec();
            break;
        }

实时显示时间:开启一条线程无限循环显示时间

void ConstantlyWidget::run()
{// 获取当前系统时间
    std::time_t currentTime = std::time(nullptr);
    char timeString[100];
    
    while(1)
    {

        // 将时间转换为本地时间
        std::tm* localTime = std::localtime(&currentTime);

        // 使用格式化字符串构建输出
        std::strftime(timeString, sizeof(timeString), "%Y-%m-%d %H:%M:%S", localTime);

        //输出时间
        MFont* f1 = MFont::instance();
        f1->show(timeString,24,250,30,0xDAE3F5,550,3,10,5);

        currentTime += 1;
        // 暂停一秒钟
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

查看排队情况:服务器判断是否有客户端连接,有的话计数+1,当客户端有查看排队情况请求时则发送计数,客户端接收后即可知道现在的排队情况

void* send_task(void* arg)
{

    cout<<"send "<<count<<endl;
    std::string strNum = std::to_string(count);
    TcpSocket* client = reinterpret_cast<TcpSocket*>(arg);
    client->sendMsg(strNum);

}

void* task(void*arg)
{
    TcpSocket*client = reinterpret_cast<TcpSocket*>(arg);

    char buf[1024] = {0};
    char *token;
    string name,office,doctor,time;

    while (1) {
        client->recvMsg(buf,sizeof(buf));

        std::cout<<"客户端 IP:"<<client->ip()<<" PORT:"<<client->port()<<" "<<buf<<endl;
        token = strtok(buf,"|");
        if(token != NULL)
        {
            cout<<"name:"<<token<<endl;
            name = token;
            token = strtok(NULL, "|");
            if(token != NULL)
            {
                cout<<"office:"<<token<<endl;
                office = token;
                token = strtok(NULL, "|");
                if(token != NULL)
                {
                    cout<<"doctor:"<<token<<endl;
                    doctor = token;
                    token = strtok(NULL, "|");
                    if(token != NULL)
                    {
                        cout<<"time:"<<token<<endl;
                        time = token;
                        token = strtok(NULL, "|");
                    }
                }
            }
        }
        count++;

        pthread_t th1;
        pthread_create(&th1,NULL,send_task,client);

挂号情况:将保存下来的数据发送给服务端,服务端再转换成json数据保存到本地

StringBuffer s; // 创建缓冲区对象
        Writer<StringBuffer> writer(s); // 创建Writer对象,将数据写入缓冲区
        writer.StartObject();   // 开始写入一个JSON对象

        writer.Key("name");
        writer.String(name.c_str());
        writer.Key("office");
        writer.String(office.c_str());
        writer.Key("doctor");l999999999999
        writer.String(doctor.c_str());
        writer.Key("time");
        writer.String(time.c_str());

        writer.EndObject();
        string outFileName = "outfile.json";
        ofstream outfile(outFileName,ios::app);

        if(outfile.is_open())
        {
            outfile<<s.GetString();
            outfile.close();
        }

演示视频如下
之后再传,审核中

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值