c语言通过结构体实现班车预约系统

编程需求:很多高校都有多个校区,校区之间有通勤班车,坐班车需要预先预约。本题目的功能是编写一个简单的班车预约系统。包含如下功能:

①师生可以预约班车;

②师生可以查询已经预约的班车信息。

假设有10趟免费班车,用编号1-10表示,不同的编号表示不同的时间。

#include<stdio.h>
#include<windows.h> 
#include<conio.h>
struct bus{
	int num;//编号 
	char time[10];//发车时间
	int number;//承载人数
	int order;//已预约人数 
};
struct person{
	int num;//学号或工号
	int bus_num;//预约的班车信息 
}p[100];
int p_num=0;//乘客人数 
struct bus b[10];
//系统菜单 
void menu()
{
	system("cls");
	printf("\n\n");
	printf("\t\t**********运动会管理系统*********\n");
	printf("\t\t*\t1.预约班车\t\t*\n");
	printf("\t\t*\t2.班车信息查询\t\t*\n");
	printf("\t\t*\t0.退出\t\t\t*\n");
	printf("\t\t*********************************\n");
	printf("\n\n");
	printf("选择(0-2)\n"); 
}
//将班车读出
void readBus()
{
	FILE *fp;
	int i=0;
	if((fp=fopen("bus.txt","r"))==NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	} 
	
	while (!feof(fp))
	{
		if(fscanf(fp,"%d%s%d%d\n",&b[i].num,b[i].time,&b[i].number,&b[i].order)>=0)i++;
		
	}
	fclose(fp);
 } 
 //将班车信息重新写入 
 void writeBus(){
 	FILE *fp;
	int i=0;
	if((fp=fopen("bus.txt","w"))==NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	} 
	for(;i<10;i++)
		fprintf(fp,"%d %s %d %d\n",b[i].num,b[i].time,b[i].number,b[i].order);
	fclose(fp);
 }
//预约班车
void order(int n)
{
	int i,num,flag=0;
	FILE *fp;
	if((fp=fopen("person.txt","a+"))==NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	} 
	for(i=0;i<p_num;i++)
	{
		if(p[i].num==n) //当乘客信息中有此用户时说明已经预约了,因此不可再约 
		{
			printf("对不起,你已预约,不可重复预约噢!!\n"); 
			flag=1;
		}
	}
	if(!flag){
	printf("欢迎你的预约!!\n");
	printf("班车信息如下:\n");
	printf("编号   发车时间    可承载人数   已预约人数\n");
	for(i=0;i<10;i++)
	{
		printf("%-10d%-10s%-20d%-5d\n",b[i].num,b[i].time,b[i].number,b[i].order);
	}
	printf("请输入你要预约的班车编号:");
	scanf("%d",&num);
	while(num<=0||num>10)//当用户输入的班车编号不合法时 
	{
		printf("班车编号不存在请重新输入!!\n");
		printf("请输入你要预约的班车编号:");
		scanf("%d",&num);
	}
	while(b[num-1].order+1>b[num-1].number)//当选择的班车已预约满员时 
	{
		printf("此班车已满坐请重新进行选择!!");
		printf("请输入你要预约的班车编号:");
		scanf("%d",&num);
	 } 
	 b[num-1].order+=1;//增加一个人数
	  writeBus();
	  printf("恭喜你预约成功!!");
	fprintf(fp,"%d %d",n,num);
	}
	fclose(fp);
 } 
//查询预约班车的信息 
void query(int n)
{
	int i,bus_num=0;
	printf("欢迎你来查询!!\n");
	for(i=0;i<p_num;i++)//遍历乘客信息,拿到当前用户的车辆编号 
	{
		if(p[i].num==n)
		{
			bus_num=p[i].bus_num;

		}
	}
	if(bus_num==0)
	{
		printf("系统查询到你暂时并未预约班车哟,请预约后再来查询!!\n");
	}
	else{
		printf("你车辆信息如下:\n");
		printf("编号   发车时间    可承载人数   已预约人数\n");
		printf("%-10d%-10s%-20d%-5d\n",b[bus_num-1].num,b[bus_num-1].time,b[bus_num-1].number,b[bus_num-1].order);
	}
}
//读出乘客信息文件中的内容
void readPerson()
{
	FILE *fp;//打开乘客信息文件
	int i=0;
	if((fp=fopen("person.txt","r"))==NULL)
	{
		printf("文件打开失败\n");
		exit(0);
	} 
	 while (!feof(fp))
	 {
	 	fscanf(fp,"%d %d",&p[i].num,&p[i].bus_num);
	 	i++;
	 	p_num++;
	 }
 } 
int main()
{
	printf("你已进入系统,请输入你的学号/工号:");
	int num;
	scanf("%d",&num);
	menu();//显示菜单 
	int in;
	scanf("%d",&in);
	readPerson();
	readBus();
	while(in)
	{
		switch(in)
		{
			case 1:
			order(num);
			break;
			case 2:
			query(num);
			break;
			default :break;
		}
		getch();
		menu();
		scanf("%d",&in);
	}
 } 

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进阶的菜熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值