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

这篇具有很好参考价值的文章主要介绍了飞机订票系统(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、代码运行环境如下:

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

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编码,防止控制台输出乱码

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

五、代码段

#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;
}

六、效果展示 

飞机订票系统(C语言版)文章来源地址https://www.toymoban.com/news/detail-503745.html

到了这里,关于飞机订票系统(C语言版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言课设--航班订票系统

    大一的C语言课设,极简航班订票系统,希望能够对大家有所帮助 源码 + 文件 : 航班订票系统.zip 0.文件结构 首先需要在代码文件同级文件夹下创建一个flight文件夹,然后在flight文件夹下创建flight.dat和order.dat文件分别用于保存航班信息和订票信息 文件结构1 文件结构2 1.代码

    2024年02月03日
    浏览(24)
  • 用C语言实现高铁客运订票系统

    目录 一、设计目的 二、设计内容与要求 三、自己做的具体项目实现的功能: 四、设计思路 五、实现过程 六、代码: 七、实验报告和ppt: 八、结果展示: 九、我的文档数据: 1. 通过对高铁客运订票系统的程序设计,巩固在数据结构中学习的算法知识,提高对程序的整体设

    2024年02月09日
    浏览(29)
  • 数据结构课程设计之火车票订票系统实现(C语言/C++版本)

    课题描述 编制一个程序,火车票订票的业务活动包括:车次查询、订票、退票、用户管理等。 需求分析 用户信息包括用户姓名、身份证号、用户电话、用户所购列车号、订单号;列车信息包括:列车车站号、车票起点、车票终点、出发时间、到达时间、票价、票数等基本信

    2024年01月19日
    浏览(37)
  • 民航票务管理系统-C语言--录入,查询,订票,退票,修改航班信息以及主菜单和子菜单。

    我的课程设计题目为民航票务管理系统,其目的是为了便利人们购买飞机票的过程为广大人民群众提供便利,本系统主要为订票者提供订票服务以及相关的信息服务。同时增加了我对于程序设计的理解以及对于 C 语言的熟练度。 录入:可以录入已知航班情况; 查询:可以查

    2024年02月12日
    浏览(29)
  • C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)

    相信很多粉丝看过看过我的主页,有一个航空订票系统: 数据结构航空订票系统(附源码) 但是最近后台收到很多粉丝的要求,在上一个航空订票系统中要加上管理员的功能块,于是对上面那个课设进行了改进,新的功能流程如下: (航班信息由管理员添加和删除、顾客可

    2024年02月03日
    浏览(35)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月07日
    浏览(39)
  • 数据结构 C语言 树形结构 简单目录管理系统

    在图书、操作系统文件夹、学生等管理系统中,目录管理是必要环节,如何高效搜寻与低复杂度存储是实现这一环节的关键性问题。本课程设计需完成一种基于多叉树结构简单目录管理系统,该系统能以交互式界面进行创建目录、删除目录、查找目录、修改目录、层次遍历目

    2024年02月04日
    浏览(36)
  • 【c语言】飞机大战(1)

    提前准备好游戏要的素材,可以到爱给网去找,飞机大战我们需要的是一个我方战机图片,一个背景图,三个敌方战机的图,我方战机的图片,敌方战机的图片,并且将图片和.cpp放在同一文件夹下. 这里创建.cpp的文件是因为要用到图形库,所以创建.cpp的文件,然后图片格式

    2024年02月04日
    浏览(24)
  • 【c语言】飞机大战终

    效果演示

    2024年02月03日
    浏览(25)
  • C语言/C++ 之 打飞机游戏

    【项目简介】 1、设计思想:本项目主要是为了实现打飞机游戏,主要包括5个函数模块,和1个主函数框架。分别是chu_shi_hua();、you_cao_zuo;、wu_cao_zuo();、show();、main();等。项目完成过程中主要运用了C/C++中的输入输出流、调用函数、for循环函数、“清屏”函数、随机函数、以

    2024年02月10日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包