银行就好系统,该程序存在问题,在顾客进入窗口开始服务的时候,一号窗口会出现在后面开始服务,如果有解决方案,请告诉我谢谢!

<div>
//该头文件中存放了所有的变量
#ifndef VARIABLE_H
#define VARIABLE_H

//定义窗口数量
const int  Nor_Max = 3;
const int  VIP_Max = 1;
const int  Offic_Max = 1;
const int  ServedTime = 4;
const int  SpaceTime = 2;
const int  MaxTime = 12;
//用来记录时间,看顾客是否可以入队
int time = 0;
//用来自增来表示当前客户取到的编号
int NumberCount = 0;

//记录当前叫号的窗口信息
int NorWindow = 0;
int VipWindow = 0;
int OfficWindow = 0;

//窗口数量
int WindowNumber = 0;
//改变量用于记录用户的进入信息
int col = 0;

//定义顾客类型
typedef enum Client_Type{
	CommonClient, VIPClient, OfficialClient
};
//定义窗口类型
typedef enum Window_Type{
	Common_Bank, VIP_Bank, Official_Bank
};

//定义在银行中顾客到场时的场景,即每个2s后,顾客入队的情况,该矩阵在顾客入队时使用
int Staution[7][3] = { { 3, 1, 1 }, { 5, 0, 0 }, { 0, 0, 0 }, { 5, 1, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } };




#endif

//头文件
#ifndef USER_H
#define USER_H

#include
   
   
    
    
#include"Variable.h"
using namespace std;

//定义每个客户需要被服务的时间
const int ClientNeedTime = 4;

class User{

public:
	int Id;//顾客叫到的号码
	int isWait;
	int ArrayTime;//到达的时间
	//应为该程序已经固定每个客户被服务的时间为4s,所以在这里不需要为每个客户固定他们被服务的时间

public:
	int ServeTime;//顾客已被服务的时间
	Client_Type type;//顾客类型

public:
	//该函数的作用是如果客户不满足推队条件,则窗口将继续为客户服务
	void getServed(){

	}
};

#endif


#ifndef VIPUSER_H
#define VIPUSER_H

#include"User.h"

class VIPUser:public User{



public:
	void getServed();
};

void VIPUser::getServed()
{
	cout << "VIP" << Id << "用户正在接受服务" << endl;
}

#endif


#ifndef OFFICIALUSER_H
#define OFFICIALUSER_H

#include"User.h"
class OfficialUser :public User{


public:
	void getServed();
};

void OfficialUser::getServed()
{
	cout << "政府" << Id << "用户正在接受服务" << endl;
}

#endif

#ifndef NORMALUSER_H
#define NORMALUSER_H

#include"User.h"

class NormalUser :public User{



public:
	void getServed();
};
void NormalUser::getServed()
{
	cout <<"普通"<< Id << "用户正在接受服务" << endl;
}

#endif

#ifndef BANKWINDOW_H
#define BANKWINDOW_H
#include"User.h"
#include"Variable.h"
#include
    
    
     
     
using namespace std;
class BankWindow{
public:
	bool isBusy;//是否处于服务状态
	int Id;//窗口号
	User client;//当前服务顾客
	Window_Type type;//窗口类型
public:
	//该函数的作用是为主要负责将用户弹出链表队列
	void HandleUser();
};
void BankWindow::HandleUser()
{
	
}
#endif

#ifndef NORMALBANKWINDOW_H
#define NORMALBANKWINDOW_H
#include"BankWindow.h"
#include"Simulater.h"
class NormalBankWindow:public BankWindow{
public:
	void HandleUser();
};
void NormalBankWindow::HandleUser()
{
	cout << "普通窗口" << Id << "正在对用户" << client.Id << "进行服务" << endl;
}
#endif

#ifndef OFFICIALBANKWINDOW_H
#define OFFICIALBANKWINDOW_H
#include"BankWindow.h"
class OfficialBankWindow :public BankWindow{
public:
	void HandleUser();
};
void OfficialBankWindow::HandleUser()
{
	cout << "政府窗口" << Id << "正在对用户" << client.Id << "进行服务" << endl;
}
#endif

#ifndef VIPBANKWINDOW_H
#define VIPBANKWINDOW_H
#include"BankWindow.h"
class VIPBankWindow :public BankWindow{
public:
	void HandleUser();
};
void VIPBankWindow::HandleUser()
{
	cout << "VIP窗口" << Id << "正在对用户" << client.Id << "进行服务" << endl;
}
#endif

#ifndef SIMULATER_H
#define SIMULATER_H
#include
     
     
      
      
#include
      
      
       
       
#include
       
       
        
        
#include"NormalBankWindow.h"
#include"OfficialBankWindow.h"
#include"VIPBankWindow.h"
#include"VIPUser.h"
#include"NormalUser.h"
#include"OfficialUser.h"
#include"LinkList.h"
#include"Variable.h"
using namespace std;
class Simulater{

private:
	//普通窗口3个,VIP窗口一个,对公窗口1个
	NormalBankWindow NorBankWin[Nor_Max];
	VIPBankWindow VIPBankWin[VIP_Max];
	OfficialBankWindow OfficBankWin[Offic_Max];
public:
	//利用顺序栈来存放不同用户类型的顾客
	queue
        
        
          Normal; queue 
         
           VIP; queue 
          
            Official; //用链表形式的队列来存放窗口出的人 LinkList 
           
             NorBank; LinkList 
            
              VIPBank; LinkList 
             
               OffBank; public: //我希望在构造函数中实现,生成窗口队列的功能 Simulater(); //该函模拟了全过程 void Simulate(); //顾客入队,该函数处理一开始定义的矩阵 void customerEnter(); //顾客入银行处理队列 void simulaterCustomerEnter(); //呼叫用户 void simulaterCallCustomer(); }; Simulater::Simulater() { //窗口如窗口的队伍 //将窗口入队,并将窗口的初始状态设置为不忙碌,并设置窗口的类型,设置窗口类型的主要作用是分班当VIP用户出现是的操作 for (int i = 0; i < Nor_Max; i++) { WindowNumber++; NorBank.Push(NorBankWin[i]); NorBankWin[i].Id = WindowNumber; NorBankWin[i].isBusy = false; NorBankWin[i].type = Common_Bank; } for (int i = 0; i < VIP_Max; i++) { WindowNumber++; VIPBank.Push(VIPBankWin[i]); VIPBankWin[i].Id = WindowNumber; VIPBankWin[i].isBusy = false; VIPBankWin[i].type = VIP_Bank; } for (int i = 0; i < Offic_Max; i++) { WindowNumber++; OffBank.Push(OfficBankWin[i]); OfficBankWin[i].Id = WindowNumber; OfficBankWin[i].isBusy = false; OfficBankWin[i].type = Official_Bank; } } //该函数的作用是将客户从顾客队里剔除,即队列长度减一 void Simulater::simulaterCustomerEnter() { //首先判断是那种顾客,在将相应的顾客队列的头元素弹出 //该函数一次只能处理一名顾客 for (int i = 0; i < Nor_Max; i++) { if (NorBankWin[i].isBusy == false&&!Normal.empty()) { NorBankWin[i].client = Normal.front(); /*Normal.front().getServed();*/ NorBankWin[i].isBusy = true; Normal.pop(); } } for (int i = 0; i < VIP_Max; i++) { if (VIPBankWin[i].isBusy == false && (!VIP.empty() || !Normal.empty())) { if (!VIP.empty()) { VIPBankWin[i].client = VIP.front(); /*VIP.front().getServed();*/ VIPBankWin[i].isBusy = true; VIP.pop(); } else { VIPBankWin[i].client = Normal.front(); /*Normal.front().getServed();*/ VIPBankWin[i].isBusy = true; Normal.pop(); } } } for (int i = 0; i < Offic_Max; i++) { if (OfficBankWin[i].isBusy == false && (!Official.empty() || !Normal.empty())) { if (!Official.empty()) { OfficBankWin[i].client = Official.front(); /*Official.front().getServed();*/ OfficBankWin[i].isBusy = true; Official.pop(); } else { OfficBankWin[i].client = Normal.front(); /*Normal.front().getServed();*/ OfficBankWin[i].isBusy = true; Normal.pop(); } } } } //模拟主结构,该函数的功能已经完成 void Simulater::Simulate() { //下面是正式的开始模拟银行的工作行为 while (time 
               
              
             
            
           
          
        
       
       
      
      
     
     
    
    
   
   
</div>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成银行窗口服务系统需要考虑以下几个方面: 1. 银行窗口的数量:需要确定银行服务窗口的数量,这决定了系统需要支持的并发服务数量。 2. 排队算法:需要选择合适的排队算法,例如先来先服务(FCFS)或最短作业优先(SJF)等。 3. 客户信息管理:需要设计客户信息管理流程,例如如何获取客户信息、如何排队、如何叫号等。 4. 窗口服务人员管理:需要设计窗口服务人员管理流程,例如如何分配任务、如何通知服务客户等。 以下是一个简单的C++代码示例,实现了基本的银行窗口服务系统功能: ```c++ #include <iostream> #include <queue> #include <string> using namespace std; // 客户类 class Customer { public: Customer(string name, int id) : name(name), id(id) {} string name; int id; }; // 窗口服务人员类 class ServiceStaff { public: ServiceStaff(string name, int id) : name(name), id(id) {} string name; int id; }; // 银行服务系统类 class BankServiceSystem { public: BankServiceSystem(int window_num) { for (int i = 1; i <= window_num; ++i) { windows.push(i); } } void AddCustomer(Customer customer) { customers.push(customer); } void AssignTask(ServiceStaff staff) { if (windows.empty()) { cout << "All windows are busy now, please wait a minute." << endl; return; } int window_id = windows.front(); windows.pop(); ServiceTask task = {staff, customers.front(), window_id}; tasks.push(task); customers.pop(); cout << "Assign task to service staff " << staff.name << " at window " << window_id << endl; } void FinishTask(int window_id) { ServiceTask task = tasks.front(); tasks.pop(); cout << "Finish task " << task.customer.name << " at window " << window_id << endl; windows.push(window_id); } private: // 服务任务类 struct ServiceTask { ServiceStaff staff; Customer customer; int window_id; }; queue<Customer> customers; // 等待服务的客户队列 queue<ServiceTask> tasks; // 正在服务的任务队列 queue<int> windows; // 空闲窗口队列 }; int main() { BankServiceSystem system(3); ServiceStaff staff1("John", 1); ServiceStaff staff2("Tom", 2); ServiceStaff staff3("Lucy", 3); Customer c1("Alice", 1); Customer c2("Bob", 2); Customer c3("Charlie", 3); Customer c4("David", 4); system.AddCustomer(c1); system.AddCustomer(c2); system.AddCustomer(c3); system.AddCustomer(c4); system.AssignTask(staff1); system.AssignTask(staff2); system.AssignTask(staff3); system.AssignTask(staff1); system.FinishTask(1); system.FinishTask(2); system.AssignTask(staff3); return 0; } ``` 在这个示例中,我们定义了一个BankServiceSystem类,它包含了等待服务的客户队列、正在服务的任务队列和空闲窗口队列。当有新的客户到来时,我们可以通过AddCustomer方法将其加入到等待服务的客户队列中。当有窗口服务人员空闲时,我们可以通过AssignTask方法将等待服务的客户队列中的第一个客户分配给它。当服务完成时,我们可以通过FinishTask方法将该任务从正在服务的任务队列中移除,并将窗口编号加入到空闲窗口队列中。 需要注意的是,这只是一个简单的示例,实际的银行服务系统需要考虑更多因素,例如客户信息管理、窗口服务人员管理和排队算法等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值