当前位置:
文档之家› 模拟银行排队取号系统_命令行版_代码
模拟银行排队取号系统_命令行版_代码
Win[2].WindowState = WaitWin;
Win[3].IsVIP = 0;
Win[3].WindowState = WaitWin;
Win[4].IsVIP = 0;
Win[4].WindowState = WaitWin;
Win[5].IsVIP = 0;
Win[5].WindowState = Unopen;
struct VIPInformation VIPInfo; //VIP客户资料
struct WINDOWS Win[8]; //8个窗口编号0-7
int MaxSeqLen;//单队列最大允许等待长度
int MinSec;//单业务办理最短时长
int MaxSec;//单业务办理最长时长
int MinRestSec;//窗口休息最短时长
Win[i].sum = 0;
Win[i].timeSum = 0;
Win[i].appraise = 0;
Win[i].restLater = 0;
}
WinCount=3;
VIPWinCount=1;
//读取常量
fscanf(file, "%d", &MaxSeqLen);
fscanf(file, "%d", &MinSec);
printf("VIP number:%d\n",VIPInfo.num);
printf("VIP account:%d\n",VIPInfo.account);
break;
}
}
turn=turn+1;
fclose(fVIP);
}
}
if(state==WaitForVIPNum&&turn==4)
{
char SERVE[3] = {0};//最大客户服务号码
HANDLE hScreenMutex;//保存互斥对象的句柄
Main.c
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <winbase.h>
}
while(state==WaitForVIPNum&&turn<4) //核对VIP身份
{
printf("请输入您的VIP身份证号\n");
fflush(stdin);
order[0]=getchar();
order[1]=getchar();
if(order[0]=='I'&&order[1]=='D')
state = DistributeForOrdinary;
}
if(state==DistributeForOrdinary)
{
maxNUM = maxNUM+1;
SERVE[2] = 48 + maxNUM%10;
SERVE[1] = 48 + (maxNUM%100)/10;
SERVE[0] = 48 + maxNUM/100;
#define WaitWin 11//窗口等待状态
#define Serve 12//窗口服务状态
#define Call 13//窗口叫号状态
#define Rest 14//窗口休息状态
#define Closed 15//窗口下班状态
variable.h
FILE *fptr1;//读取信息的文件
int MaxRestSec;//窗口休息最长时长
int VIPSERVLen;//VIP窗口设置时长
int maxNUM=0;//最大普通服务号码
int minNUM=0;//最小普通服务号码
int VIPmaxNUM=0;//最大VIP服务号码
int VIPminNUM=0;//最小VIP服务号码
#define WaitForVIPNum 2//等待VIP身份号状态
#define CheckVIP 3//核对VIP身份号状态
#define DistributeForVIP 4//分配VIP客户状态
#define Quit 5//下班指令发出,锁定取号机状态
#define Unopen 10//窗口关闭状态
fread(&VIPInfo.account, sizeof(int), 1, fVIP);
if(VIPInfo.num==IDnum)
{
state=DistributeForVIP;
printf("\n\nVIP客户资料:\n");
printf("VIP name:%s\n",);
void print_message(void);//输出函数
void print_file(void);//输出到运行情况的记录(结果)文件
void print_statisticsFile(void);//输出到运行情况的记录(结果)文件
void bankError(void);//特殊情况
void rest(int n); //处理窗口休息请求
int account;
};
struct WINDOWS //存储窗口信息
{
int IsVIP;
int WindowState;
int serveNum;
int start;//记录事件发生时间
int timeInterval;//时间间隔
int closeLater;//服务完毕后是否关闭
int appraise;//客户满意度评价
int sum;//总共受理客户数
clock_t timeSum;//总业务办理时长
int restLater;//服务完毕后是否休息
};
main()
{
clock_t start, finish;
//初始化
initialize();
//创建线程
DWORD ThreatID = 1;
hScreenMutex = CreateMutex(NULL, FALSE, "screen");//创建互斥对象
void InputVIPInformation(void);//VIP客户资料维护
void queue(void);//为普通客户排队
void queueVIP(void);//为VIP排队
void windowWork(void);//各窗口控制
void windowControl(void);//增减窗口控制
fscanf(file, "%d", &MaxSec);
fscanf(file, "%d", &MinRestSec);
fscanf(file, "%d", &MaxRestSec);
fscanf(file, "%d", &VIPSERVLen);
fclose(file);
}
void get_input(void)
change = 1;
printf("\n普通客户到达号码为%d\n\n", maxNUM);
}
if(state==DistributeForVIP)
{
VIPmaxNUM = VIPmaxNUM+1;
FILE *fptr2;//输出文件
FILE *fptr3;//输出统计数据文件
FILE *fVIP;//VIP文件打开指针
int state = 0;//取号机状态值
int closeOrder = 0;//下班指令是否发出
int WinCount, VIPWinCount;//营业窗口数
int change = 0;//是否有事件发生
print_file();
ReleaseMutex(hScreenMutex);//释放互斥对象所有权
}
fclose(fptr2);
print_statisticsFile();//输出统计结果文件
printf("服务结束,是否退出程序\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\a");
//运行
while((VIPWinCount!=0||WinCount!=0)||state!=Quit)
{
WaitForSingleObject(hScreenMutex, INFINITE);//申请互斥对象所有权
control(); //模拟系统运行函数
print_message(); //信息输出函数
system("pause");
return 0;
}
void initialize(void)
{
FILE *file;
int i;
//打开文件
fptr2=fopen("out.txt","w");
file=fopen("parameter.dat","rb");
if(fptr2==NULL||file==NULL){
case 'V': state=WaitForVIPNum; break;
case 'R': scanf("%d", &n);
rest(n);
break;
case 'X': VIPInformationupdate();break;