⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 booking.cpp

📁 自动售票系统~ 能根据需要自行分配~ 包括容错系统~
💻 CPP
字号:
// booking.cpp : Defines the entry point for the console application.
//
#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;


int g_seat[80]; // 1表示座位为空,0表示座位已售出 
int g_remain = 80; // 剩余座位数 

bool GetRequest(int *p); 
int AssignTickets(int nTickets, int *SeatNum); // 分配座位票 
void OutputResult(int * SeatNum, int Count); 

int main() 
{ 
int i; 
int nTickets = 0; 
int SeatNum[80]; 

// 初始化所有座位为空 
for(i = 0; i < 80; i++) 
{ 
g_seat[i] = 1; 
} 
while(GetRequest(&nTickets)) 
{ 
if (nTickets >= g_remain) 
{ 
// 剩余座位不足 
printf("剩余座位不足\n"); 
} 
else 
{ 
// 分配座位票 
nTickets = AssignTickets(nTickets, SeatNum); 
OutputResult(SeatNum, nTickets); 
} 
} 
return 0; 
} 

bool GetRequest(int *p) 
{ 
static FILE* fp = fopen("d:\\request.txt","r"); 
static int nIndex = 0; 
static int inputData[80] = {0}; 
static bool isfirst = true; 
int i; 
if(isfirst){ 
for(i = 0; i < 80; i++){ 
if(fscanf(fp,"%d,",&inputData[i]) == EOF) break; 
} 
isfirst = false; 
fclose(fp); 
} 
if(inputData[nIndex] == 0 || nIndex == 80) return false; 
*p = inputData[nIndex++]; 
return true; 
} 

int AssignTickets(int nTickets, int *SeatNum) 
{ 
int i; 
int nCount = 0; 

switch(nTickets) 
{ 
case 2 : 
for(i = 0; i < 80; i += 2) 
{ 
if ((g_seat[i] == 1) && (g_seat[i+1] == 1)) 
{ 
// 相邻座位号的座位未售出 
g_seat[i] = 0; 
g_seat[i+1] = 0; 
SeatNum[nCount++] = i + 1; 
SeatNum[nCount++] = i + 2; 
break; 
} 
} 
break; 
case 3 : 
case 4 : 
{ 
int k = 6; 
for(i = 0; i < 80; i += k) 
{ 
k = 8 - k; 
if ((g_seat[i] + g_seat[i+1] + g_seat[i+4] + g_seat[i+5]) >= nTickets) 
{ 
// 同一间隔内的座位数满足要求的座位数 
if ((g_seat[i] == 1) && (nCount < nTickets)) 
{ 
g_seat[i] = 0; 
SeatNum[nCount++] = i + 1; 
} 
if ((g_seat[i+1] == 1) && (nCount < nTickets)) 
{ 
g_seat[i+1] = 0; 
SeatNum[nCount++] = i + 2; 
} 
if ((g_seat[i+4] == 1) && (nCount < nTickets)) 
{ 
g_seat[i+4] = 0; 
SeatNum[nCount++] = i + 5; 
} 
if ((g_seat[i+5] == 1) && (nCount < nTickets)) 
{ 
g_seat[i+5] = 0; 
SeatNum[nCount++] = i + 6; 
} 
break; 
} 
} 
} 
break; 
default : 
break; 
} 
if (nCount == 0) 
{ 
// 如果相邻或同一间隔的要求得不到满足的话,那么随意售出要求的座位 
for(i = 0; (i < 80) && (nCount < nTickets); i++) 
{ 
if (g_seat[i] == 1) 
{ 
g_seat[i] = 0; 
SeatNum[nCount++] = i + 1; 
} 
} 
} 
// 售出座位以后,剩余的座位数相应减少 
g_remain -= nCount; 
// 返回实际售出的座位数 
return nCount; 
} 

void OutputResult(int * SeatNum, int Count) 
{ 
	FILE* fp = fopen("d:\\result.txt","a"); 
	int i; 
	fprintf(fp,"====================================\n"); 
	for(i = 0; i < Count; i++)
	{ 
		fprintf(fp,"%d,",SeatNum[i]); 
	} 
	fprintf(fp,"\n"); 

	fclose(fp); 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -