火车站售票

原创 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;
}

Java多线程应用之火车站售票

在我们的现实生活中,去火车站买票是一件很平常的事,但是你们想过吗,比如我们从一个售票处买了一张票的话,那么其他的售票点就不能找到这张票了,这样就可以保证每个人买的票不会一样,这是通过java的多线程功...
  • Story__struggle
  • Story__struggle
  • 2016年08月11日 12:52
  • 1082

JAVA线程模拟火车站卖票

package com.nisec.myapplication; public class test { static int tickets = 10; public sta...
  • merrylilili
  • merrylilili
  • 2017年05月22日 14:17
  • 378

运用多线程知识写一个火车站售票系统

题目简介: 在现实世界中有一种数据模型,模拟生产者与消费者模型。如火车票售票系统,将票据的数量录入服务器我们称之为“生产”了若干车票。各地终端会共享这些车票信息去售票。直到车票售票完,则提示无票可卖...
  • fan_xingwang
  • fan_xingwang
  • 2017年08月10日 11:51
  • 324

Java:多线程模拟多站点售票过程

这是一个在并发状态下对共享资源的多线程访问。这些访问必须是互斥的进行,因为涉及到对资源的修改。假设现在销售火车票。目的地有3个,分别是北京,天津和上海。使用一个枚举类型表示。 Destation.j...
  • xlsernt_sina_com
  • xlsernt_sina_com
  • 2014年05月12日 18:39
  • 555

C++ 多线程 火车站售票

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

火车站售票时间

关于调整部分车站互联网、电话订票起售时间的公告     自2013年1月26日起,对部分车站互联网、电话订票起售时间调整如下,所有动车组列车(C、D、G字头车次)车票仍统一于11:00起售: ...
  • love254443233
  • love254443233
  • 2013年02月04日 01:59
  • 4265

多线程模拟火车站售票

最近在学操作系统,多线程的小例子。网上搜的。。比较基础,学一下。 #include #include using namespace std; HANDLE hMutex=NULL; int n...
  • hyf20144055065
  • hyf20144055065
  • 2017年09月29日 15:40
  • 131

Java多线程实现简单的售票程序

设计一个多线程程序如下:设计一个火车售票模拟程序。假如火车站要有100张火车票要卖出,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况 1、要求打印出每个售票点所卖出的票号 ...
  • qq_35619711
  • qq_35619711
  • 2017年05月09日 11:48
  • 824

火车站售票程序(C语言)

火车车厢内座位的布局 1 5 9     ...
  • duxikuan
  • duxikuan
  • 2007年07月20日 15:38
  • 1327

c++多线程——模拟售票

#include #include using namespace std; DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data D...
  • todayq
  • todayq
  • 2014年01月24日 13:21
  • 1371
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:火车站售票
举报原因:
原因补充:

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