/*             * Copyright (c) 2017,烟台大学计算机学院             * All right reserved.             * 文件名称:main.cpp            * 作者:于嵩             * 完成日期:2017年12月22日             * 版本号:v1.0             *             * 问题描述:航空订票系统
*/             
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:dlinklist.h
* 文件标识:无
* 内容摘要:自定义数据类型和算法及重载函数声明
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************/#ifndef DLINKLIST_H_INCLUDED
#define DLINKLIST_H_INCLUDED
# include <iostream>
using namespace std;
struct Darray
{int num;//航站编号char terminal_name[12];//终点站名称char airline_number[12];//航班号char flight_number[12];//飞机号char flight_date[12];//日期int crew_quota;//成员定额int left_tickets;//余票额
};struct Custom
{char name[12];//客户姓名char sex[3];//客户性别char phonenumber[20];//客户手机号码char idcard[20];//客户身份证号码int num;//客户选择的机次号
};
class DNode        //定义双链表结点类型
{
public:Darray data;DNode *prior;    //指向前驱结点DNode *next;     //指向后继结点bool operator = (Darray &);//声明逻辑运算符重载函数为成员函数friend bool operator != (Darray &,Darray &);//声明逻辑运算符重载函数为友元函数friend ostream & operator << (ostream &output, Darray &t); //声明流运算符重载函数为友元函数};class DCustom        //定义双链表结点类型
{
public:Custom data;DCustom *prior;    //指向前驱结点DCustom *next;     //指向后继结点bool operator = (Custom &);//声明逻辑运算符重载函数为成员函数friend bool operator != (Custom &, Custom &);//声明逻辑运算符重载函数为友元函数friend ostream & operator << (ostream &output, Custom &t); //声明流运算符重载函数为友元函数};template <typename T, class B>
void CreateListF(T *&L, B a[], int n);//头插法建双链表template <typename T, class B>
void CreateListR(T *&L, B a[], int n);//尾插法建双链表template <typename T>
void InitList(T *&L); //初始化双链表template <typename T>
void DestroyList(T *&L); //销毁双链表template <typename T>
bool ListEmpty(T *L); //判断链表是否为空template <typename T>
int ListLength(T *L); //求链表的长度template <typename T>
void DispList(T *L, int); //输出链表template <typename T, class B>
bool GetElem(T *L, int i, B *&e); //获取节点的值template <typename T, class B>
int LocateElem(T *L, B e); //查找一个节点template <typename T, class B>
bool ListInsert(T *&L, int i, B e);//插入一个节点template <typename T>
bool ListDelete(T *&L, int i); //删除一个节点template <typename T, class B>
bool JudgeExist(T *&, B *&, B *&);//判断是否在双链表内template <typename T, class B>
Darray* FindStation(T *&, B *);//查找遍历函数#endif
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:SystemTools.h
* 文件标识:无
* 内容摘要:用户类声明及功能函数声明
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************/#pragma once
# include "dlinklist.h"class Tools
{
public:static Darray* INPUT_FILE_STATIONDATA(int &);//读入航站信息static Custom* INPUT_FILE_CUSTOMDATA(int &);//读入用户信息static void OUTPUT_FILE_CUSTOMDATA(DCustom *);//写出用户信息static void OUTPUT_FILE_STATIONDATA(DNode * L);//写出航站信息static void WAITING();//过渡函数static void DISPLAY(DNode *,DCustom *);//显示主界面static void CHECK_ROUTE(DNode *);//查询航线static void BOOKING_TICKETS(DNode *, DCustom *);//订票预约static bool REFUND_TICKETS(DNode *, DCustom *);//退票改签static bool Tools::FIND_CUSTOMERINFORMATION(DNode *, DCustom *);//查询用户信息static bool Tools::ENTER_STATION_FILE(DNode *);//录入航班信息static bool Tools::EDIT_STATION_FILE(DNode *);//修改航班信息static bool Tools::FIND_ALL_CUSTOMER_DATA(DCustom *);//输出所有用户信息};
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:dlinklist.template
* 文件标识:无
* 内容摘要:使用了函数模板的函数定义
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************//***********************
* 功能描述:头插法建双链表
* 输入参数:T类型变量,B类型变量,int类型变量
* 输出参数:无
* 返回值:无
***********************/
template <typename T, class B>
void CreateListF(T *&L, B a[], int n)
//头插法建双链表
{T *s;int i;L = (T *)malloc(sizeof(T));   //创建头结点L->prior = L->next = NULL;for (i = 0; i<n; i++){s = (T *)malloc(sizeof(T));//创建新结点s->data = a[i];s->next = L->next;            //将*s插在原开始结点之前,头结点之后if (L->next != NULL) L->next->prior = s;L->next = s;s->prior = L;}
}/***********************
* 功能描述:尾插法建双链表
* 输入参数:T类型变量,B类型变量,int类型变量
* 输出参数:无
* 返回值:无
***********************/
template <typename T, class B>
void CreateListR(T *&L, B a[], int n)
//尾插法建双链表
{T *s, *r;int i;L = (T *)malloc(sizeof(T));   //创建头结点L->prior = L->next = NULL;r = L;                    //r始终指向终端结点,开始时指向头结点for (i = 0; i<n; i++){s = (T *)malloc(sizeof(T));//创建新结点s->data = a[i];r->next = s;s->prior = r; //将*s插入*r之后r = s;}r->next = NULL;           //终端结点next域置为NULL}/***********************
* 功能描述:创建头节点
* 输入参数:T类型变量
* 输出参数:无
* 返回值:无
***********************/
template <typename T>
void InitList(T *&L)
{L = (T *)malloc(sizeof(T));   L->prior = L->next = NULL;
}
template <typename T>
void DestroyList(T *&L)
{T *p = L, *q = p->next;while (q != NULL){free(p);p = q;q = p->next;}free(p);
}/***********************
* 功能描述:判断链表是否为空
* 输入参数:T类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
template <typename T>
bool ListEmpty(T *L)
{return(L->next == NULL);
}
template <typename T>
int ListLength(T *L)
{T *p = L;int i = 0;while (p->next != NULL){i++;p = p->next;}return(i);
}/***********************
* 功能描述:输出链表元素
* 输入参数:T类型变量,int类型变量
* 输出参数:无
* 返回值:无
***********************/
template <typename T>
void DispList(T *L, int k)
{T *p = L->next;if(k==1)cout<< setw(14) << "机次编号" << setw(14) << "终点站" << setw(14) << "航班号" << setw(14) << "飞机号" << setw(14) << "飞行日期" << setw(14) << "乘员定额" << setw(14) << "余票额\n";else if(k==2)cout << setw(14) << "选择机次" << setw(14) << "姓名" << setw(14) << "性别" << setw(20) << "手机号码" << setw(20) << "身份证号码\n";while (p != NULL){cout << p->data;p = p->next;}printf("\n");
}/***********************
* 功能描述:从链表中获取元素
* 输入参数:T类型变量,B类型变量,int类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
template <typename T, class B>
bool GetElem(T *L, int i, B *&e)
{T *p = L;p=L->next;while (p->data.num!=i && p!=NULL){p = p->next;}if (p == NULL)return false;else{e=&(p->data);return true;}
}/***********************
* 功能描述:定位链表元素
* 输入参数:T类型变量,B类型变量
* 输出参数:无
* 返回值:int类型变量
***********************/
template <typename T, class B>
int LocateElem(T *L, B e)
{int n = 1;T *p = L->next;while (p != NULL && p->data != e){n++;p = p->next;}if (p == NULL)return(0);elsereturn(n);
}/***********************
* 功能描述:插入链表元素
* 输入参数:T类型变量,B类型变量,int类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
template <typename T, class B>
bool ListInsert(T *&L, int i, B e)
{int j = 0;T *p = L, *s;while (j<i - 1 && p != NULL){j++;p = p->next;}if (p == NULL)    //未找到第i-1个结点return false;else            //找到第i-1个结点*p{s = (T *)malloc(sizeof(T));   //创建新结点*ss->data = e;s->next = p->next;        //将*s插入到*p之后if (p->next != NULL) p->next->prior = s;s->prior = p;p->next = s;return true;}
}/***********************
* 功能描述:链表节点删除
* 输入参数:T类型变量,int类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
template <typename T>
bool ListDelete(T *&L, int i)
{T *p = L, *q;while (p->next != NULL && p->next->data.num!=i){p = p->next;}if (p == NULL)                //未找到第i-1个结点return false;else                        //找到第i-1个结点*p{q = p->next;              //q指向要删除的结点if (q == NULL)return false;       //不存在第i个结点p->next = q->next;        //从单链表中删除*q结点if (p->next != NULL) p->next->prior = p;free(q);                //释放*q结点return true;}
}/***********************
* 功能描述:判断元素是否在链表中并返回地址
* 输入参数:T类型变量,B类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
template <typename T, class B>
bool JudgeExist(T *&L,B *&e,B *&s)
{T *p=L;p=L->next;while(p!=NULL){if(!(strcmp(p->data.name,e->name) || strcmp(p->data.phonenumber,e->phonenumber) || strcmp(p->data.idcard,e->idcard))){s=&(p->data);return true;}p=p->next;}if(p==NULL)return false;}/***********************
* 功能描述:两链表通过数据建立联系并返回地址
* 输入参数:T类型变量,B类型变量
* 输出参数:无
* 返回值:Darray *类型变量
***********************/
template <typename T, class B>
Darray * FindStation(T *&L, B *e)
{T *p=L;p=L->next;while(p!=NULL){if(p->data.num==e->num)return &(p->data);p=p->next;}if(p==NULL)return false;
}
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:dlinklist.cpp
* 文件标识:无
* 内容摘要:运算符重载函数定义
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************/# include <stdio.h>
# include <malloc.h>
# include <iostream>
# include <iomanip>
# include "dlinklist.h"
using namespace std;/***********************
* 功能描述:重载赋值运算符,使之能匹配自定义数据类型的赋值操作。
* 输入参数:Darray类型的变量,引用方式传入。
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool DNode::operator= (Darray &e)
{strcpy(DNode::data.airline_number, e.airline_number);//将结构体数组元素整体赋值给链表节点元素strcpy(DNode::data.flight_number, e.flight_number);strcpy(DNode::data.flight_date, e.flight_date);strcpy(DNode::data.terminal_name, e.terminal_name);DNode::data.num = e.num;DNode::data.left_tickets = e.left_tickets;DNode::data.crew_quota = e.crew_quota;return true;}
/***********************
* 功能描述:重载!=运算符,使之能匹配自定义数据类型的赋值操作。
* 输入参数:Darray类型的两个变量,引用方式传入。
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool operator!= (Darray &t,Darray &e)
{if (t.num == e.num)return true;else return false;
}
/***********************
* 功能描述:重载流插入运算符,使之能匹配自定义数据类型的输出操作。
* 输入参数:ostream类型变量,Darray类型变量,引用方式传入。
* 输出参数:无
* 返回值:output
***********************/
ostream & operator << (ostream &output, Darray &t)
{output << setw(14) << t.num << setw(14) << t.terminal_name << setw(14) << t.airline_number << setw(14) << t.flight_number << setw(14) << t.flight_date << setw(14) << t.crew_quota << setw(14) << t.left_tickets << endl;return output;
}
/***********************
* 功能描述:重载赋值运算符,使之能匹配自定义数据类型的赋值操作。
* 输入参数:Custom类型的变量,引用方式传入。
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool DCustom::operator= (Custom &e)
{strcpy(DCustom::data.idcard, e.idcard);//将结构体数组元素整体赋值给链表节点元素strcpy(DCustom::data.name, e.name);strcpy(DCustom::data.phonenumber, e.phonenumber);strcpy(DCustom::data.sex, e.sex);DCustom::data.num = e.num;return true;
}
/***********************
* 功能描述:重载!=运算符,使之能匹配自定义数据类型的赋值操作。
* 输入参数:Custom类型的变量,引用方式传入。
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool operator!= (Custom &t, Custom &e)
{if (!(strcmp(t.phonenumber,e.phonenumber) || strcmp(t.idcard,e.idcard) || strcmp(t.name,e.name)))return true;elsereturn false;
}
/***********************
* 功能描述:重载流插入运算符,使之能匹配自定义数据类型的输出操作。
* 输入参数:ostream类型变量,Custom类型变量,引用方式传入。
* 输出参数:无
* 返回值:output
***********************/
ostream & operator << (ostream &output, Custom &t)
{output << setw(14) << t.num << setw(14) << t.name << setw(14) << t.sex << setw(20) << t.phonenumber << setw(20) << t.idcard<< endl;return output;
}
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:SystemTools.cpp
* 文件标识:无
* 内容摘要:用户类声明及功能函数定义
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************/# include <iostream>
# include <fstream>
# include <iomanip>
# include <time.h>
# include <windows.h>
# include "dlinklist.h"
# include "SystemTools.h"
# include "dlinklist.template"
using namespace std;/***********************
* 功能描述:从文件中读入航班数据进内存。
* 输入参数:int型变量
* 输出参数:无
* 返回值:Darray *类型变量
***********************/
Darray * Tools::INPUT_FILE_STATIONDATA(int &i)
{Darray p[300]; //定义一个临时存放数据的数组ifstream infile("file.txt", ios::in);if (!infile){cerr << "open file error!\n";}while (infile){infile >> p[i].num >> p[i].terminal_name >> p[i].airline_number >> p[i].flight_number >> p[i].flight_date >> p[i].crew_quota >> p[i].left_tickets;i++;}infile.close();return p;}/***********************
* 功能描述:从文件中读入用户数据进内存。
* 输入参数:int型变量
* 输出参数:无
* 返回值:Custom *类型变量
***********************/
Custom * Tools::INPUT_FILE_CUSTOMDATA(int &i)
{Custom p[300]; //定义一个临时存放数据的数组ifstream infile("custom file.txt", ios::in);if (!infile){cerr << "open file error!\n";}while (infile){infile  >> p[i].num >> p[i].name >> p[i].sex >> p[i].phonenumber >> p[i].idcard;i++;}infile.close();return p;}/***********************
* 功能描述:从内存中写出用户数据到文件
* 输入参数:DCustom *类型变量
* 输出参数:output
* 返回值:无
***********************/
void Tools::OUTPUT_FILE_CUSTOMDATA(DCustom * L)
{ofstream outfile("custom file.txt", ios::out);DCustom *p = L->next;while (p != NULL){outfile << p->data;p = p->next;}printf("\n");
}/***********************
* 功能描述:从内存中写出航班数据到文件
* 输入参数:DNode *类型变量
* 输出参数:output
* 返回值:无
***********************/
void Tools::OUTPUT_FILE_STATIONDATA(DNode * L)
{ofstream outfile("file.txt", ios::out);DNode *p = L->next;while (p != NULL){outfile << p->data;p = p->next;}printf("\n");
}/***********************
* 功能描述:显示交互界面
* 输入参数:DNode *类型变量,DCustom *类型变量
* 输出参数:无
* 返回值:无
***********************/
void Tools::DISPLAY(DNode *L,DCustom *P)
{while (1){putchar('\n');putchar('\n');cout << "\t\t\t           ¥·¥" << endl;cout << "\t  ¥·¥·¥·¥·¥··航空订票系统··¥·¥·¥·¥·¥" << endl;putchar('\n');time_t timep;time(&timep);//显示当前时间,库函数cout << "\t\t   当前时间:" << ctime(&timep);putchar('\n');cout << "\t-----------------0.查询航线";cout << " \t1.订票预约------------------" << endl;putchar('\n');cout << "\t-----------------2.退票改签";cout << " \t3.查询信息------------------" << endl;putchar('\n');cout << "\t-----------------4.录入航线";cout << " \t5.航线修改------------------" << endl;putchar('\n');cout << "\t-----------------6.查询全部";cout << " \t7.退出系统------------------" << endl;putchar('\n');int k;   cout << "····请选择功能序号:";cin >> k;putchar('\n');putchar('\n');switch (k){case 0: Tools::CHECK_ROUTE(L); break;//输出所有航班信息case 1: Tools::BOOKING_TICKETS(L, P); break;//预约订票case 2: Tools::REFUND_TICKETS(L, P); break;//退票改签case 3: Tools::FIND_CUSTOMERINFORMATION(L, P); break;//查询信息case 4: Tools::ENTER_STATION_FILE(L); break;//增加航班case 5: Tools::EDIT_STATION_FILE(L); break;//修改航班case 6: Tools::FIND_ALL_CUSTOMER_DATA(P); break;//查询全部case 7: exit(0); }}
}/***********************
* 功能描述:提醒用户等待
* 输入参数:无
* 输出参数:无
* 返回值:无
***********************/
void Tools::WAITING()
{putchar('\n');char str[20] = "正在处理,请稍后";cout << "····"<<str;int count;for (count = 0; count < 5; count++){Sleep(200);cout << '.';}}/***********************
* 功能描述:输出所有航班信息
* 输入参数:DNode *类型变量
* 输出参数:DispList函数
* 返回值:无
***********************/
void Tools::CHECK_ROUTE(DNode *p)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用查询航线功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~";putchar('\n');Tools::WAITING();putchar('\n');putchar('\n');cout << "····当前可用航线:"<<endl;putchar('\n');Sleep(1000);DispList(p,1);//执行输出链表函数putchar('\n');system("pause");}/***********************
* 功能描述:输入客户信息后执行订票操作
* 输入参数:DNode *类型变量,DCustom *类型变量
* 输出参数:无
* 返回值:无
***********************/
void Tools::BOOKING_TICKETS(DNode *p, DCustom *l)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用订票预约功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;putchar('\n');Custom t;cout << "····您需要输入您的详细信息。" << endl;putchar('\n');cout << "····请输入您的姓名:";cin >> t.name;putchar('\n');putchar('\n');cout << "····请输入您的性别:";cin >> t.sex;putchar('\n');putchar('\n');cout << "····请输入您的联系方式:";cin >> t.phonenumber;putchar('\n');putchar('\n');cout << "····请输入您的有效证件号码:";cin >> t.idcard;putchar('\n');putchar('\n');cout << "····信息录入完毕。" << endl;Tools::WAITING();putchar('\n');putchar('\n');cout << "····您是否需要过目所有以开放航线?(y/n)";char choice;cin >> choice;if (choice == 'y')Tools::CHECK_ROUTE(p);//执行输出航线函数elseputchar('\n');bool iswrong = true;bool iswrong2 = true;while (iswrong2){while (iswrong){putchar('\n');cout << "····请输入您要选择乘坐的航线编号:";cin >> t.num;putchar('\n');putchar('\n');cout << "····确认选择?(y/n)";cin >> choice;if (choice == 'y')iswrong = false;}putchar('\n');Darray *e;e = FindStation(p, &t);//通过航线编号来调用函数,返回与航线编号对应的节点地址if (e->left_tickets == 0){putchar('\n');putchar('\n');cout << "····该航班票已售空,请重新选择!" << endl;putchar('\n');iswrong = true;}else{e->left_tickets--;iswrong2 = false;}}ListInsert(l, ListLength(l)+1, t);//执行修改和插入操作Tools::WAITING();Tools::OUTPUT_FILE_CUSTOMDATA(l);//写出用户信息Tools::OUTPUT_FILE_STATIONDATA(p);//写出航线信息putchar('\n');putchar('\n');cout << "····订票预约成功完成。您前面还有排队预约客户" <<ListLength(l)-1<<"名。"<< endl;putchar('\n');system("pause");}/***********************
* 功能描述:输入客户信息以后执行退票改签操作
* 输入参数:DNode *类型变量,DCustom *类型变量
* 输出参数:无
* 返回值:无
***********************/
bool Tools::REFUND_TICKETS(DNode *p, DCustom *l)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用退票改签功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;putchar('\n');cout << "····请确认您已在本系统预约过票务:(y/n)";char choice;cin >> choice;if (choice == 'n')return false;putchar('\n');putchar('\n');cout << "····请输入您的预留信息。" << endl;putchar('\n');bool istrue1 = true;bool istrue2 = true;Custom *t = new Custom;Custom *s = new Custom;while (istrue1)//判断输入是否有误循环体{cout << "····请输入您的姓名:";cin >> t->name;putchar('\n');putchar('\n');cout << "····请输入您的手机号码:";cin >> t->phonenumber;putchar('\n');putchar('\n');cout << "····请输入您的有效证件号码:";cin >> t->idcard;putchar('\n');putchar('\n');if (JudgeExist(l, t, s)){istrue1 = false;}else{cout << "····您的输入有误,请重新输入!" << endl;putchar('\n');}}cout << "····请选择:1.退票 2.改签";cin >> choice;putchar('\n');putchar('\n');if (choice == '1'){Darray* x = new Darray;x=FindStation(p, s);Tools::WAITING();cout << "····您当前预定票务:" << endl;putchar('\n');cout << setw(14) << "机次编号" << setw(14) << "终点站" << setw(14) << "航班号" << setw(14) << "飞机号" << setw(14) << "飞行日期" << setw(14) << "乘员定额" << setw(14) << "余票额\n";cout << *x;putchar('\n');putchar('\n');cout << "····确定要退票吗?(y/n)";char y;cin >> y;if (y == 'y'){ListDelete(l, s->num);x->left_tickets++;Tools::WAITING();Tools::OUTPUT_FILE_CUSTOMDATA(l);//写出用户信息putchar('\n');putchar('\n');cout << "····您的预约已取消。" << endl;}elsereturn false;}else if (choice == '2'){Darray* x = new Darray;x = FindStation(p, s);Tools::WAITING();cout << "····您当前预定票务:" << endl;putchar('\n');cout << setw(14) << "机次编号" << setw(14) << "终点站" << setw(14) << "航班号" << setw(14) << "飞机号" << setw(14) << "飞行日期" << setw(14) << "乘员定额" << setw(14) << "余票额\n";cout << *x;putchar('\n');putchar('\n');cout << "····确定要改签吗?(y/n)";char y;cin >> y;if (y == 'y'){x->left_tickets++;putchar('\n');Tools::WAITING();putchar('\n');putchar('\n');Tools::CHECK_ROUTE(p);//执行输出航线函数putchar('\n');putchar('\n');Darray *e;bool istrue = true;while (istrue){cout << "····请输入您要选择的航线编号:";int num_choice;cin >> num_choice;putchar('\n');putchar('\n');Tools::WAITING();putchar('\n');s->num = num_choice;e = FindStation(p, s);if (e->left_tickets == 0){putchar('\n');putchar('\n');cout << "····该航班票已售空,请重新选择!" << endl;putchar('\n');putchar('\n');}elseistrue = false;}e->left_tickets--;Tools::OUTPUT_FILE_CUSTOMDATA(l);//写出用户信息Tools::OUTPUT_FILE_STATIONDATA(p);//写出航线信息putchar('\n');putchar('\n');cout << "····改签操作成功完成。" << endl;putchar('\n');system("pause");}}elsereturn false;}/***********************
* 功能描述:输入客户信息以后执行查询操作
* 输入参数:DNode *类型变量,DCustom *类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool Tools::FIND_CUSTOMERINFORMATION(DNode *p, DCustom *l)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用查询信息功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;putchar('\n');cout << "····请确认您已在本系统预约过票务:(y/n)";char choice;cin >> choice;if (choice == 'n')return false;putchar('\n');putchar('\n');cout << "····请输入您的预留信息。" << endl;putchar('\n');bool istrue1 = true;bool istrue2 = true;Custom *t = new Custom;Custom *s = new Custom;while (istrue1){cout << "····请输入您的姓名:";cin >> t->name;putchar('\n');putchar('\n');cout << "····请输入您的手机号码:";cin >> t->phonenumber;putchar('\n');putchar('\n');cout << "····请输入您的有效证件号码:";cin >> t->idcard;putchar('\n');putchar('\n');if (JudgeExist(l, t, s)){istrue1 = false;}else{cout << "····您的输入有误,请重新输入!" << endl;putchar('\n');}}Tools::WAITING();Darray *x = new Darray;x = FindStation(p, s);putchar('\n');putchar('\n');cout << "····您当前预定票务:" << endl;putchar('\n');cout << setw(14) << "机次编号" << setw(14) << "终点站" << setw(14) << "航班号" << setw(14) << "飞机号" << setw(14) << "飞行日期" << setw(14) << "乘员定额" << setw(14) << "余票额\n";cout << *x;system("pause");}/***********************
* 功能描述:确认权限后执行写入航班信息操作
* 输入参数:DNode *类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool Tools::ENTER_STATION_FILE(DNode *p)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用增加航线功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;putchar('\n');cout << "····系统需要确认您的最高访问权限。" << endl;putchar('\n');cout << "····请输入系统管理员用户名:";char name[20];cin >> name;if (!strcmp(name, "Administrator")){putchar('\n');putchar('\n');}else{putchar('\n');cout << "····您没有权限!" << endl;putchar('\n');system("pause");return false;}cout << "····请输入管理员密钥:";char password[20];cin >> password;if (!strcmp(password, "admin")){putchar('\n');putchar('\n');}else{putchar('\n');putchar('\n');cout << "····输入密钥有误!" << endl;putchar('\n');return false;}Darray e;cout << "····请输入要增加的航站名称:";cin >> e.terminal_name;putchar('\n');putchar('\n');cout << "····请输入航班号:";cin >> e.airline_number;putchar('\n');putchar('\n');cout << "····请输入飞机号:";cin >> e.flight_number;putchar('\n');putchar('\n');cout << "····请输入日期:";cin >> e.flight_date;putchar('\n');putchar('\n');cout << "····请输入成员定额:";cin >> e.crew_quota;putchar('\n');putchar('\n');e.left_tickets = e.crew_quota;e.num = ListLength(p) + 1;ListInsert(p, e.num, e);//执行插入函数Tools::WAITING();putchar('\n');putchar('\n');cout << "····信息成功写入。" << endl;putchar('\n');Tools::OUTPUT_FILE_STATIONDATA(p);//写出航线信息return true;
}/***********************
* 功能描述:确认权限以后执行编辑航班信息操作
* 输入参数:DNode *类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool Tools::EDIT_STATION_FILE(DNode *p)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用航线修改功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;putchar('\n');cout << "····请输入系统管理员用户名:";char name[20];cin >> name;if (!strcmp(name, "Administrator")){putchar('\n');putchar('\n');}else{putchar('\n');cout << "····您没有权限!" << endl;putchar('\n');system("pause");return false;}cout << "····请输入管理员密钥:";char password[20];cin >> password;if (!strcmp(password, "admin")){putchar('\n');putchar('\n');}else{putchar('\n');putchar('\n');cout << "····输入密钥有误!" << endl;putchar('\n');return false;}Tools::CHECK_ROUTE(p);putchar('\n');putchar('\n');cout << "····请输入您要修改的航线编号:";Darray *e = new Darray;cin >> e->num;e=FindStation(p, e);putchar('\n');cout << setw(14) << "机次编号" << setw(14) << "终点站" << setw(14) << "航班号" << setw(14) << "飞机号" << setw(14) << "飞行日期" << setw(14) << "乘员定额" << setw(14) << "余票额\n";cout << *e;putchar('\n');putchar('\n');cout << "····请输入新的航班号:";cin >> e->airline_number;putchar('\n');putchar('\n');cout << "····请输入新的飞机号:";cin >> e->flight_number;putchar('\n');putchar('\n');cout << "····请输入日期:";cin >> e->flight_date;putchar('\n');putchar('\n');cout << "····请输入成员定额:";cin >> e->crew_quota;putchar('\n');putchar('\n');cout << "····请输入余票额:";cin >> e->left_tickets;putchar('\n');putchar('\n');Tools::WAITING();Tools::OUTPUT_FILE_STATIONDATA(p);//写出航线函数putchar('\n');putchar('\n');cout << "····信息已成功修改。" << endl;putchar('\n');system("pause");return true;}/***********************
* 功能描述:确认权限以后执行查询全部用户信息操作
* 输入参数:DCustom *类型变量
* 输出参数:无
* 返回值:0-失败,1-成功
***********************/
bool Tools::FIND_ALL_CUSTOMER_DATA(DCustom *p)
{putchar('\n');cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~·您正在使用查询信息功能·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;putchar('\n');cout << "····系统需要确认您的最高访问权限。" << endl;putchar('\n');cout << "····请输入系统管理员用户名:";char name[20];cin >> name;if (!strcmp(name, "Administrator")){putchar('\n');putchar('\n');}else{putchar('\n');cout << "····您没有权限!" << endl;putchar('\n');system("pause");return false;}cout << "····请输入管理员密钥:";char password[20];cin >> password;if (!strcmp(password, "admin")){putchar('\n');putchar('\n');}else{putchar('\n');putchar('\n');cout << "····输入密钥有误!" << endl;putchar('\n');return false;}cout << "····系统将输出所有订票用户名单。" << endl;putchar('\n');Tools::WAITING();putchar('\n');putchar('\n');cout << setw(14) << "航班号" << setw(14) << "姓名" << setw(14) << "性别" << setw(20) << "手机号码" << setw(20) << "有效证件号码" << endl;putchar('\n');DispList(p, ListLength(p));putchar('\n');system("pause");}
/******************************
* 版权所有 (C)2017 YuSong。
*
* 文件名称:main.cpp
* 文件标识:无
* 内容摘要:主函数
* 其他说明:无
* 当前版本:V1.0
* 作    者:于嵩
* 完成日期:2017/12/22
******************************/# include <iostream>
# include "dlinklist.h"
# include "SystemTools.h"
# include "dlinklist.template"
using namespace std;
int main()
{int i = 0;Darray *L=new Darray;L=Tools::INPUT_FILE_STATIONDATA(i);//将计数变量作为参数,从文件中读取航站信息,更改计数变量并返回头节点DNode *P=new DNode;CreateListR(P, L, i-1);//建立了航站信息双向链表int j = 0;Custom *L1 = new Custom;L1 = Tools::INPUT_FILE_CUSTOMDATA(j);//将计数变量作为参数,从文件中读取用户信息,更改计数变量并返回头节点DCustom *P1 = new DCustom;CreateListR(P1, L1, j - 1);//建立了用户信息双向链表Tools::DISPLAY(P,P1);//将两个链表头指针作为参数,执行用户交互函数system("pause");return 0;
}
运行界面:

数据结构课程设计【航空订票系统】相关推荐

  1. 飞机订票系统c语言大作业,c语言课程设计---飞机订票系统

    <c语言课程设计---飞机订票系统>由会员分享,可在线阅读,更多相关<c语言课程设计---飞机订票系统(46页珍藏版)>请在皮匠网上搜索. 1.C 语言程序设计课程设计报告设计 ...

  2. 飞机订票系统程序设计c语言,C语言课程设计——飞机订票系统源代码

    <C语言课程设计--飞机订票系统源代码>由会员分享,可在线阅读,更多相关<C语言课程设计--飞机订票系统源代码(9页珍藏版)>请在人人文库网上搜索. 1.include/标准输 ...

  3. 数据结构火车订票系统C语言课程设计,求助一个数据结构C语言课程设计源代码订票系统^:^!...

    /********************************/ /*TurboC2.0运行通过*/ /*飞机订票系统*/ /* */ /***************************** ...

  4. 课程设计---飞机订票系统

    1. 题目 本课程设计的题目为:飞机订票系统. 2. 项目描述 基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票 ...

  5. C语言课程设计火车订票系统存储结构设计,火车售票系统(数据结构课设)

    #include #include #include #define MAXSIZE 2000 /*车票信息*/ typedef struct { char chezhan[20];/*车站*/ ch ...

  6. cs结构航空订票系统java_VC++航空订票系统数据库设计-课程设计

    VC++航空订票系统数据库设计 目录 一  绪论 1 二 需求分析 1 三 概要设计 2 四 详细设计 4 五 调试分析 19 六 测试结果 20 七 用户使用说明 29 小结 29 参考文献 30 ...

  7. 基于ssh的航空订票系统-飞机订票系统javaweb-机票订购课程设计java代码(源码+数据库文件+文档)

    基于ssh的航空订票系统-飞机订票系统javaweb-机票订购java代码(源码+数据库文件+文档) 注意:该项目只展示部分功能,如需了解,评论区咨询即可. 作者:IT跃迁谷 1.开发环境 开发语言: ...

  8. 基于h5的航空订票系统的设计与实现

    1,项目介绍 基于 SpringBoot,h5 的航空订票系统系统拥有两种角色,分别为管理员和用户. 用户:机票浏览,机票查询,机票预定,新闻浏览,购票信息管理,留言信息管理 管理员:购票信息管理,机 ...

  9. 基于android实现航空订票系统【100010286】

    研究意义 通过在 Android 系统,进行航空订票系统的设计与实现,充分运用所学的数据库.Java 语言.数据结构.操作系统.设计模式等知识.了解一个较完整的 Android 项目的构建过程,同时, ...

最新文章

  1. MySql wait_timeout问题解决办法。
  2. leecode第一百四十八题(排序链表)
  3. 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数
  4. 前后端敏感数据加密方案及实现_03
  5. 局域网Ubuntu与WinXP实现文件共享
  6. ddos攻击发送端 接收端_什么是DDOS攻击?
  7. Kotlin学习笔记30 补充 作用域函数
  8. Oracle查询数据库中所有的表名称
  9. hadoop上传文件报错
  10. Eclipse或者MyEclipse—在Eclipse或MyEclipse中的操作(3)
  11. 自然语言处理(NLP)
  12. 汉王手写输入法android,汉王手写输入法
  13. python画多边形太阳花
  14. C# 实现eval,支持任意个数、任意基本类型的参数
  15. Java中文件File
  16. 大数据毕业设计_计算机专业如何才能更好的完成毕业设计呢?
  17. springboot中AOP总结
  18. 用计算机控制150个继电器,计算机怎样控制单片机里的继电器
  19. Java程序员面试笔试宝典-Java基础知识(一)
  20. 美国科技巨头的寒冬正在到来,它们已失去创新能力

热门文章

  1. CAD文件转换为SVG文件的探讨
  2. swiper 点击分页器之后不能继续轮播
  3. python-医学图像分割指标Dice代码实现
  4. 如何保存自己喜欢的好看视频的方法及步骤
  5. C# (江湖小新)- 几行代码写个GIF图片生成器
  6. vba做mysql前端_Excel、VBA与MySQL交互
  7. Unity3D-实习总结
  8. Boost型开关电源应用之TPS54340
  9. 环旭拟约4.5亿美元收购欧洲第二大EMS公司
  10. 最新4合1小说系统源码 (音乐、漫画、视频自动采集)