C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)

这篇具有很好参考价值的文章主要介绍了C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相信很多粉丝看过看过我的主页,有一个航空订票系统:

数据结构航空订票系统(附源码)

但是最近后台收到很多粉丝的要求,在上一个航空订票系统中要加上管理员的功能块,于是对上面那个课设进行了改进,新的功能流程如下:(航班信息由管理员添加和删除、顾客可以实现购票与退票,订票分为经济舱和商务舱)

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

新增管理员模块的功能如下,采用单链表、队列实现(航班信息改为由管理员添加):

管理员模块的功能:
A:管理员密码验证
B:查询所有航班信息
C:根据航班ID查询客户信息(包括身份证号码)
D:增加航班(航班的各个信息输入要合法,不合法的重新输入)
E:删除航班,根据ID进行删除,ID不存在则删除失败。
F:返回上一级菜单

//管理员的操作,包括管理员的验证,包括查看航班、增加航班、删除航班和查看订票的客户信息,能查到身份证号码。

航空订票系统V2.0的功能需求如下:

【基本需求】
(1)每条航线所设计的信息有:航班ID、起点站名、终点站名、飞机号、飞行周日(星期几)、成员定额、总余票量、经济仓余票量、商务舱余票量、已订票的客户名单、经济舱候补客户名单、商务舱候补客户名单。其中,经济舱候补客户名单和商务舱候补客户名单中的包括以下几个域:姓名、身份证、所需票量、预定票的等级


(2)作为示意系统,数据放在内存中;

(3)系统能实现的操作和功能如下:
     查看所有航班信息:
     查询模块:输入起点站和终点站进行搜索


 订票模块的功能:
A:输入航班ID进行订票,当航班ID不存在或者不合法时要求重新输入航班ID,然后输入订票数量和等级,数量和等级要合法,订票数目要大于0,等级输入1代表经济舱,输入其他数据商务舱。不合法则重新输入,再判断对应等级的票是否足够 ,足够则继续输入客户信息(姓名和身份证),然后订票成功。当对应等级的票数不足时,询问是否改变订票计划,同意改变计划则重新输入航班ID进行相应的订票操作。不同意改变计划则继续询问是否排队等候,不同意排队等候则询问是否需要推荐相同航线的其他航班,询问操作时,输入Y或者y表示同意,输入N,n或者其它数据表示不同意。
B:根据起点和终点查询航班
C:查询所有航班的相关信息
D::查询航班的订票情况,输入航班ID,当航班ID不存在或者不合法时要求重新输入航班ID,根据ID查询航班,显示出已订票的客户的姓名、订票数目和仓位等级,为了保密,不能显示客户的身份证。
E:返回上一级菜单

退票模块的功能:
A:先输入航班ID,然后输入姓名和身份证号码进行验证,验证成功则办理退票手续。然后查询该航班是否有人排队候补,如果有,而且票数够了,则首先询问排在第一的客户,是否需要订票,是则为他办理订票手续,否则出队,依次询问其他排队候补的客户。若刚刚退票的是经济舱,则询问经济舱排队的客户;若是商务舱,则询问商务舱排队的客户。
B:返回上一级菜单
C:退出系统


管理员模块的功能:
A:管理员密码验证
B:查询所有航班信息
C:根据航班ID查询客户信息(包括身份证号码)
D:增加航班(航班的各个信息输入要合法,不合法的重新输入)
E:删除航班,根据ID进行删除,ID不存在则删除失败。
F:返回上一级菜单

 

运行效果主页面截图:

运行环境(Dev C++ 或者 code blocks),测试数据如下:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 

 运行后,首先需要管理员登录,来添加航班信息:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 

然后管理员添加航班:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

管理员查看航班信息:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

普通用户输入起点站终点站 名称,查询 航班信息:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 普通客户科根据  经济舱  和   商务舱  两种情况订票:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 

 查询订票模块:根据航班ID查询谁订票订了几张票还有舱位等级

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 退票操作:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

管理员删除航班信息:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

 退出系统:

航空客运订票系统c语言设计,数据结构C语言版,课程设计,数据结构,c语言,链表

所用类型定义:

完整代码请访问:

腾讯文档腾讯文档-在线文档https://docs.qq.com/doc/p/71239d69a76f56cf1521717ae6b22c27cf876f10

typedef int Status;

//航班日期枚举类,星期一到星期天

enum Week {

    Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7

};

//乘客节点
typedef struct CustomerNode {

    char name[10];//客户姓名

    int clientTickets;//客户订票量

    char identification[20];//客户身份证号码

    int rank;//舱位等级

    CustomerNode *next;

} CustomerNode, *CusLinkList;
//候补队列中的节点

typedef struct WaitPassenger {

    char name[10];//姓名

    char identification[20]; //身份证

    int preTickets;//预定的票量

    struct WaitPassenger *next;

} WaitQNode, *PWait;
//候补队列

typedef struct Queue {

    PWait front;//等候替补客户名单域的头指针

    PWait rear;//等候替补客户名单域的尾指针

} LinkQueue;
//封装乘客的姓名和订票量和身份证

//用于候补客户出队时把关键字返回

typedef struct NameAndNumAndID {

    char name[10];//姓名

    char identification[20]; //身份证号码

    int num;//订票量

} NameAndNumAndID;
//航班节点

typedef struct Flight {

    char startPoint[20];//起点站名

    char destination[20];//终点站名

    char flightCodeID[20];//航班ID(相当于主键)

    char planeNum[20];//飞机号

    char day[20];//飞行日期(星期几)

    int totalTickets;//乘员定额(总票数)

    int left;//总余票量

    int leftEconomicTicket; //经济票剩余量

    int leftBusinessTicket; //商务票剩余量

    Flight *next;

    CusLinkList cusLinkList;//乘员名单域,指向乘员名单链表的头指针

    LinkQueue waitQueue1;//经济舱候补,等候替补的客户名单域,指向一个队列

    LinkQueue waitQueue2;//商务舱候补,等候替补的客户名单域,指向一个队列


} Flight, FlightNode, *PFlight;

航班链表采用全局变量:pFlight,指向航班链表的头指针

 pflight1,一个数组,存有留个基本航班,一个个入pFlight 航班链表中。文章来源地址https://www.toymoban.com/news/detail-775763.html

/
*入队,增加排队等候的客户名单域
*@paramq带头结点的链队列
*@paramname
*@paramamount
*@return
*/
LinkQueueAppendqueue(LinkQueue&q,charname[],intamount,charidentification[]){
PWaitnew1;
new1=(PWait)malloc(sizeof(WaitQNode));
strcpy(new1->name,name);
strcpy(new1->identification,identification);
new1->preTickets=amount;
new1->next=NULL;

q.rear->next=new1;
q.rear=new1;

returnq;
}
/
*退票功能模块
*/
voidReturnTicket(){
structFlight*info;
intrank;
//p1为遍历指针,p2为辅助指针,指向p1的前驱
CustomerNode*p1,*p2,*head;
//客户姓名
charcusname[10];
//客户身份证
charidentification[20];
system("cls");
//info指针,find函数根据航班ID返回该航班节点的指针
intloop;
loop:
{
info=find();
};

if(info==NULL){
printf("没有这个航班,请重新输入\n");
gotoloop;
}

//head为该航班的的乘员名单域的头指针
head=info->cusLinkList;
//带头结点的指针,head->next开始遍历
p1=head->next;
printf("请输入你的姓名:");
scanf("%s",cusname);
printf("请输入你的身份证号码:");
scanf("%s",identification);
//根据客户姓名搜索客户是否订票
p2=head;
while(p1!=NULL){
if((strcmp(cusname,p1->name)==0)&&(strcmp(identification,p1->identification)==0))break;
p2=p1;
p1=p1->next;
}

if(p1==NULL){
printf("对不起,你没有订过票或姓名和身份证不对应\n");
return;
}else{//退票成功
//从乘客名单域中移除该节点
rank=p1->rank;
p2->next=p1->next;
//加回该航班的剩余票
info->left+=p1->clientTickets;
if(rank==1){
info->leftEconomicTicket+=p1->clientTickets;
}else{
info->leftBusinessTicket+=p1->clientTickets;
}
printf("%s成功退票!\n",p1->name);
free(p1);
}

LinkQueuequeue1=info->waitQueue1;
LinkQueuequeue2=info->waitQueue2;
NameAndNumAndIDnameAndNumAndID={0,0};


if(rank==1){//有经济舱退票,询问经济舱排队的客户
for(;queue1.front->next!=NULL&&queue1.front->next->preTickets<=info->leftEconomicTicket;){
//从候补客户队列中,出队客户的姓名和订票量用NameAndNumAndID返回
QueueDelete(info->waitQueue1,nameAndNumAndID);
inty;
printf("有经济舱票剩余,尊敬的%s:\n",nameAndNumAndID.name);
printf("是否确认订票(1确认订票,其他数字拒绝订票\n");
scanf("%d",&y);
/
*订票界面
*属于订票模块
*/
voidBookticketFace(){
inta3;
intloop3;
loop3:
{
system("cls");
printf("\n");
printf("\n");
printf("WelcomeTo订票模块\n");
printf("-----------------------------------------------\n");
printf("|1.客户订票|\n");
printf("|2.根据起点和终点搜索航班|\n");
printf("|3.查询所有航班|\n");
printf("|4.通过航班ID查询订票客户名单|\n");
printf("|5.返回上一级菜单|\n");
printf("------------------------------------------------\n");
printf("请输入您的选择:");
scanf("%d",&a3);
}
switch(a3){
case1:
//订票
BookTickets();
system("PAUSE");
BookticketFace();
break;
case2:
//输入起点和终点查询
SearchFlight();
system("PAUSE");
BookticketFace();
break;
case3:
PrintFilghtlist(pFlight);
BookticketFace();
break;
case4:
//为了保密,只能查到客户的姓名和订票量,查不到身份证
PriCusInfo();
system("PAUSE");
BookticketFace();
break;
case5:
MenuSelect();
break;
default:
gotoloop3;
}
}

到了这里,关于C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一、设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程。 通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运

    2024年02月09日
    浏览(41)
  • 数据结构课程设计

    编制一个能演示执行集合的交、并和差运算的程序。 要求: 集合元素用小写英文字母,执行各种操作应以对话方式执行。 算法要点:利用单链表表示集合;理解好三种运算的含义 分析 : 输入:输入应该具有判断是否为小写字母的功能,如果不是小写字母,应该舍去,同时

    2024年02月02日
    浏览(35)
  • 数据结构课程设计 ——考试报名系统

    数据结构课程设计 ——考试报名系统 一、项目功能要求 完成对考生信息的建立,查找,插入,修改,删除等功能。其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员

    2024年02月04日
    浏览(37)
  • 【数据结构课程设计】关键路径问题

    1 问题描述与功能需求分析 1.1问题描述 1) 任务:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。 2)基本要求: (1)对一个描述工程的 AOE 网,应判断其是否能够顺利进行。 (2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及

    2024年02月10日
    浏览(36)
  • 数据结构课程设计1: 区块链

    1.任务: [问题描述] 使用链表设计一个保存信息的系统,该系统拥有类似区块链的设计以防止信息被轻易篡改。 该题目使用一个链表。信息保存在链表的每一个节点中,每个节点需要包含该节点的编号、信息和校验码。其中: + 每个节点的编号按照顺序递增,从0开始。 + 节

    2023年04月16日
    浏览(95)
  • 数据结构课程设计 仓储管理系统

    【基本功能】 把货品信息表抽象成一个线性表,货品信息(包括ID、货品名、定价、数量等)作为线性表的一个元素,实现:按ID、货品名分别查找某货品信息(包括ID、货品名、定价、数量等);收录货品(如果货品在帐中已有,则只将总库存量增加。否则插入新增信息);

    2024年01月23日
    浏览(45)
  • 一、课程设计目的与任务《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以

    一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应

    2024年02月21日
    浏览(43)
  • 数据结构课程设计:学生成绩管理系统

    目  录 第一章   需求分析 第二章 概要设计 第三章 详细设计 第四章 测试报告 第五章 安装及使用 第六章 项目总结 第七章 源码 一.需求分析        学生成绩管理是一个学校不可缺少的部分,它的内容对于学校的管理者和学生以及学生家长来说都至关重要,所以一个良好

    2024年02月02日
    浏览(55)
  • 《数据结构与算法分析》课程设计——迷宫问题

    中国矿业大学信控学院   补一下我之前在博客园发布的内容  懒得调了, 想复制完整代码直接复制最下面的 ,想复制分布代码去看我博客园链接吧 《数据结构与算法分析》课程设计——迷宫问题 - 刷子zz - 博客园 一、  问题描述 问题中迷宫可用方阵[m,n]表示,0表示能通过

    2024年02月10日
    浏览(37)
  • 数据结构课程设计——项目2:校园导游咨询

    【问题描述】 设计一个校园导游程序,为来访的客人提供各种信息查询服务。 【基本要求】 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校 内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。 为来访客人提供图中任

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包