学号数据结构课程设计设计说明书机票管理系统起止日期:2011年12月12 日至2011 年12月16日学生姓名班级成绩指导教师(签字)电子与信息工程系2011年12月16日天津城市建设学院课程设计任务书2011—2012学年第1学期电子与信息工程系软件工程专业班级课程设计名称:数据结构课程设计设计题目:机票管理系统完成期限:自2011 年12 月12 日至2011 年12 月16 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。
二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。
三、设计内容机票管理系统1)问题描述一机场每天有n个航班,每个班次都有一班次号(1、2、3…n),固定的起飞时间,固定的路线(起始站、终点站),大致的飞行车时间,固定的额定载客量。
如班次起飞时间起点站终点站飞行时间额定载量已定票人数1 8:00 天津广汉2 145 1302 6:30 天津成都 0.5 140 1403 7:00 天津成都 0.5 140 1204 10:00 天津成都 0.5 140 120…试设计一个机票管理系统,对机场的售票情况进行管理。
2) 基本要求功能要求:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据;(2)浏览班次信息,可显示出所有班次当前状况(如果当前系统时间超过了某班次的起飞时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询 ,可按终点站查询;(4)售票和退票功能A:当查询出已定票人数小于额定载量且当前系统时间小于起飞时间时才能售票,自动更新已售票人数B:退票时,输入退票的班次,当本航班飞机未发出时才能退票,自动更新已售票人数。
目录一、需求分析 (6)二、问题求解 (6)三、总体设计 (6)1.程序设计组成框图: (5)2.程序设计流程图 (6)四、详细设计 (7)1.根据飞机订票系统的可设要求,要实现以下功能: (8)2.具体的方法及函数调用的思想: (8)定义要存储的变量:..................................... 错误!未定义书签。
3.方法的实现: (8)五、调试与测试 (9)1.录入信息时 (9)2.订票时: (9)3.退票时: (10)六、关键源程序清单和执行结果 (10)1.源程序: (10)2.执行结果: (14)七、参考文献 (19)一、需求分析本课程设计的名称是机票管理系统,本系统主要是描述了机票管理的一些具体情况,包括录入航班、查询情况和订票以及退票,查询航班号是否存在,确定订票管理根据飞机的载量判断是否有剩余的载量,当载量小于飞机的载量可以订票,有特殊情况发生时会伴随着退票的发生。
这就是产生订票系统产生的原因。
二、问题求解当我们遇到飞机订票这件事情的时候,我们通常发生的地点是飞机场,首先,我们应该到售票大首先就要查询是否有该路线的票,如果有的话则进行购买,即要通过把信息录入accept()方法来实现。
则要录入航班号(prn),起飞时间(qifei),飞行时间(shijian),起始站(from),终点站(to)等。
在查找chaxun()方法中,首先定义航班号*getprn指针,然后读入文件信息,输入要查询的航班号用指针查询,用strcmp()是用来比较字符串的大小,它的返回值是char类型。
用accept写入信息并存入文件passenger.txt,在读取dis()方法中,读取已有的航班,航班mainmune()输出。
订票时,首先应输入飞机航班号(cin>>prn),因为事先在列表里存储了四个航班信息,输入的订票数量。
根据订票的数量和载量做对比strcmp,如果小于载量就可以订票,则订票成功,返回"订票成功 ",返回是输出mainmune()。
退票时,首先输入航班号prn(),确认退票,就可以显示退票成功。
输出mainmune。
三、总体设计1.程序设计组成框图2.程序设计流程图四、详细设计1.根据订票管理系统的可设要求,要实现以下功能:(1)录入:录入航班情况(2)查询:根据航班号进行查询(3)订票:1)当有余票时显示剩余票数,则可以订票成功,如果没有载量,则订票失败。
2)当系统时间小于起飞时间的方法没有时间。
(4)退票:1)当飞机没有起飞,则可以退票成功。
2.具体的方法及函数调用的思想:(1)函数实现:可以通过以下的声明来建立如图的数据类型char prn[20];char qifei[20];char from[20];char to[20];char shijian[20];char zailiang[20];int piaoshu;{ }里的变量依次表示为:航班号,起飞时间,起始站点,终点站名,飞行时间,载量,已订票人3.方法的实现:1)accept ( ); //写入信息并存入文件因为可设要求把数据存储在文件中,所以必须编写此保存方法,写入实现方式:ofstream out("passenger.txt",ios::app); //输出方式打开文件,写入数据添加在文件末尾2)dis( ); //从文件读取信息并显示read方法是用来读取airpline.txt文件中航班数据的,ios:in 以输入方式打开文件保存 ("passenger.txt")目录下。
并且在目录里显示信息。
3)chaxun( ); //查询,按航班号来查询根据已有的飞机信息来依据航班号信息来查询航班。
查询到并输出列表。
4)dingpiao(); //订票函数可以根据航班的载量来判定是否可以订票。
如果当查询出已定票人数小于额定载量,则可以订票,输出订票成功。
5)tuipiao( ); //订票函数当订票的时候,首先要输入要订票的航班号,因此在这之后应读入在系统中的航班的航班号,航班有没有起飞做对比,则可以办理退票。
五、调试与测试1.录入信息时定义的是字符型,注意输入的时候不能输入别的类型。
否则不能识别。
2.系统时间小于起飞时间的功能没有实现自己经过反复的试着把这功能实现,但是最后都是无功而返,经过同学咨询同学也模糊,由于我的类方法实现的,很难定义结构体时间函数,由于这个功能的缺陷,本人改编将系统的时间在主函数里定义,测试时候显示出来了(struct tm *newtime;char tmpbuf[128];time_t lt1;time( <1 );newtime=localtime(<1);strftime( tmpbuf, 128, " TODASY 9 月 %d %A %H:%M \n", newtime);printf(tmpbuf);),由于个人能力有限,时间有限,根据老师的要求最后决定是自己用C++实现的(本人操作实现)。
自己知道怎么实现的思路但是实际操作还是差点,另外在类中很难实现,但是要把这功能加上根据本人能力。
由于时间关系,这部分功能未能实现。
六、关键源程序清单和执行结果1.源程序:#include<iostream>#include<fstream>#include <stdio.h>#include <time.h>using namespace std;class Airplay //定义类{public:char prn[20];char qifei[20];char from[20];char to[20];char shijian[20];char zailiang[20];int piaoshu;public:void getdetail(){cout<<"请输入航班号: ";cin>>prn;cout<<"请输入起飞时间: ";cin>>qifei;cout<<"请输入起点: ";cin.ignore();cin.getline(from,20);cout<<"请输入终点: ";cin.getline(to,20);cout<<"请输入飞行时间: ";cin>>shijian;cout<<"请输入载量: ";cin>>zailiang;cout<<"请输入订票数: ";cin>>piaoshu;}void display(){cout<<"航班号\t起飞\t起点\t终点\t飞行\t载量\t订票数"<<endl;}void print() //显示信息{cout<<prn<<"\t"<<qifei<<"\t"<<from<<"\t"<<to<<"\t"<<shijian<<"\t"<<zailiang<<"\t"<<pi aoshu<<endl;}char *getPrn(){return prn;}};void mainmune(){cout<<"------------------------------------"<<endl;cout<<"***********机票管理系统*************"<<endl;cout<<"------------------------------------"<<endl;cout<<"1.) 录入机票信息"<<endl;cout<<"2.) 显示所有信息"<<endl;cout<<"3.) 按航班号查询"<<endl;cout<<"4.) 售票的功能"<<endl;cout<<"5.) 退票的功能"<<endl;cout<<"6.) 退出"<<endl;cout<<"please choice:"<<endl;}void accept() //写入信息并存入文件{system("cls");mainmune();Airplay rai;ofstream out("passenger.txt",ios::app); //输出方式打开文件,写入数据添加在文件末尾rai.getdetail();out.write((char *)&rai,sizeof(rai));out.close();}void dis() //从文件读取信息并显示{system("cls");mainmune();Airplay rai;ifstream in("passenger.txt");rai.display();while(in.read((char *)&rai,sizeof(rai))){rai.print();}in.close();}void chaxun() //按航班号查询{system("cls");mainmune();char prns[20];Airplay rai;cout<<"输入航班号:";cin>>prns;fstream fs("passenger.txt",ios::in|ios::out);while(fs.read((char *)&rai,sizeof(rai))){if(strcmp(prns,rai.getPrn())==0){rai.display();rai.print();fs.close();break;}}}void shoupiao() //售票的功能{system("cls");mainmune();int i;char j[20];cout<<"要定的航班:";cin>>j;cout<<"顾客订票数:";cin>>i;system("cls");mainmune();Airplay rai;ifstream in("passenger.txt");rai.display();while(in.read((char *)&rai,sizeof(rai))) {if(strcmp(j,rai.getPrn())==0){rai.print();rai.piaoshu+=i;}}cout<<"订票成功";}void tuipiao() //退票的功能{system("cls");mainmune();char h[20];cout<<"顾客退票的班次:";cin>>h;system("cls");mainmune();Airplay rai;ifstream in("passenger.txt");rai.display();while(in.read((char *)&rai,sizeof(rai))) {if(strcmp(h,rai.getPrn())==0){rai.print();rai.piaoshu-=1;}}cout<<"退票成功";}void main() //主函数{struct tm *newtime;char tmpbuf[128];time_t lt1;time( <1 );newtime=localtime(<1);strftime( tmpbuf, 128, " TODASY 9 月 %d %A %H:%M \n", newtime); printf(tmpbuf);int choice;while(true){mainmune();cin>>choice;switch(choice){case 1: accept();break;case 2: dis();break;case 3: chaxun();break;case 4: shoupiao();break;case 5: tuipiao();break;case 6: exit(0);}}}2.执行结果:查询:售票:退票:退出:七、参考文献1.王红梅.数据结构.清华大学出版社2.王红梅.数据结构学习辅导与实验指导.清华大学出版社3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社。