#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include "FlightBookTicketSystem.h"
#pragma warning(disable:4996) //visual studio安全性问题scanf,getchar
#pragma warning(disable:6031) //visual studio 返回值被忽略问题strcmp
/* 防止用户乱输入其他的字符,规范用户输入整数 */
int judge_int(void)
{
int len, num = 0, arg = 1;
char word[10] = { 0 };
int m, j = 1, k;
while (j)
{
scanf("%s", word);
len = strlen(word);
for (m = 0;m < len;m++)
{
if (word[m] < '0' || word[m]>'9') //检验是否有乱输入其他字符
{
printf("请输入整数:");
break;
}
else
{
if (m == len - 1)
j = 0;
}
}
}
j = len - 1;
for (m = 0;m < len;m++) // 将字符重新转换为数字
{
for (k = 0;k < j;k++)
arg *= 10;
num += (word[m] - '0') * arg;
arg = 1;
j--;
}
return num;
}
/* 创建客户订单结点 */
clientList Creat_clientNode(char name[MAXSIZE], int amount, int rank)
{
clientList c = NULL;
c = (clientList)malloc(sizeof(clientNode));
if (c == NULL)
{
printf("内存分配失败\n");
system("pause");
exit(0);
}
strcpy(c->name, name);
c->amount = amount;
c->rank = rank;
c->prior = NULL;
c->next = NULL;
return c;
}
/* 插入客户名单到总的已订票客户名单 */
Status Insert_clientList(clientList* total, clientList* c)
{
clientList ptr = *total;
if ((*c) == NULL)
{
return error;
}
if (ptr == NULL)
{
*total = *c;
}
else
{
while (ptr)
{
if (strcmp(ptr->name, (*c)->name) >= 0) //比较姓名顺序,插入顺序为按客户姓名从小到大排序
{
if (ptr->prior == NULL) //比头结点小,插在头结点之前
{
(*c)->next = ptr;
ptr->prior = *c;
*total = *c;
break;
}
else //插在中间
{
(*c)->prior = ptr->prior;
(*c)->next = ptr;
(*c)->prior->next = *c;
ptr->prior = *c;
break;
}
}
else
{
if (ptr->next == NULL) //比尾结点大,插在尾结点之后
{
ptr->next = *c;
(*c)->prior = ptr;
break;
}
}
ptr = ptr->next;
}
}
return ok;
}
/* 删除航线总订单中的指定订单 */
Status Delete_clientList(clientList* total, clientList* c, int amount)
{
clientList ptr = *total;
if ((*c) == NULL || ptr == NULL)
{
return error;
}
if ((*c)->amount == amount) //退票量等于订票量
{
if (ptr == *c) //删除结点为头结点
{
ptr = ptr->next;
*total = ptr;
if (*total != NULL)
{
(*total)->prior = NULL;
}
free(*c);
}
else
{
if ((*c)->next != NULL)
{
(*c)->next->prior = (*c)->prior;
}
(*c)->prior->next = (*c)->next;
free(*c);
}
}
else //退票量小于订票量
{
(*c)->amount -= amount;
}
return ok;
}
/* 初始化队列 */
//Status Init_waitQueue(waitQueue* q)
//{
// q = (waitQueue*)malloc(sizeof(waitQueue));
// if (q == NULL)
// {
// printf("内存分配失败\n");
// system("pause");
// exit(0);
// }
// q->front = NULL;
// q->rear = NULL;
// return ok;
//}
/* 入队 */
Status En_waitQueue(waitQueue* wqueue, char name[MINSIZE], int amount)
{
waitPtr ptr = (waitPtr)malloc(sizeof(waitNode));
if (ptr == NULL)
{
printf("内存分配失败\n");
system("pause");
exit(0);
}
strcpy(ptr->name, name);
ptr->amount = amount;
ptr->next = NULL;
if (wqueue->front == NULL)
{
wqueue->front = ptr;
wqueue->rear = ptr;
}
else
{
wqueue->rear->next = ptr;
wqueue->rear = ptr;
}
return ok;
}
/* 出队 */
Status De_waitQueue(waitQueue* wqueue, waitPtr de)
{
if ((*wqueue).front == NULL)
{
return error;
}
waitPtr ph = (waitPtr)malloc(sizeof(waitNode));
waitPtr phr = (waitPtr)malloc(sizeof(waitNode));
if (ph == NULL || phr == NULL)
{
printf("内存分配失败\n");
system("pause");
exit(0);
}
ph = wqueue->front;
phr = ph->next;
if (wqueue->front == wqueue->rear)
{
wqueue->front = NULL;
wqueue->rear = NULL;
free(ph);
free(phr);
}
else if (ph == de)
{
wqueue->front = wqueue->front->next;
free(ph);
free(phr);
}
else
{
while (phr != NULL)
{
if (phr == de)
{
ph->next = de->next;
free(ph);
free(phr);
break;
}
phr = phr->next;
ph = ph->next;
}
}
return ok;
}
/* 遍历队列 */
/* 初始化(航班总信息)单链表 */
Status Init_Flight(FlightList* f)
{
*f = (FlightList)malloc(sizeof(Flight));
if ((*f) == NULL)
{
printf("内存分配失败\n");
system("pause");
exit(0);
}
strcpy((*f)->destination, "");
strcpy((*f)->flightID, "");
strcpy((*f)->planeID, "");
strcpy((*f)->time, "");
(*f)->num = 0;
(*f)->tickets = 0;
(*f)->next = NULL;
return ok;
}
/* 创建航班结点 */
FlightList Creat_Flight(char* des, char* fid, char* pid, char* time, int num, int tickets)
{
FlightList fl = (FlightList)malloc(sizeof(Flight));
if (fl == NULL)
{
printf("内存分配失败\n");
system("pause");
exit(0);
}
strcpy(fl->destination, des);
strcpy(fl->flightID, fid);
strcpy(fl->planeID, pid);
strcpy(fl->time, time);
fl->num = num;
fl->tickets = tickets;
fl->clist = NULL;
//Init_waitQueue(&(fl->wqueue));
fl->wqueue.front = NULL;
fl->wqueue.rear = NULL;
fl->next = NULL;
return fl;
}
/* 插入新的航班 */
Status Insert_Flight(FlightList* f1, FlightList* f2)
{
FlightList p, pr;
p = *f1;
pr = NULL;
if ((*f2) == NULL)
{
return error;
}
while (p != NULL)
{
if ((strcmp(p->destination, "") != 0) && (strcmp(p->destination, (*f2)->destination) >= 0)) //比较终点站名顺序,插入顺序为按终点站名从小到大排序
{
break;
}
pr = p;
p = p->next;
}
if (pr == NULL)
{
return error;
}
pr->next = *f2;
(*f2)->next = p;
return ok;
}
/* 删除指定航班 */
int Delete_Flight(FlightList* f, char* flightID)
{
int flag = 0;
FlightList p, pr;
p = *f;
pr = NULL;
if (strcmp(flightID, "") == 0)
{
return error;
}
while (p != NULL)
{
if (strcmp(p->flightID, flightID) == 0)
{
flag = 1;
break;
}
pr = p;
p = p->next;
}
if (pr == NULL)
{
return error;
}
if (flag == 1)
{
pr->next = p->next;
free(p);
}
return flag;
}
/* 查询航线,输出最近一天的航班信息 */
void SearchFlight(FlightList* flight)
{
system("cls");
printf("\n\n");
printf("************************************\n");
printf("* 欢迎使用航空客运系统 *\n");
printf("*----------------------------------*\n");
printf("* 当前为:查询窗口
manylinux
- 粉丝: 4613
- 资源: 2490
最新资源
- 基于java+ssm+mysql的中学生课后服务的信息管理系统开题报告.docx
- 通过python爬虫获取人民网、新浪等网站新闻作为训练集 (源码+文档说明)
- 三相光伏并网逆变器simulink仿真 前级boost采用电导增量法实现最大功率追踪 后级逆变器在dq坐标系解耦实现控制 输出波形质量好,THD小于5% 直流侧电压稳定,纹波小于3%
- 基于java+ssm+vue+mysql的课程教学网站开题报告.docx
- 基于DSTATCOM无功补偿的风电并网模型 Matlab simulink 仿真简介: 1、2个风电:一个基于双馈风机DFIG、一个基于感应风机 2、仿真总时长30s,10s时,感应风机风速提高,无
- 基于java+ssm+vue+mysql的兰亭序图书管理系统开题报告.docx
- 风光不确定性场景生成与削减代码 风速使用weibull分布来描述 光照强度使用Beta分布描述 带入分布参数使用时序蒙托卡罗模拟生成大量基础场景 而后采用基于启发式的同步回代削减方法进行场景削减
- 毕业设计Python基于深度学习的甲状腺超声图像良恶性诊断算法研究源码+文档说明
- GIS开发openlayers基于webgis的全国公司分布统计以及查询系统 适合对象:gis初学者,爱好者 这个系统采用的webgis技术是openlayers+geoserver,开发工具vs20
- 全球二氧化碳排放情况数据集,提供了2000年至2022年间全球不同部门(包括工业、汽车、农业和家庭活动)二氧化碳排放,(包含17,686行记录和16个字段)
- SVPWM仿真和基于DSP28335的PIL(处理器在环) 仿真模型(将matlab仿真算法生成代码在DSP中在线运行返回数据给Matlab)验证算法可行性和实时性 对于数字信号处理很有用 (提供
- 模糊PID控制fuzzy- PID slx文件为模糊PID控制,模块齐全,方便使用,只需要修改成需要的信号输入即可,可替PID,适合新手学习
- 配电网重构 负荷损失matlab 采用matlab结合yalmip编写配电网重构程序,以IEEE33节点为例,网损和负荷损失作为目标函数,并且网络中包括一个sop,非常实用的程
- 半桥闭环LLC谐振变器仿真,含采用软启动策略,pi控制,柔化给定信号,三种方式波形对比波形图 50一类
- 步行机器人PID控制MATLAB仿真程序 采用了从拉格朗日力学推导的罗盘步态行走机器人的基本模型,并应用PID控制来跟踪所需的轨迹
- Python 与 MySQL 基础:构建数据驱动的应用程序-pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈