火车站售票

原创 2012年03月22日 13:48:36

// huochepiao.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
using namespace std;
int Ticket[81] = {1};
static int count = 0;

bool GetRequest(int *p) //读取request文件里的内容
{
 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;
}

void OutputResult(int * SeatNum, int Count)//把获得的票信息写入到result文件中
{
 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);
}

int SaleOne()
{
 int i = 0;
 for (i = 1; i != 81; ++i)
 {
  if (Ticket[i] == 0)
  {
   Ticket[i] = 1;
   cout << "票号为:" << i << endl;
   break;
  }
  else
  {
  }
 }
 count++;
 OutputResult(&i, 1);
 return 0;
}

bool IsCon()//两张票是否相连
{
 int num = 0;
 int a[2];
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 && Ticket[num] == 0 && Ticket[num+1] == 0)
  {
   flag = true;
   Ticket[num] = 1 ;
   a[0] = num;
   Ticket[num+1] = 1;
   a[1] = num + 1;
   cout << "票号为:" << num << "和" << num + 1 << endl;
   count += 2;
   OutputResult(a, 2);
   break;
  }
  else
  {
   flag = false;
  }
 }
 return flag;
}

int SaleTwo()
{
 if (!IsCon())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
 }
 return 0;
}
void OutputThree(int numa, int numb, int numc) //输出三张票的方法
{
 int a[3];
 Ticket[numa] = 1 ;
 Ticket[numb] = 1;
 Ticket[numc]= 1;
 a[0] = numa;
 a[1] = numb;
 a[2] = numc;
 OutputResult(a, 3);
 cout << "票号为:" << numa << "和" << numb << "和" << numc<< endl;
 count += 3;
}
bool IsRoom()//三张票是否在一个间隔内
{
 int num = 0;
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+1] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num, num+1, num+4);
   break;
  }
  if (1 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+4] == 0 && Ticket[num + 5] == 0)
  {
   flag = true;
   OutputThree(num, num+4, num+5);
   break;
  }
  if (0 == num % 2 &&Ticket[num] == 0 &&
   Ticket[num+3] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num, num+3, num+4);
   break;
  }
  if (0 == num % 2 &&Ticket[num-1] == 0 &&
   Ticket[num+3] == 0 && Ticket[num + 4] ==0)
  {
   flag = true;
   OutputThree(num+1, num+3, num+4);
   break;
  }
  else
  {
   flag = false;
  }  
 }
 return flag;
}
int SaleThree()
{
 if (!IsRoom())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
  SaleOne();
 }
 return 0;
}
bool IsSpace()//四张票是否在一个间隔内
{
 int num = 0;
 int a[4];
 bool flag;
 for (num = 1; num != 81; ++ num)
 {
  if (1 == num % 2 && Ticket[num] == 0 &&
   Ticket[num+1] == 0 && Ticket[num + 4] ==0 &&
   Ticket[num + 5] ==0)
  {
   flag = true;
   Ticket[num] = 1 ;
   a[0] = num;
   Ticket[num+1] = 1;
   a[1] = num + 1;
   Ticket[num+4]= 1;
   a[2] = num + 4;
   Ticket[num+5]= 1;
   a[3] = num + 5;
   cout << "票号为:" << num << "和" << num + 1 <<
    "和" << num + 4 << "和" << num + 5 << endl;
   count += 4;
   OutputResult(a, 4);
   break;
  }
  else
  {
   flag = false;
  }  
 }
 return flag;
}
int SaleFour()
{
 if (!IsSpace())
 {
  cout << "没有相连的票。";
  SaleOne();
  SaleOne();
  SaleOne();
  SaleOne();
 }
 return 0;
}
int _tmain(int argc, _TCHAR* argv[])

 int *p = Ticket;
 while(GetRequest(p))
 {
  if (*p > 4 || *p < 1)
  {
   cout << "此数字不符合买票标准!" << endl;
  }
  if (*p > 80 - count)
  {
   cout << "票不足或票已售完!" << endl;
   return 0;
  }
  else
  {
   switch (*p)
   {
   case 1:
    SaleOne();
    break;
   case 2:
    SaleTwo();
    break;
   case 3:
    SaleThree();
    break;
   case 4:
    SaleFour();
    break;
   default:
    break;
   }
  }
 }
 return 0;
}

相关文章推荐

《面试宝典》例题之模拟火车站售票程序

面试宝典第五版284页例题6题目:创建两个线程模拟火车站两个窗口售票程序,窗口售票时间为1s,两个窗口不能同时售票之前没写过C的多线程程序,将这道题记录于此以便日后翻看。每当程序被初始化的时候,系统就...

C++ 多线程 火车站售票

#include #include DWORD WINAPI Fun1Proc( LPVOID lpParameter //thread data );DWORD WINAPI Fun2Pr...
  • qwq1503
  • qwq1503
  • 2017年07月05日 19:01
  • 95

火车站售票管理系统 JavaSe

  • 2011年06月21日 01:25
  • 719KB
  • 下载

【codevs2287】火车站,第一个A掉的钻石题(迟来的解题报告)

2287 火车站  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Descripti...

火车站自助售票系统

  • 2014年11月12日 12:02
  • 6.11MB
  • 下载

火车站售票管理系统

  • 2012年12月14日 16:05
  • 1.54MB
  • 下载

广州火车站4名戴白帽男子持刀砍人 6人受伤

【最新消息】警方通报#5月6日13时28分,广州越秀警方通过视频巡查,发现环市中路大北立交二层处有2名男子在打斗。警方迅速派出警力前往处置。民警到场发现打斗双方已离开,现场留下1件有血迹上衣。经初步调...
  • versean
  • versean
  • 2014年05月06日 18:01
  • 119

火车站售票系统(C语言)

  • 2011年05月22日 21:44
  • 155KB
  • 下载

火车站售票系统课程设计

  • 2010年11月29日 16:32
  • 765KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:火车站售票
举报原因:
原因补充:

(最多只允许输入30个字)