题目如下
用单链表编制一个简单的火车票销售系统,可完成售票、退票、车票剩余情况查询等功能。每张车票包含车次、座位等信息。要求:在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。为简单起见,在此假设所有出售的车票均为同一车次的车票。退票时,必须是车站售出的列车票才能退(这里以同一车次的为例),否则视为无效票,不能办理退票业务。
用单链表编制一个简单的火车票销售系统,可完成售票、退票、车票剩余情况查询等功能。每张车票包含车次、座位等信息。要求:在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。为简单起见,在此假设所有出售的车票均为同一车次的车票。退票时,必须是车站售出的列车票才能退(这里以同一车次的为例),否则视为无效票,不能办理退票业务。
解决方案 »
- 请问:如何区分是应用程序(比如:word)打开文件修改注册表不用记录,而有些恶意程序修改注册表要记录
- 有没有什么方法或工具分割avi文件?
- 怎么创建线程,找了关天资料都是千篇一律,就是不能解决问题,强制转换成LPVOID都不行?
- API是什么来的?有什么用?
- 初学者提问:windows如何处理非进队且又非系统函数产生的消息
- 谁能帮助我 --- 漂亮的界面源代码?
- 笑一飞快进来!!
- 在vc中有没有对excel文件操作的方法?
- 高手请指点:如何接管WIN2K ADVANCE SERVER 的登录验证?
- 求助 MFC中如何建立一个结构体呀
- 用vc中alt创建的activex控件,用javascript向其传递数组类型参数的问题
- 我想实现在程序中使能和禁用directdraw的硬件加速功能
#include <string>#define ShowCommand(x) cout<< (x)<< endlusing namespace std;typedef struct tagTicket
{
int nCheCi; // 车次
int nNumber; // 座号}Ticket;typedef struct tagTicketNode
{
Ticket ticket;
tagTicketNode* pNextTicket;
}TicketNode;typedef TicketNode * TicketList;TicketList gTicketList;void ShowAllTickets();
bool InitTicketsList();
void BuyTicket();
int GetTicketCount();int main()
{
gTicketList = new TicketNode;
// initiall Tickets list
if (!InitTicketsList())
{
cout << "tickets initialize failed" << endl;
return 0;
} cout<< "Please input command " << endl;
int iCommand;
cin>> iCommand;
while (iCommand != 0)
{
ShowCommand(iCommand); switch(iCommand)
{
case 0: //
break;
case 1: // Show All Tickets;
ShowAllTickets();
break;
case 2: // buy a ticket
BuyTicket();
break;
case 3:
cout << "current tickets count is ="<<GetTicketCount()<< endl;
default:
//assert(false);
break;
} cout<< "Please input command 0: exit , 1: buy, 2: " << endl;
cin>> iCommand;
}
return 0;
}
void ShowAllTickets()
{
TicketNode* tmpTickNode = gTicketList; for (int i =1; i< 5; i++)
{
cout << tmpTickNode->ticket.nNumber << endl;
tmpTickNode = tmpTickNode->pNextTicket;
}}bool InitTicketsList()
{
gTicketList->ticket.nCheCi = 100;
gTicketList->ticket.nNumber = 0;
TicketNode* nextTicket= new TicketNode;
gTicketList->pNextTicket = nextTicket; for (int i =1; i< 5; i++)
{
nextTicket->ticket.nCheCi = 100;
nextTicket->ticket.nNumber = i;
nextTicket->pNextTicket = new TicketNode;
nextTicket = nextTicket->pNextTicket;
}
nextTicket->pNextTicket = NULL; return true;
}void BuyTicket()
{
gTicketList = gTicketList->pNextTicket;
return;
}int GetTicketCount()
{
int nCount = 1;
TicketNode* tmpNode = gTicketList;
while (tmpNode)
{
nCount++;
if (tmpNode->pNextTicket)
{
tmpNode = tmpNode->pNextTicket;
}
}
return nCount;
}
http://blog.csdn.net/Ansty/archive/2007/11/07/1871459.aspx
在程序中使用两个链表,一个用来存放未售的票(ListA),一个用来存已售的票(ListB)
售票这个方法就是将某一指定的票节点从ListA中删除,然后放到ListB中
退票就是相反的操作
剩余情况查询可以遍历ListA,获得某一指定的票节点,然后显示其信息提供一个思路,就像5楼所说的,一定要自己动手写,只有这样才能学到东西!