飞机订票系统(C语言版)

目录

飞机订票系统

一、问题描述

二、功能要求

三、算法提示

四、代码说明

五、代码段

六、效果展示 


飞机订票系统

备注:大一(上)C语言课程设计

一、问题描述

假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟,算作一个航班

通过该系统来实现机票的订购问题

二、功能要求

1、本系统采用一个包含M×N个数据的结构体数组

每个数据的结构应当包括:航班号、起飞地、目的地、座次号、座次订出与否标记、订座者的姓名和订座者的身份证号码

2、本系统显示这样的菜单:

(1)输入航班信息

(2)输出航班信息

(3)查找航班信息(按线路查询)

(4)订票预约

(5)退订

(6)退出系统

注:本系统成功执行菜单的每个功能,选项(4)和(5)将要求额外的输入

查找航班信息(按线路查)要输入查询航班的起飞地、目的地,查询结果显示空座的信息、数量、已订座的信息等

3、执行一个具体的功能之后,程序将重新显示菜单

建议相关数据信息最好用文本文件保存,从文本文件读取数据初始化,更新处理后的数据保存到文本文件中

三、算法提示

                  数据结构:结构体类型数组 

航班号

起飞地

目的地

座次号

座次订出与否的标记

订票者姓名

订票者身份证号码

char [  ]

char [  ]

char [  ]

int

char / int

char [  ]

char [  ]

四、代码说明

1、代码运行环境如下:

2、定义的各类数据切勿超出以下结构体的定义中指定的长度: 

struct flight // 航班 
      {
      	char fliname[10];  // 航班号 
      	char sp[36];       // 起飞地点 
      	char de[36];       // 目的地 
      	int  num1;         // 座位数
		int  num2;         // 已订出票数
      };
struct book // 预定 
      {
	    char fliname[10];  // 航班号 
      	char na[50];       // 姓名 
      	char id[19];       // 身份证号(至多18位数) 
      	char ph[30];       // 手机号 
      	int  st;           // 状态(1表示已经预约,0则表示已经退订) 
	  };

3、应将文件flightfile.txt、文件bookfile.txt和源代码文件放在同一目录下;

初始状态下,文件flightfile.txt和文件bookfile.txt可以为空;

运行程序后,可以通过输入航班信息功能向文件flightfile.txt中添加数据,可以通过订票预约功能向文件bookfile.txt中添加数据

4、文件flightfile.txt和文件bookfile.txt应采用ANSI编码,防止控制台输出乱码

五、代码段

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 9999


struct flight // 航班 
      {
      	char fliname[10];  // 航班号 
      	char sp[36];       // 起飞地点 
      	char de[36];       // 目的地 
      	int  num1;         // 座位数
		int  num2;         // 已订出票数
      };
struct book // 预定 
      {
	    char fliname[10];  // 航班号 
      	char na[50];       // 姓名 
      	char id[19];       // 身份证号(至多18位数) 
      	char ph[30];       // 手机号 
      	int  st;           // 状态(1表示已经预约,0则表示已经退订) 
	  };


FILE * fp1;
FILE * fp2; 
int count1 = 0;
int count2 = 0;
struct flight A[M];
struct book   B[M];


void init() // 初始化 
{
	fp1 = fopen("flightfile.txt", "r");
    if(fp1 == NULL)
        printf("can't open the flightfile! \n");
    else
	{
	  // 将文件指针移动到文件开头
	  fseek(fp1, 0, SEEK_SET);
	  
	  // 从文件flightfile.txt中格式化读取数据
	  while(fscanf(fp1, "%s %s %s %d %d", A[count1].fliname, A[count1].sp, A[count1].de, &A[count1].num1, &A[count1].num2) == 5) count1 ++ ;
	}
	fclose(fp1);
	
	fp2= fopen("bookfile.txt", "r");
	if(fp2 == NULL)
        printf("can't open the bookfile! \n");
    else
	{
	  // 将文件指针移动到文件开头
	  fseek(fp2, 0, SEEK_SET); 
	  
	  // 从文件bookfile.txt中格式化读取数据
	  while(fscanf(fp2, "%s %s %s %s %d", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph, &B[count2].st) == 5) count2 ++ ;
	}
	fclose(fp2);
}


void menu() // 菜单 
{
	printf("请输入你的选择:\n");
	printf("1.输入航班信息\n");
	printf("2.输出航班信息\n");
	printf("3.查找航班信息\n");
	printf("4.订票预约\n");
	printf("5.退订\n");
	printf("6.订票信息查询\n");
	printf("7.退出系统\n\n");
}


void save1() // 保存1(向flightfile.txt中保存) 
{
	int i;
	
    fp1 = fopen("flightfile.txt", "w+");
    
    fseek(fp1, 0, SEEK_SET); // 将文件指针移动到文件开头
	for(i=0; i<count1; i++) // 将数据格式化输出到文件flightfile.txt中
		fprintf(fp1, "%s %s %s %d %d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1, A[i].num2); 
		
	fclose(fp1);
}


void save2() // 保存2(向bookfile.txt中保存) 
{
	int i;
	
    fp2 = fopen("bookfile.txt", "w+");
    
    fseek(fp2, 0, SEEK_SET); // 将文件指针移动到文件开头
	for(i=0; i<count2; i++) // 将数据格式化输出到文件bookfile.txt中
		fprintf(fp2, "%s %s %s %s %d\n", B[i].fliname, B[i].na, B[i].id, B[i].ph, B[i].st); 
		
	fclose(fp2);
}


void input() // 输入航班信息
{
	int i,flag=1;
	
	printf("请输入航班号:");
    scanf("%s", A[count1].fliname);
    
    for(i=0; i<count1; i++) // 判定航班号是否已经存在! 
	    if(strcmp(A[count1].fliname, A[i].fliname) == 0)
	        {
	        	printf("该航班号已存在,请重新选择输入航班信息并输入!\n\n");
	          	flag = 0;
	          	break;
		    }
		    
    if(flag == 1)
      {
    	printf("起飞地点:");
		scanf("%s", A[count1].sp);
		printf("目的地:");
		scanf("%s", A[count1].de);
		printf("座位数:");
		scanf("%d", &A[count1].num1);
		printf("已订出票数:");
		scanf("%d", &A[count1].num2);
		
		printf("\n");
		
		count1 ++ ;
		save1();
	  }
}


void show() // 输出航班信息
{
	int i;
	
	printf("航班号\t起飞地点\t目的地\t剩余座位数\n");
	for(i=0; i<count1; i++)                                                                   
	   {
 	      printf("%s\t%s        \t%s  \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
 	   }
 	   
 	printf("\n");
}


void find() // 查找航班信息(按线路查询)
{
	int i, num=0, flag=1;
	char sp[36];
	char de[36];
	
	printf("请输入起飞地点:");
	scanf("%s", sp);
	printf("请输入目的地:"); 
	scanf("%s", de);
	
	printf("航班号\t起飞地点\t目的地\t剩余座位数\n");
	for(i=0; i<count1; i++)
	   {
	   	  if(strcmp(sp, A[i].sp)==0 && strcmp(de, A[i].de)==0) // 按照用户输入的起飞地点和目的地到结构体flight数组A中查找相应的航班 
	         {
	       	   printf("%s\t%s        \t%s  \t%d\n", A[i].fliname, A[i].sp, A[i].de, A[i].num1-A[i].num2);
	       	   num ++ ;
			   flag = 0;
		     }
	   }  
	   
    if(flag == 1)
	   {
	   	 printf("无       %s            %s      0\n", sp, de); 
	   }	 
	    
	printf("本次共计为您查询到%d次航班!\n\n", num);
}


void booking() // 订票预约
{
	    int i, flag = 0;
	    
	    printf("请输入航班号:");
	    scanf("%s", B[count2].fliname);
	    
	    for(i=0; i<count1; i++)
	       if( strcmp(B[count2].fliname, A[i].fliname)==0 && A[i].num1-A[i].num2>0 )
	          {
	          	flag = 1;
	          	break;
			  }
	         
	    if(flag == 1) 
		  { 
		    int j = -1;
		    
			printf("姓名:");
			scanf("%s", B[count2].na);
			printf("身份证号:");
			scanf("%s", B[count2].id);
			printf("手机号:");
			scanf("%s", B[count2].ph);
			printf("请您确认输入的信息:\n航班号:%s\n姓名:%s\n身份证号:%s\n手机号:%s\n", B[count2].fliname, B[count2].na, B[count2].id, B[count2].ph);
			printf("输入数字1确认预约该航班,输入数字2重新选择订票预约:");
			scanf("%d", &j); 
		
			if(j == 1)
			   {
			   	  B[count2].st=1;
			   	  count2 ++ ;
	   	          A[i].num2 ++ ; // 预约成功后相应的航班的已订出票数++
	   	          save2();
	   	          save1();
	   	          printf("您已成功预约航班号为%s从%s出发到达%s的航班!祝您旅途愉快!\n\n", B[count2-1].fliname, A[i].sp,A[i].de);
			   }
			   	 
		    else
		       printf("请您重新选择订票预约!\n\n");
	      }  
	      
		else
		    printf("该航班不存在或是该航班已无可预约座位,请重新选择订票预约并输入存在的航班号!\n\n");
}


void unsubscribe() // 退订
{
	    int i, flag=0;
	    char fliname[10];  // 航班号 
      	char na[50];       // 姓名 
      	char id[19];       // 身份证号 
      	char ph[30];       // 手机号 
      	int  st;           // 状态(1表示已经预约,0则表示已经退订) 
      	
	    printf("请输入航班号:");
	    scanf("%s", fliname);
		printf("姓名:");
		scanf("%s", na);
		printf("身份证号:");
		scanf("%s", id);
		printf("手机号:");
		scanf("%s", ph);
		
		for(i=0; i<count2; i++)
	       if(  strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0  )
	          {
	          	flag = B[i].st;
	          	break;
			  }
		
		if(flag == 1)
		  {
		  	printf("请输入数字0确认退订该航班:");
			scanf("%d", &B[i].st); 
			while(B[i].st != 0)
			     {
			       printf("请输入数字0确认退订该航班:");
			       scanf("%d",&B[i].st); 
				 }
			save2();	 
				 
	   	    for(i=0; i<count1; i++)
	   	       if(strcmp(fliname, A[i].fliname) == 0)
	   	          break;
	   	    A[i].num2 -- ; // 退订成功后相应的航班的已订出票数--
	   	    save1();
	   	    
	   	    printf("您已成功退订航班号为%s从%s出发到达%s的航班!\n\n", fliname,A[i].sp, A[i].de);
	      }
	      
		else
		    printf("该航班未被您预约,请重新选择退订并输入您已预约的航班号!\n\n");
}


void information() // 订票信息查询
{
	int i,j,flag = 1;
	char fliname[10];  // 航班号 
    char na[50];       // 姓名 
    char id[19];       // 身份证号 
    char ph[30];       // 手机号 
    
    printf("航班号:"); 
    scanf("%s", fliname);
	printf("姓名:");
	scanf("%s", na);
	printf("身份证号:");
	scanf("%s", id);
	printf("手机号:");
	scanf("%s", ph);
	
	for(i=0; i<count2; i++)
	   if(strcmp(fliname, B[i].fliname)==0 && strcmp(na, B[i].na)==0 && strcmp(id, B[i].id)==0 && strcmp(ph, B[i].ph)==0 && B[i].st==1)
	    {
	      flag = 0;
	   	  for(j=0; j<count1; j++)
	        if(strcmp(fliname, A[j].fliname)==0)
		      {
		      	printf("订票信息查询成功,信息如下:\n");
		      	printf("航班号\t起飞地点\t目的地\n");
		      	printf("%s\t%s\t        %s\n\n", A[j].fliname, A[j].sp, A[j].de);
		      	break;
			  }
		  break;
	    }
	
	if(flag) printf("未查询到您的航班,请重新输入信息查询!\n\n"); 
}


int main()
{
	init(); // 初始化
	
	int choice;
	
	while(1)
	{ 
		menu(); // 菜单
		
		scanf("%d", &choice);
		
		switch(choice)
		{
			case 1: input(); break;                    // 输入航班信息
			case 2: show(); break;                     // 输出航班信息
			case 3: find(); break;                     // 查找航班信息
			case 4: booking(); break;                  // 订票预约
			case 5: unsubscribe(); break;              // 退订
			case 6: information(); break;              // 订票信息查询 
			case 7: exit(0); break;                    // 退出系统
		}
	}
	
	return 0;
}

六、效果展示 

  • 21
    点赞
  • 203
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
飞机订票系统是一个比较大的系统,需要设计多个模块,包括用户登录、航班查询、订票系统、订单管理、支付系统等等。 以下是一个简单的飞机订票系统C语言代码示例,供参考: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> //定义航班结构体 typedef struct { char number[20]; //航班号 char start[20]; //起点 char dest[20]; //终点 char time[20]; //起飞时间 int price; //价格 int remain; //余票数 } Flight; //定义用户结构体 typedef struct { char name[20]; //姓名 char id[20]; //身份证号 char phone[20]; //手机号 Flight flight; //所选航班 } User; //定义全局变量 Flight flights[10]; //航班列表 int count = 0; //航班数量 //初始化航班列表 void initFlights() { Flight f1 = {"CA123", "北京", "上海", "08:00", 1000, 50}; Flight f2 = {"MU456", "上海", "广州", "10:00", 800, 80}; Flight f3 = {"CZ789", "北京", "广州", "12:00", 1200, 30}; flights[0] = f1; flights[1] = f2; flights[2] = f3; count = 3; } //显示航班列表 void showFlights() { printf("航班号\t起点\t终点\t起飞时间\t价格\t余票数\n"); for(int i = 0; i < count; i++) { Flight f = flights[i]; printf("%s\t%s\t%s\t%s\t%d\t%d\n", f.number, f.start, f.dest, f.time, f.price, f.remain); } } //根据航班号查询航班 Flight findFlight(char number[]) { for(int i = 0; i < count; i++) { if(strcmp(flights[i].number, number) == 0) { return flights[i]; } } Flight f = {"", "", "", "", 0, 0}; return f; } //订票 void bookTicket() { char number[20]; printf("请输入航班号:"); scanf("%s", number); Flight f = findFlight(number); if(strcmp(f.number, "") == 0) { printf("没有找到该航班,请重新输入!\n"); return; } printf("请选择座位数(余票:%d):", f.remain); int num; scanf("%d", &num); if(num > f.remain) { printf("余票不足,请重新选择!\n"); return; } User u; printf("请输入姓名:"); scanf("%s", u.name); printf("请输入身份证号:"); scanf("%s", u.id); printf("请输入手机号:"); scanf("%s", u.phone); u.flight = f; flights[count-1].remain -= num; printf("订票成功!\n"); printf("航班号:%s,起点:%s,终点:%s,起飞时间:%s,价格:%d,座位数:%d\n", f.number, f.start, f.dest, f.time, f.price, num); printf("姓名:%s,身份证号:%s,手机号:%s\n", u.name, u.id, u.phone); } //订单查询 void showOrders() { char id[20]; printf("请输入身份证号:"); scanf("%s", id); printf("航班号\t起点\t终点\t起飞时间\t价格\t订票数\t姓名\t身份证号\t手机号\n"); for(int i = 0; i < count; i++) { Flight f = flights[i]; if(strcmp(f.number, "") != 0) { User u = f.user; if(strcmp(u.id, id) == 0) { printf("%s\t%s\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n", f.number, f.start, f.dest, f.time, f.price, u.num, u.name, u.id, u.phone); } } } } int main() { initFlights(); while(1) { printf("\n1.航班查询 2.订票 3.订单查询 4.退出\n"); int choice; scanf("%d", &choice); switch(choice) { case 1: showFlights(); break; case 2: bookTicket(); break; case 3: showOrders(); break; case 4: exit(0); default: printf("请选择正确的菜单项!\n"); } } return 0; } ``` 注意:这只是一个简单的示例代码,并没有实现完整的飞机订票系统,还需要根据实际需求进行完善和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值