1、功能要求:
实现以下功能:
1)信息录入
2)信息显示(按照起飞时间先后顺序显示)
3)信息查询(可根据不同的关键字进行查询)
4)删除信息
5)修改信息
2、技术要求:
1)使用单向链表对录入的信息进行存储
2)对录入的信息进行排序(可按起飞时间进行排序)
3)Make管理项目
#include "../include/flight.h"
int main(void)
{
pnode_list head;//头指针
Init_Flight(&head);//初始化头指针
datatype data;//航班信息
Init_Flight_Info(head);//初始化航班信息
unsigned int x=0;//管理员操作标志位
while(1){
printf("-----------------------------------------------------------------\n");
printf("请选择您要操作的选项:\n");
printf("*****************************************************************\n");
printf("*****************************************************************\n");
printf("1、航班信息录入 2、航班信息显示 3、航班信息查询 \n4、删除航班信息 5、修改航班信息 6、退出\n");
printf("*****************************************************************\n");
printf("*****************************************************************\n");
int m_reg = scanf("%d",&x);
if(m_reg == 0){
return 0;
}
switch(x){
case 1://航班信息录入
Input_Info(&data);
Insert_Flight_Head(head,data);
sort(head);
//Display_Info(head);
x=0;
break;
case 2://航班信息显示
sort(head);
Display_Info(head);
x=0;
break;
case 3://航班信息查询
Check_Info(head);
x=0;
break;
case 4://删除航班信息
Del_Flight_Info(head);
break;
case 5://修改航班信息
Updata_Flight_Info(head);
break;
case 6:
Exit_Flight_System();//延时1s结束
return 0;
break;
default :
x=0;
break;
}
}
return 0;
}
#include "../include/flight.h"
/*
头指针初始化
*/
void Init_Flight(pnode_list *P_Flight)
{
*P_Flight = (pnode_list)malloc(sizeof(node_list));
if(*P_Flight==NULL){
printf("*P_Flight malloc error %s\n",__FUNCTION__);
return;
}
(*P_Flight)->next = *P_Flight;
}
/*
创建新节点
*/
pnode_list Creat_Node(datatype d)
{
pnode_list P_Link = (pnode_list)malloc(sizeof(node_list));
if(P_Link==NULL){
printf("Creat_Node malloc error %s\n",__FUNCTION__);
return;
}
P_Link->info = d;
P_Link->next = P_Link;
return P_Link;
}
/*
头插法,添加在一个元素前面
*/
void Insert_Flight_Head(pnode_list head,datatype data)
{
if(head == NULL){
return ;
}
pnode_list node = Creat_Node(data);
if(node == NULL){
printf("Creat_Node malloc error %s\n",__FUNCTION__);
}
node->next = head->next;
head->next = node;
}
/*
链表插入排序
*/
void sort(pnode_list head)
{
pnode_list p = head->next;
pnode_list q = head;
head->next = head;
pnode_list node;
pnode_list pp;
while(p!=q){
node = p;
p = p->next;
pp = head;
while(pp->next!=head){
if(pp->next->info.stime > node->info.stime){
break;
}
pp = pp->next;
}
//将节点插入到pp的后面
node->next = pp->next;
pp->next = node;
}
}
/*
遍历
*/
void Display_Info(pnode_list head)
{
if(head == NULL){
return ;
}
pnode_list p = head->next;
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
while(p!=head){
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->info.number,p->info.staddress,p->info.arraddress,p->info.DATE,p->info.TYPE,p->info.stime,p->info.atime,p->info.value);
printf("-----------------------------------------------------------------------------\n");
p = p->next;
}
printf("\n");
}
/*
航班信息录入
*/
void Input_Info(datatype *data)
{
// printf("请输入航班信息:\n航班号/起点站/终点站/班期/机型/起飞时间/到达时间/票价\n");
// scanf("%s%s%s%s%s%d%d%d",data->number,data->staddress,data->arraddress,data->DATE,data->TYPE,&(data->stime),&(data->atime),&(data->value));
printf("请输入航班号:");
scanf("%s",data->number);
printf("请输入起点站:");
scanf("%s",data->staddress);
printf("请输入终点站:");
scanf("%s",data->arraddress);
printf("请输入班期:");
scanf("%s",data->DATE);
printf("请输入机型:");
scanf("%s",data->TYPE);
printf("请输入起飞时间:");
scanf("%d",&(data->stime));
printf("请输入到达时间:");
scanf("%d",&(data->atime));
printf("请输入票价:");
scanf("%d",&(data->value));
}
/*
初始化航班当天信息
*/
void Init_Flight_Info(pnode_list head)
{
datatype data[10];
//初始化当天信息
strcpy(data[0].number,"F1008");
strcpy(data[1].number,"F1208");
strcpy(data[2].number,"F3048");
strcpy(data[3].number,"AS052");
strcpy(data[4].number,"F1041");
strcpy(data[5].number,"F1059");
strcpy(data[6].number,"L1908");
strcpy(data[7].number,"MH501");
strcpy(data[8].number,"F8591");
strcpy(data[9].number,"LL2008");
strcpy(data[0].staddress,"Shenzhen");
strcpy(data[1].staddress,"xiamen");
strcpy(data[2].staddress,"fuzhou");
strcpy(data[3].staddress,"Shenzhen");
strcpy(data[4].staddress,"shanghai");
strcpy(data[5].staddress,"zhejiang");
strcpy(data[6].staddress,"beijing");
strcpy(data[7].staddress,"Shenzhen");
strcpy(data[8].staddress,"quanzhou");
strcpy(data[9].staddress,"hangzhou");
strcpy(data[0].arraddress,"fuzhou");
strcpy(data[1].arraddress,"shenzhen");
strcpy(data[2].arraddress,"shenzhen");
strcpy(data[3].arraddress,"xiamen");
strcpy(data[4].arraddress,"shenzhen");
strcpy(data[5].arraddress,"shenzhen");
strcpy(data[6].arraddress,"shenzhen");
strcpy(data[7].arraddress,"quanzhou");
strcpy(data[8].arraddress,"shenzhen");
strcpy(data[9].arraddress,"shenzhen");
strcpy(data[0].DATE,"001");
strcpy(data[1].DATE,"005");
strcpy(data[2].DATE,"012");
strcpy(data[3].DATE,"036");
strcpy(data[4].DATE,"009");
strcpy(data[5].DATE,"007");
strcpy(data[6].DATE,"105");
strcpy(data[7].DATE,"528");
strcpy(data[8].DATE,"520");
strcpy(data[9].DATE,"999");
strcpy(data[0].TYPE,"S001");
strcpy(data[1].TYPE,"S011");
strcpy(data[2].TYPE,"S101");
strcpy(data[3].TYPE,"S301");
strcpy(data[4].TYPE,"S991");
strcpy(data[5].TYPE,"S666");
strcpy(data[6].TYPE,"S598");
strcpy(data[7].TYPE,"S521");
strcpy(data[8].TYPE,"S052");
strcpy(data[9].TYPE,"S520");
data[0].stime = 9;
data[1].stime = 8;
data[2].stime = 15;
data[3].stime = 19;
data[4].stime = 14;
data[5].stime = 10;
data[6].stime = 12;
data[7].stime = 17;
data[8].stime = 5;
data[9].stime = 16;
data[0].atime = 13;
data[1].atime = 11;
data[2].atime = 19;
data[3].atime = 22;
data[4].atime = 22;
data[5].atime = 16;
data[6].atime = 22;
data[7].atime = 20;
data[8].atime = 8;
data[9].atime = 23;
data[0].value = 360;
data[1].value = 270;
data[2].value = 360;
data[3].value = 270;
data[4].value = 720;
data[5].value = 540;
data[6].value = 900;
data[7].value = 450;
data[8].value = 270;
data[9].value = 630;
int i;
for(i=0;i<10;i++){
Insert_Flight_Head(head,data[i]);//头插
}
sort(head);//排序
}
/*
航班信息查询
*/
void Check_Info(pnode_list head)
{
unsigned int x=0;
unsigned int C_Flag = 0;//是否有航班标志位
pnode_list p = head;
char c_number[18]={}; //航班号
char c_staddress[18]={}; //起点站
char c_arraddress[18]={};//终点站
int c_stime=0;
int c_value=0;
printf("*****************************************************************\n");
printf("请选择查询方式:\n1、航班号 2、起点站 3、终点站 4、起飞时间 5、票价\n");
printf("*****************************************************************\n");
int c_reg = scanf("%d",&x);
if(c_reg == 0){
return;
}
switch(x){
case 1://查询航班号
printf("*****************************************************************\n");
printf("请输入要查询的航班号:");
scanf("%s",c_number);
if(head==NULL){
printf("今天已经没有航班了\n");
return;
}
while(p->next != head){
if(strcmp(p->next->info.number,c_number)==0){//如果航班信息相同就打印出航班信息
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
printf("-----------------------------------------------------------------------------\n");
C_Flag++;
}
p = p->next;
}
if(C_Flag==0){
printf("今天该航班没有起飞\n");
}
C_Flag = 0;
return ;
break;
case 2://查询起点站
printf("*****************************************************************\n");
printf("请输入要查询的起点站:");
scanf("%s",c_staddress);
if(head==NULL){
printf("今天已经没航班了\n");
return;
}
while(p->next != head){
if(strcmp(p->next->info.staddress,c_staddress)==0){//如果航班信息相同就打印出航班信息
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
printf("-----------------------------------------------------------------------------\n");
C_Flag++;
}
p = p->next;
}
if(C_Flag==0){
printf("今天没有从%s起飞的飞机\n",c_staddress);
}
C_Flag = 0;
return ;
break;
case 3://查询终点站
printf("*****************************************************************\n");
printf("请输入要查询的终点站:");
scanf("%s",c_arraddress);
if(head==NULL){
printf("今天已经没航班了\n");
return;
}
while(p->next != head){
if(strcmp(p->next->info.arraddress,c_arraddress)==0){//如果航班信息相同就打印出航班信息
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
printf("-----------------------------------------------------------------------------\n");
C_Flag++;
}
p = p->next;
}
if(C_Flag==0){
printf("今天没有到%s的航班\n",c_arraddress);
}
C_Flag = 0;
return ;
break;
case 4://查询出发时间
printf("*****************************************************************\n");
printf("请输入要查询的起飞时间:");
scanf("%d",&c_stime);
if(head==NULL){
printf("今天已经没航班了\n");
return;
}
while(p->next != head){
if(p->next->info.stime == c_stime){//如果航班信息相同就打印出航班信息
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
printf("-----------------------------------------------------------------------------\n");
C_Flag++;
}
p = p->next;
}
if(C_Flag==0){
printf("今天没有%d点起飞的航班\n",c_stime);
}
C_Flag = 0;
return ;
break;
case 5:
printf("*****************************************************************\n");
printf("请输入要查询的票价:");
scanf("%d",&c_value);
if(head==NULL){
printf("今天已经没航班了\n");
return;
}
while(p->next != head){
if(p->next->info.value == c_value){//如果航班信息相同就打印出航班信息
printf("*****************************************************************************\n");
printf("航班号 起点站 终点站 班期 机型 起飞时间 到达时间 票价\n");
printf("*****************************************************************************\n");
printf("%-13s%-13s%-13s%-10s%-8s%-8d%-8d%-8d\n",p->next->info.number,p->next->info.staddress,p->next->info.arraddress,p->next->info.DATE,p->next->info.TYPE,p->next->info.stime,p->next->info.atime,p->next->info.value);
printf("-----------------------------------------------------------------------------\n");
C_Flag++;
}
p = p->next;
}
if(C_Flag==0){
printf("今天没有%d价格的航班\n",c_value);
}
C_Flag = 0;
return ;
break;
break;
default:
break;
}
}
/*
删除航班信息
*/
void Del_Flight_Info(pnode_list head)
{
unsigned int C_Flag = 0;
char c_number[18]={}; //删除的航班号
if(head==NULL){
printf("今天已经没有航班了\n");
return;
}
printf("*****************************************************************\n");
printf("请输入要删除的航班号:");
scanf("%s",c_number);
pnode_list p = head;
pnode_list old_node;
while(p->next!=head){
if(strcmp(p->next->info.number,c_number)==0){
C_Flag++;
old_node=p->next;
p->next = p->next->next;
old_node->next = NULL;
free(old_node);
continue;
}
p = p->next;
}
if(C_Flag==0){
printf("您输入有误,没有该航班,请重试!\n");
}else{
C_Flag = 0;
}
return;
}
/*
修改航班信息
*/
void Updata_Flight_Info(pnode_list head)
{
unsigned int C_Flag = 0;
char c_number[18]={}; //修改的航班号
if(head==NULL){
return;
}
printf("*****************************************************************\n");
printf("请输入要修改的航班号:");
scanf("%s",c_number);
pnode_list p = head;
pnode_list old_node;
while(p->next!=head){
if(strcmp(p->next->info.number,c_number)==0){
C_Flag++;
old_node=p->next;
datatype New_data;
printf("请输入新的航班号:");
scanf("%s",New_data.number);
printf("请输入新的起点站:");
scanf("%s",New_data.staddress);
printf("请输入新的终点站:");
scanf("%s",New_data.arraddress);
printf("请输入新的班期:");
scanf("%s",New_data.DATE);
printf("请输入新的机型:");
scanf("%s",New_data.TYPE);
printf("请输入新的起飞时间:");
scanf("%d",&(New_data.stime));
printf("请输入新的到达时间:");
scanf("%d",&(New_data.atime));
printf("请输入新的票价:");
scanf("%d",&(New_data.value));
pnode_list New_node=Creat_Node(New_data);
if(New_node == NULL){
return;
}
New_node->next=p->next->next;
p->next = New_node;
old_node->next = NULL;
free(old_node);
}
p = p->next;
}
if(C_Flag==0){
printf("您输入有误,没有该航班,请重试!");
}else{
C_Flag = 0;
}
return;
}
/*
退出航班系统
*/
void Exit_Flight_System()
{
printf("Flight System Shutdown Now......\n");
printf("-----------------------------------------------------------------------------\n");
printf("-----------------------------------------------------------------------------\n");
printf("-----------------------------------------------------------------------------\n");
sleep(1);
return;
}
```c
//flight.h
#ifndef __FLIGHT_H__
#define __FLIGHT_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct flight //航班信息数据结构
{
char number[18]; //航班号
char staddress[18]; //起点站
char arraddress[18]; //终点站
char DATE[12]; //班期
char TYPE[8]; //机型
int stime; //起飞时间
int atime; //到达时间
int value; //票价
}datatype;
typedef struct Node //链表结点
{
datatype info;
struct Node *next;
}node_list,*pnode_list;
extern void Init_Flight(pnode_list *P_Flight);
extern pnode_list Creat_Node(datatype d);
extern void Insert_Flight_Head(pnode_list head,datatype data);
extern void Display_Info(pnode_list head);
extern void Input_Info(datatype *data);
extern void sort(pnode_list head);
extern void Init_Flight_Info(pnode_list head);
extern void Check_Info(pnode_list head);
extern void Exit_Flight_System();
extern void Del_Flight_Info(pnode_list head);
extern void Updata_Flight_Info(pnode_list head);
#endif