1.设计目的:
设计一个航班管理系统,实现对双向链表的增、删、改、查操作,按照航班航号、起始点、终点、出发日期、机型、起飞时间、到达时间、票价建立系统,初始信息如下:
航号 | 起始点 | 终点 | 出发日期 | 机型 | 起飞时间 | 到达时间 | 票价 |
南航CZ4105 | 呼和浩特 | 泉州 | 8月1日 | 中型机737 | 19:20 | 次日00:05 | ¥1290 |
厦航MF8138 | 呼和浩特 | 泉州 | 8月1日 | 中型机737 经停 | 19:20 | 次日00:05 | ¥1290 |
青岛航QW9882 | 哈尔滨 | 青岛 | 8月1号 | 中型机 320 | 23:25 | 次日00:25 | ¥890 |
湖南航A67138 | 长沙 | 昆明 | 8月12号 | 中型机 320 | 23:25 | 次日1:30 | ¥720 |
川航3U1770 | 长沙 | 北京 | 8月13号 | 中型机 320共享 | 8:10 | 10:25 | ¥865 |
厦航MF8234 | 乌鲁木齐 | 北京 | 8月13号 | 大型机 787 | 20:50 | 次日00:35 | ¥2710 |
长龙GJ8255 | 哈尔滨 | 杭州 | 8月17号 | 中型机 321 | 6:40 | 10:00 | ¥1095 |
河北航NS8019 | 北京 | 杭州 | 8月14号 | 大型机 737 | 7:55 | 10:10 | 720 |
海航Y87744 | 哈尔滨 | 深圳 | 8月17号 | 中型机737 | 14:35 | 20:45 | ¥1610 |
吉祥HO1273 | 上海 | 海口 | 8月22号 | 中型机 321 | 22:30 | 次日01:30 | ¥720 |
像这种信息大家可自行上网查找,信息自选。
2.程序介绍
2.1 头文件 header.h
用于调用函数以及双向循环链表的指针声明、数据声明,函数定义声明在dclinklist.c denglu.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//登录界面
int hangkong();
//登录系统用户
int denglu();
//菜单
int menu();
//数据部分
typedef struct plane
{
char number[128]; //航班号
char stad[20]; //起点站
char arrad[20]; //终点站
char day[20]; //班期
char type[128]; //机型
char stime[20]; //起飞时间
char atime[20]; //到达时间
char value[20]; //票价
}plane_t;
//指针部分
typedef struct node
{
void * data;
struct node * before;
struct node * after;
}node_t;
//双向链表操作函数
//初始化
node_t* init_list_return(node_t*head);
//创建一个双向链表
node_t* create_dclinklist();
//尾插法
int insert_tdclinklist(node_t*head,void * data , int size);
//打印链表函数
typedef void (showfun_t)(void*data);
//显示航班
void shownumber(void*data);
//显示起始点
void showstad(void*data);
//显示终点
void showarrad(void*data);
//显示出发日期
void showday(void*data);
//显示机型
void showtype(void*data);
//显示起飞时间
void showstime(void*data);
//显示到达时间
void showatime(void*data);
//显示票价
void showvalue(void*data);
//显示所有
void showall(void*data);
//链表打印函数
int dclinklistshow(node_t* head,showfun_t* showfun);
// 输出所有节点个数和输出数据节点个数
// 参数1:链表
// 参数2:所有节点个数
// 参数3:数据节点个数
int showlinklistnode(node_t*head,int* allnode,int* datanode);
//修改第index个位置数据
int updata_idclinklist(node_t* head);
//在第index个位置数据插入一个数据
int insert_idclinklist(node_t* head);
//删除第i个位置
int delete_idclinklist(node_t*head);
//根据部分信息输出全部信息
//参数1:链表数据 参数2:新数据
typedef int (cmpfun_t)(void*data1,void*data2);
//根据航班查找全部信息
int cmpnumber(void* data1 , void * data2);
//根据起点输出全部信息
int cmpstad(void* data1 , void * data2);
//根据终点点输出全部信息
int cmparrad(void* data1 , void * data2);
//根据出发日期输出全部信息
int cmpday(void* data1 , void * data2);
//根据机型输出全部信息
int cmptype(void* data1 , void * data2);
//根据起飞时间输出全部信息
int cmpstime(void* data1 , void * data2);
//根据落地时间输出全部信息
int cmpatime(void* data1 , void * data2);
//根据票价输出全部信息
int cmpvalue(void* data1 , void * data2);
//根据部分信息查找全部信息
node_t* find_vdclinklist(node_t*head,cmpfun_t* cmpfun);
//删除所有数据+销毁链表
int delete_and_destroy_dclinklist(node_t**head);
2.2 主函数 main.c
调用函数+界面排版
#include "header.h"
int main()
{
printf("-----------欢迎进入飞猪旅游官网----------\n");
//飞机图形
hangkong();
//登录界面
denglu();
putchar(10);
printf("****************************************\n");
putchar(10);
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
//航班信息
node_t*dclinklist=create_dclinklist();//建立双向链表
//用尾插法给双向链表录入数据
plane_t planen[10]={
"南航CZ4105","呼和浩特","泉州","8月1日","中型机737","19:20","次日00:05","¥1290",
"厦航MF8138","呼和浩特","泉州","8月1日","中型机737 经停","19:20","次日00:05","¥1290",
"青岛航QW9882","哈尔滨","青岛","8月1号","中型机 320","22:05","次日00:25","¥890",
"湖南航A67138","长沙","昆明","8月12号","中型机 320","23:25","次日1:30","¥720",
"川航3U1770","长沙","北京","8月13号","中型机 320共享","8:10","10:25","¥865",
"厦航MF8234","乌鲁木齐","北京","8月13号","大型机 787","20:50","次日00:35","¥2710",
"长龙GJ8255","哈尔滨","杭州","8月17号","中型机 321","6:40","10:00","¥1095",
"河北航NS8019","北京","杭州","8月14号","大型机 737","7:55","10:10","¥720",
"海航Y87744","哈尔滨","深圳","8月17号","中型机737","14:35","20:45","¥1610",
"吉祥HO1273","上海","海口","8月22号","中型机 321","22:30","次日01:30","¥720"
};
int y = 0;
for(y = 0 ; y < 10 ; y++ )
{
insert_tdclinklist(dclinklist,planen+y,sizeof(plane_t));
}
node_t * head;
int select,flag=1;
while(flag)
{
menu();
scanf("%d",&select);
switch (select)
{
case 1:
head = init_list_return(head);
break;
case 2:
dclinklistshow(dclinklist,showall);
break;
case 3:
insert_idclinklist(dclinklist);
break;
case 4:
delete_idclinklist(dclinklist);
break;
case 5:
updata_idclinklist(dclinklist);
break;
case 6:
find_vdclinklist(dclinklist,cmpnumber);
break;
case 7:
find_vdclinklist(dclinklist,cmpstad);
break;
case 8:
find_vdclinklist(dclinklist,cmparrad);
break;
case 9:
find_vdclinklist(dclinklist,cmpday);
break;
case 10:
find_vdclinklist(dclinklist,cmptype);
break;
case 11:
find_vdclinklist(dclinklist,cmpstime);
break;
case 12:
find_vdclinklist(dclinklist,cmpatime);
break;
case 13:
find_vdclinklist(dclinklist,cmpvalue);
break;
case 14:
delete_and_destroy_dclinklist(&dclinklist);
break;
case 15:
flag = 0;//满足while(flag)条件,退出循环
break;
default:
printf("请规范输入\n");
break;
}
}
return 0;
}
2.3 登录函数定义声明 denglu.c
#include "header.h"
//登录界面飞机图行美化操作界面,此代码可自行选择图案,网上直接搜索就行
int hangkong()
{
int space[5]={4,4,5,6};
int i,j;
for(i = 0; i < 4; i ++)
{
for(j = 0; j < space[i]; j ++)
putchar(' ');
for(j = 0; j <= i; j ++)
putchar('*');
putchar('\n');
}
puts("**************");
for(i = 3; i >= 0; i --)
{
for(j = 0; j < space[i]; j ++)
putchar(' ');
for(j = 0; j <= i; j ++)
putchar('*');
putchar('\n');
}
printf("~~~~飞猪旅行欢迎您,祝您每段旅行愉快~~~~\n");
return 0;
}
//登录系统用户
int denglu()
{
char u[3][128] = {"a" , "" , ""};//用户账号名1:a 账户名2:b 账户名3:
char p[3][128] = {"a0605" , "b1221" , "c0602"};//对应账户的对应密码
char u_u[128] = {};
char p_u[128] = {};
printf("****************************************\n\n\n");
printf("\t 请输入账号:");
scanf("%s",u_u);
printf("\t 请输入密码:");
scanf("%s",p_u);
printf("请稍等,正在进行验证!!\n\n\n");
while (!(strcmp(u_u , u[0]) == 0) && !(strcmp(u_u , u[1]) == 0) && !(strcmp(u_u , u[2]) == 0))//判断账户名是否存在,不存在重新输入
{
printf("您输入的账号有误,请重新输入!!\n");
printf("\t 请输入账号:");
scanf("%s",u_u);
printf("\t 请输入密码:");
scanf("%s",p_u);
printf("请稍等,正在进行验证!!\n\n\n");
}
//账户1入口,进行对应账户的密码判断操作
if(strcmp(u_u , u[0]) == 0)
{
printf("尊敬的彭双雄先生你好, 账户正确!\n");
if(strcmp(p_u , p[0]) == 0)
{
printf("尊敬的彭双雄先生你好, 密码正确!\n");
}
else
{
printf("您输入的密码有误!!!\n");
exit(0);
}
}
//账户2入口
else if(strcmp(u_u , u[1]) == 0)
{
printf("尊敬的蒋佳佳女生你好, 账户正确!\n");
if(strcmp(p_u , p[1]) == 0)
{
printf("尊敬的蒋佳佳女生你好, 密码正确!\n");
}
else
{
printf("您输入的密码有误!!!\n");
exit(0);
}
}
//账户3入口
else if(strcmp(u_u , u[2]) == 0)
{
printf("尊敬的彭彬彬女生你好, 账户正确!\n");
if(strcmp(p_u , p[2]) == 0)
{
printf("尊敬的彭彬彬女生你好, 密码正确!\n");
}
else
{
printf("您输入的密码有误!!!\n");
exit(0);
}
}
else//密码输入错误直接退出程序
{
printf("请输入正确的账号!!!\n");
exit(0);
}
return 0;
}
//菜单,执行操作可根据自己需求添加操作,操作数对应序号运用键盘输入序号+switch case函数进行对应操作
int menu()
{
printf("|*****************************************|\n");
printf("| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |\n");
printf("|-------------欢迎进入系统----------------|\n");
printf("| 请选择您要进行的操作: |\n");
printf("| 1、 初始化系统 |\n");
printf("| 2、 查看现有航班信息 |\n");
printf("| 3、 增加航班信息 |\n");
printf("| 4、 删除航班信息 |\n");
printf("| 5、 修改航班信息 |\n");
printf("| 6、 根据航班查找航班信息 |\n");
printf("| 7、 根据起点查找航班信息 |\n");
printf("| 8、 根据终点查找航班信息 |\n");
printf("| 9、 根据出发日期查找航班信息 |\n");
printf("| 10、根据机型查找航班信息 |\n");
printf("| 11、根据起飞时间查找航班信息 |\n");
printf("| 12、根据落地时间查找航班信息 |\n");
printf("| 13、根据票价查找航班信息 |\n");
printf("| 14、清空所有航班信息 |\n");
printf("| 15、退出系统 |\n");
printf("| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |\n");
printf("|*****************************************|\n");
}
2.4 双向链表函数定义声明 dclinklist.c
#include "header.h"
//初始化
node_t* init_list_return(node_t*head)
{
head = (node_t*)malloc(sizeof(node_t));
head->data = 0;//带头结点存储链表长度
head->after = head->before = head;
head = NULL ;
return head;
}
//创建一个双向链表
node_t* create_dclinklist()
{
node_t*head = malloc(sizeof(node_t));
if(head == NULL)
{
perror("malloc error\n");
return (node_t*)-1;
}
head->after=head->before=head;
head->data = NULL;
return head;
}
//尾插法
int insert_tdclinklist(node_t*head,void * data , int size)
{
//判断参数
if(head == NULL || data == NULL || size <= 0 )
{
perror("parameters error\n");
return -1;
}
node_t*newnode = malloc(sizeof(node_t));
newnode->data = malloc(size);
memcpy(newnode->data,data,size);
node_t*tail = head->before;
newnode->after = head ;
newnode->before = tail;
tail->after = newnode;
head->before =newnode;
return 0;
}
//打印链表函数
typedef void (showfun_t)(void*data);
//显示航班
void shownumber(void*data)
{
plane_t*planem = (plane_t*)data;
printf("航班号:%s\n",planem->number);
}
//显示起始点
void showstad(void*data)
{
plane_t*planem = (plane_t*)data;
printf("出发点:%s\n",planem->stad);
}//显示终点
void showarrad(void*data)
{
plane_t*planem = (plane_t*)data;
printf("终点:%s\n",planem->arrad);
}//显示出发日期
void showday(void*data)
{
plane_t*planem = (plane_t*)data;
printf("出行日期:%s\n",planem->day);
}//显示机型
void showtype(void*data)
{
plane_t*planem = (plane_t*)data;
printf("机型:%s\n",planem->type);
}//显示起飞时间
void showstime(void*data)
{
plane_t*planem = (plane_t*)data;
printf("起飞时间:%s\n",planem->stime);
}
//显示到达时间
void showatime(void*data)
{
plane_t*planem = (plane_t*)data;
printf("到达时间:%s\n",planem->atime);
}
//显示票价
void showvalue(void*data)
{
plane_t*planem = (plane_t*)data;
printf("票价:%s\n",planem->value);
}
//显示所有
void showall(void*data)
{
plane_t*planem = (plane_t*)data;
printf("航班:%s 起点:%s 终点:%s 出发日期:%s 机型:%s 起飞时间:%s 到达时间:%s 票价:%s\n",planem->number,planem->stad,planem->arrad,planem->day,planem->type,planem->stime,planem->atime,planem->value);
}
//链表打印函数
int dclinklistshow(node_t* head,showfun_t* showfun)
{
if(head == NULL || head->after == NULL ||showfun == NULL)
{
perror("parameters illegal\n");
return -1;
}
node_t* temp = head->after;
while(temp != head)
{
showfun(temp->data);
putchar(10);
temp = temp->after;
}
return 0;
}
// 输出所有节点个数和输出数据节点个数
// 参数1:链表
// 参数2:所有节点个数
// 参数3:数据节点个数
// 返回值:0成功 非0:失败
int showlinklistnode(node_t*head,int* allnode,int* datanode)
{
//1.参数判断
if(head == NULL || allnode == NULL || datanode == NULL)
{
perror("parameters error\n");
return -1;
}
//2.遍历
int i = 1;
node_t* temp = head->after;
//temp本身不为空 还是temp->next不为空
while(temp != head)
{
++i;
temp = temp->after;
}
//所有数据输出+数据节点输出
*allnode = i ;
*datanode = i - 1;
//3.return
return i;
}
//修改第index个位置数据
int updata_idclinklist(node_t* head)
{
int index;
printf("请输入您需要修改航班的序号:");
scanf("%d",&index);
if(head == NULL || index <= 0 )
{
perror("parameters error\n");
return -1;
}
int a = 0;
int datanode = -1 ;
showlinklistnode(head,&a,&datanode);
index = index % a;
if(!index)
{
perror("index error\n");
return -2;
}
node_t*newnode = malloc(sizeof(node_t));
newnode->data = malloc(sizeof(plane_t));
plane_t newplane;
printf("请输入新的航班名称:");
scanf("%s",newplane.number);
putchar(10);
printf("请输入新航班的起始点:");
scanf("%s",newplane.stad);
putchar(10);
printf("请输入新航班的终点:");
scanf("%s",newplane.arrad);
putchar(10);
printf("请输入新航班的出发日期:");
scanf("%s",newplane.day);
putchar(10);
printf("请输入新航班的飞机型号:");
scanf("%s",newplane.type);
putchar(10);
printf("请输入新航班的起飞时间:");
scanf("%s",newplane.stime);
putchar(10);
printf("请输入新航班的到达时间:");
scanf("%s",newplane.atime);
putchar(10);
printf("请输入新航班的票价:");
scanf("%s",newplane.value);
memcpy(newnode->data,&newplane,sizeof(plane_t));
node_t*temp = head;
int i = 0 ;
while(i<index)
{
++i;
temp = temp->after;
}
temp->data=newnode->data;
return 0;
}
//在第index个位置数据插入一个数据
int insert_idclinklist(node_t* head)
{
int index;
printf("请输入您需要增加航班批次的序号:");
scanf("%d",&index);
if(head == NULL || index <= 0 )
{
perror("parameters error\n");
return -1;
}
int a = 0 ;
int datanode = -1 ;
showlinklistnode(head,&a,&datanode);
index = index % a;
if(!index)
{
perror("index error\n");
return -2;
}
node_t*newnode = malloc(sizeof(node_t));
newnode->data = malloc(sizeof(plane_t));
plane_t newplane;
printf("请输入新的航班名称:");
scanf("%s",newplane.number);
putchar(10);
printf("请输入新航班的起始点:");
scanf("%s",newplane.stad);
putchar(10);
printf("请输入新航班的终点:");
scanf("%s",newplane.arrad);
putchar(10);
printf("请输入新航班的出发日期:");
scanf("%s",newplane.day);
putchar(10);
printf("请输入新航班的飞机型号:");
scanf("%s",newplane.type);
putchar(10);
printf("请输入新航班的起飞时间:");
scanf("%s",newplane.stime);
putchar(10);
printf("请输入新航班的到达时间:");
scanf("%s",newplane.atime);
putchar(10);
printf("请输入新航班的票价:");
scanf("%s",newplane.value);
memcpy(newnode->data,&newplane,sizeof(plane_t));
node_t*temp = head;
int i = 0;
while(i<index-1)
{
++i;
temp = temp->after;
}
newnode->after=temp->after;
newnode->before=temp;
temp->after->before=newnode;
temp->after=newnode;
return 0;
}
//删除第i个位置
int delete_idclinklist(node_t*head)
{
int index = 0;
printf("请输入你需要删除航班信息的序号:");
scanf("%d",&index);
if(head == NULL || index < 0 || head->after == head)
{
perror("parameters error\n");
return -1;
}
int a = 0 ;
int datanode = -1 ;
showlinklistnode(head,&a,&datanode);
index = index % a;
if(index == 0)
{
perror("index error\n");
return -1;
}
int i = 0 ;
node_t*temp = head ;
while(i < index)
{
++i;
temp = temp->after;
}
temp->before->after=temp->after;
temp->after->before=temp->before;
free(temp->data);
free(temp);
return 0;
}
//根据部分信息输出全部信息
//参数1:链表数据 参数2:新数据
typedef int (cmpfun_t)(void*data1,void*data2);
int cmpnumber(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->number,newdata2->number);
}
int cmpstad(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->stad,newdata2->stad);
}
int cmparrad(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->arrad,newdata2->arrad);
}
int cmpday(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->day,newdata2->day);
}
int cmptype(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->type,newdata2->day);
}
int cmpstime(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->stime,newdata2->stime);
}
int cmpatime(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->atime,newdata2->atime);
}
int cmpvalue(void* data1 , void * data2)
{
plane_t*newdata1 = (plane_t*)data1;
plane_t*newdata2 = (plane_t*)data2;
return strcmp(newdata1->value,newdata2->value);
}
//根据部分信息查找全部信息
node_t* find_vdclinklist(node_t*head,cmpfun_t* cmpfun)
{
plane_t newdata;
printf("请输入您的航班信息,不清楚请填写无!!!\n");
printf("请输入您的航班名称:\n");
scanf("%s",newdata.number);
printf("请输入您的航班起点:\n");
scanf("%s",newdata.stad);
printf("请输入您的航班终点:\n");
scanf("%s",newdata.arrad);
printf("请输入您的航班出行日期:\n");
scanf("%s",newdata.day);
printf("请输入您的航班机型:\n");
scanf("%s",newdata.type);
printf("请输入您的航班起飞时间:\n");
scanf("%s",newdata.stime);
printf("请输入您的航班到达时间:\n");
scanf("%s",newdata.atime);
printf("请输入您的航班价格:\n");
scanf("%s",newdata.value);
putchar(10);
if(head == NULL || cmpfun == NULL)
{
printf("parameters error\n");
return NULL;
}
node_t*temp = head->after;
while(temp != head)
{
if(!cmpfun(temp->data,&newdata))
{
printf("航班:%s 起点:%s 终点:%s 出发日期:%s 机型:%s 起飞时间:%s 到达时间:%s 票价:%s\n",((plane_t*)(temp->data))->number,((plane_t*)(temp->data))->stad,((plane_t*)(temp->data))->arrad,((plane_t*)(temp->data))->day,((plane_t*)(temp->data))->type,((plane_t*)(temp->data))->stime,((plane_t*)(temp->data))->atime,((plane_t*)(temp->data))->value);
}
temp=temp->after;
}
return NULL;
}
//删除所有数据+销毁链表
int delete_and_destroy_dclinklist(node_t**head)
{
if((*head) == NULL)
{
perror("head is illegal");
return -1;
}
node_t*temp = (*head)->after,*pre;
(*head)->after = *head;
while(temp != *head)
{
pre = temp;
temp = temp->after;
free(pre->data);
free(pre);
}
free(*head);
*head=NULL;
return 0;
}
3 MAKE
3.1 简介
工程管理器,顾名思义,是指管理较多的文件
Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能构根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入Makefile文件文件的内容来执行大量的编译工作
Make将只编译改动的代码文件,而不用完全编译。
3.2 make工具
1.安装:sudo apt-get install make
2.make工具主要用于解决多文件联编:
1)如果用gcc多文件联编,容易少文件,文件名写错,另外不方便别人使用
2)使用make工具可方便地进行一次编写,方便团队编译
3)再次编译时,只编译修改过的文件,提高编译效率,从而节省时间。
3.使用:make 当执行make命令时,会自动寻找make工具的默认配置文件 Makefile/makefile
4.Makefile编写的基本规则:
目标 : 依赖性列表 依赖性列表:表示生成目标所需要的文件
Tab键 利用依赖性列表中的文件生成目标的指令
注意:命令行前面必须是一个”TAB键”,否则编译错误为:*** missing separator. Stop.
例:
power : per.c
gcc power.c -o power -lm
注:如果目标是第1个则是最终目标,如果不是第1个则是中间目标
make命令的执行流程:
make -> Makefile -> 第一个目标 ->检测依赖性文件列表中的文件是否存在 -> 执行指令编译
5.先利用*.c文件生成*.o,再利用*.o的文件生成最终目标
power : compute.o power.o
gcc compute.o power.o -o power -lm #3
rm *.o -rf #4
compute.o : compute.c
gcc -c compute.c #1
power.o : power.c
gcc -c power.c #2
6.标准项目中的文件由头文件*.h和源文件*.c文件构成
power : compute.o input.o main.o
gcc compute.o input.o main.o -o power -lm #4
rm *.o -rf #5
compute.o : compute.c compute.h
gcc -c compute.c #1
3.3 程序
make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
app: main.c dclinklist.c denglu.c header.h
gcc main.c dclinklist.c denglu.c header.h -o app
4.运行结果展示
student@student-machine:~/psx_项目$ make
gcc main.c dclinklist.c denglu.c header.h -o app
student@student-machine:~/psx_项目$ ./app
-----------欢迎进入飞猪旅游官网----------
*
**
***
****
**************
****
***
**
*
~~~~飞猪旅行欢迎您,祝您每段旅行愉快~~~~
****************************************
请输入账号:a
请输入密码:a0605
请稍等,正在进行验证!!
尊敬的a先生/女士你好, 账户正确!
尊敬的a先生/女士你好, 密码正确!
****************************************
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
1
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
2
航班:南航CZ4105 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:厦航MF8138 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 经停 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:青岛航QW9882 起点:哈尔滨 终点:青岛 出发日期:8月1号 机型:中型机 320 起飞时间:22:05 到达时间:次日00:25 票价:¥890
航班:湖南航A67138 起点:长沙 终点:昆明 出发日期:8月12号 机型:中型机 320 起飞时间:23:25 到达时间:次日1:30 票价:¥720
航班:川航3U1770 起点:长沙 终点:北京 出发日期:8月13号 机型:中型机 320共享 起飞时间:8:10 到达时间:10:25 票价:¥865
航班:厦航MF8234 起点:乌鲁木齐 终点:北京 出发日期:8月13号 机型:大型机 787 起飞时间:20:50 到达时间:次日00:35 票价:¥2710
航班:长龙GJ8255 起点:哈尔滨 终点:杭州 出发日期:8月17号 机型:中型机 321 起飞时间:6:40 到达时间:10:00 票价:¥1095
航班:河北航NS8019 起点:北京 终点:杭州 出发日期:8月14号 机型:大型机 737 起飞时间:7:55 到达时间:10:10 票价:¥720
航班:海航Y87744 起点:哈尔滨 终点:深圳 出发日期:8月17号 机型:中型机737 起飞时间:14:35 到达时间:20:45 票价:¥1610
航班:吉祥HO1273 起点:上海 终点:海口 出发日期:8月22号 机型:中型机 321 起飞时间:22:30 到达时间:次日01:30 票价:¥720
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
3
请输入您需要增加航班批次的序号:1
请输入新的航班名称:a
请输入新航班的起始点:a
请输入新航班的终点:a
请输入新航班的出发日期:a
请输入新航班的飞机型号:a
请输入新航班的起飞时间:a
请输入新航班的到达时间:a
请输入新航班的票价:a
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
2
航班:a 起点:a 终点:a 出发日期:a 机型:a 起飞时间:a 到达时间:a 票价:a
航班:南航CZ4105 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:厦航MF8138 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 经停 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:青岛航QW9882 起点:哈尔滨 终点:青岛 出发日期:8月1号 机型:中型机 320 起飞时间:22:05 到达时间:次日00:25 票价:¥890
航班:湖南航A67138 起点:长沙 终点:昆明 出发日期:8月12号 机型:中型机 320 起飞时间:23:25 到达时间:次日1:30 票价:¥720
航班:川航3U1770 起点:长沙 终点:北京 出发日期:8月13号 机型:中型机 320共享 起飞时间:8:10 到达时间:10:25 票价:¥865
航班:厦航MF8234 起点:乌鲁木齐 终点:北京 出发日期:8月13号 机型:大型机 787 起飞时间:20:50 到达时间:次日00:35 票价:¥2710
航班:长龙GJ8255 起点:哈尔滨 终点:杭州 出发日期:8月17号 机型:中型机 321 起飞时间:6:40 到达时间:10:00 票价:¥1095
航班:河北航NS8019 起点:北京 终点:杭州 出发日期:8月14号 机型:大型机 737 起飞时间:7:55 到达时间:10:10 票价:¥720
航班:海航Y87744 起点:哈尔滨 终点:深圳 出发日期:8月17号 机型:中型机737 起飞时间:14:35 到达时间:20:45 票价:¥1610
航班:吉祥HO1273 起点:上海 终点:海口 出发日期:8月22号 机型:中型机 321 起飞时间:22:30 到达时间:次日01:30 票价:¥720
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
4
请输入你需要删除航班信息的序号:1
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
2
航班:南航CZ4105 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:厦航MF8138 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 经停 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:青岛航QW9882 起点:哈尔滨 终点:青岛 出发日期:8月1号 机型:中型机 320 起飞时间:22:05 到达时间:次日00:25 票价:¥890
航班:湖南航A67138 起点:长沙 终点:昆明 出发日期:8月12号 机型:中型机 320 起飞时间:23:25 到达时间:次日1:30 票价:¥720
航班:川航3U1770 起点:长沙 终点:北京 出发日期:8月13号 机型:中型机 320共享 起飞时间:8:10 到达时间:10:25 票价:¥865
航班:厦航MF8234 起点:乌鲁木齐 终点:北京 出发日期:8月13号 机型:大型机 787 起飞时间:20:50 到达时间:次日00:35 票价:¥2710
航班:长龙GJ8255 起点:哈尔滨 终点:杭州 出发日期:8月17号 机型:中型机 321 起飞时间:6:40 到达时间:10:00 票价:¥1095
航班:河北航NS8019 起点:北京 终点:杭州 出发日期:8月14号 机型:大型机 737 起飞时间:7:55 到达时间:10:10 票价:¥720
航班:海航Y87744 起点:哈尔滨 终点:深圳 出发日期:8月17号 机型:中型机737 起飞时间:14:35 到达时间:20:45 票价:¥1610
航班:吉祥HO1273 起点:上海 终点:海口 出发日期:8月22号 机型:中型机 321 起飞时间:22:30 到达时间:次日01:30 票价:¥720
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
5
请输入您需要修改航班的序号:1
请输入新的航班名称:b
请输入新航班的起始点:b
请输入新航班的终点:b
请输入新航班的出发日期:b
请输入新航班的飞机型号:b
请输入新航班的起飞时间:b
请输入新航班的到达时间:b
请输入新航班的票价:b
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
2
航班:b 起点:b 终点:b 出发日期:b 机型:b 起飞时间:b 到达时间:b 票价:b
航班:厦航MF8138 起点:呼和浩特 终点:泉州 出发日期:8月1日 机型:中型机737 经停 起飞时间:19:20 到达时间:次日00:05 票价:¥1290
航班:青岛航QW9882 起点:哈尔滨 终点:青岛 出发日期:8月1号 机型:中型机 320 起飞时间:22:05 到达时间:次日00:25 票价:¥890
航班:湖南航A67138 起点:长沙 终点:昆明 出发日期:8月12号 机型:中型机 320 起飞时间:23:25 到达时间:次日1:30 票价:¥720
航班:川航3U1770 起点:长沙 终点:北京 出发日期:8月13号 机型:中型机 320共享 起飞时间:8:10 到达时间:10:25 票价:¥865
航班:厦航MF8234 起点:乌鲁木齐 终点:北京 出发日期:8月13号 机型:大型机 787 起飞时间:20:50 到达时间:次日00:35 票价:¥2710
航班:长龙GJ8255 起点:哈尔滨 终点:杭州 出发日期:8月17号 机型:中型机 321 起飞时间:6:40 到达时间:10:00 票价:¥1095
航班:河北航NS8019 起点:北京 终点:杭州 出发日期:8月14号 机型:大型机 737 起飞时间:7:55 到达时间:10:10 票价:¥720
航班:海航Y87744 起点:哈尔滨 终点:深圳 出发日期:8月17号 机型:中型机737 起飞时间:14:35 到达时间:20:45 票价:¥1610
航班:吉祥HO1273 起点:上海 终点:海口 出发日期:8月22号 机型:中型机 321 起飞时间:22:30 到达时间:次日01:30 票价:¥720
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
7
请输入您的航班信息,不清楚请填写无!!!
请输入您的航班名称:
无
请输入您的航班起点:
哈尔滨
请输入您的航班终点:
无
请输入您的航班出行日期:
无
请输入您的航班机型:
无
请输入您的航班起飞时间:
无
请输入您的航班到达时间:
无
请输入您的航班价格:
无
航班:青岛航QW9882 起点:哈尔滨 终点:青岛 出发日期:8月1号 机型:中型机 320 起飞时间:22:05 到达时间:次日00:25 票价:¥890
航班:长龙GJ8255 起点:哈尔滨 终点:杭州 出发日期:8月17号 机型:中型机 321 起飞时间:6:40 到达时间:10:00 票价:¥1095
航班:海航Y87744 起点:哈尔滨 终点:深圳 出发日期:8月17号 机型:中型机737 起飞时间:14:35 到达时间:20:45 票价:¥1610
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
14
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
2
parameters illegal
: Success
|*****************************************|
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|-------------欢迎进入系统----------------|
| 请选择您要进行的操作: |
| 1、 初始化系统 |
| 2、 查看现有航班信息 |
| 3、 增加航班信息 |
| 4、 删除航班信息 |
| 5、 修改航班信息 |
| 6、 根据航班查找航班信息 |
| 7、 根据起点查找航班信息 |
| 8、 根据终点查找航班信息 |
| 9、 根据出发日期查找航班信息 |
| 10、根据机型查找航班信息 |
| 11、根据起飞时间查找航班信息 |
| 12、根据落地时间查找航班信息 |
| 13、根据票价查找航班信息 |
| 14、清空所有航班信息 |
| 15、退出系统 |
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ |
|*****************************************|
15 //输入15执行case 15操作,则flag=0,满足while(flag)条件退出循环
student@student-machine:~/psx_项目$