问题重述:
八、订票系统 1.1
问题描述:通过此系统可以实现如下功能:
1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票
价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)订票:(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)退票: 可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:当航班信息改变可以修改航班数据文件
要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
数据结构示意:
由以下结构体共同组成
struct FlightInfo
struct TicketInfo
struct IndexElement
struct IndexTable
struct DataStructure
示意图
DataStrutrue 为一个总的数据结构,利用 TicketInfo * head_ticket 指向票务信息的数据域,
用 FlightInfo *head,指向航班信息的数据域,利用 IndexTable *indextable 指向索引表的数据
域。
这里对于航班信息和票务信息我们采用了链表的存储结构,同时为了查找的方便,我们又引
入了索引表的结构,利用航班名与指向该航班信息的指针一一对应。
数据文件:
table.csv
格式:
航班号,起飞城市,抵达城市,起飞时间,抵达时间,航班票价,票价折扣,容纳乘客数,剩余票数,是否满仓
用来保存航班信息;因为 csv 格式文件可以与 excel 表格兼用,无论是制表,或者对表的管
理都十分方便有效,同时 csv 也是一个通用格式。同时在信息导入方面,只需对逗号分隔符
的判断就可以导入信息了。
ticket.txt 用来保存票务信息;
程序功能:
DataStructure * Init()////初始化
DataStructure
TicketInfo
TicketInfo
IndexTable
name_Flight
datalocation
FlightInfo
FlightInfo
FlightInfo
void Destroy(DataStructure *ds)
FlightInfo *findFlightInfo(char *name_Flight,DataStructure *ds) //返回指向所查数据的指
针
void addData(DataStructure *ds) //录入
void displayTicketInfo(TicketInfo *ticketinfo,DataStructure *ds) //打印票务信息
void displayFlightInfo(FlightInfo *flightinfo) //打印航班信息
程序代码:
#include<iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define BOOL int
using namespace std;
const int MAX_TABLE=100; //最大表长
const int MAX_FLIGHT=20; //每条航线上最大航班数
//struct FlightInfo:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定
航班是否满仓
struct FlightInfo
{
char name_Flight[5]; //航班号
char city_start[10]; //起飞城市
char city_des[10]; //抵达城市
char time_takeoff[20];//起飞时间
char time_landing[20];//落地时间
double price; //航班票价
double discount; //票价折扣
int num_ticket; //航班容纳乘客数
int num_rest_ticket;//航班剩余票数
BOOL isFull; //是否满仓
FlightInfo *next;
};
struct TicketInfo
{
int id_Ticket;
BOOL isValid; //判断票是否有效
char name_Flight[5];
TicketInfo *next;
};
/*******定义一个索引,name_Flight---->具体航班信息*******/////////////
struct IndexElement
{
char name_Flight[5];
FlightInfo *datalocation;
};
struct IndexTable
{
IndexElement *table;
int len;
int MAX;
};
/***************************************************************/
struct DataStructure
{
IndexTable *indextable;
FlightInfo *head;
TicketInfo *head_ticket;
};
///////////////////////////以上是结构体定义////////////////////////////////////////////////
////初始化
DataStructure * Init()
{
DataStructure *ds;
ds=(DataStructure *)malloc(sizeof DataStructure);
ds->head=(FlightInfo *)malloc(sizeof FlightInfo);
ds->head->next=NULL;
ds->indextable=(IndexTable *)malloc(sizeof IndexTable);
ds->indextable->MAX=MAX_TABLE;
ds->indextable->len=0;
ds->indextable->table=(IndexElement *)malloc(sizeof(struct
IndexElement)*(ds->indextable->MAX));
// ds->indextable->table[0]=(IndexElement *)malloc(sizeof(struct IndexElement));
ds->indextable->table[0].datalocation=ds->head;
ds->head_ticket=(TicketInfo *)malloc(sizeof TicketInfo);
ds->head_ticket->next=NULL;
return ds;
}
////释放资源
void Destroy(DataStructure *ds)
{
for(int i=0; i<ds->indextable->len; i++)
{
free(ds->indextable->table[i].datalocation);
}
free(ds->indextable->table);
free(ds->indextable);
TicketInfo *ticketinfo;
TicketInfo *temp;
ticketinfo=ds->head_ticket;
while(ticketinfo->next!=NULL)
{
temp=ticketinfo;
ticketinfo=ticketinfo->next;
free(temp);
}
free(ticketinfo);
free(ds);
}
FlightInfo *findFlightInfo(char *name_Flight,DataStructure *ds) //返回指向所查数据的指
针
{