《C++程序设计》银行管理系统

莫思身外无穷事

且尽生前有限杯

 


我们先来看一下项目需求:

【场景】
在日常生活中,我们普遍接触到窗口服务系统,如到银行柜台办理业务、景区现场购买门票等。当需要办理业务的顾客数超过窗口数量时,我们需遵循排队等待原则。
【需求】
请设计并实现一个银行窗口排队管理系统,模拟用户排队、办理业务结束后离队等过程。具体要求如下:
1、窗口配置及状态管理
2、窗口应有编号、业务类型、排队队列、工作人员编号(唯一)等属性;
3、窗口数量无限制;
4、业务类型、窗口配置数据由系统启动时通过配置文件读取;
5、窗口可以动态增加或删除,但存在排队的窗口不能被删除;
6、窗口业务状态支持暂停,暂停时该窗口不再接受顾客排队;
7、暂停的窗口支持业务恢复;
8、窗口配置数据需持久化存储。

关于银行管理系统老铁们最先想到的是什么数据结构呢?--应该就是队列吧(先进先出)

今天我将带领大家一起完成银行管理系统


 

银行管理的登入界面

代码可以烂,但是逼格一定要高

就先从做个登入界面开始吧,其实是套用之前 C语言 的

void menu2()
{
    int input = 0, count = 0, i = 0;
    char mima[20] = "123";//登入的密码
    char shuru[20] = { 0 };
    system("color F4");
    printf("\t\t\t     **************************************\n");
    printf("\t\t\t     |          *欢迎光临东方银行*        |\n");
    printf("\t\t\t     |           *管理员: 东方*           |\n");
    printf("\t\t\t      ------------------------------------\n");
    printf("请输入管理员密码:\n");
    while ((count = _getch()) != '\r')
    {
        if (count == '\b')
        {
            i--;
            printf("\b \b");
        }
        else
        {
            shuru[i++] = count;
            printf("*");
        }
    }
    shuru[i++] = '\0';
    if (strcmp(mima, shuru) == 0)
    {
        printf("\n密码正确,您已进入系统!\n");
    }
    else
    {
        printf("\n密码错误,请重新输入!\n");
        exit(0);     //输入错误,直接退出
    }
    system("pause");
    system("cls");
}

如果你的密码不小心输入错误了,就会直接退出系统

 


基本框架的实现

老铁们可以看到我创建了 6 个文件,应该应该很好理解吧,用户类、窗口类、银行操作类以及队列的模板

我这里就将简单的框架展示出来:

用户类:

//user.h
#include<string>
#include"Queue.h"
using std::string;

class user
{
public:
    string name;         //用户编号
    int arrive_time;     //用户到达时间
    bool identity;       //顾客身份
    int cost_time;       //办理业务花费时间
    int leave_time;      //离开时间
    int wait_time;       //等待时间
    int enter_window;    //代表取钱窗口
};

窗口类:

//Window.h
class Window
{
public:
    int num;                //窗口号
    int wait_user;          //窗口等待人数
};

队列模板:
模板是个好东西 ~ 无脑往里带

//Queue.h
template <typename T> 
class QueueNode
{
public:
    T data;
    QueueNode* prev;
    QueueNode* next;
};

template <typename T> 
class Queue 
{
public:
    Queue();
    ~Queue();

    bool empty() const
    { 
        return _size == 0;
    }

    int size() const 
    { 
        return _size; 
    }

    void push(const T&x);
    void pop();
    T front();
    T back();
private:
    QueueNode<T>* head;
    QueueNode<T>* tail;
    int _size;
};

template <typename T> 
Queue<T>::Queue()
{
    head = new QueueNode <T>;
    tail = new QueueNode <T>;
    head->prev = NULL;
    head->next = tail;
    tail->prev = head;
    tail->next = NULL;
    _size = 0;
}

template <typename T> 
Queue<T>::~Queue() 
{
    while (_size != 0) 
    {
        QueueNode<T>* t;
        t = head->next;
        head->next = head->next->next;
        head->next->prev = head;
        delete t;
        _size--;
    }
}

template <typename T> 
void Queue<T>::push(const T& x) 
{
    QueueNode<T>* t = new QueueNode<T>;
    t->data = x;
    t->prev = tail->prev;
    t->next = tail;
    tail->prev->next = t;
    tail->prev = t;
    _size++;
}

template <typename T> 
void Queue<T>::pop() 
{
    if (_size) 
    {
        QueueNode<T>* t;
        t = head->next;
        head->next = head->next->next;
        head->next->prev = head;
        delete t;
        _size--;
    }
}

template <typename T> 
T Queue<T>::front() 
{
    return head->next->data;
}

template <typename T> 
T Queue<T>::back() 
{
    return tail->prev->data;
}

接下来就是银行操作类了

//BankCard.h
#include <iostream>
#include"user.h"
#include"Window .h"
#include<algorithm>
#include<time.h>
#include<cstdio>
#include<conio.h>
#include <fstream>
#include<windows.h>
using namespace std;

class BankCard
{
public:
	//初始化
	void BankCard_init();
	//构造函数
	BankCard()
	{
		BankCard_init();
	}
	//手册
	void handbook();
	//查看窗口人数
	void show();
	//计算离开时间和更新等待时间
	void count_time(user& p);
	//检查队列中是否有离开的人
	void check_leave(int time);
	//进入银行取票
	void enter_bank(user& p);
	//打印表单
	void charts(int n);
	//用户入队列
	void manual();
	//菜单-选项
	void menu();
	//新增窗口
	void  addition();
	//删减窗口
	void reduction();
	//窗口暂停
	void suspend();
	//存档文件
	int archived();
	//办理的业务类型
	int vbusiness();
};

怎么感觉 C++ 代码的风格跟 C 语言一样,算了,接下来我将讲解银行操作中的功能函数实现:
(如果有人说为什么不写析构函数,因为模板那里会自动掉析构)

银行操作类的环境搭建

Queue<user>* window_normal = new Queue<user>[3]; //队列数组用于窗口的增删
static int sum = 3;                              //静态变量表示存钱窗口数
Queue<user> window_VIP;             //取钱队列
Queue<user> leave;                  //记录每个人离开队列的时间,用于判断顾客是否离开
user Person[1000];                  //实例化顾客对象
int time_now;                       //记录当前时间
int person_num;                     //记录顾客人数

先说明一下,我们银行系统的时间的移动是根据最后一个进入的客户进行调整的

其他变量我们后面讲到了,在细讲器作用

比较函数:用于 sort 作用就是快速筛选出排队人数最少的窗口,来优化我们客户入队列的效率问题

//选择出最佳窗口
bool comp(Window x, Window y)
{
    //若窗口等待人数相同时按窗口号大小排序
    if (x.wait_user == y.wait_user) 
    {
        return x.num < y.num;
    }
    //否则按窗口等待人数排序
    return x.wait_user < y.wait_user;
}

时间转换函数

在我们系统中时间都是转换成分钟进行运算以及比较的,而在打印的时候才需要进行转换

void transform(int num)
{
    cout << 9 + num / 60 << ":" << num % 60;
}·

银行操作类的构造函数

void BankCard::BankCard_init()
{
    time_now = 0;
    person_num = 0;
    for (int i = 0; i < sum; i++)
    {
        while (!window_normal[i].empty())
        {
            window_normal[i].pop();
        }
    }
    while (!window_VIP.empty())
    { 
        window_VIP.pop(); 
    }

    while (!leave.empty())
    { 
        leave.pop(); 
    }

}

就像以入新家一样要把之前残留的东西都清理一下 ~

银行操作类的菜单页面

别的先不说,先来看看我们的大纲:

void BankCard::menu() 
{
    while (true)
    {

        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t*---------------------------------------------------*\n");
        printf("\t\t\t*                   欢迎光临东方银行                *\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t********************系统功能菜单*********************\n");
        printf("\t\t\t----------------------     --------------------------\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    1、录入客户信息   *     2、查看窗口信息      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    3、查询排队情况   *     4、退出排队系统      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    5、使用系统手册   *     6、存档系统文件      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    7、窗口状态新增   *     8、窗口状态删减     **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    9、窗口业务暂停   *     0、窗口业务恢复     **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t----------------------     --------------------------\n");
            cout << "请输入你将要执行的操作>:" << endl;
            int input;
            cin >> input;
            system("cls");
            switch (input)
            {
            case 1:
            {
                manual();
                system("pause");
                system("cls");
                break;
            };
            case 2:
            {
                show();
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 3:
            {
                charts(person_num);
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 4:
            {
                cout << "*-----------------------*" << endl;
                cout << "<<><>欢迎使用本系统<><>>*" << endl;
                cout << "*-----------------------*" << endl;
                exit(0);
            };
            case 5:
            {
                handbook();
                system("pause");
                system("cls");
                break;
            }
            case 6:
            {
                archived();
                system("pause");
                system("cls");
                break;
            }
            case 7:
            {
                addition();
                system("pause");
                system("cls");
                break;
            }
            case 8:
            {
                reduction();
                system("pause");
                system("cls");
                break;
            }
            case 9:
            {
                suspend();
                system("pause");
                system("cls");
                break;
            }
        }
    }
}

 

银行操作类的录入用户

int BankCard::vbusiness()
{
    cout << "*-----------------------*" << endl;
    cout << "<<><>0.办理存钱窗口<><>>*" << endl;
    cout << "<<><>1.办理取钱窗口<><>>*" << endl;
    cout << "*-----------------------*" << endl;
    int input;
    cout << "请输入你想办理的业务>:" << endl;
    cin >> input;
    if (input == 0) return 0;
    if (input == 1) return 1;
}
void BankCard::manual() 
{
    while (1) 
    {
        double t;
        cout << "*-----------------------*" << endl;
        cout << "《=======姓名=======》"; cin >> Person[person_num].name;
        cout << "《=======到达时间=======》"; cin >> t;
        double temp = int(t - 9.0) * 60 + (t - int(t)) * 100;
        if (temp < time_now) 
        {
            cout << "请按时间先后顺序输入" << endl;
            system("pause");
            system("cls");
            continue;
        }
        Person[person_num].arrive_time = temp;
        int r = rand() % 30 + 1;//生成0到30的随机数
        Person[person_num].cost_time = r;
        bool input = vbusiness();
        Person[person_num].identity = input;
        cout << "请输入用户对此次银行服务体验的评价:" << endl;
        cin >> Person[person_num].evaluate;
        cout << "《=======********=======》" << endl;
        system("pause");
        system("cls");
        enter_bank(Person[person_num]);
        person_num++;
        menu();
    }
}

我们之前提到过我们系统的时间都是以分钟的形式进行运算以及比较的,以下就是转换过程

double temp = int(t - 9.0) * 60 + (t - int(t)) * 100;

而且我们系统是按照银行标准的时间进行运算的早上 8 点开始营业,17 点开始结业

如果不在合理范围就重新输入,如果小于上名客户的时间也重新输入(莫非时间能倒流?

        if (temp < time_now) 
        {
            cout << "请按时间先后顺序输入" << endl;
            system("pause");
            system("cls");
            continue;
        }

由于我们用户办理业务所花费的时间是不知道的,所以我们设计成随机数更符合实际

int r = rand() % 30 + 1;//生成0到30的随机数

银行操作类的系列操作(查看窗口信息)

录入完用户后,我们就直接来到我们的取票操作:

void BankCard::enter_bank(user& p) 
{
    time_now = p.arrive_time; //新用户到达更新当前时间
    check_leave(time_now);    //检查当前时间下各窗口的情况
    cout << "用户" << p.name << "在"; transform(p.arrive_time); cout << "到达了银行,";
    cout << "办理业务需要花费" << p.cost_time << "分钟,用户身份是";
    p.identity ? cout << "取钱用户" << endl : cout << "存钱用户" << endl;
    show(); //展示当前时间各个窗口的情况
    if (p.identity) 
    {
        //若为取钱用户
        p.enter_window = 3;
        count_time(p);
        if (p.leave_time > 480) 
        {
            cout << "银行关门前不能办理完您的业务,请您次日再来" << endl << endl;
        }
        else 
        {
            cout << "用户" << p.name << "为取钱用户,进入了取钱窗口" << endl << endl;
            cout << "您排在取钱窗口的第" << window_VIP.size() + 1 << "号,大约需要等待" << p.wait_time << "分钟,请您耐心等候" << endl;
            window_VIP.push(p);//加入到取钱队列中
            show();
            cout << endl << endl;
        }
    }
    else 
    {
        Window t[10];
        for (int i = 0; i < sum; i++)
        {
            t[i].wait_user = window_normal[i].size();
            t[i].num = i;
        }
        sort(t, t + sum, comp);
        cout << "当前最少用户的窗口号是" << t[0].num + 1 << "号窗口" << endl;
        p.enter_window = t[0].num;
        count_time(p);
        if (p.leave_time > 480)
        {
            cout << "银行关门前不能办理完您的业务,请您次日再来" << endl << endl;
        }
        else
        {
            cout << "用户" << p.name << "进入了" << p.enter_window + 1 << "号窗口" << endl;
            cout << "您排在存钱窗口" << p.enter_window + 1 << "的第" << window_normal[p.enter_window].size() + 1 << "号,大约需要等待"
                << p.wait_time << "分钟,请您耐心等候" << endl;
            window_normal[t[0].num].push(p);
            show();
            cout << endl << endl;
        }
    }
}
time_now = p.arrive_time; 

我们之前说过我们的时间设定是根据最后一个客户的录入进行调整的,所以我们需要随时更新当前时间

 if (p.leave_time > 480) 

其次我们银行的标准是17点之后开始结业下班,而且我们系统的时间是以分钟进行计算的

所以我们这里需要小小的判断一下,要学会婉拒别人 ~ 哦

接下来就是最精华的时候了,我们客户进行排队吧,是个人都知道哪里人少排哪里,那我们怎么找到排队人数最少的那个窗口呢?

sort(t, t + sum, comp);

我们可以借助 sort 快排对自定义类型进行排升序,那么数组 0 的位置便是窗户最小的最优位置 

检查队列中是否有离开的人 

void BankCard::check_leave(int time)
{
    int t_size1 = window_VIP.size();
    while (t_size1--)
    {
        user temp = window_VIP.front();
        if (temp.leave_time <= time_now)
        {
            window_VIP.pop();
            cout << "用户" << temp.name << "在"; transform(temp.leave_time); cout << "离开了取钱号窗口" << endl;
        }
        else break;
    }
    for (int i = 0; i < sum; i++) 
    {
        int t_size2 = window_normal[i].size();
        while (t_size2--)
        {
            user temp = window_normal[i].front();
            if (temp.leave_time <= time_now)
            {
                window_normal[i].pop();
                cout << "用户" << temp.name << "在"; transform(temp.leave_time); cout << "离开了" << temp.enter_window + 1 << "号存钱窗口" << endl;
            }
            else break;
        }
    }
}

如果用户的离开时间小于我们的当前时间我们就弹出队列 ~

如果你还不知道离开时间怎么算,别急等下我教你 

查看当前各窗口人数

void BankCard::show()
{
    cout << "<><><><><><><><><><><><><><><><><><><>" << endl;
    cout << "---*目前各窗口排队情况如下*---" << endl;;
    cout << "<><><><><><><><><><><><><><>" << endl;
    cout << "●● 取钱窗口等待人数:" << window_VIP.size() << "人 ●●" << endl;
    for (int i = 0; i < sum; i++)
    {
        cout << "●● "<<i+1<<"号存钱窗口等待人数:" << window_normal[i].size() << "人 ●●" << endl;
    }
    cout << "*----------------------*" << endl;
}

计算用户离开时间以及更新等待时间 

void BankCard::count_time(user& p) 
{
    if (p.enter_window == 3)
    {
        //进入的窗口为取钱窗口
        if (!window_VIP.empty())
        {
            if (window_VIP.back().leave_time < p.arrive_time)
            {
                //离开时间=队列中上一位用户离开时间+花费时间
                p.leave_time = p.arrive_time + p.cost_time;
            }
            else
            {
                p.leave_time = window_VIP.back().leave_time + p.cost_time;
            }
        }
        else
        {
            p.leave_time = p.arrive_time + p.cost_time;//队列为 空离开时间=花费时间
        }
        p.wait_time = p.leave_time - p.arrive_time - p.cost_time;//更新等待时间
    }
    else 
    {
        //为存钱窗口
        if (!window_normal[p.enter_window].empty())
        {
            if (window_normal[p.enter_window].back().leave_time < p.arrive_time)
            {
                p.leave_time = p.arrive_time + p.cost_time;
            }
            else
            {
                p.leave_time = window_normal[p.enter_window].back().leave_time + p.cost_time;
            }
        }
        else
        {
            p.leave_time = p.arrive_time + p.cost_time;//队列为空 离开时间=到达时间+花费时间
        }
        p.wait_time = p.leave_time - p.arrive_time - p.cost_time;//更新等待时间
    }
}

可能老铁会有点懵 ~  

 if (p.enter_window == 3)

如果你仔细看就会发现我们在 enter_bank 中定义过

离开时间 = 队列中上一位用户离开时间 + 花费时间

 

银行操作类的查询排队

void BankCard::charts(int n) 
{
    cout << "●●●●●●●●●●●●●●" << endl;
    cout << "●今日总共为" << n << "位顾客办理●" << endl;
    cout << "●●●●●●●●●●●●●●" << endl;
    cout << "用户名\t到达时间\t等待时间\t花费时间\t离开时间\t办理窗口\t评价" << endl;
    for (int i = 0; i < n; i++) {
        cout << Person[i].name << "\t";
        transform(Person[i].arrive_time); cout << "\t\t";
        cout << Person[i].wait_time << "\t\t";
        cout << Person[i].cost_time << "\t\t";
        transform(Person[i].leave_time); cout << "\t\t";
        int num = Person[i].wait_time;
        if (Person[i].enter_window == 3)
            cout << "取钱窗口\t\t\t";
        else 
            cout << "存钱窗口" << Person[i].enter_window + 1 << "\t";
        cout << Person[i].evaluate << endl;
    }
}

 

 银行操作类的使用手册


void BankCard::handbook()
{
    cout << "在日常生活中,我们普遍接触到窗口服务系统,如到银行柜台办理业务、景区现场购买门票等." << endl;
    cout << "当需要办理业务的顾客数超过窗口数量时,我们需遵循排队等待原则。" << endl;
    cout << "本系统集合多项功能,可以对窗口进行实时监控与调节:" << endl;
    cout << "<1>用户到达营业厅,系统根据该用户所办理业务类型,自动分配到排队最短的窗口排队" << endl;
    cout << "<2>业务办结,系统计算各窗口最先入队的顾客,该顾客办结业务并出队" << endl; 
    cout << "<3>查看各窗口排队情况,输出各窗口提供的业务类型,当前排队等待人数" << endl;
    cout << "<4>当业务办结时,顾客可以对该窗口服务进行评分和建议,评分及建议" << endl;
    cout << "<5>可统计当前排队人数最多的窗口业务类型,为新增窗口提供依据" << endl;
    cout << "<6>可按评分高低顺序展示所有窗口" << endl;
    cout << "<7>可按服务的顾客总数顺序展示所有窗口" << endl;
}

 

这个比较简单就是打印一段东西 ~ 这种代码多来一点就好了

银行操作类的存档文件

int BankCard::archived()
{
    ofstream outFile;  
    outFile.open("score.txt", ios::out);    
    if (!outFile)       
    {
        cout << "创建文件失败" << endl;     
        return 0;       
    }
    int n = person_num;
    outFile << "●●●●●●●●●●●●●●" << endl;
    outFile << "●今日总共为" << n << "位顾客办理●" << endl;
    outFile << "●●●●●●●●●●●●●●" << endl;
    outFile << "用户名\t到达时间\t等待时间\t花费时间\t离开时间\t办理窗口\t评价" << endl;
    for (int i = 0; i < n; i++) {
        outFile << Person[i].name << "\t";
        outFile << 9 + Person[i].arrive_time / 60 << ":" << Person[i].arrive_time % 60;
        cout << "\t\t";
        outFile << Person[i].wait_time << "\t\t";
        outFile << Person[i].cost_time << "\t\t";
        outFile << 9 + Person[i].leave_time / 60 << ":" << Person[i].leave_time % 60;
        int num = Person[i].wait_time;
        if (Person[i].enter_window == 3)
            outFile << "取钱窗口\t\t\t";
        else 
            outFile << "存钱通窗口" << Person[i].enter_window + 1 << "\t\t";
        outFile << Person[i].evaluate << endl;
    }
    outFile.close();    
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "存档成功,请到文件管理中查看详细" << endl;
    return 1;
}

如果你学过 C++ 应该会很熟悉以上操作吧:就是把本应该输入到屏幕的输入到文件中

这里我模拟了一下存档的过程,有点简陋哈哈 ~

用记事本打开就是这个样子 ~ 老铁可以自己调整一下

 

 银行操作类的增删操作

void  BankCard::addition()
{
    cout << "*------新增窗口中,请确保窗口没用用户排队------*" << endl;
    int input;
    cout << "(1.确认增加/0.退出操作):" << endl;
    cin >> input;
    if (input == 0) return;
    sum++;
    Queue<user>* newNode = new Queue<user>[sum];
    window_normal->~Queue();
    window_normal = newNode;
    cout << "*新增窗口中,请等待*" << endl;
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "新增完成" << endl;
    system("pause");
}

void BankCard::reduction()
{
    cout << "*------删减窗口中,请确保窗口没用用户排队------*" << endl;
    int input;
    cout << "(1.确认删减/0.删减操作):" << endl;
    cin >> input;
    if (input == 0) return;
    sum--;
    Queue<user>* newNode = new Queue<user>[sum];
    window_normal->~Queue();
    window_normal = newNode;
    cout << "*删减窗口中,请等待*" << endl;
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "删减完成" << endl;
    system("pause");
}

 

银行操作类的暂停恢复

void BankCard::suspend()
{
    cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
    cout << "\t\t\t温馨提示:请还在排队的客户稍等片刻" << endl;
    cout << "\t\t\t<=====================================>" << endl;
    while (true)
    {
        cout << endl << endl;
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t*---------------------------------------------------*\n");
            printf("\t\t\t*                   欢迎光临东方银行                *\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t********************系统功能菜单*********************\n");
            printf("\t\t\t----------------------     --------------------------\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    1、录入客户信息   *     2、查看窗口信息      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    3、查询排队情况   *     4、退出排队系统      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    5、使用系统手册   *     6、存档系统文件      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    7、窗口状态新增   *     8、窗口状态删减     **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    9、窗口业务暂停   *     0、窗口业务恢复     **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t----------------------     --------------------------\n");
            cout << "请输入你将要执行的操作>:" << endl;
            int input;
            cin >> input;
            system("cls");
            switch (input)
            {
            case 1:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            };
            case 2:
            {
                show();
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 3:
            {
                charts(person_num);
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 4:
            {
                cout << "\t\t\t*-----------------------*" << endl;
                cout << "\t\t\t<<><>欢迎使用本系统<><>>*" << endl;
                cout << "\t\t\t*-----------------------*" << endl;
                exit(0);
            };
            case 5:
            {
                handbook();
                system("pause");
                system("cls");
                break;
            }
            case 6:
            {
                archived();
                break;
            }
            case 7:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            }
            case 8:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            }
            case 9:
            {
                suspend();
                break;
            }
            case 0:
                cout << "*窗口业务恢复中,请等待*" << endl;
                cout << "====>" << endl;
                Sleep(3000);
                cout << "==========>" << endl;
                cout << "==================>" << endl;
                Sleep(2000);
                cout << "===========================>" << endl;
                cout << "=====================================>" << endl;
                Sleep(1000);
                cout << "===============================================================>" << endl;
                cout << "窗口业务恢复完成" << endl;
                return;
        }
    }
}

以上的思路比较简单但是写的很烂,简单的说一下暂停,按下选项之间进入我们设置的循环里,限制了某一些功能,知道按恢复才能使用

 

银行操作类的全部代码

//user.h
#include<string>
#include"Queue.h"
using std::string;

class user
{
public:
    string name;         //用户编号
    int arrive_time;   //用户到达时间
    bool identity;       //顾客身份
    int cost_time;      //办理业务花费时间
    int leave_time;     //离开时间
    int wait_time;      //等待时间
    int enter_window;//代表取钱窗口
};
//Window.h
class Window
{
public:
    int num;                //窗口号
    int wait_user;          //窗口等待人数
};
//Queue.h
template <typename T> 
class QueueNode
{
public:
    T data;
    QueueNode* prev;
    QueueNode* next;
};

template <typename T> 
class Queue 
{
public:
    Queue();
    ~Queue();

    bool empty() const
    { 
        return _size == 0;
    }

    int size() const 
    { 
        return _size; 
    }

    void push(const T&x);
    void pop();
    T front();
    T back();
private:
    QueueNode<T>* head;
    QueueNode<T>* tail;
    int _size;
};

template <typename T> 
Queue<T>::Queue()
{
    head = new QueueNode <T>;
    tail = new QueueNode <T>;
    head->prev = NULL;
    head->next = tail;
    tail->prev = head;
    tail->next = NULL;
    _size = 0;
}

template <typename T> 
Queue<T>::~Queue() 
{
    while (_size != 0) 
    {
        QueueNode<T>* t;
        t = head->next;
        head->next = head->next->next;
        head->next->prev = head;
        delete t;
        _size--;
    }
}

template <typename T> 
void Queue<T>::push(const T& x) 
{
    QueueNode<T>* t = new QueueNode<T>;
    t->data = x;
    t->prev = tail->prev;
    t->next = tail;
    tail->prev->next = t;
    tail->prev = t;
    _size++;
}

template <typename T> 
void Queue<T>::pop() 
{
    if (_size) 
    {
        QueueNode<T>* t;
        t = head->next;
        head->next = head->next->next;
        head->next->prev = head;
        delete t;
        _size--;
    }
}

template <typename T> 
T Queue<T>::front() 
{
    return head->next->data;
}

template <typename T> 
T Queue<T>::back() 
{
    return tail->prev->data;
}

//BankCard.h
#include <iostream>
#include"user.h"
#include"Window .h"
#include<algorithm>
#include<time.h>
#include<cstdio>
#include<conio.h>
#include <fstream>
#include<windows.h>
using namespace std;

class BankCard
{
public:
	//初始化
	void BankCard_init();
	//构造函数
	BankCard()
	{
		BankCard_init();
	}
	//手册
	void handbook();
	//查看窗口人数
	void show();
	//计算离开时间和更新等待时间
	void count_time(user& p);
	//检查队列中是否有离开的人
	void check_leave(int time);
	//进入银行取票
	void enter_bank(user& p);
	//打印表单
	void charts(int n);
	//用户入队列
	void manual();
	//菜单-选项
	void menu();
	//新增窗口
	void  addition();
	//删减窗口
	void reduction();
	//窗口暂停
	void suspend();
	//存档文件
	int archived();
	//办理的业务类型
	int vbusiness();
};
//BankCard.cpp
#include"BankCard.h"

Queue<user>* window_normal = new Queue<user>[3]; 
static int sum = 3;                                                      
Queue<user> window_VIP;             
Queue<user> leave;                        
user Person[1000];                        
int time_now;                               
int person_num;                            


bool comp(Window x, Window y)
{
    if (x.wait_user == y.wait_user) 
    {
        return x.num < y.num;
    }
    return x.wait_user < y.wait_user;
}


void BankCard::BankCard_init()
{
    time_now = 0;
    person_num = 0;
    for (int i = 0; i < sum; i++)
    {
        while (!window_normal[i].empty())
        {
            window_normal[i].pop();
        }
    }
    while (!window_VIP.empty())
    { 
        window_VIP.pop(); 
    }

    while (!leave.empty())
    { 
        leave.pop(); 
    }

}

void transform(int num)
{
    cout << 9 + num / 60 << ":" << num % 60;
}

void BankCard::show()
{
    cout << "<><><><><><><><><><><><><><><><><><><>" << endl;
    cout << "---*目前各窗口排队情况如下*---" << endl;;
    cout << "<><><><><><><><><><><><><><>" << endl;
    cout << "●● 取钱窗口等待人数:" << window_VIP.size() << "人 ●●" << endl;
    for (int i = 0; i < sum; i++)
    {
        cout << "●● "<<i+1<<"号存钱窗口等待人数:" << window_normal[i].size() << "人 ●●" << endl;
    }
    cout << "*----------------------*" << endl;
}

void BankCard::count_time(user& p) 
{
    if (p.enter_window == 3)
    {
        if (!window_VIP.empty())
        {
            if (window_VIP.back().leave_time < p.arrive_time)
            {
                p.leave_time = p.arrive_time + p.cost_time;
            }
            else
            {
                p.leave_time = window_VIP.back().leave_time + p.cost_time;
            }
        }
        else
        {
            p.leave_time = p.arrive_time + p.cost_time;
        }
        p.wait_time = p.leave_time - p.arrive_time - p.cost_time;
    }
    else 
    {
       
        if (!window_normal[p.enter_window].empty())
        {
            if (window_normal[p.enter_window].back().leave_time < p.arrive_time)
            {
                p.leave_time = p.arrive_time + p.cost_time;
            }
            else
            {
                p.leave_time = window_normal[p.enter_window].back().leave_time + p.cost_time;
            }
        }
        else
        {
            p.leave_time = p.arrive_time + p.cost_time;
        }
        p.wait_time = p.leave_time - p.arrive_time - p.cost_time;
    }
}

void BankCard::check_leave(int time)
{
    int t_size1 = window_VIP.size();
    while (t_size1--)
    {
        user temp = window_VIP.front();
        if (temp.leave_time <= time_now)
        {
            window_VIP.pop();
            cout << "用户" << temp.name << "在"; transform(temp.leave_time); cout << "离开了取钱号窗口" << endl;
        }
        else break;
    }
    for (int i = 0; i < sum; i++) 
    {
        int t_size2 = window_normal[i].size();
        while (t_size2--)
        {
            user temp = window_normal[i].front();
            if (temp.leave_time <= time_now)
            {
                window_normal[i].pop();
                cout << "用户" << temp.name << "在"; transform(temp.leave_time); cout << "离开了" << temp.enter_window + 1 << "号存钱窗口" << endl;
            }
            else break;
        }
    }
}


void BankCard::enter_bank(user& p) 
{
    time_now = p.arrive_time;
    check_leave(time_now);    
    cout << "用户" << p.name << "在"; transform(p.arrive_time); cout << "到达了银行,";
    cout << "办理业务需要花费" << p.cost_time << "分钟,用户身份是";
    p.identity ? cout << "取钱用户" << endl : cout << "存钱用户" << endl;
    show(); 
    if (p.identity) 
    {
  
        p.enter_window = 3;
        count_time(p);
        if (p.leave_time > 480) 
        {
            cout << "银行关门前不能办理完您的业务,请您次日再来" << endl << endl;
        }
        else 
        {
            cout << "用户" << p.name << "为取钱用户,进入了取钱窗口" << endl << endl;
            cout << "您排在取钱窗口的第" << window_VIP.size() + 1 << "号,大约需要等待" << p.wait_time << "分钟,请您耐心等候" << endl;
            window_VIP.push(p);
            show();
            cout << endl << endl;
        }
    }
    else 
    {
        Window t[10];
        for (int i = 0; i < sum; i++)
        {
            t[i].wait_user = window_normal[i].size();
            t[i].num = i;
        }
        sort(t, t + sum, comp);
        cout << "当前最少用户的窗口号是" << t[0].num + 1 << "号窗口" << endl;
        p.enter_window = t[0].num;
        count_time(p);
        if (p.leave_time > 480)
        {
            cout << "银行关门前不能办理完您的业务,请您次日再来" << endl << endl;
        }
        else
        {
            cout << "用户" << p.name << "进入了" << p.enter_window + 1 << "号窗口" << endl;
            cout << "您排在存钱窗口" << p.enter_window + 1 << "的第" << window_normal[p.enter_window].size() + 1 << "号,大约需要等待"
                << p.wait_time << "分钟,请您耐心等候" << endl;
            window_normal[t[0].num].push(p);
            show();
            cout << endl << endl;
        }
    }
}


void BankCard::charts(int n) 
{
    cout << "●●●●●●●●●●●●●●" << endl;
    cout << "●今日总共为" << n << "位顾客办理●" << endl;
    cout << "●●●●●●●●●●●●●●" << endl;
    cout << "用户名\t到达时间\t等待时间\t花费时间\t离开时间\t办理窗口\t评价" << endl;
    for (int i = 0; i < n; i++) {
        cout << Person[i].name << "\t";
        transform(Person[i].arrive_time); cout << "\t\t";
        cout << Person[i].wait_time << "\t\t";
        cout << Person[i].cost_time << "\t\t";
        transform(Person[i].leave_time); cout << "\t\t";
        int num = Person[i].wait_time;
        if (Person[i].enter_window == 3)
            cout << "取钱窗口\t\t\t";
        else 
            cout << "存钱窗口" << Person[i].enter_window + 1 << "\t";
        cout << Person[i].evaluate << endl;
    }
}


void BankCard::manual() 
{
    while (1) 
    {
        double t;
        cout << "*-----------------------*" << endl;
        cout << "《=======姓名=======》"; cin >> Person[person_num].name;
        cout << "《=======到达时间=======》"; cin >> t;
        double temp = int(t - 9.0) * 60 + (t - int(t)) * 100;
        if (temp < time_now) 
        {
            cout << "请按时间先后顺序输入" << endl;
            system("pause");
            system("cls");
            continue;
        }
        Person[person_num].arrive_time = temp;
        int r = rand() % 30 + 1;
        Person[person_num].cost_time = r;
        bool input = vbusiness();
        Person[person_num].identity = input;
        cout << "请输入用户对此次银行服务体验的评价:" << endl;
        cin >> Person[person_num].evaluate;
        cout << "《=======********=======》" << endl;
        system("pause");
        system("cls");
        enter_bank(Person[person_num]);
        person_num++;
        menu();
    }
}

void BankCard::handbook()
{
    cout << "在日常生活中,我们普遍接触到窗口服务系统,如到银行柜台办理业务、景区现场购买门票等." << endl;
    cout << "当需要办理业务的顾客数超过窗口数量时,我们需遵循排队等待原则。" << endl;
    cout << "本系统集合多项功能,可以对窗口进行实时监控与调节:" << endl;
    cout << "<1>用户到达营业厅,系统根据该用户所办理业务类型,自动分配到排队最短的窗口排队" << endl;
    cout << "<2>业务办结,系统计算各窗口最先入队的顾客,该顾客办结业务并出队" << endl; 
    cout << "<3>查看各窗口排队情况,输出各窗口提供的业务类型,当前排队等待人数" << endl;
    cout << "<4>当业务办结时,顾客可以对该窗口服务进行评分和建议,评分及建议" << endl;
    cout << "<5>可统计当前排队人数最多的窗口业务类型,为新增窗口提供依据" << endl;
    cout << "<6>可按评分高低顺序展示所有窗口" << endl;
    cout << "<7>可按服务的顾客总数顺序展示所有窗口" << endl;
}

void BankCard::menu() 
{
    while (true)
    {

        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t*---------------------------------------------------*\n");
        printf("\t\t\t*                   欢迎光临东方银行                *\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t********************系统功能菜单*********************\n");
        printf("\t\t\t----------------------     --------------------------\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    1、录入客户信息   *     2、查看窗口信息      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    3、查询排队情况   *     4、退出排队系统      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    5、使用系统手册   *     6、存档系统文件      **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    7、窗口状态新增   *     8、窗口状态删减     **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t**    9、窗口业务暂停   *     0、窗口业务恢复     **\n");
        printf("\t\t\t*****************************************************\n");
        printf("\t\t\t----------------------     --------------------------\n");
            cout << "请输入你将要执行的操作>:" << endl;
            int input;
            cin >> input;
            system("cls");
            switch (input)
            {
            case 1:
            {
                manual();
                system("pause");
                system("cls");
                break;
            };
            case 2:
            {
                show();
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 3:
            {
                charts(person_num);
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 4:
            {
                cout << "*-----------------------*" << endl;
                cout << "<<><>欢迎使用本系统<><>>*" << endl;
                cout << "*-----------------------*" << endl;
                exit(0);
            };
            case 5:
            {
                handbook();
                system("pause");
                system("cls");
                break;
            }
            case 6:
            {
                archived();
                system("pause");
                system("cls");
                break;
            }
            case 7:
            {
                addition();
                system("pause");
                system("cls");
                break;
            }
            case 8:
            {
                reduction();
                system("pause");
                system("cls");
                break;
            }
            case 9:
            {
                suspend();
                system("pause");
                system("cls");
                break;
            }
        }
    }
}

void  BankCard::addition()
{
    cout << "*------新增窗口中,请确保窗口没用用户排队------*" << endl;
    int input;
    cout << "(1.确认增加/0.退出操作):" << endl;
    cin >> input;
    if (input == 0) return;
    sum++;
    Queue<user>* newNode = new Queue<user>[sum];
    window_normal->~Queue();
    window_normal = newNode;
    cout << "*新增窗口中,请等待*" << endl;
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "新增完成" << endl;
    system("pause");
}

void BankCard::reduction()
{
    cout << "*------删减窗口中,请确保窗口没用用户排队------*" << endl;
    int input;
    cout << "(1.确认删减/0.删减操作):" << endl;
    cin >> input;
    if (input == 0) return;
    sum--;
    Queue<user>* newNode = new Queue<user>[sum];
    window_normal->~Queue();
    window_normal = newNode;
    cout << "*删减窗口中,请等待*" << endl;
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "删减完成" << endl;
    system("pause");
}

int BankCard::vbusiness()
{
    cout << "*-----------------------*" << endl;
    cout << "<<><>0.办理存钱窗口<><>>*" << endl;
    cout << "<<><>1.办理取钱窗口<><>>*" << endl;
    cout << "*-----------------------*" << endl;
    int input;
    cout << "请输入你想办理的业务>:" << endl;
    cin >> input;
    if (input == 0) return 0;
    if (input == 1) return 1;
}

void BankCard::suspend()
{
    cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
    cout << "\t\t\t温馨提示:请还在排队的客户稍等片刻" << endl;
    cout << "\t\t\t<=====================================>" << endl;
    while (true)
    {
        cout << endl << endl;
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t*---------------------------------------------------*\n");
            printf("\t\t\t*                   欢迎光临东方银行                *\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t********************系统功能菜单*********************\n");
            printf("\t\t\t----------------------     --------------------------\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    1、录入客户信息   *     2、查看窗口信息      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    3、查询排队情况   *     4、退出排队系统      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    5、使用系统手册   *     6、存档系统文件      **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    7、窗口状态新增   *     8、窗口状态删减     **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t**    9、窗口业务暂停   *     0、窗口业务恢复     **\n");
            printf("\t\t\t*****************************************************\n");
            printf("\t\t\t----------------------     --------------------------\n");
            cout << "请输入你将要执行的操作>:" << endl;
            int input;
            cin >> input;
            system("cls");
            switch (input)
            {
            case 1:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            };
            case 2:
            {
                show();
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 3:
            {
                charts(person_num);
                system("pause");
                system("cls");
                menu();
                break;
            };
            case 4:
            {
                cout << "\t\t\t*-----------------------*" << endl;
                cout << "\t\t\t<<><>欢迎使用本系统<><>>*" << endl;
                cout << "\t\t\t*-----------------------*" << endl;
                exit(0);
            };
            case 5:
            {
                handbook();
                system("pause");
                system("cls");
                break;
            }
            case 6:
            {
                archived();
                break;
            }
            case 7:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            }
            case 8:
            {
                cout << "\t\t\t《===================窗口业务暂停中===================》" << endl;
                break;
            }
            case 9:
            {
                suspend();
                break;
            }
            case 0:
                cout << "*窗口业务恢复中,请等待*" << endl;
                cout << "====>" << endl;
                Sleep(3000);
                cout << "==========>" << endl;
                cout << "==================>" << endl;
                Sleep(2000);
                cout << "===========================>" << endl;
                cout << "=====================================>" << endl;
                Sleep(1000);
                cout << "===============================================================>" << endl;
                cout << "窗口业务恢复完成" << endl;
                return;
        }
    }
}

int BankCard::archived()
{
    ofstream outFile;  
    outFile.open("score.txt", ios::out);    
    if (!outFile)       
    {
        cout << "创建文件失败" << endl;     
        return 0;       
    }
    int n = person_num;
    outFile << "●●●●●●●●●●●●●●" << endl;
    outFile << "●今日总共为" << n << "位顾客办理●" << endl;
    outFile << "●●●●●●●●●●●●●●" << endl;
    outFile << "用户名\t到达时间\t等待时间\t花费时间\t离开时间\t办理窗口\t评价" << endl;
    for (int i = 0; i < n; i++) {
        outFile << Person[i].name << "\t";
        outFile << 9 + Person[i].arrive_time / 60 << ":" << Person[i].arrive_time % 60;
        cout << "\t\t";
        outFile << Person[i].wait_time << "\t\t";
        outFile << Person[i].cost_time << "\t\t";
        outFile << 9 + Person[i].leave_time / 60 << ":" << Person[i].leave_time % 60;
        int num = Person[i].wait_time;
        if (Person[i].enter_window == 3)
            outFile << "取钱窗口\t\t\t";
        else 
            outFile << "存钱通窗口" << Person[i].enter_window + 1 << "\t\t";
        outFile << Person[i].evaluate << endl;
    }
    outFile.close();    
    cout << "====>" << endl;
    Sleep(3000);
    cout << "==========>" << endl;
    cout << "==================>" << endl;
    Sleep(2000);
    cout << "===========================>" << endl;
    cout << "=====================================>" << endl;
    Sleep(1000);
    cout << "===============================================================>" << endl;
    cout << "存档成功,请到文件管理中查看详细" << endl;
    return 1;
}
//main.cpp
#include"BankCard.h"
#include <graphics.h>

void menu2()
{
    int input = 0, count = 0, i = 0;
    char mima[20] = "123";//登入的密码
    char shuru[20] = { 0 };
    system("color F4");
    printf("\t\t\t     **************************************\n");
    printf("\t\t\t     |          *欢迎光临东方银行*        |\n");
    printf("\t\t\t     |           *管理员: 东方*           |\n");
    printf("\t\t\t      ------------------------------------\n");
    printf("请输入管理员密码:\n");
    while ((count = _getch()) != '\r')
    {
        if (count == '\b')
        {
            i--;
            printf("\b \b");
        }
        else
        {
            shuru[i++] = count;
            printf("*");
        }
    }
    shuru[i++] = '\0';
    if (strcmp(mima, shuru) == 0)
    {
        printf("\n密码正确,您已进入系统!\n");
    }
    else
    {
        printf("\n密码错误,请重新输入!\n");
        exit(0);     //输入错误,直接退出
    }
    system("pause");
    system("cls");
}

int main()
{
	system("color F4");
    menu2();
	BankCard bk;
	bk.BankCard_init();
	bk.menu();
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务 | Springboot整合Dubbo+Nacos实现RPC调用

官网&#xff1a;Apache Dubbo 随着互联网技术的飞速发展&#xff0c;越来越多的企业和开发者开始关注微服务架构。微服务架构可以将一个大型的应用拆分成多个独立、可扩展、可维护的小型服务&#xff0c;每个服务负责实现应用的一部分功能。这种架构方式可以提高开发效率&…

怎么用住宅代理IP?使用住宅代理IP有哪些好处?

如何使用住宅代理IP&#xff1a; 使用住宅代理IP主要涉及以下几个步骤&#xff1a; 选择合适的代理IP供应商&#xff1a; 考虑供应商的可靠性、代理IP的质量、速度、稳定性以及价格。选择信誉良好且服务稳定的供应商&#xff0c;确保获得高质量的代理IP服务。配置代理IP&#…

2024年中漫谈

不知不觉&#xff0c;2024年已来到了6月&#xff0c;博主不禁感叹时光易逝&#xff0c;岁月的车轮滚滚向前&#xff0c;永不止步&#xff0c;此刻无关贫穷与富裕&#xff0c;伟大与平凡。 于是乎&#xff0c;宇宙&#xff08;时空&#xff09;看似毫无终点&#xff0c;一望无垠…

辽宁普通测径仪升级智能测径仪后都有哪些改进?

关键字: 普通测径仪, 智能测径仪, 测径仪升级, 测径仪特点, 智能测径仪优势, 目前多数厂家测径仪的数据处理方式是单片机计算出最终结果&#xff0c;然后传输到工控机后期处理。这样的电路系统对轧钢现场的高温、高粉尘和强电磁干扰的环境适应性很差&#xff0c;使得同一厂家、…

芯片后端对于芯片设计公司的重要性

在芯片设计流程中&#xff0c;后端设计是一个至关重要的环节&#xff0c;它直接关系到芯片从设计到实际生产的转化&#xff0c;以及最终产品的性能、可靠性、成本和上市时间。 以下是为什么芯片后端非常重要的几个关键原因&#xff1a; 物理实现&#xff1a;后端设计是芯片从逻…

【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现

文章目录 前言一、Appium介绍和安装二、python代码功能实现 2.1 hello appium 参数详解 2.2 在脚本内启动其他app 2.3 获取app的包名和界面名 2.4 关闭app和驱动对象 2.5 安装和卸载以及是否安装app 2.6 将应用置于后台总结 前言 一、Appium介绍…

Vertical Layout 、Horizontal Layout 实验窗体自适应布局

实验目的 学习实验使用布局实现如下自适应界面 窗体邮件&#xff0c;布局设置为垂直布局 用同样的方法&#xff0c;添加groupbox&#xff0c;并右键设置为水平布局 拖入一个Horizontal Layout&#xff0c;然后拖入button&#xff0c;拖入 Horizontal Spacer 遇到一个问题&#…

openh264 帧内预测编码过程源码分析

函数关系 说明&#xff1a; 可以看到完成帧内预测编码的核心函数就是 WelsMdI16x16、WelsMdI4x4、WelsMdI4x4Fast 、WelsMdIntraChroma 四个函数。 原理 WelsMdI16x16函数 功能&#xff1a;针对16x16像素块的帧内模式决策过程&#xff1a; 局部变量申明&#xff1b;根据宏块…

三星公布尖端芯片进展 | 百能云芯

三星电子在本周三举办的年度晶圆制造盛会上&#xff0c;揭开了未来多项技术革新的神秘面纱&#xff0c;并宣布其晶圆制造业务将整合全球领先的记忆芯片、晶圆制造及封装服务&#xff0c;为AI芯片客户提供一站式服务&#xff0c;以加速其生产进程。 三星强调&#xff0c;客户仅需…

万元补贴助力开源项目!「GitCode 开源摘星计划」已开启

当我们谈到开源项目运作的痛点&#xff0c;都在谈什么&#xff1f;找不到对项目感兴趣的开发者&#xff0c;始终是几个人维护…代码托管平台上开源项目众多&#xff0c;得不到有力的流量支持&#xff0c;项目被淹没在茫茫列表里…社区运营要专人来做&#xff0c;成本太高… 这…

【StructueEngineering】Wind Load Combination Patterns风荷载组合模式

文章目录 Combination PatternsBasic Rules of Combinations组合的基本规律Specific Combination Patterns1. First 8 Combinations (1 to 8)2. Middle 8 Combinations (9 to 16)3. Last 8 Combinations (17 to 24) Summary of CombinationsKey Variables and Parameters with …

vue/react/js 常用的原生获取当前页面的url网址的相关方法

目录 第一章 场景 第二章 总结 第一章 场景 最近实现需求时遇到这么一种情况&#xff1a; 本地url —— 线上url —— 需求&#xff1a;需要将token清除掉 注意事项&#xff1a;token不是#/后面的参数&#xff0c;说明并不是我们前端返回的&#xff0c;vue路由的方法使用不…

python的a[:2]、a[:] 和a [::] 的区别

一、a[:2] 数据准备 import numpy as np X np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) print(X)形成矩阵 print (“X[: 2]:”, X[: 2]) ### :表示索引 0至1行&#xff1b; 二、a[:]和a [::] 在 Python 中&#xff0c;[:] 和 [::…

Vue30-自定义指令:对象式

一、需求&#xff1a;创建fbind指定 要用js代码实现自动获取焦点的功能&#xff01; 二、实现 2-1、步骤一&#xff1a;绑定元素 2-2、步骤二&#xff1a;input元素获取焦点 此时&#xff0c;页面初始化的时候&#xff0c;input元素并没有获取焦点&#xff0c;点击按钮&…

CobaltStrike权限传递MSF

一、测试环境 操作系统&#xff1a; 1.VMware17 2.kali 6.1.0-kali5-amd64 3.Win10x64 软件&#xff1a; 1.cs4.0 2.metasploit v6.3.4-dev 二、测试思路 1.cs是一款渗透测试工具&#xff0c;但没有漏洞利用的模块&#xff0c;我们可以在拿到目标主机的权限后&#xff0c;将…

mtk低压充电关机充电关机动画显示

lk下充电&#xff1a; 在启动时读取电压小于BATTERY_LOWVOL_THRESOLD便会到lk循环充电&#xff0c;这里的BATTERY_LOWVOL_THRESOLD是3.45v 1、mtk_battery.c&#xff1a; 通过fg计算电池充电电流&#xff0c;电池温度等2、mtk_charger_intf.c&#xff1a; 在mtk_charger_init…

React 中的 Lanes

React 中有一个 Lane 的概念&#xff0c;Lane 就像高速路上的不同车道&#xff0c;具有不同优先级&#xff0c;在 React Lane 通过一个 32 位的二进制数来表示。越小优先级别越高&#xff0c;SyncLane 级别最高。用二进制存储的方式&#xff0c;可以通过逻辑操作快速判断 Lane …

App UI 风格展现非凡创意

App UI 风格展现非凡创意

Sqoop学习详细介绍!!

一、Sqoop介绍 Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(HDFS/Hive/HBase)与传统的数据库(mysql、postgresql...)间进行数据的传递&#xff0c;可以将一个关系型数据库&#xff08;例如 &#xff1a; MySQL ,Oracle ,Postgres等&#xff09;中的数据导进到Hadoop的H…

160. 相交链表 (Swift版本)

题目描述 最简单直接的解法 遍历 headA 的所有节点, 看 headB 中是否有相交的节点 /*** Definition for singly-linked list.* public class ListNode {* public var val: Int* public var next: ListNode?* public init(_ val: Int) {* self.val val*…