C语言实现航班管理系统

所属分类: 软件编程 / C 语言 阅读数: 111
收藏 0 赞 0 分享

本文实例为大家分享了C语言实现航班管理系统的具体代码,供大家参考,具体内容如下

/*.航班管理系统
主界面以菜单的形式展现,用户可以按不同的键执行不同的操作,即调用不同的函数;
    ......
 用不同的函数实现,除以下模块,还可设计其他功能模块:
1)输入记录:输入录入航班信息,包括:航班号,起降时间,起飞抵达城市,航班票价,票价折扣,航班是否满仓等;
2)输出记录:输出信息;
3)查询记录:可根据航班号查找记录;
4)删除记录:指定航班号删除该条记录;
5)插入记录:在指定位置插入新的记录。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 50
 
int menu();
int input(struct );
void print(struct );
void search(struct flight_info info[],int n);
int find_id(struct flight_info info[],int n,char *p);
int del(struct,int n);
int add(struct ,int n);
//菜单
int menu(){
int i=1,choie;
// struct flight_info *info;
printf("******************航班管理系统*********************\n");
printf("\t\t%d.输入航班信息\n",i++);
printf("\t\t%d.输出航班信息\n",i++);
printf("\t\t%d.查询记录\n",i++);
printf("\t\t%d.删除记录\n",i++);
printf("\t\t%d.插入记录\n",i++);
printf("\t\t%d.退出系统\n",i++);
printf("****************************************************\n");
do{
printf("请输入你所选功能(1~6):");
scanf("%d",&choie);
 
}while(choie<0||choie>6);
return choie;
} 
//输入航班信息
//航班号,起降时间,起飞抵达城市,航班票价,票价折扣,航班是否满仓
 
struct time{
int hour;
int minute;
};
 
 
struct flight_info{
char id[20]; //航班号
time takeoff; //起飞时间
time landing; //降落时间
char city[20]; //起降城市
float money; //航班票价
float discount;//票价折扣
char full[3];//航班是否满仓
};
int input(struct flight_info info[]){
int count;
system("cls");
printf("\n请输入航班记录条数: ");
scanf("%d",&count);
for(int i=0;i<count;i++){
 printf("\n记录号:%d\n",i+1);
 for(int j=0;j<20;j++){printf("-");}
printf("\n航班号: ");scanf("%s",info[i].id);
printf("起飞时间(x时x分)");scanf("%d%d",&info[i].takeoff.hour,&info[i].takeoff.minute);
printf("降落时间(x时x分)");scanf("%d%d",&info[i].landing.hour,&info[i].landing.minute);
printf("起降城市");scanf("%s",info[i].city);
printf("航班票价");scanf("%f",&info[i].money);
printf("票价折扣");scanf("%f",&info[i].discount);
printf("是否满仓");scanf("%s",info[i].full);
}
return count;
}
//输出航班信息 
void print(struct flight_info info[],int n){
int i;
system("cls");
printf("\n******************航班信息*********************\n");
printf("航班号 起降时间 起降城市 票价 折扣 是否满仓\n");
printf("------------------------------------------------------------------\n");
for(i=0;i<n;i++){
printf("%s\t%d:%d-%d:%d %s\t %.2f\t%.2f\t%s\n",info[i].id,info[i].takeoff.hour,info[i].takeoff.minute,info[i].landing.hour,info[i].landing.minute,info[i].city,info[i].money,info[i].discount,info[i].full);
printf("------------------------------------------------------------------\n");
 
}
 
}
//查询记录
void search(struct flight_info info[],int n){
 char s[20];
 int i;
 system("cls");
printf("请输入查找航班号:\n");
scanf("%s",s);
getchar();
i=find_id(info,n,s);
if(i>n-1)
printf("没有航班号为%s的航班!\n",s);
else {
system("cls");
printf("\n******************航班信息*********************\n");
printf("航班号 起降时间 起降城市 票价 折扣 是否满仓\n");
printf("------------------------------------------------------------------\n");
printf("%s\t%d:%d-%d:%d\t%s\t%.2f\t%.2f\t%s\n",info[i].id,info[i].takeoff.hour,info[i].takeoff.minute,info[i].landing.hour,info[i].landing.minute,info[i].city,info[i].money,info[i].discount,info[i].full);
printf("------------------------------------------------------------------\n");
 
}
 
}
//删除记录
int del(struct flight_info info[],int n){
char s[20];
int ch=0;
int i;
printf("请输入要删除的航班号:\n");
scanf("%s",s);
getchar();
i=find_id(info,n,s);
if(i>n-1)
printf("没有航班号为%s的航班!\n",s);
else {
printf("正在删除中!\n");
for(;i<n;i++){  //从删除位置开始依次前移航班记录
strcpy(info[i].id,info[i+1].id);
info[i].takeoff.hour=info[i+1].takeoff.hour;
info[i].takeoff.minute=info[i+1].takeoff.minute;
info[i].landing.hour=info[i+1].landing.hour;
info[i].landing.minute=info[i+1].landing.minute;
strcpy(info[i].city,info[i+1].city);
info[i].money=info[i+1].money;
info[i].discount=info[i+1].discount;
strcpy(info[i].full,info[i+1].full);
}
n--; //删除后记录数减1
printf("删除成功!\n");
}
 
return n; 
}
//插入记录
int add(struct flight_info info[],int n){
struct flight_info temp; //新插入记录信息
int i,j;
char s[20];
printf("请输入要插入的航班记录:\n");
printf("**************************************************");
printf("\n航班号: ");scanf("%s",temp.id);
printf("起飞时间(x时x分)");scanf("%d%d",&temp.takeoff.hour,&temp.takeoff.minute);
printf("降落时间(x时x分)");scanf("%d%d",&temp.landing.hour,&temp.landing.minute);
printf("起降城市");scanf("%s",temp.city);
printf("航班票价");scanf("%f",&temp.money);
printf("票价折扣");scanf("%f",&temp.discount);
printf("是否满仓");scanf("%s",temp.full);
  
 
  //输入插入信息 
getchar();
printf("------------------------------------------\n");
if(n>0){
printf("请输入插入位置的航班号,将新纪录插入在该航班号前:\n");
scanf("%s",s); //输入插入位置的姓名
getchar();
 i=find_id(info,n,s); //确定插入位置
}
else 
i=0;
for(j=n-1;j>=i;j--){
strcpy(info[j+1].id,info[j].id);
info[j+1].takeoff.hour=info[j].takeoff.hour;
info[j+1].takeoff.minute=info[j].takeoff.minute;
info[j+1].landing.hour=info[j].landing.hour;
info[j+1].landing.minute=info[j].landing.minute;
strcpy(info[j+1].city,info[j].city);
info[j+1].money=info[j].money;
info[j+1].discount=info[j].discount;
strcpy(info[j+1].full,info[j].full);
}
strcpy(info[i].id,temp.id);
info[i].takeoff.hour=temp.takeoff.hour;
info[i].takeoff.minute=temp.takeoff.minute;
info[i].landing.hour=temp.landing.hour;
info[i].landing.minute=temp.landing.minute;
strcpy(info[i].city,temp.city);
info[i].money=temp.money;
info[i].discount=temp.discount;
strcpy(info[i].full,temp.full);
 
n++; //记录数加1
return n;//返回记录数
}
 
//按航班号查找函数
int find_id(flight_info info[],int n,char *p){
int i;
for(i=0;i<n;i++){
if(strcmp(p,info[i].id)==0)
 return i;
}
return i;
}
 
int main(){
int length;
 flight_info info[N];
 
for(;;){
switch(menu()){
 case 1:length=input(info);break;
 case 2:print(info,length);break;
 case 3:search(info,length);break;
 case 4:length=del(info,length);break;
 case 5:length=add(info,length);break;
 case 6:system("cls");printf("系统已关闭!!!\n感谢使用\n");exit(0);break;
 }
printf("按回车键返回主菜单...\n");
getchar();
}
return 0;
}

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

用标准c++实现string与各种类型之间的转换

这个类在头文件中定义, < sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本
收藏 0 赞 0 分享

C++如何通过ostringstream实现任意类型转string

再使用整型转string的时候感觉有点棘手,因为itoa不是标准C里面的,而且即便是有itoa,其他类型转string不是很方便。后来去网上找了一下,发现有一个好方法
收藏 0 赞 0 分享

C/C++指针小结

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区
收藏 0 赞 0 分享

C++ 类的静态成员深入解析

在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例子来总结静态成员变量和成员函数使用规则,再给出一个实例来加深印象
收藏 0 赞 0 分享

C++类的静态成员初始化详细讲解

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
收藏 0 赞 0 分享

C++类静态成员与类静态成员函数详解

静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值
收藏 0 赞 0 分享

C++中的friend友元函数详细解析

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样
收藏 0 赞 0 分享

static全局变量与普通的全局变量的区别详细解析

以下是对static全局变量与普通的全局变量的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
收藏 0 赞 0 分享

C++ explicit关键字的应用方法详细讲解

C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?下面就让我们一起来看看这方面的知识吧
收藏 0 赞 0 分享

教你5分钟轻松搞定内存字节对齐

随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
收藏 0 赞 0 分享
查看更多