C++实验作业三

该程序使用C++编写,模拟了一个银行叫号系统,利用键盘交互和计时器控制显示5个号码的滚动,通过四个方向键移动显示区域,空格键生成新号码,ESC键退出。程序采用容器(列表)存储号码,并用多线程实现实时更新。
摘要由CSDN通过智能技术生成

题目:


//第三次实验:键盘交互与计时器 - 容器
//模拟一个办事机构(如银行)的叫号程序。
//在一个显示区域内从上到下按顺序显示5个号码,最开始是1-5。四个方向键控制显示区域的移动。空格键产生一个新号码,将最前面的号码挤出显示区。ESC键退出系统。
//使用键盘交互与计时器实现该程序,使用容器装载号码。

题解:

#include<iostream>
#include<vector>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <list>
#include <thread>
using namespace std;


//第三次实验:键盘交互与计时器 - 容器
//模拟一个办事机构(如银行)的叫号程序。
//在一个显示区域内从上到下按顺序显示5个号码,最开始是1-5。四个方向键控制显示区域的移动。空格键产生一个新号码,将最前面的号码挤出显示区。ESC键退出系统。
//使用键盘交互与计时器实现该程序,使用容器装载号码。

 int n = 0;

 int up = 0, down = 1, l = 0, r = 1;


class Num //号码
{
private:
    int num;
public:
    Num() :num(0) {};
    Num(int num) :num(num) {};
    int getnum() { return num; }
};

void show(list<Num> li) {
    system("cls");//清屏
    cout << endl;
    for (int i = 0; i < down - up; i++)
        cout << endl;

    for (Num num : li)
    {
        for (int j = 0; j < r - l; j++)
            cout << "    ";
        cout << num.getnum() << endl;
    }

}

void update()//按时更新 线程
{
    while (1)
    {
        Num num1(n + 1), num2(n + 2), num3(n + 3), num4(n + 4), num5(n + 5);

        list<Num> li = { num1, num2, num3, num4, num5 };

        show(li);

        int ch = _getch(); //读取键盘输入字符,上下左右键
        if (ch == 224) { //判断是否为方向键
            ch = _getch(); //如果是方向键,再读一次
            
            if(ch == 72) {up++; continue; } //上
            if(ch == 80) {down++; continue; } //下
            if(ch == 75) {l++; continue; } //左
            if(ch == 77) {r++; continue; } //右
            }
        
        
        if (ch == 27)//ESC键
        {
            cout << "程序已退出 0.0 ";
            break;
        }
        
        if (ch == 32)//空格键
        {
            n++;
            //l.pop_front();
            //l.push_back(five++);
        }
        
        

    }
    
    
}


int main()
{
    thread th2(update);//双线程
    //th2.join();
    while (1)
    {
        
        Num num1(n + 1), num2(n + 2), num3(n + 3), num4(n + 4), num5(n + 5);

        list<Num> li = { num1, num2, num3, num4, num5 };
        
        n++;
        Sleep(5000);
        show(li);
    }
    
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值