题目如下
用单链表编制一个简单的火车票销售系统,可完成售票、退票、车票剩余情况查询等功能。每张车票包含车次、座位等信息。要求:在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。为简单起见,在此假设所有出售的车票均为同一车次的车票。退票时,必须是车站售出的列车票才能退(这里以同一车次的为例),否则视为无效票,不能办理退票业务。

解决方案 »

  1.   

    我刚才写了一些,刚开个头,你继续写吧。#include <iostream>
    #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;
    }
      

  2.   

    你最好封一个单链表的类,找个例子。
    http://blog.csdn.net/Ansty/archive/2007/11/07/1871459.aspx
      

  3.   

    车票用结构体表示,然后自己定义一下链表的结构
    在程序中使用两个链表,一个用来存放未售的票(ListA),一个用来存已售的票(ListB)
    售票这个方法就是将某一指定的票节点从ListA中删除,然后放到ListB中
    退票就是相反的操作
    剩余情况查询可以遍历ListA,获得某一指定的票节点,然后显示其信息提供一个思路,就像5楼所说的,一定要自己动手写,只有这样才能学到东西!