您的位置:首页 > 其它

火车票销售系统改进实验

2008-09-17 19:09 190 查看
对一个座位多次使用的简单实现

#include <iostream.h>

#include <stdio.h>

#include <string.h>

class Ticket

{

public:

 Ticket()

 {

  IsSeated = false;

 }

 bool IsSeated;

 int startNum;

 int arriveNum;

 int n_ticketNum;//座位号

protected:

private:

 int n_price;

 int n_distance;

 char originStation[20];

 char terminus[20];

 char trainNum[16];

};

class SoldSystem

{

public:

 SoldSystem()

 {

  p_current = NULL;

  p_sold = NULL;

  p_current = p_sold;

  num_of_sold = 0;

  ticket_code = 0;

 }

 void SetSeatNum(int num)

 {

  num_of_ticket = num;

 }

 void SetStationNum(int num)

 {

  stationNum = num;

 }

 bool SetAllSeat()

 {

  if (num_of_ticket < 1)

  {

   return false;

  }

  p_sold = new Ticket[num_of_ticket];

  if (p_sold == NULL)

  {

   return false;

  }

  return true;

 }

 ~SoldSystem()

 {

  if (num_of_ticket > 0)

  {

   delete []p_sold;

  }

 }

 Ticket* GoHead()

 {

  return p_sold;

 }

 bool SoldTicket(int startNum, int arrNum);

 void PrintTicket();

 void SetStationName();

 void PrintStation();

 Ticket* p_current;

 int num_of_ticket;

 int num_of_sold;

 int ticket_code;

 char startTime[16];

 char arriveTime[16];

 char date[16];

 char stationName[20][32];

protected:

private:

 int stationNum;

 Ticket* p_sold;

};

//1.等票售完之后再开始分配还是开始就采用分配方式

//这里采用先按顺序发票,等票售完之后再开始分配

bool SoldSystem::SoldTicket(int startNum, int arrNum)

{

 if (num_of_sold < num_of_ticket)

 {

  p_current->startNum = startNum;

  p_current->arriveNum = arrNum;

  p_current->IsSeated = true;

  p_current->n_ticketNum = ++ticket_code;

  num_of_sold++;

  PrintTicket();

  p_current++;  

 }

 else

 {

  p_current = GoHead();

  for (int i = 0; i < num_of_ticket; i++)

  {

   if (p_current->arriveNum <= startNum)

   {

    p_current->startNum = startNum;

    p_current->arriveNum = arrNum;

    p_current->IsSeated = true;

    PrintTicket();

    num_of_sold++;

    break;

   }

   p_current++;//

  }

  if (i == num_of_ticket)

  {

   cout << "No seat left!" << endl;

   return false;

  }

 }

 return true;

}

void SoldSystem::SetStationName()

{

// cout << "按顺序输入各终点名称: ";

// for (int i = 0; i < stationNum; i++)

// {

//  cout << "第 " << i + 1 << "个站点:";

//  cin >> stationName[i];

// }

 char buf[255] = "";

    FILE* file = fopen("D://to//station_name.txt", "rb");

 if (file == NULL)

 {

  return;

 }

 int i = 0;

 int lenth = 0;

    while ( i < stationNum )

    {

  fgets(buf,255,file);

  strcpy(stationName[i], buf);

  lenth = strlen(stationName[i]);

  stationName[i][lenth - 2] = '/0';//13,10, -2;

  i++;

    }

    fclose(file);

}

void SoldSystem::PrintTicket()

{

 cout << "===========================" << endl;

 cout << "Start station " << p_current->startNum ;

 cout << stationName[p_current->startNum - 1] << " ";

 cout << "Terminus " << p_current->arriveNum ;

 cout << stationName[p_current->arriveNum - 1];

 cout << "Seat Number " << p_current->n_ticketNum << endl;

 cout << "===========================" << endl;

}

void SoldSystem::PrintStation()

{

 for (int i = 0; i < stationNum; i++)

 {

  cout << i + 1 << ". " << stationName[i] << " ";

 }

}

int main(int argc, char** argv)

{

 int start, stationNum;

 int terminus;

 SoldSystem nj2zz;

 cout << "输入站点数:";

 cin >> stationNum;

 nj2zz.SetStationNum(stationNum);

 nj2zz.SetStationName();

 nj2zz.PrintStation();

 nj2zz.SetSeatNum(4);

 nj2zz.SetAllSeat();

 nj2zz.p_current = nj2zz.GoHead();

// for (int i = 0; i < 6; i++)

// {

//  cout << "起点站:";

//  cin >> start;

//  cout << "终点站:";

//  cin >> terminus;

//  nj2zz.SoldTicket(start, terminus);

// }

 char out_sign = 'k';

 while (out_sign != 'y')

 {

  cout << "/n起点站:";

  cin >> start;

  cout << "终点站:";

  cin >> terminus;

  nj2zz.SoldTicket(start, terminus);

  cout << "是否退出售票系统:(y/n)";

  cin >> out_sign;

 }

 return 0;

}

打开文件内容形式

南京

蚌埠

徐州

商丘

开封

郑州
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file null delete
相关文章推荐