飞机订票系统 C语言编的飞机订票系统 C语言编的
淮北师范大学
程序设计课程设计
学生姓名: 葛 丽
学 号: 20091202014
所在院(系): 计算机科学与技术学院
专 业: 计算机科学与技术 非师
指 导 教 师: 王 帅
2011年04月14日
淮北师范大学计算机学院c程序设计报告
一、课程设计目的
(1)了解并掌握算法的设计方法,具备初步的独立分析和设计能力; (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 二、课...
飞机订票系统 C语言编的
淮北师范大学
程序设计课程设计
学生姓名: 葛 丽
学 号: 20091202014
所在院(系): 计算机科学与技术学院
专 业: 计算机科学与技术 非师
指 导 教 师: 王 帅
2011年04月14日
淮北师范大学计算机学院c程序设计
一、课程设计目的
(1)了解并掌握算法的设计方法,具备初步的独立分析和设计能力; (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力; 二、课程设计的内容和要求
本程序主要用于机票的管理,甩以提供了以下功能,行班信息输入输出保 存、航线查询、订票,退票,和修改航班信息。
创建航班信息:包括航班号、起飞时间、降落时间、起飞抵达城市、航班票价、及票价的折扣,票数等信息.录入的信息应该保存在一个文件里。 浏览航班信息:通过浏览系统,客户可以根据自己时间、金钱等多方面的因素选择适合自己的航班。
修改航班信息:当航班信息改变可以修改航班数据文件。
查询航班信息:可通过航班号查询,可通过飞机终点站查询,也可以按航线查询。 删除航班信息:可通过航班号删除,也可以按航线删除。
添加航班信息:按添加的航班数量依次添加航班信息
订票:可以订票,如果该航班已经无票,可以推荐相关航班
退票:不满意所订的票时可进行退票
三、算法的基本思想
1.涉及到的数据结构
typedef struct flightnode //定义结构体数组
{
int num; //航班号
char start[20]; //起始城市
char over[20]; //终点城市
char Stime[10]; //起始时间
har Etime[10];
int Price;
int Discount; //折扣
int count; //机票数
struct flightnode *next;
} NODE;
2
淮北师范大学计算机学院c程序设计报告
2.基本功能模块
飞机票管理系统
创浏修查删添 建览改找除加 航航航航航航订退
班班班班班班票 票 信信信信信信
息 息 息 息 息 息
主函数模块。
1)函数原形:void main();
2)功能:调用initlist(&h) 函数和menu()函数,初始化函数和显示主界面 创建航班信息模块
1)函数原形:void creat();
2)功能:本模块是对程序中的create()函数和save()函数的详细说明——链
表的存储结构,对该创建的链表调用save()函数,存储到数据文件中去 浏览航班信息模块
1) 函数原形: void print();
2) 功能:输出航班信息
修改航班信息模块
1)函数原形: void change() 2) 功能:当航班信息改变可以修改航班数据文件
3
淮北师范大学计算机学院c程序设计报告
20查找航班信息模块
1)函数原形: NODE *search():查找航班信息数据
2) 功能:由于航班的录入和保存是由链表存储结构进行的,所以此查询就可通过链表对该文件进行查看或者查询,查询我们可根据航班号和航班抵达的城市和航线匹配查询,在查询中将需要查询的航班号 no和文件阅读时指针所指的值num进行比较,而按抵达城市查找则利用函数strcmp(p->next->start,name1)
若匹配则输出;
删除航班信息模块
1)函数原形: void del()
2) 功能:选择按什么方式删除,然后按该方式删除
添加航班信息模块
1)函数原形: void add();
2) 功能:按添加的航班数量依次添加航班信息
订票信息模块
1)函数原形: int book_tickets()
2) 功能:先根据search()函数查询要订票的航班,在订票时应先按乘客想要定的航班号或者抵达城市或航线查询,并按乘客欲定的票的数目与查询数目进行比较,若订票的票数小于该航班票数,则输出订票成功,,且在整个定票系统中,所有的定票都用链表进行存储管理
退票信息模块
1)函数原形: int tuipiao()
2) 功能:在退票系统中即对航班票的数据文件进行管理,所以可先按照查询航班票的方法,若查询到的票的信息和乘客此时要求退票的信息相匹配,则在该定票数据文件中删除相应的该票的节点,再修改其航班信息
。
4
淮北师范大学计算机学院c程序设计报告
3(主要功能模块流程图
开始
输出界面
选择操作
创建航班信息 选择1
浏览航班信息 选择2
选择3 修改航班信息
按航班或终点站查找航班信息 选择4 或航线
删除航班信息 按航班号或航线 选择5
添加航班信息 选择6
选择7 订票信息
退票信息 选择8
退出 选择0
结束
5
淮北师范大学计算机学院c程序设计报告
四、系统测试
1.选择1,运行界面如下:
6
淮北师范大学计算机学院c程序设计报告
2(选择2,运行界面如下:
3(选择3,运行界面如下:
7
淮北师范大学计算机学院c程序设计报告
4(选择4,运行界面如下:
5(选择5,运行界面如下:
8
淮北师范大学计算机学院c程序设计报告
6.选择6,运行界面如下:
7.选择7,运行界面如下:
9
淮北师范大学计算机学院c程序设计报告
8.选择8,运行界面如下:
9.选择0,运行界面如下:
五(结论
本次程序设计主要用到了结构体、调用函数、文件的保存、输入以及输出等功能。使我对数据结构有了更深一层的认识,特别是对动态链表和文件的运用得到了很大的提高。
在本次实验中程序曾多次编译、运行出错,多亏了王帅老师的指导才将错误找出
10
淮北师范大学计算机学院c程序设计报告 并改正,通过本次实验,我认识到实践和动手的重要性。 六(源程序及系统文件使用说明
程序清单
#include
//输入、输出头文件 #include //包含字符串函数处理头文件 #include //包含动态存储与释放函数头文件 typedef struct flightnode //定义结构体数组 {
int num; //航班号
char start[20]; //起始城市
char over[20]; //终点城市
char Stime[10]; //起始时间
char Etime[10];
int Price;
float Discount; //折扣
int count; //机票数
struct flightnode *next; } NODE;
#define PRINT "%4d %9.6s %9.6s %9.6s %9.6s %9d %.1f %9d
\n",p->next->num,p->next->start,p->next->over,p->next->Stime,p->next->Etime,p->n
ext->Price,p->next->Discount,p->next->count //定义输出格式 void creat(); //创建航班信息文件
void print(); //输出航班信息
void save(); //保存航班信息
int read(); //读取航班信息
NODE *search(); //查找航班信息
void del(); //删除航班信息
int book_tickets(); //订票信息
int tuipiao(); //退票信息
void change(); //修改信息
void menu(); //菜单
void initlist(NODE **); //初始化函数
void add(); //添加信息函数
NODE *h=NULL; //建立全局变量,存链表头指针 int m=0; //航班数量
void initlist(NODE **h) {
*h=(NODE *)malloc(sizeof(NODE));
(*h)->next=NULL;
}
void creat() //打印模块程序 {
11
淮北师范大学计算机学院c程序设计报告
FILE *fp;
NODE *p=NULL; //定义移动指针
int i,flightnum;
char y;
p=h;
if((fp=fopen("air.dat","rb"))!=NULL)//打开文件,并判断是否出错
{
printf(" 信息文件已经存在,不必创建!按任意键后回
车返回\n\n\n");//打印出错提示
fclose(fp);
fflush(stdin);
getchar();
return ;
}
p=h;
printf("请输入要输入的航班数量:");
fflush(stdin); //清除文件缓冲区
scanf("%d",&flightnum); //读取航班数
system("cls"); //清屏
printf(" 请依次输入航班信息:\n\n"); //打印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;inext=(NODE *)malloc(sizeof(NODE));
p->next->next=NULL;
printf("航班号:");
fflush(stdin);
scanf("%d",&p->next->num); //读取航班号
printf("起始站:");
fflush(stdin);
scanf("%10s",&p->next->start);//读取起飞城市
printf("终点站:");
fflush(stdin);
scanf("%10s",&p->next->over);//读取抵达城市
printf("起始时间:");
fflush(stdin);
scanf("%10s",&p->next->Stime);//读取起飞时间
printf("抵达时间:");
fflush(stdin);
scanf("%10s",&p->next->Etime);//读取抵达时间
printf("航班票价:");
fflush(stdin);
scanf("%d",&p->next->Price);//读取航班票价
printf("票价折扣:");
12
淮北师范大学计算机学院c程序设计报告
fflush(stdin);
scanf("%10f",&p->next->Discount);//读取票价折扣
printf("机票数:",m);
fflush(stdin);
scanf("%d",&p->next->count);//读取机票数
printf(" 第%d个信息已经输完\n",i+1);
p=p->next;
m++;
}
printf("信息输入完毕,是否存盘:存盘按0,不存盘按其他任意键");
fflush(stdin);
y=getchar();
if(y=='0')
{
save();//将结构体信息存盘
print();//输出输入的航班信息
}
}
void save()//保存模块程序
{
NODE *p=NULL;//定义移动指针
FILE *fp,*fp1;//定义指向文件指针
p=h;
if((fp=fopen("air.dat","wb"))==NULL)//打开文件并判断是否出错
{
printf(" 创建文件失败!\n\n\n");//打印出错提示
fflush(stdin);
getchar();
return;
}
if((fp1=fopen("num.dat","wb"))==NULL)//打开文件并判断是否出错
{
printf(" 创建文件失败!\n\n\n");//打印出错提示
fflush(stdin);
getchar();
return;
}
while(p->next!=NULL)
{
if(fwrite(p->next,sizeof(NODE),1,fp)==0)//向文件写入数据,并判断是否出错
{
printf(" 向文件输入数据失败!\n\n\n");
break;
13
淮北师范大学计算机学院c程序设计报告
}
else p=p->next;
}
fprintf(fp1,"%d",m); //按指定的格式输出到fp1所指定的文件中
fclose(fp);//关闭文件
fclose(fp1);//关闭文件
}
int read()//从文件读取信息模块
{
FILE *fp,*fp1;//定义文件指针
NODE *p=NULL;
int i;
initlist(&h);
p=h;
if((fp=fopen("air.dat","rb"))==NULL)//打开文件,并判断是否出错
{
printf("出错,请检查信息文件是否存在,按任意键后回车返回住菜单\n\n\n");//打印出错提示
fflush(stdin);
getchar();
return 0;
}
if((fp1=fopen("num.dat","rb"))==NULL)//打开文件并判断是否出错
{
printf(" 创建文件失败!\\n\n\n");//打印出错提示
fflush(stdin);
getchar();
return 0;
}
fscanf(fp1,"%d",&m); //从fp1所指定的文件中按给定的格式将输入数据送内存中
fclose(fp1);//关闭文件
printf("\n 总共%d个航班信息\n",m);
for(i=0;inext=(NODE *)malloc(sizeof(NODE));
p->next->next=NULL;
fread(p->next,sizeof(NODE),1,fp);//从文件中读取信息
p=p->next;
}
fclose(fp);//关闭文件
return 1;
}
void print()//打印模块
14
淮北师范大学计算机学院c程序设计报告
{
NODE *p=NULL;
if(read()==0)return;//调用读取文件函数,并判断是否文件存在。
p=h;
printf("???????????????????????????????????????\n");
起始站 终点站 起始时间 抵达时间 航班票价 printf("航班号
票价折扣 票数 \n");
while(p->next!=NULL)
{
printf(PRINT);//打印信息
p=p->next;
}
printf("???????????????????????????????????????");
printf("\n\n\n\n\n\n请按任意键后回车结束返回上层菜单:\n");
fflush(stdin);
getchar();
}
NODE *search()//查询模块
{
NODE *p=NULL;
NODE *x=NULL; /*用于查询到的记录*/
char name1[20];
char name2[20];
char ii[10];
int n,no;
int flag=0;
if(read()==0)return 0;
p=h;
do
{
printf(" 请选择查找方式:\n\n"); //
打印查询方式菜单
printf("--------------------------------------------------------------------------\n");
printf(" 1.按航班号查找\n\n"
" 2.按终点站查找\n\n"
" 3.按航线查找\n\n"
" 0.返回\n\n");
printf(" 请在0-3中选择:\n\n"
" 按其他键后回车返回主菜单:\n\n\n\n\n");
fflush(stdin);
scanf("%d",&n);//读取查找方式
if(n==0)
15
淮北师范大学计算机学院c程序设计报告
break;
switch(n)
{
case 1:
printf(" 请输入航班号:\n");
fflush(stdin);
scanf("%d",&no);//航班号
break;
case 2:
printf(" 请输入终点站名称:\n");
fflush(stdin);
scanf("%10s",name2);//读取终点站
break;
case 3:
printf(" 请输入起始站名称:\n");
fflush(stdin);
scanf("%10s",name1);//读取起始站
printf(" 请输入终点站名称:\n");
fflush(stdin);
scanf("%10s",name2);//终点站
break;
default: printf(" 请选择有效查询方式!\n\n\n");
}
while(p->next!=NULL)
{
if(strcmp(p->next->start,name1)==0||strcmp(p->next->over,name2)==0)
//按终点站起始站判断输出条件
{
printf(" \n查找航班信息成功!\n\n\n");
printf("航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数\n");
printf(PRINT);//打印信息
x=p->next;
flag=1;
break;
}
if(p->next->num==no)//按航班号判断输出条件
{
printf(" \n查找航班信息成功!\n\n\n");
printf("航班号 起始站 终点站 起始时间 抵达时间 航班票价 票价折扣 票数\n");
printf(PRINT);//打印信息
x=p->next;
flag=1;
16
淮北师范大学计算机学院c程序设计报告
break;
}
p=p->next;
}
if(!flag) printf("查找失败!:\n\n\n\n\n");
printf ( "\n\n\n"
" 是否重新查找?\n"
" 请键入yes或no\n"
" 后回车键结束 \n"
"------------------------------------------------- \n\n\n\n\n");
no=0;//将航班号赋值为0
p=h;
flag=0;
fflush(stdin);
scanf("%10s",ii);
}while(strcmp(ii,"yes")==0);//判断结束
return(x);
}
void add()
{
int flightnum;
int i,y;
NODE*p=NULL;
i=read();
if(i==0)return;
p=h;
while(p->next!=NULL)p=p->next;
printf("请输入要输入的航班数量:");
fflush(stdin);
scanf("%d",&flightnum); //读取航班数
system("cls");
printf(" 请依次输入航班信息:\n\n"); //打印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;inext=(NODE *)malloc(sizeof(NODE));
p->next->next=NULL;
printf("航班号:");
fflush(stdin);
scanf("%d",&p->next->num); //读取航班号
printf("起飞城市:");
fflush(stdin);
scanf("%10s",&p->next->start);//读取起飞城市
17
淮北师范大学计算机学院c程序设计报告
printf("抵达城市:");
fflush(stdin);
scanf("%10s",&p->next->over);//读取抵达城市
printf("起飞时间:");
fflush(stdin);
scanf("%10s",&p->next->Stime);//读取起飞时间
printf("抵达时间:");
fflush(stdin);
scanf("%10s",&p->next->Etime);//读取抵达时间
printf("航班票价:");
fflush(stdin);
scanf("%d",&p->next->Price);//读取航班票价
printf("票价折扣:");
fflush(stdin);
scanf("%10f",&p->next->Discount);//读取票价折扣
printf("机票数:",m);
fflush(stdin);
取机票数 scanf("%d",&p->next->count);//读
printf(" 第%d个信息已经输完\n",i+1);
p=p->next;
m++;
}
printf("信息输入完毕,是否存盘:存盘按0,不存盘按其他任意键后回车");
fflush(stdin);
scanf("%d",&y);
if(y==0)
{
save();//将结构体信息存盘
print();//输出输入的航班信息
}
}
void del()//删除模块
{
NODE *p=NULL;
NODE *temp=NULL;
char name1[20];
char name2[20];
char ii[10];
int no,n;
int flag=0;
if(read()==0)return;;//调用读取函数
do
{
printf(" 请选择删除以方式回车键结束:\n\n");
18
淮北师范大学计算机学院c程序设计报告
printf(" *1.按航班号删除\n\n"
" *2.按航线删除\n\n"
" *0.返回\n\n");
printf(" 请在0-2中选择以回车键结束:\n\n\n");
fflush(stdin);
scanf("%d",&n);//读取删除方式
if(n==0)
break; //跳出循环
switch(n)
{
case 1:
printf(" 航班号:\n");
fflush(stdin);
scanf("%d",&no); //读取航班号
p=h;
break; //跳出循环
case 2:
printf(" 起始站名称:\n");
fflush(stdin);
scanf("%10s",name1);//读取起始站
printf(" 终点站名称:\n");
fflush(stdin);
scanf("%10s",name2); //读取终点站
p=h;
break; //跳出循环
default: printf(" 请选择有效的选项:\n");
continue;
}
while(p->next!=NULL)
{ if(p->next->num==no||(strcmp(p->next->start,name1)==0&&strcmp(p->nex
t->over,name2)==0)) .//判断输入信息是否存在
{
temp= p->next->next;
p->next=temp;
m--;
flag=1;
printf(" 删除成功!剩余%d条信息\n\n\n\n\n",m);
break;
}
p= p->next;
}
if(!flag)printf(" 没有这个信息!\n\n\n\n\n");
printf(" 是否继续删除\n"
" 请键入yes或no以回车键结束\n");
19
淮北师范大学计算机学院c程序设计报告
fflush(stdin);
scanf("%10s",ii); //读取是否继续信息
save(); //调用存储函数
if(!strcmp(ii,"yes")) //判断是否继续删除
printf(" 请按任意键后回车结束返回上层菜单:\n\n\n\n\n\n");
break;
}while(1); //判断结束
}
int book_tickets()//订票模块
{
int n;
char a[10];
NODE *x=NULL;
NODE *p=NULL;
do
{
printf("查找要订票的航班:\n");
x = search();//调用查询模块
if(x!=NULL)
{
printf("请输入您要订的机票数以回车键结束:\n");
fflush(stdin);
scanf("%d",&n); //读取所订机票数
}
else return (0);
if(n<0)
{
printf(" 请输入有效的机票数~\n\n\n\n\n\n");//判断机票数是否出错
break;
}
if(x->count!=0&&x->count>=n)//判断是否出错
{
x->count=x->count-n;
save();//调用保存函数
printf(" 订票成功!\n\n");
break;
}
if(x->countcount= x->count+n;
save(); //调用保存模块
printf("退票成功!\n\n\n\n\n");
printf("是否继续退票,请键入yes或no以回车键结束:\n\n\n");//判断是否
继续退票
fflush(stdin);
scanf("%10s",a);
}while(!strcmp(a,"yes"));//判断并跳出循环
return (1);
fflush(stdin);
getchar();
}
void change() //修改模块
{
char j[10];
NODE *x=NULL;
21
淮北师范大学计算机学院c程序设计报告
NODE *p=NULL;
if(read()==0)return;
do
{
x=search();
if(x!=NULL)
{
printf( " 请重新输入本条信息\n\n\n\n\n");
printf("航班号:\n");
fflush(stdin);
scanf("%d",&x->num); //读取航班号
printf("起始站:\n");
fflush(stdin);
scanf("%10s",&x->start);//读取起始站
printf("终点站:\n");
fflush(stdin);
scanf("%10s",&x->over);//读取终点站
printf("起始时间:\n");
fflush(stdin);
scanf("%10s",&x->Stime);//读取起始时间
printf("抵达时间:\n");
fflush(stdin);
scanf("%10s",&x->Etime);//读取抵达时间
printf("航班票价:\n");
fflush(stdin);
scanf("%d",&x->Price);//读取航班票价
printf("票价折扣:\n");
fflush(stdin);
scanf("%10f",&x->Discount);//读取票价折扣
printf("机票数:\n");
fflush(stdin);
scanf("%d",&x->count);//读取机票数
}
save();//调用保存模块
printf(" 是否继续修改,请键入yes或no以回车键结束:\n\n\n\n\n");
fflush(stdin);
scanf("%10s",j);
}while(strcmp(j,"yes")==0); //判断结束
}
void menu()
{
int j;
printf("\n------欢迎进入中国民航管理系统--------\n\n");
do
22
淮北师范大学计算机学院c程序设计报告
{
printf( " 1.创建航班信息文件 \n"
" 2.浏览航班信息 \n"
" 3.修改航班信息 \n"
" 4.查找航班信息 \n"
" 5.删除航班信息 \n"
" 6.添加航班信息 \n"
" 7.订票信息 \n"
" 8.退票信息 \n"
" 0.退出 \n\n");
printf(" 请在0-9中选择以回车键结束:\n\n");
fflush(stdin);
scanf("%d",&j);
switch(j)
{
case 1: creat();//调用输入模块
break;
case 2:print();//调用打印模块
break;
case 3:change();//调用修改模块
break;
case 4:search();//调用查找模块
break;
case 5:del(); //调用删除模块
break;
case 6:add();//调用订票模块
break;
case 7:book_tickets();//调用订票模块
break;
case 8:tuipiao();//调用退票模块
break;
case 0:;
break;
default:printf("请选择有效选项!按任意键后回车返回。
\n\n\n\n\n\n\n\n\n\n\n\n");
fflush(stdin);
getchar();
}
}while(j!=0);//判断结束
printf(" 谢谢使用,再见~\n");
}
void main()
{
initlist(&h);
23
淮北师范大学计算机学院c程序设计报告
menu();} //主函数结束
24
本文档为【飞机订票系统 C语言编的】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。