航班信息查询系统
1、 导言 用所学过的 C 语言,以及链表相关知识,实现一个航班信息的录入、查询、显示、 排序等功能。航班信息 节点设计,请参见附录。
2、 基本功能: 使用链表,实现以下功能:
1) 录入(可以直接从键盘录入,也可通过文件存储)
2) 显示所有航班信息
3) 按照查询要求(比如日期、地点等),列出相关的航班信息。
4) 完善该项目功能。
5) 对录入的信息进行排序(比如按起飞时间排序、按起飞地址排序等)
6)账号和密码的注册和登录
3、扩展
1)管理员用户和普通用户 管理员用户拥有增删查改排序 普通用户 可以查询、排序显示
2:简单实现航班的查询系统。
#include <stdio.h>
#include <string.h> //memcpy()
#include <stdlib.h>
#include <stdbool.h>
typedef struct flight //航班信息数据节点(其成员可适当增删)
{
char number[100]; //航班号
char staddress[100]; //起点站
char arraddress[100]; //终点站char date[10]; //班期
char type[100]; //机型
char stime[100]; //起飞时间
char atime[100]; //到达时间
float price; //票价
}Fode,*Fink;
typedef struct Link
{
struct Link *next;
struct flight data;
}Lode,*LNink;
typedef struct head
{
struct Link *next;
int size;
}HNode,*HLink;
typedef struct head1
{
struct zhanghao *next;
int size;
}HNode1,*HLink1;
typedef struct zhanghao
{
struct zhanghao *next;
int data;
int key;
}*zhang;
bool tou(HLink L);
bool zhuce(HLink1 L);
bool denglu( HLink1 L );
bool display(HLink L);
bool search(HLink L);
bool delete(HLink L);
bool paixu(HLink L);
bool change(HLink L);
/*
select 用户通过输入数字选择功能块
*/
void chose(HLink lis,HLink1 lis1 )
{
int num;
printf("\033[32m*********************************************************\n");
printf("* \033[1m 航班信息查询系统 *\n\033[0m");
printf("* \033[32m* 1:注册账号 *\n");
printf("* 2:登录账号 *\n");
printf("* 3:录入航班信息 *\n");
printf("* 4:显示航班信息 *\n");
printf("* 5:依据航班号查询航班信息 *\n");
printf("* 6:依据航班号删除航班信息 *\n");
printf("* 7:根据航班价格排序 *\n");
printf("* 8:输入航班编号修改航班信息 *\n");
// printf("* 6:购买商品 *\n");
// printf("* 9:依据价格对航班号排序 *\n");
printf("* 0:退出系统 *\n");
printf("*********************************************************\n");
printf("请输入功能块:");
scanf("%d",&num);
switch (num)
{
case 1:
zhuce(lis1);
chose(lis,lis1);
break;
case 2:
denglu(lis1);
chose(lis,lis1);
break;
case 3:
tou(lis);
chose(lis,lis1);
break;
case 4:
display(lis);
chose(lis,lis1);
break;
case 5:
search(lis);
chose(lis,lis1);
break;
case 6:
delete(lis);
chose(lis,lis1);
break;
case 7:
paixu(lis);
chose(lis,lis1);
break;
case 8:
change(lis);
chose(lis,lis1);
break;
case 0:
exit(0);
default:
printf("\033[31m请输入正确的功能块!\033[0m\n");
chose(lis,lis1);
break;
}
printf("\033[32m请输入功能块:\n");
}
bool CreatLink(HLink L){//初始化头节点
if(L==NULL){
return false;
}
L->next=NULL;
L->size=0;
}
bool CreatLink1(HLink1 L){//初始化头节点
if(L==NULL){
return false;
}
L->next=NULL;
L->size=0;
}
bool tou(HLink L){
if(L==NULL){
return false;
}
LNink p =(LNink)malloc(sizeof(Lode));
p->next=L->next;
L->next=p;
printf("请依次按照航班号,起始站,终点站,机型,起飞时间,到达时间,票价输入");
scanf("%s",p->data.number);
scanf("%s",p->data.staddress);
scanf("%s",p->data.arraddress);
scanf("%s",p->data.type);
scanf("%s",p->data.stime);
scanf("%s",p->data.atime);
scanf("%f",&(p->data.price));
}
//注册页面
bool zhuce( HLink1 L){
if(L==NULL){
return false;
}
zhang p =(zhang) malloc(sizeof (struct zhanghao));
L->next=p;
p->next=L->next;
printf("请输入账号和密码");
scanf("%d",&(p->data));
scanf("%d",&(p->key));
printf("注册完毕");
}
//登录页面
bool denglu(HLink1 L ){
if(L==NULL){
return false;
}
zhang Node=L->next;
printf("请登录账号和密码");
int data;
int key;
scanf("%d",&(data));
scanf("%d",&(key));
while(Node!=NULL){
if(data==Node->data){
if(key!=Node->key){
printf("密码错误");
exit(0);
}
if(key==Node->key){
printf("登录成功");
break;
}
}
if(data!=Node->data){
printf("未注册该账号");
break;
}
Node=Node->next;
}
//while(Node!=NULL){
// }
// printf("并为注册账号,请重新注册");
// exit(0);
// return false;
}
bool display(HLink L){
if(L==NULL){
return false;
}
LNink p=L->next;
while (p!=NULL)
{
printf("%s ,",&(p->data.number));
printf("%s-->",p->data.staddress);
printf("%s",p->data.arraddress);
printf(",%s",p->data.type);
printf(",%s",p->data.stime);
printf(",%s",p->data.atime);
printf(",%f,",p->data.price);
printf("\n");
p=p->next;
}
printf("\n");
}
bool search(HLink L){
if(L==NULL){
return false;
}
LNink p=(LNink)malloc(sizeof(Lode));
p=L->next;
char a[100];
printf("请输入航班编号");
scanf("%s",a);
while (p!=NULL)
{
if(!strcmp(a,p->data.number)){
printf("%s ,",p->data.number);
printf("%s-->",p->data.staddress);
printf("%s",p->data.arraddress);
printf(",%s",p->data.type);
printf(",%s",p->data.stime);
printf(",%s",p->data.atime);
printf(",%f,",p->data.price);
}
p=p->next;
}
}
bool delete(HLink L){
if(L==NULL){
return false;
}
LNink p=(LNink)malloc(sizeof(Lode));
p=L->next;
char a[100];
printf("请输入要删除的航班编号");
scanf("%s",a);
while (p!=NULL)
{
if(!strcmp(a,p->data.number)){
//p->data=p->next->data;
strcpy(&(p->data.arraddress),&(p->next->data.arraddress));
strcpy(&(p->data.atime),&(p->next->data.atime));
strcpy(&(p->data.number),&(p->next->data.number));
// strcpy(&(p->data.price),&(p->next->data.price));
strcpy(&(p->data.staddress),&(p->next->data.staddress));
strcpy(&(p->data.stime),&(p->next->data.stime));
strcpy(&(p->data.type),&(p->next->data.type));
p->data.price=p->next->data.price;
p->next=p->next->next;
}
// if(p->next->next==NULL){
// p->next=NULL;
// }
p=p->next;
}
}
bool change(HLink L){
if(L==NULL){
return false;
}
LNink p=(LNink)malloc(sizeof(Lode));
p=L->next;
char a[100];
printf("请输入航班编号");
scanf("%s",a);
while (p!=NULL)
{
if(!strcmp(a,p->data.number)){
printf("请输入修改后的信息按照航班号,起始站,终点站,机型,起飞时间,到达时间,票价输入");
scanf("%s",p->data.number);
scanf("%s",p->data.staddress);
scanf("%s",p->data.arraddress);
scanf("%s",p->data.type);
scanf("%s",p->data.stime);
scanf("%s",p->data.atime);
scanf("%f",&(p->data.price));
}
p=p->next;
}
}
bool paixu(HLink L){//按照票价来排序 1:冒泡排序修改值,试过但是修改值不成功,可能是结构体赋值不能直接赋值 2:修改方法利用断开表
if(L==NULL){
return false;
}
LNink p1;
LNink p2;
// while (p1!=NULL)
// {
// for(;p2->next!=NULL;p2=p2->next){
// if(p2->data.price>p2->next->data.price){
// temp=p2->data.price;
// p2->data.price=p2->next->data.price;
// p2->next->data.price=temp;
// }
// }
// p1=p1->next;
// }
for(p1=L->next;p1->next!=NULL;p1=p1->next){
for(p2=p1->next;p2!=NULL;p2=p2->next){
if(p1->data.price>p2->data.price){
float temp=0;
temp=p1->data.price;
p1->data.price=p2->data.price;
p2->data.price= temp;
char a[20];
strcpy(a,p1->data.number);
strcpy(p1->data.number,p2->data.number);
strcpy(p2->data.number,a);
char b[20];
strcpy(b,p1->data.staddress);
strcpy(p1->data.staddress,p2->data.staddress);
strcpy(p2->data.staddress,b);
char c[20];
strcpy(c,p1->data.arraddress);
strcpy(p1->data.arraddress,p2->data.arraddress);
strcpy(p2->data.arraddress,c);
char d[20];
strcpy(d,p1->data.type);
strcpy(p1->data.type,p2->data.type);
strcpy(p2->data.type,d);
char e[20];
strcpy(e,p1->data.stime);
strcpy(p1->data.stime,p2->data.stime);
strcpy(p2->data.stime,e);
char f[20];
strcpy(f,p1->data.atime);
strcpy(p1->data.atime,p2->data.atime);
strcpy(p2->data.atime,f);
}
}
}
}
int main(){
//先创建一个头节点作为所有数据的开头
HLink lis = (HLink)malloc(sizeof(HNode));
HLink1 lis1 = (HLink1)malloc(sizeof(HNode1));
CreatLink(lis);
CreatLink1(lis1);
chose( lis,lis1);
//select(lis);
//select(lis);
}
功能模块: