模拟银行排队取号系统_命令行版_代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define WaitForVIPNum 2//等待VIP身份号状态
#define CheckVIP 3//核对VIP身份号状态
#define DistributeForVIP 4//分配VIP客户状态
#define Quit 5//下班指令发出,锁定取号机状态
#define Unopen 10//窗口关闭状态
order[0]=getchar();
WaitForSingleObject(hScreenMutex, INFINITE);//申请互斥对象所有权
if(order[0]!='\n')
{
switch(order[0]) //读取指令并判断
{
case 'G': state=DistributeForOrdinary; break;
//VIP客户资料维护部分
void correct(void);
void Delete(void);
void add(void);
void menu(void);
int VIPInformationupdate(void);
struct VIPInformation
{
char name[10];
int num;
{
scanf("%d", &IDnum);
fVIP=fopen("VIPInformation.dat","rb");
while(!feof(fVIP))
{
fread(&VIPInfo.name, sizeof(char)*10, 1, fVIP);
fread(&VIPInfo.num, sizeof(int), 1, fVIP);
int MaxRestSec;//窗口休息最长时长
int VIPSERVLen;//VIP窗口设置时长
int maxNUM=0;//最大普通服务号码
int minNUM=0;//最小普通服务号码
int VIPmaxNUM=0;//最大VIP服务号码
int VIPminNUM=0;//最小VIP服务号码
void InputVIPInformation(void);//VIP客户资料维护
void queue(void);//为普通客户排队
void queueVIP(void);//为VIP排队
void windowWork(void);//各窗口控制
void windowControl(void);//增减窗口控制
char SERVE[3] = {0};//最大客户服务号码
HANDLE hScreenMutex;//保存互斥对象的句柄
Main.c
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <windows.h>
#include <winbase.h>
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)
{
state = DistributeForOrdinary;
}
if(state==DistributeForOrdinary)
{
maxNUM = maxNUM+1;
SERVE[2] = 48 + maxNUM%10;
SERVE[1] = 48 + (maxNUM%100)/10;
SERVE[0] = 48 + maxNUM/100;
HANDLE hRead1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)get_input,NULL,0,&ThreatID);
CloseHandle(hRead1);
printf("*********************** Welcome to模拟银行营业厅******************************\n");
#include <time.h>
#include "constant.h"
#include "variable.h"
#define DEBUG
void initialize(void);//初始化函数
void get_input(void); //输入函数
void control(void);//系统控制函数
change = 1;
printf("\n普通客户到达号码为%d\n\n", maxNUM);
}
if(state==DistributeForVIP)
{
VIPmaxNUM = VIPmaxNUM+1;
int sum;//总共受理客户数
clock_t timeSum;//总业务办理时长
int restLater;//服务完毕后是否休息
};
main()
{
clock_t start, finish;
//初始化
initialize();
//创建线程
DWORD ThreatID = 1;
hScreenMutex = CreateMutex(NULL, FALSE, "screen");//创建互斥对象
void print_message(void);//输出函数
void print_file(void);//输出到运行情况的记录(结果)文件
void print_statisticsFile(void);//输出到运行情况的记录(结果)文件
void bankError(void);//特殊情况
void rest(int n); //处理窗口休息请求
Win[6].IsVIP = 0;
Win[6].WindowState = Unopen;
Win[7].IsVIP = 0;
Win[7].WindowState = Unopen;
for(i=0; i<8; i=i+1)
{
Win[i].serveNum = 0;
Win[i].closeLater = 0;
}
while(state==WaitForVIPNum&&turn<4) //核对VIP身份
{
printf("请输入您的VIP身份证号\n");
fflush(stdin);
order[0]=getchar();
order[1]=getchar();
if(order[0]=='I'&&order[1]=='D')
case 'V': state=WaitForVIPNum; break;
case 'R': scanf("%d", &n);
rest(n);
break;
case 'X': VIPInformationupdate();break;
case 'Q': state=Quit; break;
case 'E': bankError(); break;
printf("Can not open the file");
exit(0);
}
//8个窗口状态初始化
Win[0].IsVIP = 1;
Win[0].WindowState = WaitWin;
Win[1].IsVIP = 1;
Win[1].WindowState = Unopen;
Win[2].IsVIP = 0;
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;
fscanf(file, "%d", &MaxSec);
fscanf(file, "%d", &MinRestSec);
fscanf(file, "%d", &MaxRestSec);
fscanf(file, "%d", &VIPSERVLen);
fclose(file);
}
void get_input(void)
{
char order[2] = {0};//指令
int IDnum = 0;//VIP身份号读入
int n;//申请休息的窗口号
int i;
int turn = 0;//VIP身份确认次数
while(state!=Quit)
{
IDnum = 0;
turn = 0;
state = Wait;
fflush(stdin);
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");
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);
FILE *fptr2;//输出文件
FILE *fptr3;//输出统计数据文件
FILE *fVIP;//VIP文件打开指针
int state = 0;//取号机状态值
int closeOrder = 0;//下班指令是否发出
int WinCount, VIPWinCount;//营业窗口数
int change = 0;//是否有事件发生
struct VIPInformation VIPInfo; //VIP客户资料
struct WINDOWS Win[8]; //8个窗口编号0-7
int MaxSeqLen;//单队列最大允许等待长度
int MinSec;//单业务办理最短时长
int MaxSec;//单业务办理最长时长
int MinRestSec;//窗口休息最短时长
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){
//运行
while((VIPWinCount!=0||WinCount!=0)||state!=Quit)
{
WaitForSingleObject(hScreenMutex, INFINITE);//申请互斥对象所有权
control(); //模拟系统运行函数
print_message(); //信息输出函数
北邮模拟银行系统_命令行版_源代码(C语言版C-Free)
以此怀念我幼稚的不冷静大一下干了一些事至少努力过努力不错过这段有点冲动的时期毕竟青春再见宏福再见大一
By北邮14级13班颜力琦
constant.h
#define Wait 0//等待服务状态
#define DistributeForOrdinary 1//分配普通客户状态
int account;
};
struct WINDOWS //存储窗口信息
{
int IsVIP;
int WindowState;
int serveNum;
int start;//记录事件发生时间
int timeInterval;//时间间隔
int closeLater;//服务完毕后是否关闭
int appraise;//客户满意度评价
#define WaitWin 11//窗口等待状态
#define Serve 12//窗口服务状态
#define Call 13//窗口叫号状态
#define Rest 14//窗口休息状态
#define Closed 15//窗口下班状态
variable.h
FILE *fptr1;//读取信息的文件
fread(&VIPInfo.account, sizeof(int), 1, fVIP);
if(VIPInfo.num==IDnum)
{
state=DistributeForVIP;
printf("\n\nVIP客户资料:\n");
printf("VIP name:%s\n",VIPInfo.name);
相关文档
最新文档