C语言飞机订票管理系统v1.0.0

系统基本信息

二月下旬,一个新的原创《飞机订票管理系统》出炉,花费大概三天左右,适合掌握链表、指针的读者们参考学习。本程序运用到结构体的复杂结构,如有不懂之处,欢迎在评论区提问。同样地程序如果有不足的地方,欢迎指出!⛅

函数、变量命名规则:小驼峰

常量命名规则:大驼峰

链表基本介绍:创建含有头结点的链表(数据域为空),添加结点利用的是头插法

难度指数:⭐⭐⭐⭐

理解指数:⭐⭐⭐

进阶指数:⭐⭐⭐⭐

主要知识点:链表指针字符串相关函数、文件操作

基本功能

管理员角色:

1、录入航班信息

2、修改航班信息

3、删除航班(航班没有旅客可删除)

4、查询航班信息(根据航班号)

5、航班信息排序 (根据航班号)

旅客:

1、注册旅客信息

2、订票(可先查询航班信息,再订票)

3、退票(退票后,修改航班相应数据)

4、查询(个人信息及其预定的航班)

另外,程序还添加了文件存储功能(手动存储),可以存储航班信息和用户列表信息。

下次进入程序,可以查看上次保存的航班和用户信息。

程序注意事项

1、管理员账号密码默认为"admin":"123456" ,使用常量定义,可自行修改

2、旅客信息需要自行注册,每次登录时都有三次试错机会,用完机会将返回上一级界面

3、旅客注册信息时,用户名不可重复

4、录入航班信息时,航班号不可重复

5、不可预定同一航班

6、保存信息到文件时,程序会自动创建txt文件,不需要自己创建。

程序运行截图

主界面:

管理员界面:

 旅客界面:

 主体代码

结构体、常量定义:

#define ManagerAccount "admin"  //默认管理员账号 
#define ManagerPassword "123456"  //默认管理员密码 
//起降时间结构体
struct StartAndEndTime{
	int start_hour;
	int start_minute;
	int end_hour;
	int end_minute;
};

//旅客信息结构体 
typedef struct PASSENGER{
	//用户名 
	char userName[20];
	//密码
	char password[30];
	//身份证
	char passcard[30];
	//姓名
	char realName[30]; 
	//账户余额
	double money; 
	//预定航班列表 
	struct AIRPLANCE *airplanceList;
	//指针域 
	struct PASSENGER *next;
}Passenger; 


//航班信息结构体 
typedef struct AIRPLANCE{
	//航班号 
	int flightNumber;
	//起飞城市 
	char startCity[25];
	//降落城市 
	char endCity[25];
	//起降时间 
	struct StartAndEndTime time;
	//票价 
	int price;
	//折扣 
	double discount;
	//总票量 
	int ticketQuantity;
	//剩余票量 
	int remainQuantity;
	//航班乘客人数
	int personNumber; 
	//航班乘客信息,最多容纳40位乘客 
	struct PASSENGER Passenger[40];
	//指针域 
	struct AIRPLANCE *next;
}Airplance;

main函数:

int main(){
	//分别创建航班和旅客链表的头结点 
	Airplance* airplanceHead = (Airplance *) malloc(sizeof(Airplance));
	airplanceHead->next = NULL;
	Passenger* passengerHead = (Passenger *) malloc(sizeof(Passenger));
	passengerHead->next = NULL; 
	//读取文件信息 
	read_file(airplanceHead,passengerHead);
	int choose;
	while(1){
        //进入主菜单
		choose = indexMenu(); 
		switch(choose){
			case 1:
				system("cls");
				managerInteface(choose,airplanceHead);
				break;
			case 2:
				system("cls");
				passengerInteface(choose,airplanceHead,passengerHead);
				break;
			case 3:
				system("cls");
				registerInfo(passengerHead);
				break;
			case 4:
				save_byFile(airplanceHead,passengerHead);
				break;	
			case 0:
				emptyLinkedList(airplanceHead,passengerHead); 
				printf("欢迎下次使用!\n");
				exit(0);
		}
		
	} 
	
}

录入航班信息函数:

/*
	录入航班信息 (管理员)
*/
void insertAirplance(Airplance* airplanceHead){
	char choose = 'Y';
	while(choose == 'Y' || choose == 'y'){
		Airplance *newAirplance = (Airplance *) malloc(sizeof(Airplance));
		printf("航班号:");
		while(1){
			fflush(stdin);
			scanf("%d",&newAirplance->flightNumber);
			if(judgementAirplance(newAirplance->flightNumber,airplanceHead)){
				printf("航班号已经存在,请重新输入:");
			}else{
				break;
			}
		}
		
		printf("起飞城市:");
		fflush(stdin);
		gets(newAirplance->startCity);
		printf("抵达城市:");
		fflush(stdin);
		gets(newAirplance->endCity);
		printf("起飞时间(小时: 0-24)");
		fflush(stdin);
		scanf("%d",&newAirplance->time.start_hour);
		printf("起飞时间(分钟: 0-60)");
		fflush(stdin);
		scanf("%d",&newAirplance->time.start_minute);
		printf("抵达时间(小时: 0-24)");
		fflush(stdin);
		scanf("%d",&newAirplance->time.end_hour);
		printf("抵达时间(分钟: 0-60)");
		fflush(stdin);
		scanf("%d",&newAirplance->time.end_minute);
		printf("航班票价:");
		fflush(stdin);
		scanf("%d",&newAirplance->price);
		printf("票价折扣(0~1):");
		while(1){
			fflush(stdin);
			scanf("%lf",&newAirplance->discount);
			if(newAirplance->discount < 0 || newAirplance->discount > 1){
				printf("折扣输入的数值在0~1之间,重新输入:");
			}else{
				break;
			}
		}
		printf("总票量:");
		fflush(stdin);
		scanf("%d",&newAirplance->ticketQuantity);
		//设置乘客人数为0 
		newAirplance->personNumber = 0;
		//设置机票剩余量 
		newAirplance->remainQuantity = newAirplance->ticketQuantity - newAirplance->personNumber;
		newAirplance->next = airplanceHead->next;
		airplanceHead->next = newAirplance;
		printf("录入成功!是否继续录入?(Y/N): ");
		fflush(stdin);
		scanf("%c",&choose);
	}
}

查看所有航班信息:

/*
	查询所有航班信息 (管理员) 
*/
void findAllAirplance(Airplance* airplanceHead){
	Airplance* p = airplanceHead->next;
	if(p == NULL){
		printf("当前航班信息为空,请添加......\n");
	}else{
		printf("\n\n******************** 所有航班信息 ********************\n");
		while(p){
			printf("\n----------------------------------------------------------\n");
			printf("航班号:%d\n",p->flightNumber);
			printf("起飞城市:%s\n",p->startCity);
			printf("抵达城市:%s\n",p->endCity);
			printf("起飞抵达时间:%d:%d - %d:%d\n",p->time.start_hour,p->time.start_minute,p->time.end_hour,p->time.end_minute);
			printf("航班票价:%d\n",p->price);
			printf("票价折扣:%lf\n",p->discount);
			printf("总票量:%d\n",p->ticketQuantity);
			printf("剩余票量:%d\n",p->remainQuantity);
			printf("\n----------------------------------------------------------\n");
			p = p->next;
		}
	}
	system("pause");
	
}

当然了,大家也看到了标题写了版本是v1.0.0。本人还在改进程序准备写一个新的版本v1.0.1,遇到了一下问题暂时无法解决。在新的版本中,运用到订单结构体(代码如下),但是因为发生了三个结构体互相嵌套,编译无法通过,还在寻找解决办法!如有兴趣,可以一起联系我,一起讨论去实现,在新的博客上给大家发布新的版本!

//订单状态 
struct Order{
	//预定航班
	struct AIRPLANCE airplanceList;
	//付款金额
	double payMoney; 
	//下单时间
	char orderTime[20]; 
	//订单状态
	char orderStatus[10]; 
};

收尾

考虑到本系统的代码量庞大(1000行代码以上),故将版本为v1.0.0的代码集中放在公众号,方便读者获取更多优质源码,公众号回复,"C语言" 即可获取源码链接。

温馨提醒:公众号名片在文章末尾

新的版本v1.0.1还在编写中,一旦完成,会出新的博客跟大家分享。

代码改变世界,技术实现自由,期待你的关注😜

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值