工程实践1(飞机订票系统)
一、项目介绍
在老师提供的工程实践项目中选择了飞机订票系统,目前主要完成了管理员的录入、删除、修改以及乘客的查询、预订、退订操作。
二、设计思路
先将不同用户功能分开,接着对项目数据进行设计,声明结构体,确定变量类型等等,最后进行编码。
三、代码
运行环境:codeblocks-20.03mingw
/*
文件名: main
作者: NutG
日期: 2021-6-15
描述: 系统主文件,包含乘客及管理员功能实现的函数
修改说明: 对功能进行完善
修改系统界面,使其更为方便使用 2021-6-15
完善缺少的管理员删除功能 2021-6-17
添加部分缺失注释 2021-6-18
版本声明: 第四版
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <time.h>
#include "searchFunction.c"
#define airfile "../files/airInfo.dat"
#define cusfile "../files/cusInfo.dat"
#define accfile "../files/accountInfo.dat"
int getTimeNum(void);
extern void freeFinfNode(FINF* head);
extern void freeOinfNode(OINF* head);
void cusLog(void);
void managerLog(void);
void accRegist(void);
int cusOper(LOG* passage);
int managerOper(LOG* passage);
extern FINF* searchFlight(char flightNum[],FINF* head);
extern FINF* searchDelFlight(char flightNum[],FINF* head);
extern OINF* searchOrdNum(int ordNum,OINF* head); //通过订单号查询
extern FINF* searchEnd(FINF* head);
extern FINF* searchFlightSite(FINF* head,char source[],char dest[]);
/*
全局变量fligHead
功能: 将航班信息以链表形式存储
*/
FINF* fligHead;
/*
函数功能: 整体流程控制
输入参数: 无
输出参数: 无
返回值: 0
调用关系(函数、表): cusLog
managerLog
accRegist
*/
int main(void)
{
int ctr = 0; //接受用户输入以进行操作判断
FINF* p;
FILE* fp;
fligHead = NULL;
fp = fopen(airfile,"rb+");
//读取文件中的航班信息以链表形式存储
while(1)
{
p = (FINF*)malloc(sizeof(FINF));
p->next = NULL;
if(fscanf(fp,"%s %s %s %s %f %f %f %f %d %d",p->flightNum,p->airNum,p->source,p->dest,&p->depart,&p->fall,
&p->fare,&p->discount,&p->total,&p->remain)==EOF)
{
break;
}
if(fligHead == NULL)
{
fligHead = p;
}
else
{
p->next = fligHead;
fligHead = p;
}
}/*----end-----*/
fclose(fp);
//输出菜单,直到用户退出方可结束循环
do
{
fflush(stdin);
printf("\t┌──────────────────────────────────────────────┐\n");
printf("\t 飞机订票系统 \n");
printf("\t└──────────────────────────────────────────────┘\n\n");
printf("\t************************************************\n");
printf("\t* 1. 乘客登录 *\n");
printf("\t* 2. 管理员登录 *\n");
printf("\t* 3. 注册乘客账号 *\n");
printf("\t* 4. 退出系统 *\n");
printf("\t************************************************\n\n");
printf("\t请输入要进行的操作: ");
if(scanf("%d",&ctr)!=1||ctr>4||ctr<0)
{
printf("\n输入格式错误,请重新输入!\n按任意键以继续\n");
fflush(stdin);
getchar();
ctr = 0;
system("cls");
continue;
}
system("cls");
//用户不同输入的响应
switch(ctr)
{
case 1:cusLog();break;
case 2:managerLog();break;
case 3:accRegist();break;
case 4: printf("\n\t再见,期待您下次使用本系统\n\t");
Sleep(2000);break;
default:break;
}/*------分支结束-----*/
}while(ctr!=4);
/*----循环结束-------*/
fp = fopen(airfile,"wb");
p = fligHead;
while(p!=NULL)
{
fprintf(fp,"%s %s %s %s %.2f %.2f %.1f %.1f %d %d\n",p->flightNum,p->airNum,
p->source,p->dest,p->depart,p->fall,p->fare,
p->discount,p->total,p->remain);
p = p->next;
}/*---循环结束---*/
fclose(fp);
freeFinfNode(fligHead);
return 0;
}
/*
函数功能: 实现用户登录
输入参数: 无
输出参数: 无
返回值: 无
调用关系(函数、表): cusOper()
*/
void cusLog(void)
{
FILE* fp;
LOG* head;
char account[20];
char password[20];
int flg = 0; //确定是否登陆成功
int flgOper = 0; //接收Oper函数返回值已确定循环是否结束
head = malloc(sizeof(LOG));
fp = fopen(accfile,"rb");
printf("\t---------------------------\n");
printf("\t 乘客登录 \n");
printf("\t---------------------------\n");
printf("\t***************************\n");
printf("\t账号:");
scanf("%s",account);
printf("\t密码:");
scanf("%s",password);
printf("\t***************************\n");
//对比accountData文件内容,实现登录
while(fscanf(fp,"%d %s %s %s %s",&head->ctrNum,head->name,head->IDNum,head->account,head->password)!=EOF)
{
if(strcmp(head->account,account)==0&&strcmp(head->password,password)==0&&head->ctrNum==0)
{
printf("\t登陆成功( ̄▽ ̄)");
Sleep(1000);
printf("\t欢迎您,%s!\n",head->name);
system("cls");
flg = 1;
flgOper = cusOper(head);
break;
}
else
{
continue;
}
}/*---循环结束---*/
if(!flg)
{
printf("\t账号或密码错误!╮(╯﹏╰)╭\n\t");
Sleep(1000);
system("cls");
}
//乘客菜单循环
while(flgOper)
{
flgOper = cusOper(head);
}/*---循环结束---*/
fclose(fp);
}
/*
函数功能: 管理员登录
输入参数: 无
输出参数: 无
返回值: 无
调用关系(函数、表): managerOper()
*/
void managerLog(void)
{
FILE* fp;
LOG* head;
char account[20];
char password[20];
int flg = 0; //管理员登录成功标志 1
int flgOper = 0; //接收管理员操作返回值确定是否结束循环
head = malloc(sizeof(LOG));
fp = fopen(accfile,"rb");
printf("\t---------------------------\n");
printf("\t 管理员登录 \n");
printf("\t---------------------------\n");
printf("\t***************************\n");
printf("\t账号:");
scanf("%s",account);
printf("\t密码:");
scanf("%s",password);
printf("\t***************************\n");
rewind(fp);
//对比accountData文件内容,实现登录
while(fscanf(fp,"%d %s %s %s %s",&head->ctrNum,head->name,head->IDNum,head->account,head->password)!=EOF)
{
if(strcmp(head->account,account)==0&&strcmp(head->password,password)==0&&head->ctrNum==1)
{
printf("\t登陆成功( ̄▽ ̄)\n");
printf("\t欢迎您,%s!\n\t",head->name);
Sleep(1000);
system("cls");
flg = 1;
flgOper = managerOper(head);
break;
}
else
{
continue;
}
}/*---循环结束---*/
if(!flg)
{
printf("\t账号或密码错误!╮(╯﹏╰)╭\n\t");
Sleep(1000);
system("cls");
}
//管理员操作循环
while(flgOper)
{
flgOper = managerOper(head);
}/*---循环结束---*/
fclose(fp);
}
/*
函数功能: 乘客账号注册
输入参数: 无
输出参数: 无
返回值: 无
调用关系(函数、表): 未调用自定函数
*/
void accRegist(void)
{
FILE* fp;
LOG passage;
fp = fopen(accfile,"ab");
printf("\t---------------------------\n");
printf("\t 乘客账号注册 \n");
printf("\t---------------------------\n");
printf("\t***************************\n");
printf("\t姓名:");
scanf("%s",passage.name);
printf("\t证件号:");
scanf("%s",passage.IDNum);
printf("\t账号:");
scanf("%s",passage.account);
printf("\t密码:");
scanf("%s",passage.password);
printf("\t***************************\n");
fprintf(fp,"%d %s %s %s %s\n",0,passage.name,passage.IDNum,passage.account,passage.password);
fclose(fp);
printf("\t注册成功,%s\n\t",passage.name);
Sleep(1000);
system("cls");
}
/*
函数功能: 实现乘客操作功能
输入参数: 登录账号信息地址
输出参数: 无
返回值: 0(退出cusLog()中的调用)/1(重复cusLog()中的调用)
调用关系(函数、表): searchFlight
searchFlightSite
searchOrdNum
getTimeNow
freeOinfNode
*/
int cusOper(LOG* passage)
{
int ctrNum; //接收乘客输入控制流程
int ctrNum2; //接收乘客查询航班界面的输入
int ordCount = 0; //订单计数以控制格式输出
char ctrC; //删除退订操作二次确认
char flightNum[20];
char source[20];
char dest[20];
FILE* fp;
OINF* ordHead;
OINF* p;
OINF* tail;
OINF* obj_; //接收查询到订单地址
FINF* obj; //接收查询到航班地址
ordHead = NULL;
fp=fopen(cusfile,"rb+");
//订单信息读取
while(1)
{
p = (OINF*)malloc(sizeof(OINF));
p->next = NULL;
if(fscanf(fp,"%d %s %s %s",&p->num,p->name,p->IDnum,p->flightNum)==EOF)
{
break;
}
if(ordHead==NULL)
{
ordHead = p;
tail = p;
}
else
{
tail->next = p;
tail = p;
}
}/*----循环结束----*/
printf("\t乘客操作:\n");
printf("\t*****************************\n");
printf("\t* 1. 查询航班 *\n");
printf("\t* 2. 预订航班 *\n");
printf("\t* 3. 退订航班 *\n");
printf("\t* 4. 退出 *\n");
printf("\t*****************************\n");
printf("\t请选择您要进行的操作:");
//输入格式错误判定
if(scanf("%d",&ctrNum)!=1||ctrNum>4||ctrNum<1)
{
printf("\n\t输入格式错误,请重新输入!\n\t按任意键以继续\n\t");
fflush(stdin);
getchar();
system("cls");
return 1;
}
//查询航班操作
if(ctrNum==1)
{
system("cls");
printf("\t航班查询:\n");
printf("\t********************************\n");
printf("\t* 1. 航班编号 *\n");
printf("\t* 2. 起飞-降落地点 *\n");
printf("\t********************************\n");
printf("\t请输入您的操作:");
if(scanf("%d",&ctrNum2)!=1||ctrNum2>3||ctrNum2<1)
{
printf("\n\t输入格式错误,请重新输入!\n\t按任意键以继续\n\t");
fflush(stdin);
getchar();
system("cls");
return 1;
}
//航班编号查询
if(ctrNum2==1)
{
printf("\t请输入航班编号:");
scanf("%s",flightNum);
printf("\n");
obj = searchFlight(flightNum,fligHead);
if(obj==NULL)
{
printf("\t未查询到您需要的航班╮(╯﹏╰)╭\n\t");
Sleep(1000);
system("cls");
}
else
{
printf("\t您所查询的航班信息如下:\n");
printf("\t航班编号 飞机编号 起飞地点 降落地点 起飞时间 降落时间 票价 折扣 总票数 剩余票数\n");
printf("\t*****************************************************\n");
printf("\t%-8s %-8s %-8s %-8s %-8.2f %-8.2f %-8.1f %-8.1f %-8d %-8d\n",obj->flightNum,obj->airNum,obj->source
,obj->dest,obj->depart,obj->fall,obj->fare,obj->discount,obj->total,obj->remain);
printf("\t*****************************************************\n\n");
printf("\t请记下航班编号后前往“预订航班”中进行预订( ̄▽ ̄)\n");
printf("\t按任意键以继续\n\t");
fflush(stdin);
getchar();
system("cls");
}
}
//航班起降地点查询
else if(ctrNum2==2)
{
printf("\t请输入航班起降地点(形如“起飞地点 降落地点”)\n\t");
scanf("%s %s",source,dest);
obj = searchFlightSite(fligHead,source,dest);
if(obj==NULL)
{
printf("\t未查询到您需要的航班╮(╯﹏╰)╭\n\t");
Sleep(1000);
system("cls");
}
else if(obj!=NULL)
{
printf("\n\t查询到的航班信息如下:\n");
printf("\t航班编号 飞机编号 起飞地点 降落地点 起飞时间 降落时间 票价 折扣 总票数 剩余票数\n");
printf("\t*****************************************************\n");
while(obj!=NULL)
{
printf("\t%-8s %-8s %-8s %-8s %-8.2f %-8.2f %-8.1f %-8.1f %-8d %-8d\n",obj->flightNum,obj->airNum,obj->source
,obj->dest,obj->depart,obj->fall,obj->fare,obj->discount,obj->total,obj->remain);
obj = searchFlightSite(obj->next,source,dest);
}
printf("\t*****************************************************\n");
printf("\t请记下航班编号后前往“预订航班”中进行预订( ̄▽ ̄)\n");
printf("\t按任意键以继续\n\t");
fflush(stdin);
getchar();
system("cls");
}
}
}/*---查询航班功能结束---*/
//预定航班
else if(ctrNum==2)
{
printf("\t请输入需预订航班的航班号:");
scanf("%s",flightNum);
obj = searchFlight(flightNum,fligHead);
if(obj==NULL)
{
printf("\t未查询到该航班!\n\t");
Sleep(1000);
system("cls");
return 1;
}
printf("\n\t是否确定预订航班%s:\n",obj->flightNum);
printf("\t航班编号 飞机编号 起飞地点 降落地点 起飞时间 降落时间 票价 折扣 总票数 剩余票数\n");
printf("\t*****************************************************\n");
printf("\t%-8s %-8s %-8s %-8s %-8.2f %-8.2f %-8.1f %-8.1f %-8d %-8d\n",obj->flightNum,obj->airNum,obj->source,obj->dest,obj->depart,
obj->fall,obj->fare,obj->discount,obj->total,obj->remain);
printf("\t*****************************************************\n");
printf("\tY/N(y/n)\n\t");
fflush(stdin);
scanf("%c",&ctrC);
if(ctrC=='Y'||ctrC=='y')
{
obj->remain--;
ordCount = getTimeNum();
fprintf(fp,"%d %s %s %s\n",ordCount,passage->name,passage->IDNum,obj->flightNum);
printf("\t预订成功\n\t");
Sleep(1000);
}
system("cls");
}/*---预定航班功能结束---*/
//退订航班
else if(ctrNum==3)
{
p = ordHead;
//剔除不属于本登录账号的订单
while(p!=NULL)
{
if(strcmp(p->name,passage->name)==0&&ordCount==0)
{
printf("\n\t订单编号 姓名 证件号码 航班编号");
printf("\n\t*****************************************************\n");
}
if(strcmp(p->name,passage->name)==0)
{
printf("\t%-14d%-8s%-18s%-8s\n",p->num,p->name,p->IDnum,p->flightNum);
ordCount++;
}
p = p->next;
}/*---数据处理结束---*/
if(ordCount!=0)
{
printf("\t*****************************************************\n");
}
//无预定航班
if(ordCount==0)
{
printf("\n\t暂无预订订单 ╮(╯﹏╰)╭\n\t");
Sleep(1000);
system("cls");
return 1;
}
else
{
printf("\t以上为您的预订订单 ( ̄▽ ̄)\n");
}
printf("\n\t请输入订单号以退订:");
scanf("%d",&ctrNum);
printf("\t是否确定退订?\n\tY/N(y/n)\n\t");
fflush(stdin);
scanf("%c",&ctrC);
if(ctrC=='N'||ctrC=='n')
{
printf("\t取消退订成功\n\t");
Sleep(1000);
}
if(ctrC=='Y'||ctrC=='y')
{
if(ordHead->num==ctrNum)
{
ordHead = ordHead->next;
}
else
{
obj_ = searchOrdNum(ctrNum,ordHead);
if(obj_==NULL)
{
printf("\t未查询到该订单╮(╯﹏╰)╭\n\t");
Sleep(1000);
}
else
{
obj = searchFlight(obj_->next->flightNum,fligHead);
obj->remain++;
obj_->next = obj_->next->next;
printf("\t退订成功( ̄▽ ̄)\n");
printf("\t按任意键以继续\n\t");
fflush(stdin);
getchar();
}
}
}
fclose(fp);
fp = fopen(cusfile,"wb");
p = ordHead;
//写入修改后的订单信息
while(p!=NULL)
{
fprintf(fp,"%6d %s %s %s\n",p->num,p->name,p->IDnum,p->flightNum);
p = p->next;
}/*---循环结束---*/
system("cls");
}
//退出操作
else if(ctrNum==4)
{
system("cls");
return 0;
}
fclose(fp);
freeOinfNode(ordHead);
return 1;
}
/*
函数功能: 实现管理员操作
输入参数: 登录账号信息地址
输出参数: 无
返回值: 0(退出managerLog()中的调用)/1(重复managerLog()中的调用)
调用关系(函数、表): searchFlight
searchDelFlight
*/
int managerOper(LOG* passage)
{
int ctrNum;
char flightNum[20];
FINF* pDest; //接收查询目标航班信息地址
FINF* add; //存储待录入航班信息
add = (FINF*)malloc(sizeof(FINF));
printf("\t管理员操作:\n");
printf("\t*****************************\n");
printf("\t* 1. 录入航班信息 *\n");
printf("\t* 2. 修改航班信息 *\n");
printf("\t* 3. 删除航班信息 *\n");
printf("\t* 4. 退出操作 *\n");
printf("\t*****************************\n");
printf("\t请输入要进行的操作:");
//输入格式错误判定
if(scanf("%d",&ctrNum)!=1||ctrNum>4||ctrNum<1)
{
printf("\n\t输入格式错误,请重新输入!\n\t按任意键以继续\n\t");
fflush(stdin);
getchar();
system("cls");
return 1;
}
//录入航班信息
if(ctrNum == 1)
{
pDest = searchEnd(fligHead);
printf("\t请输入需要录入的航班信息:\n");
printf("\t航班编号:");
scanf("%s",pDest->flightNum);
printf("\t飞机编号:");
scanf("%s",pDest->airNum);
printf("\t起飞地点:");
scanf("%s",pDest->source);
printf("\t降落地点:");
scanf("%s",pDest->dest);
printf("\t起飞时间(XX.XX):");
scanf("%f",&pDest->depart);
printf("\t降落时间(XX.XX):");
scanf("%f",&pDest->fall);
printf("\t票价:");
scanf("%f",&pDest->fare);
printf("\t折扣:");
scanf("%f",&pDest->discount);
printf("\t总票数:");
scanf("%d",&pDest->total);
printf("\t剩余票数:");
scanf("%d",&pDest->remain);
add->next = NULL;
pDest->next = add;
printf("\t航班信息录入成功!( ̄▽ ̄)\n\t");
Sleep(1000);
}/*---录入航班信息功能结束---*/
//修改航班信息
else if(ctrNum==2)
{
printf("\t请输入要修改的航班编号:");
scanf("%s",flightNum);
if((pDest = searchFlight(flightNum,fligHead))==NULL) //返回需要修改航班的链表地址,如果找不到返回NULL
{
printf("\t未找到需要修改的航班信息!╮(╯﹏╰)╭\n");
printf("\t请重新输入或者退出!\n\t");
Sleep(1000);
}
else
{
printf("\t请输入修改后的航班信息:\n");
printf("\t航班编号:");
scanf("%s",pDest->flightNum);
printf("\t飞机编号:");
scanf("%s",pDest->airNum);
printf("\t起飞地点:");
scanf("%s",pDest->source);
printf("\t降落地点:");
scanf("%s",pDest->dest);
printf("\t起飞时间(XX.XX):");
scanf("%f",&pDest->depart);
printf("\t降落时间(XX.XX):");
scanf("%f",&pDest->fall);
printf("\t票价:");
scanf("%f",&pDest->fare);
printf("\t折扣:");
scanf("%f",&pDest->discount);
printf("\t总票数:");
scanf("%d",&pDest->total);
printf("\t剩余票数:");
scanf("%d",&pDest->remain);
printf("\t修改成功!( ̄▽ ̄)\n\t");
Sleep(1000);
}
}/*---修改航班信息功能结束---*/
//删除航班信息
else if(ctrNum==3)
{
printf("\t请输入要删除航班的航班编号:");
scanf("%s",flightNum);
if(strcmp(fligHead->flightNum,flightNum)==0)
{
fligHead = fligHead->next;
printf("\t删除成功!( ̄▽ ̄)\n\t");
Sleep(1000);
}
else if((pDest = searchDelFlight(flightNum,fligHead))!=NULL)
{
pDest->next = pDest->next->next;
printf("\t删除成功!( ̄▽ ̄)\n\t");
Sleep(1000);
}
else
{
printf("\t未查询到您需删除的航班!╮(╯﹏╰)╭\n\t");
Sleep(1000);
}
}/*---删除航班信息功能结束---*/
//退出
else if(ctrNum==4)
{
system("cls");
return 0;
}
else
{
printf("\t输入操作序号有误!╮(╯﹏╰)╭\n");
printf("\t请输入正确的操作序号!\n\t");
Sleep(1000);
system("cls");
return 1;
}
system("cls");
return 1;
}
/*
函数功能: 获取系统当前时间
输入参数: 无
输出参数: 无
返回值: 将 月日时分秒 以int类型返回
调用关系(函数、表): 未调用自定函数
*/
int getTimeNum(void)
{
int timeNum = 0; //存储处理后的订单号
time_t now;
struct tm* nowTime;
now = time(NULL);
nowTime = localtime(&now);
timeNum = nowTime->tm_mon*100000000+100000000+nowTime->tm_mday*1000000
+nowTime->tm_hour*10000+nowTime->tm_min*100+nowTime->tm_sec;
return timeNum;
}
/*
文件名: searchFunction
作者: NutG
日期: 2021-6-15
描述: 包涵主文件中所需要的搜索功能函数的定义
修改说明: 增添了几个新的搜索函数
添加注释 2021-6-17
版本声明: 1.1
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define airfile "../files/airInfo.dat"
#define cusfile "../files/cusInfo.dat"
#define accfile "../files/accountInfo.dat"
typedef struct accData
{
int ctrNum;
char name[20];
char IDNum[20];
char account[20];
char password[20];
struct accData* next;
}LOG;
typedef struct flightInf
{
char flightNum[20]; //航班编号
char airNum[20]; //飞机编号
char source[20];
char dest[20];
float depart;
float fall;
float fare;
float discount;
int total;
int remain;
struct flightInf* next;
}FINF;
typedef struct orderInf
{
int num;
char name[20];
char IDnum[20];
char flightNum[20];
struct orderInf* next;
}OINF;
void freeFinfNode(FINF* head);
void freeOinfNode(OINF* head);
FINF* searchFlight(char flightNum[],FINF* head);
FINF* searchDelFlight(char flightNum[],FINF* head);
OINF* searchOrdNum(int ordNum,OINF* head); //通过订单号查询
FINF* searchEnd(FINF* head);
FINF* searchFlightSite(FINF* head,char source[],char dest[]);
/*
函数功能: 通过航班编号查找航班信息地址
输入参数: 航班编号flightNum 航班信息链表头head
输出参数: 无
返回值: 返回该航班编号的地址/NULL(未查询到匹配航班)
调用关系(函数、表): 未调用自定函数
*/
FINF* searchFlight(char flightNum[],FINF* head)
{
FINF* p;
p = head;
//链表遍历
while(p!=NULL)
{
if(strcmp(p->flightNum,flightNum)==0)
{
return p;
}
p = p->next;
}//循环结束
return NULL;
}
/*
函数功能: 通过航班编号查找需要删除的航班信息地址
输入参数: 待删除航班编号flightNum 航班信息链表头head
输出参数: 无
返回值: 返回待删除航班编号所在节点的前一个节点地址/NULL(未查询到匹配航班)
调用关系(函数、表): 未调用自定函数
*/
FINF* searchDelFlight(char flightNum[],FINF* head)
{
FINF* p;
p = head;
while(p->next!=NULL)
{
if(strcmp(flightNum,p->next->flightNum)==0)
{
return p;
}
p = p->next;
}
return NULL;
}
/*
函数功能: 通过航班起降地点查找航班信息地址
输入参数: 航班信息链表头head 起飞地点source 降落地点dest
输出参数: 无
返回值: 返回该航班地址/NULL(未查询到匹配航班)
调用关系(函数、表): 未调用自定函数
*/
FINF* searchFlightSite(FINF* head,char source[],char dest[])
{
FINF* p;
p = head;
while(p!=NULL)
{
if(strcmp(p->source,source)==0&&strcmp(p->dest,dest)==0)
{
return p;
}
p = p->next;
}
return NULL;
}
/*
函数功能: 通过订单编号查找订单信息地址
输入参数: 订单编号ordNum 订单信息链表头head
输出参数: 无
返回值: 返回该订单地址/NULL(未查询到匹配订单)
调用关系(函数、表): 未调用自定函数
*/
OINF* searchOrdNum(int ordNum,OINF* head)
{
OINF* p;
p = head;
while(p->next!=NULL)
{
if(p->next->num==ordNum)
{
return p;
}
p = p->next;
}
return NULL;
}
/*
函数功能: 定位航班信息链表结尾
输入参数: 航班信息链表头head
输出参数: 无
返回值: 返回结尾节点地址
调用关系(函数、表): 未调用自定函数
*/
FINF* searchEnd(FINF* head)
{
FINF* p;
p = head;
while(p->next!=NULL)
{
p = p->next;
}
return p;
}
/*
函数功能: 释放航班信息链表
输入参数: 航班信息链表头head
输出参数: 无
返回值: 无
调用关系(函数、表): 未调用自定函数
*/
void freeFinfNode(FINF* head)
{
FINF* p;
FINF* p2;
p = head->next;
p2 = head;
while(p!=NULL)
{
free(p2);
p2 = p;
p = p->next;
}
}
/*
函数功能: 释放订单信息链表
输入参数: 订单信息链表头head
输出参数: 无
返回值: 无
调用关系(函数、表): 未调用自定函数
*/
void freeOinfNode(OINF* head)
{
OINF* p;
OINF* p2;
p = head->next;
p2 = head;
while(p!=NULL)
{
free(p2);
p2 = p;
p = p->next;
}
}
以上为飞机订票系统的源码,因为时间不足,部分细节及功能还暂未实现,也可能会有部分错误,如有问题,请及时告知以修改,多谢!
淡雅随和,宁静致远!