C语言飞机订票系统Word文件下载.docx
《C语言飞机订票系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言飞机订票系统Word文件下载.docx(29页珍藏版)》请在冰豆网上搜索。
//机票数
structflightnode*next;
}NODE;
2.基本功能模块
主函数模块。
1)函数原形:
voidmain();
2)功能:
调用initlist(&
h)函数和menu()函数,初始化函数和显示主界面
创建航班信息模块
voidcreat();
本模块是对程序中的create()函数和save()函数的详细说明——链表的存储结构,对该创建的链表调用save()函数,存储到数据文件中去
浏览航班信息模块
1)函数原形:
voidprint();
2)功能:
输出航班信息
修改航班信息模块
1)函数原形:
voidchange()
当航班信息改变可以修改航班数据文件
3.主要功能模块流程图
四、系统测试
1.选择1,运行界面如下:
2.选择2,运行界面如下:
3.选择3,运行界面如下:
4.选择4,运行界面如下:
5.选择5,运行界面如下:
6.选择6,运行界面如下:
7.选择7,运行界面如下:
8.选择8,运行界面如下:
9.选择0,运行界面如下:
五.结论
本次程序设计主要用到了结构体、调用函数、文件的保存、输入以及输出等功能。
使我对数据结构有了更深一层的认识,特别是对动态链表和文件的运用得到了很大的提高。
在本次实验中程序曾多次编译、运行出错,多亏了王帅老师的指导才将错误找出并改正,通过本次实验,我认识到实践和动手的重要性。
六.源程序及系统文件使用说明
程序清单
#include<
stdio.h>
//标准输入、输出头文件
string.h>
//包含字符串函数处理头文件
stdlib.h>
//包含动态存储与释放函数头文件
charStime[10];
charEtime[10];
floatDiscount;
structflightnode*next;
#definePRINT"
%4d%9.6s%9.6s%9.6s%9.6s%9d%.1f%9d\n"
p->
next->
num,p->
start,p->
over,p->
Stime,p->
Etime,p->
Price,p->
Discount,p->
count//定义输出格式
//创建航班信息文件
voidprint();
//输出航班信息
voidsave();
//保存航班信息
intread();
//读取航班信息
NODE*search();
//查找航班信息
voiddel();
//删除航班信息
intbook_tickets();
//订票信息
inttuipiao();
//退票信息
voidchange();
//修改信息
voidmenu();
//菜单
voidinitlist(NODE**);
//初始化函数
voidadd();
//添加信息函数
NODE*h=NULL;
//建立全局变量,存链表头指针
intm=0;
//航班数量
voidinitlist(NODE**h)
*h=(NODE*)malloc(sizeof(NODE));
(*h)->
next=NULL;
}
voidcreat()//打印模块程序
{
FILE*fp;
NODE*p=NULL;
//定义移动指针
inti,flightnum;
chary;
p=h;
if((fp=fopen("
air.dat"
"
rb"
))!
=NULL)//打开文件,并判断是否出错
{
printf("
信息文件已经存在,不必创建!
按任意键后回车返回\n\n\n"
);
//打印出错提示
fclose(fp);
fflush(stdin);
getchar();
return;
}
printf("
请输入要输入的航班数量:
"
fflush(stdin);
//清除文件缓冲区
scanf("
%d"
&
flightnum);
//读取航班数
system("
cls"
//清屏
请依次输入航班信息:
\n\n"
//打印提示信息
--------------------------------------------------------------------------\n"
for(i=0;
i<
flightnum;
i++)
p->
next=(NODE*)malloc(sizeof(NODE));
航班号:
scanf("
p->
num);
//读取航班号
起始站:
%10s"
start);
//读取起飞城市
终点站:
over);
//读取抵达城市
起始时间:
Stime);
//读取起飞时间
抵达时间:
Etime);
//读取抵达时间
航班票价:
Price);
//读取航班票价
票价折扣:
%10f"
Discount);
//读取票价折扣
机票数:
m);
count);
//读取机票数
第%d个信息已经输完\n"
i+1);
p=p->
next;
m++;
}
信息输入完毕,是否存盘:
存盘按0,不存盘按其他任意键"
y=getchar();
if(y=='
0'
)
{
save();
//将结构体信息存盘
print();
//输出输入的航班信息
}
voidsave()//保存模块程序
//定义移动指针
FILE*fp,*fp1;
//定义指向文件指针
wb"
))==NULL)//打开文件并判断是否出错
创建文件失败!
\n\n\n"
return;
if((fp1=fopen("
num.dat"
创建文件失败!
while(p->
next!
=NULL)
if(fwrite(p->
next,sizeof(NODE),1,fp)==0)//向文件写入数据,并判断是否出错
printf("
向文件输入数据失败!
break;
elsep=p->
fprintf(fp1,"
//按指定的格式输出到fp1所指定的文件中
fclose(fp);
//关闭文件
fclose(fp1);
intread()//从文件读取信息模块
//定义文件指针
inti;
initlist(&
h);
))==NULL)//打开文件,并判断是否出错
出错,请检查信息文件是否存在,按任意键后回车返回住菜单\n\n\n"
return0;
\\n\n\n"
fscanf(fp1,"
m);
//从fp1所指定的文件中按给定的格式将输入数据送内存中
\n总共%d个航班信息\n"
m;
fread(p->
next,sizeof(NODE),1,fp);
//从文件中读取信息
return1;
voidprint()//打印模块
if(read()==0)return;
//调用读取文件函数,并判断是否文件存在。
═══════════════════════════════════════\n"
航班号起始站终点站起始时间抵达时间航班票价票价折扣票数\n"
printf(PRINT);
//打印信息
═══════════════════════════════════════"
\n\n\n\n\n\n请按任意键后回车结束返回上层菜单:
\n"
getchar();
NODE*search()//查询模块
NODE*x=NULL;
/*用于记录查询到的记录*/
charname1[20];
charname2[20];
charii[10];
intn,no;
intflag=0;
if(read()==0)return0;
do
请选择查找方式:
//打印查询方式菜单
1.按航班号查找\n\n"
"
2.按终点站查找\n\n"
3.按航线查找\n\n"
0.返回\n\n"
请在0-3中选择:
按其他键后回车返回主菜单:
\n\n\n\n\n"
n);
//读取查找方式
if(n==0)
switch(n)
case1:
请输入航班号:
fflush(stdin);
scanf("
no);
//航班号
case2:
请输入终点站名称:
name2);
//读取终点站
case3:
请输入起始站名称:
name1);
//读取起始站
//终点站
default:
请选择有效查询方式!
while(p->
{
if(strcmp(p->
start,name1)==0||strcmp(p->
over,name2)==0)//按终点站起始站判断输出条件
{
printf("
\n查找航班信息成功!
航班号起始站终点站起始时间抵达时间航班票价票价折扣票数\n"
printf(PRINT);
x=p->
flag=1;
break;
}
if(p->
num==no)//按航班号判断输出条件
{
}
p=p->
if(!
flag)printf("
查找失败!
:
printf("
是否重新查找?
请键入yes或no\n"
后回车键结束\n"
-------------------------------------------------\n\n\n\n\n"
no=0;
//将航班号赋值为0
p=h;
flag=0;
ii);
}while(strcmp(ii,"
yes"
)==0);
//判断结束
return(x);
voidadd()
intflightnum;
inti,y;
NODE*p=NULL;
i=read();
if(i==0)return;
=NULL)p=p->
起飞城市:
抵达城市:
起飞时间:
}
存盘按0,不存盘按其他任意键后回车"
y);
if(y==0)
save();
print();
voiddel()//删除模块
NODE*temp=NULL;
intno,n;
if(read()==0)return;
;
//调用读取函数
do
请选择删除以方式回车键结束:
*1.按航班号删除\n\n"
"
*2.按航线删除\n\n"
*0.返回\n\n"
请在0-2中选择以回车键结束:
//读取删除方式
if(n==0)
//跳出循环
switch(n)
case1:
航班号:
fflush(stdin);
scanf("
p=h;
case2:
起始站名称:
终点站名称:
//读取终点站
default:
请选择有效的选项:
continue;
while(p->
{if(p->
num==no||(strcmp(p->
start,name1)==0&
&
strcmp(p->
over,name2)==0)).//判断输入信息是否存在
{
temp=p->
p->
next=temp;
m--;
flag=1;
printf("
删除成功!
剩余%d条信息\n\n\n\n\n"
break;
}
p=p->
if(!
flag)printf("
没有这个信息!
是否继续删除\n"
请键入yes或no以回车键结束\n"
//读取是否继续信息
//调用存储函数
strcmp(ii,"
))//判断是否继续删除
请按任意键后回车结束返回上层菜单:
\n\n\n\n\n\n"
}whi