注册 登录
编程论坛 C++教室

求助:一个订票和退票的问题

lanke711 发布于 2017-01-12 12:30, 2374 次点击
只有本站会员才能查看附件,请 登录

代码太长,贴不上来。上传附件了。
请求各位前辈解惑
需要求助的问题:航线添加成功,但是打印不出来?

下面是我测试的代码,调用两个模块又是正常的。添加航线成功,又能打印出来。不知道附件里的代码是哪里出问题了?
程序代码:
#include <iostream>
#include <string>
using namespace std;
class transportNode//航线类节点
{
    friend class transport;
private:
    string finish;//目的地
    string flightname;//航班名
     int flightnum;//飞机编号(航班号)
     int day;//飞行日期
     int limitednum;//乘员限额
     int remainber;//余票
    struct booknode
    {
    public:
        string name;//乘客姓名
        char ID[20];//乘客身份证号码
        int ticketnum;//票数
        int rate;//舱位等级
    }b[40];
    struct sparenode
    {
    public:
        string name;//乘客姓名
        int ticketnum;//票数
        int m;//记录排队等候的顾客的数量
    }s[40];
    transportNode *next;

};
class transport
{
public:

    transport();//无參构造函数构造头节点
    void recort();//记录航班信息
    void delrecort();//删除航班
    void chest();//实现根据输入的目的地查询的功能
    void book();//实现旅客的订票功能
    void bounce();//实现退票功能
    void outTran();//打印航班信息
    int lookup(string cityname);//返回查询的航班
    int searchID();//查询乘客ID是否存在
    int GetElem();
private:
    transportNode *head;
};

transport::transport()
{
    head = new transportNode;
    head->next = NULL;
}
void transport::recort()
{
    transportNode* t;
    transport();
    t = new transportNode;
    cout << "        请输入航线终点:";
    cin >> t->finish;
    cout << "        请输入航班号:";
    cin >> t->flightname;
    cout << "        请输入飞机号:";
    cin >> t->flightnum;
    cout << "        请输入飞行日期:";
    cin >> t->day;
    cout << "        请输入乘客限额:";
    cin >> t->limitednum;
    t->remainber = t->limitednum;
    //head->next=t->next;
   
//t->next=head;
    t->next=head->next;
    head->next=t;
    //t->next = head->next;
   
//head->next = t->next;
   

    cout << "添加航线成功!" << endl;

   
}
void transport::outTran()//显示所有航班
{
    transportNode* p;

    p = head->next;
   
    if (p == NULL)
    {
        cout << "没有任何航班!" << endl;
        exit(-1);
    }
    while (p)
    {
        cout << "航班目的站点" << "\t" << "航班号" << "\t" << "飞机编号" << "\t" << "飞行日期" << "\t" << "乘客限额" << "\t" << "余票" << endl;
        cout << p->finish << "\t" << p->flightname << "\t" << p->flightnum << "\t" << p->day << "\t" << p->limitednum << "\t" << p->remainber << endl;
        p = p->next;
    }

}

int main()
{
   
transport p;
p.recort();
p.outTran();
return 0;
}
2 回复
#2
随风飘荡2017-01-13 01:40
看了半天就是觉得你在用C++写C,没看出问题,下载了源代码才发现。

关键字:变量作用域

你每个菜单都声明一个transport对象,而且,不·是·传·参·的也·不·是·全·局·的,函数重入就没有了。
比较不理解的是为什么你会有这样觉得能用的想法。
入口调用菜单函数,然后进而转入管理界面1/2
程序代码:

void system1()//航班客运管理界面,实现1.办理业务2.添加航班3.删除航班等操作
{
    //char *cityname;
    string cityname;
    transport searchct;    //????
   
//…………
}

void system2()//客户服务界面实现1.查询航线 2.客票预定3.办理退票4.查看客户资料操作
{
    //char cityname[20];
    string cityname;
    int number = 0;
    int a = 1;
    int i;
    transport p;    //?????
   
//…………
}


对象也是变量,对象离开函数体后也会析构(销毁回收)。
如果让你写一个函数,每调用一次就输出一个数字,但是每次调用输出的数字都要加1呢?你会怎么写?

我建议再复习一下然后自己找出原因并更改,不懂继续问
#3
lanke7112017-01-13 13:02
明白了。。一语点醒我。谢谢!
1