基于Linux的航班管理系统
该系统是一个航班管理系统,分为管理员和用户模式。管理员可执行以下操作:1. 添加航班,2. 删除航班,3. 修改航班,4. 查询航班。用户则可执行:1. 查看航班,2. 购票,3. 退票,4. 改签。管理员需先添加航班信息后,用户才能进行相关操作。系统通过主程序main.c、头文件Flightsystem.h、以及实现文件Flightsystem.c完成功能。
该系统采用了三个文件来构建,其中包含main.c源文件、Flight_system.h头文件以及Flight_system.c源文件。
main.c文件主要依赖Fligth_system.c文件的多个函数功能;
Flight_system.h文件主要编写航班管理系统的功能的定义;
Flight_system.c文件主要编写航班系统的各个功能的实现以及初始化;
该系统分为管理员和用户模式。需要管理员添加航班信息用户才能购买。
管理员是提前设置了特定的管理员账户,其中以TJC账户为例,其密码设定为123。在登录流程中,该账户无需密码验证。若需要增加验证功能,则应在登录模块中自行添加相应的判断语句。管理员登录后可执行的四个操作包括:添加航班、删除航班、修改航班以及查询航班。

为了确保系统的正常运行,该系统必须首先添加旅客信息。同时,每个模块都会产生相应的错误反馈信息。用户权限:当管理员添加航班信息后,用户将获得以下4种权限。1.查询航班信息2.进行机票预订3.处理退票事宜4.调整航班行程

代码:
main.c文件
#include"Flight_system.c"
int main(){
Customer* arr = NULL;
Customer* ptr = NULL;
arr = (Customer*)malloc(9* sizeof(Customer)); // 根据用户数量自动调整内存分配
ptr = arr;
初始化两个Plane指针变量qArr和q,分别设为NULL。随后,将qArr分配为一个动态分配的Plane指针,分配空间大小为9乘以sq倍的Plane大小。将q赋值为qArr的值。初始化mk为Wellcome。进入无限循环,根据mk的值执行相应操作。当mk为1时,调用Estimate函数;当mk为2时,调用Input函数;当mk为3时,退出程序;否则,输出输入错误提示。
printf("1.登录 2.注册 3 退出\n");
int op;
scanf("%d",&op);
mk=op;
}
return 0;
}
Flight_system.h文件
#include<stdio.h>
static char Admin_id[10]="TJC";
static char Admin_psw[10] = "123tjc";
static int User_num = 1; //表示用户数量
static int Plane_num = 1; //表示航班数量
static int Ticket_number[10] = {0}; //表示航班票数
static char User_number[10][10] = {{000}}; //表示用户号码
static int Ticket_change =1;//记录改签情况
typedef struct Fight Plan{
character Flight Schedule[10];
character Flight Space[10];
character Landing Space[10];
character Flight Duration[10];
character Landing Duration[10];
float Fare Price;
}Plane;
类型说明符User结构体{
char用户ID[10];//用户ID字段
char用户密码[10];//用户密码字段
char票务号[10];//用于记录航班票务号
};
int Wellcome();
char *Log();
void Input(Customer *pArr,int len);
void Estimate(Customer *pArr,int len,Plane *qArr, int len1);
管理员登录功能模块
void fun1(Plane *qArr, int len);
void Add_flight(Plane *qArr, int len); // 添加航班信息
void Delete_flight(Plane *qArr, int len); // 删除航班记录
void Change_flight(Plane *qArr, int len); // 修改航班信息
void Search_flight(Plane *qArr, int len); // 搜索航班记录
//普通用户
void operation2(Customer *pArr, int len, Plane *qArr, int len1);
void FlightInformation(Plane *qArr, int len); //查看航班信息
void TicketBooking(Plane *qArr, int len, Customer *pArr, int len1); //购票
void TicketRefund(Plane *qArr, int len, Customer *pArr, int len1); //退票
void TicketModification(Plane *qArr, int len, Customer *pArr, int len1); //改签
Flight_system.c文件
#include <stdio.h>
#include <"Flight_system.h">
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
int Welcome(){
printf("\t\t\twelcome you to flight management system!(按任意键进行操作)\n");
getchar();
system("clear");
printf("--------------------- 请选择要执行的操作--------------------------------\n\n");
printf("-------------------------- 1 登录---------------------------------------\n\n");
printf("-------------------------- 2 注册---------------------------------------\n\n");
printf("-------------------------- 3 退出---------------------------------------\n\n");
int n;
printf("请输入要执行的操作\n");
scanf("%d",&n);
return n;
}
函数Log的返回地址为:
通过标准输出询问用户输入用户名:
用户输入的用户名将被存储在长度为10的字符数组user_id1中。
用户输入的密码将被存储在字符数组user_psw中。
通过标准输出询问用户输入密码:
用户输入的密码将被存储在字符数组user_psw中。
将用户输入的用户名返回给调用方:
void Login(*User *pUser, int len){
char *x = NULL;
char *y = NULL;
int m =1;
do{
printf("请输入用户名:");
x = scanf("%s", &x);
printf("请输入密码:");
y = scanf("%s", &y);
for (int i = 0; i < len; ++i)
{
if (0 == strncmp(x, pUser[i].User_id, 8))
{
printf("该用户名已被使用!\n");
break;
}
else if (i == len-1)
{
system("clear");
printf("注册成功!\n");
pUser[i].User_id = x;
pUser[i].User_psw = y;
User_num++;
m = 0;
break;
}
}
} while (m);
}
void Estimate(Customer *pArr, int len, Plane *qArr, int len1) {
char *p1 = GetCurrentUser();
int i;
if (p1 == Admin_id) {
ossystem("clear");
printf("您好,管理员\n请输入您的选项!\n");
HandleFlightList(qArr, len1);
} else {
for (i = 0; i < len; ++i) {
if (p1 == pArr[i].User_id) {
if (strlen(qArr[0].Flight_number) == 0) {
ossystem("clear");
printf("顾客您好,当前暂无航班,请联系管理员登录增加航班!\n");
break;
}
ossystem("clear");
printf("顾客您好!请输入您的选项!\n");
HandleUserList(pArr, len, qArr, len1);
} else if (i == (len - 1)) {
ossystem("clear");
printf("没有该用户!请重新输入!\n");
}
}
}
}
void fun1(Plane *qArr, int len){
int m=1;
do{
printf("1.增加航班\n2.删除航班\n3.修改航班\n4.查询航班\n5.退出系统\n6.返回上一层\n");
int temp;
scanf("%d",&temp);
switch(temp){
case 1 :Add_flight(qArr,Plane_num);break;
case 2 :Delete_flight(qArr,Plane_num);break;
case 3 :Change_flight(qArr,Plane_num);break;
case 4 :Search_flight(qArr,Plane_num);break;
case 5 :exit(0);break;
case 6 :m=0;break;
default:printf("输入有误!\n");
}
} while(m);
}
void fun2(Customer *pArr, int len, Plane *qArr, int len1) {
while (true) {
printf("1.查看航班\n2.购票\n3.退票\n4.改签\n5.退出系统\n");
int temp;
scanf("%d", &temp);
switch (temp) {
case 1:执行航班查询操作;break;
case 2:执行购票操作;break;
case 3:执行退票操作;break;
case 4:执行改签操作;break;
case 5:退出系统;break;
default:输出"输入有误!\n";
}
}
函数Add_flight接收一个Plane指针qArr和整数len作为参数。函数体开始,首先请用户输入航班号。接着,为用户分配一个长度为10的字符数组name。初始化变量temp为0。随后,调用scanf函数读取用户输入的字符串到name中。进入循环,从i=0开始,直到i小于len。在循环中,如果name与qArr[i]的Flight_number相同,则将temp设置为1。循环结束后,检查temp的值。如果temp不为0,调用system("clear")函数并输出已有该航班,请重新输入的信息。否则,执行后续操作。此时,将name赋值给qArr[len-1]的Flight_number字段。随后,依次请求用户输入航班起飞地点、落地地点、起飞时间、落地时间和票价,并将这些信息分别存储到对应的字段中。最后,调用system("clear")函数并输出增加成功提示。整个流程结束。
void Search_flight(Plane *qArr, int len) {
printf("1.遍历所有航班\n2.查询单个航班\n");
int m = 0;
do{
int s;
while((scanf("%d", &s)) != 0){
if(s == 1){
system("clear");
printf("航班号\t起飞地点\t落地地点\t起飞时间\t落地时间\t票数\n");
for (int i = 0; i < len; ++i)
{
printf("%s\t%s\t%s\t%s\t%s\n", qArr[i].Flight_number, qArr[i].Fly_space, qArr[i].Fall_space, qArr[i].Fly_time, qArr[i].Fall_time);
}
m = 0; break;
}
else if(s == 2){
system("clear");
Check_flight(qArr, len);
m = 0; break;
}
else{
system("clear");
printf("输入有误!\n");
m = 0; break;
}
}
} while(m == 0);
}
void Check_flight(Plane *qArr, int len) {
printf("请通过输入框输入您要查询的航班号:\n");
char s[10];
int l;
int n;
scanf("%s", s);
for(int l=0; l<len-1; ++l) {
if(strcmp(s, qArr[l].Flight_number)==0) {
n=l;
system("clear");
printf("航班号\t起飞地点\t落地地点\t起飞时间\t落地时间\t票数\n");
printf("%s\t%s\t\t%s\t\t%s\t\t%s\t\t%d\n", qArr[n].Flight_number, qArr[n].Fly_space, qArr[n].Fall_space, qArr[n].Fly_time, qArr[n].Fall_time, Ticket_number[n]);
break;
} else if(l == len-2) {
system("clear");
printf("没有此航班!\n");
}
}
}
函数Delete_flight用于删除航班信息,参数包括一个Plane指针qArr和整数len。请通过键盘输入您希望删除的航班编号:系统将通过标准输入获取航班号字符串,并分配一个长度为10的字符数组name用于存储输入结果。随后系统将遍历航班信息数组qArr,索引从0开始,直到len-1。在遍历过程中,系统将比较输入的航班号name与当前记录的航班号qArr[i].Flight_number,若两者相同,则记录当前索引为n。接着系统将从索引n+1开始再次遍历剩余的航班记录。
qArr[i - 1] = qArr[i];
int i, len;
while(i < len) {
Plane_num减1;
清屏;
打印删除成功提示;
跳出循环;
}
否则,若i等于len减1:
清屏;
输出没有该航班提示;
}
void Change_flight(Plane *qArr, int len) {
printf("请输入需要修改的航班号:");
char name[10];
scanf("%s", name);
int i;
int n;
for (i = 0; i < len; i++) {
if (0 == strcmp(name, qArr[i].Flight_number)) {
n = i;
printf("请输入航班号:");
scanf("%s", qArr[n].Flight_number);
printf("请输入航班起飞地点:");
scanf("%s", qArr[n].Fly_space);
printf("请输入航班落地地点:");
scanf("%s", qArr[n].Fall_space);
printf("请输入航班起飞时间:");
scanf("%s", qArr[n].Fly_time);
printf("请输入航班落地时间:");
scanf("%s", qArr[n].Fall_time);
printf("请输入航班票价:");
scanf("%f", &qArr[n].Fares);
printf("请输入航班票数:");
scanf("%d", &Ticket_number[n]);
system("clear");
printf("修改成功!\n");
break;
}
else if (i == (len - 1)) {
system("clear");
printf("没有该航班!\n");
}
}
}
函数Buy_ticket接收两个参数,分别为Plane类型的指针变量qArr和int类型的len,以及Customer类型的指针变量pArr和int类型的len1
首先,函数会提示用户输入姓名
在每次循环中,比较用户名称与pArr[j]的用户ID
循环结束后,检查m的值
for (i = 0; i < len; ++i)
{
if(0==strcmp(name,qArr[i].Flight_number)){
n = i;
Ticket_number[n]--;
strcpy(pArr[m].serial,qArr[i].Flight_number);
system("clear");
printf("购买成功!\n");
break;
}
else if(i==(len-1)){
system("clear");
printf("没有该航班!\n");
}
}
}
}
void Back_ticket(Plane *qArr, int len,Customer *pArr ,int len1){
请用户输入姓名:
int j;
int i,n,m=-1;
char user_name[10];
请用户输入姓名并存储到user_name变量中:
for循环从j=0开始,直到j < len1为止:
如果用户名称与用户记录中的用户ID完全匹配,则将匹配索引j赋值给m:
如果m的值仍为-1,表示未找到匹配用户:
请用户重新输入!
否则:
请用户输入您要退的航班号:
int i;
char name[10];
请用户输入航班号并存储到name变量中:
for循环从i=0开始,直到i < len为止:
如果航班号与查询记录中的航班号匹配,则将匹配索引i赋值给n,并增加对应订单号计数:
如果未找到匹配航班号,且i等于len-1,则表示该航班号不存在:
请用户重新输入!
退票成功!
}
void UpdateTicket(Plane *qArr, int len1, Customer *pArr, int len) {
if (Ticket_change) {
printf("仅允许一次改签,不允许重复改签。\n");
printf("请键入用户名:");
int j;
int i, n, m = -1;
int mn;
char name[10];
scanf("%s", name);
for (j = 0; j < len1; j++) {
if (0 == strcmp(name, pArr[j].User_id)) {
m = j;
}
}
if (m == -1) {
system("clear");
printf("未找到该用户,请重新输入!\n");
} else {
for (mn = 0; mn < len; mn++) {
if (strcmp(pArr[m].serial, qArr[mn].Flight_number) == 0) {
Ticket_number[mn]++;
break;
}
}
}
}
}
printf("请输入您要改签的航班号:");
char name[10];
scanf("%s",name);
for (i = 0; i < len; ++i)
{
if(0==strcmp(name,qArr[i].Flight_number)){
n = i;
Ticket_number[n]--;
strcpy(pArr[mn-1].serial,qArr[i].Flight_number);
system("clear");
printf("改签成功!\n");
break;
}
else if(i==(len-1)){
system("clear");
printf("没有该航班!\n");
}
}
}
Ticket_change=0;
}
else {
printf("不能重复改签!\n");
}
}
