逆向做出来的

链接:https://pan.baidu.com/s/1dGYHv9cp9rNK9_CWmNtRIA
提取码:g4a1
复制这段内容后打开百度网盘手机App,操作更方便哦

main函数里面

/************************************************
*                这是电话本管理程序的主程序文件。
* 
*
************************************************/

#include  <stdio.h>
#include <Windows.h>
#include "flight.h"       

//显示程序信息
void displaymenu( );

void main()
{
	int  option = 0;	

	//从文件中读出数据并插入链表中
	ReadDataFromFile("flight.dat");

	do
	{
		//提示用户选择操作
		displaymenu();
		
		scanf("%d", &option);
        getchar();

		//根据用户选择调用相关函数完成指定的操作
		switch(option )
		{
		//打印所有记录信息
		case 1:   
			displayall();
			break;
			
		//查询航班
		case 2:
			search();
	   		break;
        
		//预定航班
		case 3:
			bookticket();
			break;
	
		default: 			
			break;
		}
	}while(option != 0 );	
	

}

//显示程序信息
void displaymenu( )
{
	system("CLS");
	puts(" ");
	puts("********************************************************************" );
	puts("                     欢迎使用非常小航班系统V1.0" );
	puts("********************************************************************\n" );
	puts(" ");
	puts("请选择操作:\n" );
	puts("0:退出系统\n" );
	puts("1:显示所有航班信息\n") ;
	puts("2:查询航班信息\n") ;	
	puts("3:购票\n" );
//	system("pause");
}

flight.h

#ifndef _FLIGHT_H_
#define _FLIGHT_H_

typedef  struct 
{	 
	char  cityfrom;      //出发城市
	char  cityto;      //到达城市
	int   depttime;      //出发时间24小时制
	int   flttime;     //飞行时长不超过12小时
	int   tcktnum;        //剩余票额
	int   price;		//价格
	int   fltno;     //航班编号

}FLIGHT;

//用于显示所有航班信息
void displayall();
//用于显示单条航班信息
void displaysingle(int n);
//用于根据出发城市和到达城市查询有哪些航班
void search();
//输入航班号,预定机票
int bookticket();
//排序,按出发城市字母从小到大排序,若出发城市字母相等则按到达城市字母从小到大排序,
//若出发和到达城市均相等则按航班出发时刻由小到大排序,其余忽略
void bubblesortflight() ;
//从文件中读出航班数据
int  ReadDataFromFile( const char *filename );

#endif

flight.c

#include  <stdio.h>
#include  <Windows.h>
#include <time.h>
#include <stdlib.h>
#include "flight.h"

#define SIZE 50


int g_num = 0; //全局变量,数组里的有效名片数
FLIGHT  flightary[SIZE] ;//全局变量,名片数组

/*对从文件里读出的所有航班信息做特殊排序后进行显示*/
/*
输入: 无 使用全局数组flightary
返回:无
本函数是否需要修改:否
 */ 
void displayall()
{
	int i;
	//调用排序函数做特殊排序
	bubblesortflight() ;
	
	puts("No  航班号  出发城市   到达城市   离港时间   到达时间\t\t余票额   单价\n");
	for(i=0;i<g_num;i++)//遍历所有元素
	{
		displaysingle(i);//调用单条记录显示函数
	}
	system("pause");
}


/*显示某一条航班信息*/
/*
输入: n,表示是结构体数组中的第几条信息(即下标)
返回:无
本函数是否需要修改:否
 */ 
void displaysingle(int n)
{
	int temphour=0;
	printf("%2d   %2d  \t%c\t  %c\t  %2d\t\t",n,flightary[n].fltno,flightary[n].cityfrom,flightary[n].cityto,flightary[n].depttime);
	temphour=flightary[n].depttime+flightary[n].flttime;
	if(temphour>24)
		printf("%2d+1day\t\t",temphour%24);
	else
		printf("%2d\t\t",temphour);

	printf("%2d\t   %2d\n",flightary[n].tcktnum,flightary[n].price);
}

/*完成航班信息的特殊排序*/
/*
排序要求说明:按出发城市字母从小到大排序,若出发城市字母相等则进一步按到达城市字母从小到大排序,
若出发和到达城市都相等则进一步按航班出发时刻由小到大排序,航班出发时刻相等情况不再进行特殊处理
不限制使用哪种排序算法,但不得使用库函数进行排序
如不能理解以上说明请观察题目输出,或询问监考老师
输入: 无,使用全局数组flightary
返回: 无
本函数需要自行编写,并在displayall开始执行处被调用,调用指令已经写好
 */ 
 void bubblesortflight() 
  {
//请写入你的代码
	int i,j;
	FLIGHT temp;
	int k=0;
	int flag;
	for(i=0;i<g_num-1;i++)
	{
		flag = 0;
		for(j=0;j<g_num-i-1;j++)
		{
			if(flightary[j].cityfrom>flightary[j+1].cityfrom)
			{
				temp = flightary[j];
				flightary[j]=flightary[j+1];
				flightary[j+1]=temp;
				
			}else if(flightary[j].cityto>flightary[j+1].cityto)
			{
				temp = flightary[j] ;
				flightary[j]=flightary[j+1];
				flightary[j+1]=temp;
				k++;
			}else if(flightary[j].depttime>flightary[j+1].depttime)
			{
				temp = flightary[j];
				flightary[j]=flightary[j+1];
				flightary[j+1]=temp;
				k++;
			}
			if (flag == 0)  break;
		}
	} 

  }

/*用于根据出发城市和到达城市查询有哪些航班*/
/*
要求用户输入出发城市字母和到达城市字母,然后将满足条件航班信息全部输出,此处不需要考虑排序,仅依据对数组的搜索顺序进行结果显示,不考虑票额是否为0
显示格式:	puts("No  航班号  出发城市   到达城市   离港时间   到达时间\t\t余票额   单价\n"); 
输入: 无,使用全局数组flightary
返回: 无
本函数需要自行编写,注意防错设计
 */ 
void search()
{
//请填入你的代码
	char start;
	char go;
	int i,j;
	j=0;
	do
	{
		puts("请输入出发城市<C for Chendu  B for Beijing  X for Xian>: ");
		scanf("%c", &start);
		getchar();
	}
	while ( start != 'C' && start != 'B' && start != 'X' );
	do
	{
		puts("请输入到达城市<C for Chendu  B for Beijing  X for Xian>: ");
		scanf("%c", &go);
		getchar();
	}
	while ( go != 'C' && go != 'B' && go != 'X' );
	putchar('\n');
	puts("No  航班号  出发城市   到达城市   离港时间   到达时间\t\t余票额   单价\n"); 
	for(i=0;i<g_num;i++)
	{
		if(flightary[i].cityfrom==start&&flightary[i].cityto==go)
		{
			displaysingle(i);
		}
	}
	system("pause");
}


/*预定机票*/
/*
要求用户输入航班的2位编号(注意不是NO)显示该航班的余票数
并且要求用户输入所需购票数目,
如果购票数大于余票,则显示“购票数大于余票,购票失败”
如果购票数小于等于余票,随后输出购票数,从起飞城市到到达城市,起飞时间和应付的购票总金额
如果未查询到航班号,输出未找到航班号,返回-1 
输入: 无,使用全局数组flightary
返回: 整型:成功返回购票数;失败返回-1
本函数需要自行编写,注意防错设计
 */ 
int bookticket()
{
	//请填写代码
	int num;
	int buy;
	int result;
	int i,j;
	do
	{
		do
		{
			printf("请输入航班编号: ");
			scanf("%d", &num);
		}while ( num <= 9 );

	}while ( num > 99 );

	for ( i = 0; ; ++i )
	{
		if ( i >= g_num )
		{
			puts("未找到航班号!");
			system("pause");
			return -1;
		}
		if ( flightary[i].fltno == num &&  flightary[i].tcktnum>0)
			break;
	}
	printf("目前余票%d,请输入购票数<x x>:",flightary[i].tcktnum);
	scanf("%d", &buy);
	if(buy<=flightary[i].tcktnum)
	{
		printf("您已成功购票%d张:%c到%c,起飞时间%d,应付总金额%d\n",buy,flightary[i].cityfrom,flightary[i].cityto,flightary[i].depttime,flightary[i].price*buy);
		flightary[i].tcktnum -= buy;
		system("pause");
		result = buy;
	}else
	{
		puts("购票数目大于余额,本次购票失败");
		system("pause");
		result = -1;
	}
	return result;
}

/*从文件中读取航班信息*/
/*
以结构体元素为单位从指定文件读取航班信息
输入: 数据文件名,该文件已经和代码放置在一起
返回: 整型:成功返回1;失败返回0
本函数仅需要补充一行代码,请完成while中的表达式
 */ 
int  ReadDataFromFile( const char *filename )
{
	FILE   *pfile;         //文件指针
	//清空数组
	memset(flightary,0,sizeof(FLIGHT)*SIZE);
	g_num=0;

	//打开保存信息的数据文件
	pfile = fopen(filename, "rb" );
	if(pfile == NULL)
	{
		printf("文件打开失败!\n" );
		return 0;
	}

	// 从文件中读取一个成员的信息,放到数组尾部
	//请完成while中的表达式
	while((fread(flightary+g_num,sizeof(FLIGHT),1,pfile))==1)
	{
		g_num++;  
		if(g_num >= SIZE)
		{
			printf("Reach max storage capability! Stop reading from file!\n");
			break;
		}
	}

	fclose(pfile );	
	return 1;

}
发布了21 篇原创文章 · 获赞 31 · 访问量 2500

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/103606748