return ID; }
void setname(char na[]) //修改姓名 {
strcpy(name,na); }
int getseatnum() {
return seatnum; }
void addbook(int n,char *na,int id,int seat) //订票操作 {
note=0;
flightnum=n; ID=id;
seatnum=seat; strcpy(name,na); }
void delpassenger() //删除乘客信息 {
note=1; }
void list() // 显示乘客信息 {
cout<<\客户姓名\客户编号\已定航班号\\座位号\ cout< 乘客信息库类与飞机信息库类实现的功能原理类似,记录了乘客类的对象数组。主函数实现了主操作界面的程序。 class PDatabase //乘客信息库类 { private: int top; Passenger passer[Maxb]; public: PDatabase() { Passenger p; top=-1; fstream file(\ while(1) { file.read((char *)&p,sizeof(p)); if(!file) break; top++; passer[top]=p; } file.close(); } void settop() { top--; } void clear() { top=-1; cout<<\乘客信息删除成功!\ } int addbook(int n,char *na,int id,int seat) { Passenger *s=query(n); if(s==NULL) { top++; passer[top].addbook(n,na,id,seat); return 1; } return 0; } Passenger *query(int id) { for(int i=0;i<=top;i++) if(passer[i].getID()==id && passer[i].getnote()==0) return &passer[i]; return NULL; } Passenger *query1(int seat) { for(int i=0;i<=top;i++) if(passer[i].getseatnum()!=seat && passer[i].getnote()==0) return &passer[i]; else return NULL; } void list() { for(int i=0;i<=top;i++) if(passer[i].getnote()==0) passer[i].list(); } void passengerdata(); ~PDatabase() { fstream file(\ for(int i=0;i<=top;i++) if(passer[i].getnote()==0) file.write((char *)& passer[i],sizeof(passer[i])); file.close(); } }; 主要功能:此航空系统管理可以进行新增航班,更改航班,查找航班,显示航班信息,删除航班。客户可以进行订票,退票,客户资料修改,查找,删除等操作。 具体实现过程: 1、 新增航线的实现过程:通过录入航线的飞机号,航班号,目的地。系统会存入到飞机的对象 数组里,一个飞机就是一个对象,然后存入飞机的对象数组中,这主要通过飞机信息类中的addplane()函数在调用飞机类中的addplane()函数实现存入飞机的基本信息,同时这一个飞机的信息作为一个对象保存在飞机类的对象数组中。如果想要把这个新增的飞机写入文件的话,通过飞机信息库类的中析构函数写入文件,所以每当要储存进文件,则需要推出系统后保存,则下次进入后你将会看到在飞机信息类中会看到飞机的信息。 2、 更改航班操作的实现过程:先要录入你要更改的航班号,系统会找到那个航班,这样你可以 进行目的地修改的操作。通过飞机信息库类中的query()函数进行查找,利用for循环,逐个查找,当找到的飞机航班号与输入的航班号相同时,进行输出。并通过飞机类的setname()函数对目的地的字符串利用strcpy()函数进行覆盖。所以这个飞机对象的目的地就改变了。 3、 查找航班的实现过程:输入航班号,利用飞机信息库类中的query()函数查找,最后返回 对象,并输出对象。 4、 显示航班信息的实现过程:利用飞机信息库类中的list()函数进行输出对象数组中的对象。 5、 删除航班过程的实现:可以删除单个航班,也可以删除全部,删除单个航班先输入航班号查 找出航班,然后通过调用飞机类的delplane()函数进行信息存在标记的改变。删除全部直接更改飞机对象数组中的下标即可。 6、 订票的实现:首先输入航班号,如果没有此航班会提示错误,直到有此航班后才能进行下一 步操作,然户输入姓名,客户编号,座位号,客户编号是客户自己拥有的一个ID,座位号用户可以自己预定。如果作为被预定后,会显示错误需要重新预定座位号。调用乘客信息库类中的addbook()函数在调用乘客类中的addbook()函数进行赋值操作,而且此航班的信息中余票数会减少一个,已定票数会增加一个。同时将此乘客的信息存入乘客对象数组中。 7、 退票的实现:输入航班号,用户编号。系统会查找出此客户,并会通过乘客信息类的 delpassenger()函数设置删除标记。已达到删除乘客信息的效果,就达到了退票的效果,而且飞机信息中的余票数会增加1,订票数会减少1。 8、 客户资料修改的实现过程:通过输入用户ID后,查找出当前客户,可以进行客户信息的姓名 修改,调用setname()函数修改姓名。 主界面 1、订票 2、退票 3、客户信息4、飞机信息 1、订票 需要输入航班号、姓名、用户编号、座位号 2、退票 需要输入航班号、 用户编号 客户信息管理 1更改 2查找 3显示 4删除全部 5删除单个 飞机信息管理 1新增 2 更改 3删除单个 4 查找 5 显示 6删除全部 数调用乘客类中的addbook() (调)用乘客类中的 delpassenger ()调用乘客信息类中的 和list调用(乘)客信息类中的query 12345clear(),delpassenger() 调用乘客信息类中的list、调用乘客信息类的 setname函()()()调用飞机信息库类的1addplane 调用飞机类的setname()调用飞机信息类中的3 delplane和list2 调(用)飞机信息类中的query4 5 6 调用飞机信息类的list调用飞机信息类的clear ()()()() 四、上机调试过程: 问题:在调试过程时经常会遇到一些类与类内嵌时有函数未定义的情况,明明已经定义过类了,但编译时显示类未定义,对象为定义,不能互相访问,还有的时候由于定义的标示符过多,导致会编写错误标示符,还有一些小错误,比如符号漏写等,这些错误都是很好看出来。最难的错误应该是在嵌套过程中的逻辑问题,有的时候会调用错误函数,有的时候会很混乱,整个思路就乱了。 修改:在嵌套时要注意有没有先定义对象到另一个类中,定义函数时,如果函数体短的函数直接定义为内联函数,这样不会有忘定义的现象产生。在类与类嵌套时应该注意类前向引用声明。类与类的逻辑问题还是静下心来梳理一下自己的思路,这是我觉得最好的办法了。 五、测试结果及分析 1、程序一开始的登录界面(主界面) 2、在主界面选择3 进入客户管理系统 3、在主界面选择4 进入航线管理系统