合肥学院
计算机科学与技术系
课程设计报告
2008~2009学年第二期
课程 课程设计名称 学生姓名 学号 专业班级 指导教师
程序设计语言Ⅱ课程设计
航班售票系统 朱自强 0804014026 08级计本(4)班
屠 菁 郭昌建
2009年6月18日
一、课程设计题目
课程设计名称:航班售票系统
设计内容:设计一个航班售票系统系统,能够对航空公司的售票进行管理。航空公司的售票系统主要包括:航线信息、订票业务、退票业务。
任务和要求
1.航线信息:每条航线包括航班号,飞机号,目的地,订票数,余票数,共5项。
现有3条航线:目的地北京,上海,广州。飞机可乘100人(初始定票数为0,余票数为100)。将这些信息存入文件airline.dat中。 2.订票业务:
(1).客户信息包括姓名,航班号,座位号(初始为0),假设已有3个客户信息存入文
件customer.dat。
(2).有新客户订票时,先输入姓名和航班号,查询情况,如果还有余票,就为这个客户
办理订票手续,分给客户一个座位号,然后写入文件costomer.dat,并修改文件,若无余票,则输出客户已满
3.退票业务:
根据客户提出的航班号,办理退票,从airline.dat文件中删除 这个客户的信息,并修改airline.dat中相应的航线的订票数和余票数输出全部航线的信息和全部客户信息,退出系统。
二、问题的分析
首先这是一个管理系统,有两个大类乘客和飞机,所以要定义2个类,又因为需要进行文件的操作,那么可以再定义2个类,乘客信息类,飞机信息类用于储存多个信息。界面操作当然需要用switch语句实现,case时调用到函数。
三、算法的设计
我设计的这个航空管理系统运用到了条件判断,switch语句,循环语句,类与对象,对象数组,对象指针,类与类的嵌套,文件的写入写出等知识点。
整体的构思:设计了四个类飞机信息库类,乘客类,乘客信息库类。
飞机类包含了飞机的一些基本属性,有航班号,飞机号,目的地,余票数,已定票数等信息 class Flight //飞机类 {
private:
int note; //删除标记 1:已删,0:未删 int flightnum; //航班号 int planenum; //飞机号
char destination[20]; //目的地 int bookednum; //已定票数 int refundnum; //余票 public:
Flight():bookednum(0),refundnum(100){}
char *getdes() {
return destination;
}
int getnote() {
return note; }
int getflightnum() {
return flightnum; }
int getplanenum() {
return planenum; }
void setrefund() //订票后对余票和已定票数的操作 {
bookednum++; refundnum--; }
void delrefund() //退票后对余票和已定票数的操作 {
bookednum--; refundnum++; }
void setname(char de[]) {
strcpy(destination,de); }
void delplane() //删除飞机的操作 {
note=1; }
void addplane(int n,int m, char *de) //增加飞机 {
note=0;
flightnum=m; planenum=n;
strcpy(destination,de); }
void list() {
cout<<\飞机号\航班号\目的地\<<\已定票数\剩余票数\
cout< \ \\ } }; 飞机信息库类内嵌了一个飞机类的对象数组作为飞机信息库类的私有成员,每一个飞机的信息都 是一个对象,都储存在了飞机类的对象数组中,通过这个数组进行对单个或多个飞机对象属性的一些操作,飞机信息库类中还包括界面操作选择的程序,其中还有信息的写入文件,读取文件中的数据的功能 class FDatabase //飞机信息库类 { private: int top; //记录数组下标 Flight Fl[Maxp]; //飞机类的对象数组 public: FDatabase() { Flight f; top=-1; fstream file(\文件打开 while(1) { file.read((char *)&f,sizeof(f)); if(!file) break; top++; Fl[top]=f; } file.close(); } void clear() //清楚所有航班的操作 { top=-1; cout<<\航班信息已删除!\ } int addplane(int n,int m,char *de) //增加飞机 { Flight *fl=query(n); if(fl==NULL) { top++; Fl[top].addplane(n,m,de); return 1; } return 0; } Flight *query(int pflightnum) //对象指针 用于查找等操作 { for(int i=0;i<=top;i++) if(Fl[i].getflightnum()==pflightnum && Fl[i].getnote()==0) return &Fl[i]; return NULL; } Flight *query1(int pplanenum) { for(int i=0;i<=top;i++) if(Fl[i].getplanenum()==pplanenum && Fl[i].getnote()==0) return &Fl[i]; return NULL; } void list() { for(int i=0;i<=top;i++) if(Fl[i].getnote()==0) Fl[i].list(); } void planedata(); ~FDatabase() { fstream file(\ for(int i=0;i<=top;i++) if(Fl[i].getnote()==0) file.write((char *)& Fl[i],sizeof(Fl[i])); file.close(); } }; 乘客类包含了乘客的一些基本属性,有姓名,航班号,座位号,客户编号等属性 class Passenger //乘客类 { private: int note; //删除标记 1:已删,0:未删 int flightnum; //航班号 char name[20]; //乘客姓名 int ID; //乘客编号 int seatnum; //座位号 public: Passenger():seatnum(0){} char *getname() { return name; } int getnote() //返回删除标记 { return note; } int getID() {