Advertisement

课程设计——航空客运订票系统

阅读量:
复制代码
 /*Copyright  (c)2017,烟台大学计算机与控制工程学院  
    
 *All rights reservrd.              
    
 *作者:王华慧  
    
 *完成时间:2017年12月21日        
    
 *版本号:v1.0   
    
 *问题描述:航空客运订票系统
复制代码
复制代码
  
    
   
    
   /************************************************************* * Copyright (c) 2017, 烟台大学计算机与控制工程学院      * All rights reserved.      * 文件名称:fk.h * 文件标识:无 * 内容概要:实现程序各种功能的函数的声明   * 作者:王华慧    * 完成日期:2017年12月21日      * 版本号:V1.0     *************************************************************/   

#pragma once

#ifndef FK_H_INCLUDED

#define FK_H_INCLUDED

#define MAXSIZE 6 /定义航线量的最大值/

typedef struct waiting

{

复制代码
char name[10];/*姓名*/

int wait_ask_number;/*订票量*/

struct waiting *next;

}qnode, *qptr;

typedef struct pqueue

{

复制代码
qptr front;/*等候替补客户名单域的头指针*/

qptr rear;/*等候替补客户名单域的属指针*/

}linkqueue;

typedef struct ordered_people

{

复制代码
char name[10];/*客户姓名*/

char zheng[50];

int ordering_number;/*订票量*/

int grade;/*舱位等级*/

struct ordered_people *next;

}linklist;

typedef struct airline

{

复制代码
char end_station[10];/*终点站名 */

char air_num[10];/*航班号*/

char plane_num[10];/*飞机号*/

char day[7];/*飞行周日(星期几)*/

int people_quota;/*乘员定额*/

int more_ticket;/*余票量*/

linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/

linkqueue wait; /用于等待替补客户的客户等待列表域,分别指示待入队列的客户在头部和尾部的位置/

}lineinfo;/*在后面加,start的意思是定义一种start类型,跟int型一样。/

void list(airline *&start);

void search(airline *&start);

struct airline *find_air_num(airline *&start);

void prtlink(airline *&start);

void ordering(airline *&start);

void return_ticket(airline *&start);

int menu_select();

#endif // FK_H_INCLUDED

复制代码
1. /*************************************************************  
  2. * Copyright (c) 2017, 烟台大学计算机与控制工程学院  
  3. * All rights reserved.  
  4. * 文件名称:fk.cpp
  5. * 文件标识:无 
  6. * 内容概要:实现程序各种功能的函数的定义  
  7. * 作者:王华慧  
  8. * 完成日期:2017年12月21日  
  9. * 版本号:V1.0  
  10. *************************************************************/
复制代码
复制代码
  
    
    
    
    /************************************************************* * Copyright (c) 2017, 烟台大学计算机与控制工程学院      * All rights reserved.      * 文件名称:main.cpp* 文件标识:无 * 内容概要:主函数* 作者:王华慧    * 完成日期:2017年12月21日      * 版本号:V1.0     *************************************************************/ #include <iostream>
    
 #include <stdio.h>
    
 #include <stdlib.h>
    
 #include <string.h>
    
 #include "fk.h"
    
 int main()
    
  
    
  
    
 {
    
 	struct airline *start; /*定义 airline类型的一个start指针*/
    
 	struct airline air[MAXSIZE] = { { "beijing","1","B8571","SUN",6,1 },
    
 	{ "guangzhou","2","S1002","MON",2,2 },
    
 	{ "shenzhen","3","L1003","FRI",1,1 },
    
 	{ "beijing","4","D1005","TUE",5,1 },
    
 	{ "beijing","5","G1006","SUN",6,3 },
    
 	{ "yantai","6","A1007","SUN",6,5 } };/*初始化航线信息*/
    
  
    
  
    
 	start = air;
    
  
    
  
    
 	printf("\t\t=============航空客运订票系统=============\n");
    
 	printf("\n");
    
 	printf("\n");
    
 	printf("\n");
    
  
    
  
    
 	for (;;)
    
 	{
    
 		switch (menu_select())
    
 		{
    
 		case 1:list(start); break;
    
 		case 2:prtlink(start); break;
    
 		case 3:search(start); break;
    
 		case 4:ordering(start); break;
    
 		case 5:return_ticket(start); break;
    
 		case 6:printf("\n欢迎使用本系统,再见!\n"); exit(0);
    
 		}
    
 		printf("\nPress any key to continue!\n");
    
 		getchar();
    
 	}
    
 	system("pause");
    
  
    
  
    
 }
复制代码
复制代码
  
    
    
    
    /*********************************************************   * 功能描述: 打印全部航班信息* 输入描述: 无   * 输出描述: 无   * 返回值  : 无   * 其它说明: 调用即可  ************************************************************/
复制代码
 void list(airline *&start)/*打印全部航线信息*/

    
 {
    
 	void display(struct airline *info);
    
 	struct airline *info;
    
 	int i = 0;
    
 	info = start;
    
 	printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");
    
 	while (i<MAXSIZE) {
    
 		display(info);
    
 		info++;
    
 		i++;
    
 	}
    
 	printf("\n\n");
    
 }
复制代码
复制代码
  
    
     
    
     /*********************************************************   * 功能描述: 打印每条航班信息* 输入描述: 无   * 输出描述: 无   * 返回值  : 无   * 其它说明: 调用即可  ************************************************************/
复制代码

功能描述:根据终点打印所有航班信息
输入描述:目的地
输出描述:去往该地点的所有航班
返回值:

其它说明:调用即可

功能描述:基于指定的目的地列出所有航班信息
输入描述:指定的目的地
输出描述:前往该目的地的所有航班
返回值:

其它说明:无需额外操作

复制代码

void search(airline *&start)

/根据客户提出的终点站名输出航线信息/

{

复制代码
struct airline *info, *find_air_num();

char name[10];

int i = 0;

info = start;

printf("请输入终点站名:");

scanf("%s", name);

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

while (i<MAXSIZE) {

if (strcmp(name, info->end_station) != 0)//比较两个字符串的内容是否一致

复制代码
		display(info);

	info++;

	i++;

}

if (i>MAXSIZE)

	printf("对不起,该航线未找到!\n");

}

复制代码
复制代码

该功能旨在通过航班编号获取全部航班详情;输入字段为目的地;返回结果为所选航线的全部航班信息;返回值为空表示无匹配结果;系统能够自动完成相关操作

复制代码

struct airline *find_air_num(airline *&start)

复制代码
/*根据系统提出的航班号查询并以指针形式返回*/

{

复制代码
struct airline *info;

char number[10];

int i = 0;

info = start;

printf("请输入航班号:");

scanf("%s", number);

while (i<MAXSIZE) {

	if (!strcmp(number, info->air_num)) return info;

	info++;

	i++;

}

printf("对不起,该航线末找到!\n");

return NULL;

}

复制代码

功能描述:输出客户信息

复制代码

void prtlink(airline *&start)

/打印订票乘员名单域的客户名单信息/

{

复制代码
linklist *p;

struct airline *info;

info = find_air_num(start);

p = info->order;

if (p != NULL) {

	printf("客户姓名   订票数额   舱位等级\n");

	while (p) {

		printf("%s\t\t%d\t%d\n", p->name, p->ordering_number, p->grade);

		p = p->next;

	}

}

else

	printf("该航线没有客户信息!!\n");

}

复制代码
复制代码

功能描述:支持批量添加等待排队的客户信息
输入描述:采用标准的函数接口形式
输出描述:返回客户的详细信息数据
返回值  :q
其它说明:无需额外配置即可调用使用

复制代码

linkqueue appendqueue(linkqueue q, char name[], int amount)

/增加排队等候的客户名单域/

{

复制代码
qptr p = (qptr)malloc(sizeof(qnode));

strcpy(p->name, name);

p->wait_ask_number = amount;

p->next = NULL;

if (q.front == NULL)/*若原排队等候客户名单域为空*/

	q.front = p;

else

	q.rear->next = p;

q.rear = p;

return q;

}

复制代码

功能说明:负责管理订票员的客户信息数据;输入参数:标准函数接口;输出结果:无;返回对象:链表头节点;无需额外操作

复制代码

linklist *insertlink(linklist *head, int amount, char name[], int grade)

/增加订票乘员名单域的客户信息/

{

复制代码
linklist *p1, *p;

p1 = head;

p = (linklist *)malloc(sizeof(linklist));

if (!p) { printf("\n系统出现错误\n"); return NULL; }

strcpy(p->name, name);

p->ordering_number = amount;

p->grade = grade;

p->next = NULL;

if (head == NULL)/*若原无订票客户信息*/

{

	head = p; p->next = NULL;

}

else

	head = p;

p->next = p1;

return head;

}

复制代码

功能说明:订单售票服务

复制代码
复制代码
 void ordering(airline *&start)

    
 /*办理订票业务*/
    
 {
    
 	struct airline *info;
    
 	int amount, grade;
    
 	char name[10];
    
 	char zheng[50];
    
 	char r;
    
 	info = start;
    
 	if (!(info = find_air_num(start))) return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/
    
 	printf("请输入你订票所需要的数量:");
    
 	scanf("%d", &amount);
    
 	if (amount>info->people_quota)/*若客户订票额超过乘员定票总额,退出*/
    
 	{
    
 		printf("\n对不起,您输入的票的数量已经超过乘员定额!");
    
 		return;
    
 	}
    
 	if (amount <= info->more_ticket)/*若客户订票额末超过余票量,订票成功并等记信息*/
    
 	{
    
 		int i;
    
 		printf("请输入您的姓名(订票客户):");
    
 		scanf("%s", name);
    
 		printf("请输入您的身份证号(订票用户:");
    
 		scanf("%s", zheng);
    
 		printf("请输入%s票的舱位等级:", name);
    
 		scanf("%d", &grade);
    
 		info->order = insertlink(info->order, amount, name, grade);/*在订票乘员名单域中添加客户信息*/
    
 		for (i = 0; i<amount; i++)/*依次输出该订票客户的座位号*/
    
 			printf("%s的座位号是:%d\n", name, info->people_quota - info->more_ticket + i + 1);
    
 		info->more_ticket -= amount;/*该航线的余票量应减掉该客户的订票量*/
    
 		printf("\n祝您乘坐愉快!\n");
    
 	}
    
 	else       /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/
    
 	{
    
 		printf("\n已经没有更多的票,您需要排队等候吗?(Y/N)");
    
 		cin>>r;
    
 		printf("%c", r);
    
 		if (r == 'Y' || r == 'y')
    
 		{
    
 			printf("\n请输入您的姓名(排队订票客户):");
    
 			scanf("%s", name);
    
 			info->wait = appendqueue(info->wait, name, amount);/*在排队等候乘员名单域中添加客户信息*/
    
 			printf("\n注册成功!\n");
    
 		}
    
 		else
    
 		{
    
  
    
  
    
 			printf("\n\n您想要查询的航线没有满足你的要求,是否愿意输入终点站名查询别的航班信息?(Y/N)\n");
    
 			cin>>r;
    
 			printf("%c\n", r);
    
 			if (r == 'Y' || r == 'y')
    
 				search(start);
    
 			else
    
 			{
    
 				printf("\n欢迎您下次再次订购!\n");
    
 			}
    
  
    
  
    
 		}
    
  
    
  
    
 	}
    
 }
复制代码
复制代码
复制代码
复制代码
  
    
       
    
       /*********************************************************   * 功能描述: 退票业务* 输入描述: 用户信息输入* 输出描述: 无* 返回值  :无* 其它说明: 调用即可  ************************************************************
复制代码

void return_ticket(airline *&start)

/退票模块/

{

复制代码
struct airline *info;

qnode *t, *back, *f, *r;

int grade;

linklist *p1, *p2, *head;

char cusname[10];

if (!(info = find_air_num(start))) return;/执行查找操作以获取基于客户的飞行路线信息,并判断是否成功/

复制代码
head = info->order;

p1 = head;

printf("请输入你的姓名(退票客户):");

scanf("%s", cusname);

while (p1 != NULL) {/*根据客户提供的姓名到订票客户名单域进行查询*/

	if (!strcmp(cusname, p1->name)) break;

	p2 = p1; p1 = p1->next;

}

if (p1 == NULL) { printf("对不起,你没有订过票!\n"); return; }/*若未找到,退出本模块*/

else {/*若信息查询成功,删除订票客户名单域中的信息*/

	if (p1 == head) head = p1->next;

	else p2->next = p1->next;

	info->more_ticket += p1->ordering_number;

	grade = p1->grade;

	printf("%s成功退票!\n", p1->name);

	free(p1);

}

info->order = head;/*重新将航线名单域指向订票单链表的头指针 */

f = (info->wait).front;/*f指向排队等候名单队列的头结点*/

r = (info->wait).rear;/*r指向排队等候名单队列的尾结点*/

t = f;/*t为当前满点条件的排队候补名单域*/

while (t)

{

当(info.moreticket >= info.wait.front.wait_ask_number){/若满足条件时为头结点}/

复制代码
		int i;

		info->wait.front = t->next;

		printf("%s订票成功!\n", t->name);

		for (i = 0; i<t->wait_ask_number; i++)/*输出座位号*/

			printf("%s的座位号是:%d\n", t->name, info->people_quota - info->more_ticket + i + 1);

		info->more_ticket -= t->wait_ask_number;

info->order被insertlink函数用来将t name和grade参数加入到t->wait_ask_number中;/将信息插入到订票客户信息链表中/

复制代码
		free(t);

		break;

	}

	back = t; t = t->next;

	if ((info->more_ticket) >= (t->wait_ask_number) && t != NULL)/*若满足条件者不为头结点*/

	{

		int i;

		back->next = t->next;

		printf("%s订票成功!\n", t->name);

		for (i = 0; i<t->wait_ask_number; i++)/*输出座位号*/

			printf("%s的座位号是:%d\n", t->name, (info->more_ticket) - i);

		info->more_ticket -= t->wait_ask_number;

插入到订票客户名单链表中

插入到订票客户名单链表中

复制代码
		free(t); break;

	}

	if (f == r) break;

}

}

复制代码
复制代码
复制代码
复制代码

AI写代码

复制代码

全部评论 (0)

还没有任何评论哟~