飞机订票系统.docx
- 文档编号:23342045
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:22
- 大小:57.24KB
飞机订票系统.docx
《飞机订票系统.docx》由会员分享,可在线阅读,更多相关《飞机订票系统.docx(22页珍藏版)》请在冰豆网上搜索。
飞机订票系统
商学院
课程设计报告
课程名称c语言程序设计
题目名称飞机订票系统
学生学院 商学院
专业班级信息管理与信息系统_
学号_________
学生姓名 _______________
完成日期
2014年月日
目录
1.设计目的与要求…………………………………………3
1.1题目与设计要求……………………………………3
1.2本程序涉及的知识点………………………………3
2.功能设计………………………………………………3
2.1总体设计……………………………………………3
2.2详细设计……………………………………………3
3.程序实现……………………………………………4
3.1程序实现时应考虑的问题…………………………4
3.2模块代码…………………………………4
4.测试分析……………………………………………14
4.1测试结果及分析…………………………………14
5.总结…………………………………………………16
参考文献………………………………………………16
1.设计目的与要求
1.1题目与设计要求
题目:
飞机订票系统设计
设计要求:
本程序首先输入机票信息,管理员在保存功能中通过密码验证输入机票信息,可以对机票信息进行查询;修改;删除等功能。
一般用户可以使用订票;显示;退票等功能,在订票时用户输入密码在退票时通过验证后成功退票。
假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。
设计一个飞机订票系统,使之能提供下列服务:
1、航班信息录入功能(航班信息用文件保存)
包括航班号、起始站、重点站、机票数等;
2、航班信息浏览功能
4、查询航线:
按航班号查询
1.2本程序涉及的知识点
运用了access函数判断文件是否存在。
系统初始化后,没有寻找到数据文件,则进行新建数据文件,此函数的作用就是进行新建文件数据的录入。
运用到了文件指针的定义FILE*fp,文件的打开fopen和关闭fclose、成块读写函数中的fwrite;运用for循环进行各组数据的输入,用m++记录下输入的航班数量,并运用if语句判断是否输入下一条航班信息,若不继续则返回主界面。
系统初始化之后,若原始数据文件存在,则进行文件内航班信息的读取,以供接下来程序中的各个函数来使用。
在该函数中同样运用到了文件指针FILE*fp、文件的打开fopen和关闭fclose、成块读写函数中的fread、文件结束检测函数feof同时配合while语句控制文件的读取;m++记录下读取到的航班数量等。
2.功能设计
2.1总体设计
航班结构体包含三大模块,分别是:
航班信息输入模块、航班信息浏览模块、航线查询模块
2.2详细设计
数据结构采用结构体数组,设计航班结构体如下:
Struct
{
CharflightNo[10];//航班号
Charstart[10];//起始站
Charend[10];//终点站
Floatday;//飞行时间
InttotalTicket;//预售票总数
IntsellTicket;//已售票总数
}Flight[N];//航班结构体
(1)航班信息输入模块
采用fwrite或fprintf把航班信息写入航班信息文件。
(2)航班信息浏览模块
分屏显示航班信息,每屏10条记录,按任意键显示下一屏。
读文件(采用fread或fscanf)然后显示即可。
(3)航线查询模块
通过菜单选择查询方式,提供按照航班号、起点站、终点站和飞行时间查询。
采用基本查找算法即可。
3.程序实现
3.1程序实现时应考虑的问题
因为在飞机订票系统中涉及到飞机的订票和退票业务,还有按航班号的排序功能,所以定义了这个保存函数来保存下每次运行系统后对整个订票系统涉及到的资料的修改。
为了简便程序,准备将此函数放在整个系统得推出选项中,这样就只在每次退出系统的时候进行一次保存,将此次对文件修改的所有新信息都一次保存下来。
这样就实现了整个系统运行时进行一次读取,推出时一次保存的设计,大大简便了文件的调用和读取。
3.2模块代码
#include
#include
#include
#defineN10000
structflight//定义结构体数组
{
intnum;//航班号
charstart[20];//起始站
charend[20];//终点站
chartime[10];//飞行时间
intcount;//机票总数
}flight[N];
inti;
intm=0;
#definePRINT"%-d%12s%12s%10s%12d\n",flight[i].num,flight[i].start,flight[i].end,flight[i].time,flight[i].count//定义输出格式
voidinput();//输入航班信息
voidprint();//输出航班信息
voidsave();//保存航班信息
voidread();//读取航班信息
voidsearch();//查找航班信息
voidshanchu();//删除航班信息
voiddingpiao();//订票信息
voidtuipiao();//退票信息
voidxiugai();//修改信息
voidmain()
{
intj;
printf("******************您好,欢迎使用飞机订票系统******************\n");
printf("============================================================\n");
do
{
printf("1.输入航班信息\n"
"2.浏览航班信息\n"
"3.修改航班信息\n"
"4.查找航班信息\n"
"5.删除航班信息\n"
"6.订票信息\n"
"7.退票信息\n"
"0.退出\n");
printf("===========================================================\n");
printf("\n");
scanf("%d",&j);
switch(j)
{
case1:
input();//调用输入模块
break;
case2:
print();//调用打印模块
break;
case3:
xiugai();//调用修改模块
break;
case4:
search();//调用查找模块
break;
case5:
shanchu();//调用删除模块
break;
case6:
dingpiao();//调用订票模块
break;
case7:
tuipiao();//调用退票模块
break;
case0:
;
break;
}
}while(j!
=0);//判断结束
printf("谢谢使用,再见!
\n");
}//主函数结束
voidinput()//打印模块程序
{
charf[]="123456";//设置密码
inty;
printf("请输入密码:
");
scanf("%s",f);//读取密码
if(strcmp(f,"123456")==0)
{
printf("请依次输入航班信息:
");//打印提示信息
printf("--------------------------------------------------------------------------\n");
for(i=0;i { printf("请输入航班号: "); scanf("%d",&flight[i].num);//读取航班号 printf("请输入起始站: "); scanf("%s",flight[i].start);//读取起始站 printf("请输入终点站: "); scanf("%s",flight[i].end);//读取终点站 printf("请输入时间: "); scanf("%s",flight[i].time);//读取时间 printf("请输入机票数: ",m); scanf("%d",&flight[i].count);//读取机票数 m++; printf("第%d个信息已经输完是否继续? 按任意键继续,按0结束",m); scanf("%d",&y); if(y==0) { save();//将结构体信息存盘 print();//输出输入的航班信息 break; } } } else printf("输入密码错误! 请检查您的密码是否正确! \n"); } voidsave()//保存模块程序 { FILE*fp,*fp1;//定义文件指针 if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错 { printf("创建文件失败! \n");//打印出错提示 getchar(); return; } if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错 { printf("创建文件失败! \n");//打印出错提示 getchar(); return; } for(i=0;i if(fwrite(&flight[i],sizeof(structflight),1,fp)==0)//向文件写入数据,并判断是否出错 printf("向文件输入数据失败! \n"); fprintf(fp1,"%d",m); fclose(fp);//关闭文件 fclose(fp1);//关闭文件 } voidread()//从文件读取信息模块 { FILE*fp,*fp1;//定义文件指针 if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错 { printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示 getchar(); } if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错 { printf("创建文件失败! \n");//打印出错提示 getchar(); return; } fscanf(fp1,"%d",&m); fclose(fp1);//关闭文件 for(i=0;i { fread(&flight[i],sizeof(structflight),1,fp);//从文件中读取信息 } fclose(fp);//关闭文件 } voidprint()//打印模块 { charw[10]; read();//调用读取文件函数 printf("航班号起始站终点站时间机票数\n"); for(i=0;i { printf(PRINT);//打印信息 } printf("请按任意键返回上层菜单: "); scanf("%s",w); } voidsearch()//查询模块 { charname1[20]; charname2[20]; charii[10]; intn,no; do { printf("请选择查找方式: ");//打印查询方式菜单 printf("1.按航班号查找\n" "2.按终点站查找\n" "3.按时间查找\n" "0.返回\n"); scanf("%d",&n);//读取查找方式 if(n==0) break; switch(n) { case1: printf("请输入航班号: "); scanf("%d",&no);//航班号 break; case2: printf("请输入终点站名称: "); scanf("%s",name2);//读取终点站 break; case3: printf("请输入时间: "); scanf("%s",name1);//读取时间 break; } read();//调用读取函数 for(i=0;i { if(strcmp(flight[i].end,name1)==0||strcmp(flight[i].end,name2)==0)//按终点站起始站判断输出条件 { printf("\n查找航班信息成功! \n"); printf("航班号起始站终点站时间机票数\n"); printf(PRINT);//打印信息 break; } if(flight[i].num==no)//按航班号判断输出条件 { printf("\n查找航班信息成功! \n"); printf("航班号起始站终点站时间机票数\n"); printf(PRINT);//打印信息 break; } } no=0;//将航班号赋值为0 printf("没有您需要的信息或查找完毕,是否继续查找? 请按yes或no继续\n"); scanf("%s",ii); }while(strcmp(ii,"yes")==0);//判断结束 } voidshanchu()//删除模块 { charname1[20]; charname2[20]; charii[10]; charf[]="123456";//设置密码 intno,n; printf("请输入密码: "); scanf("%s",f);//读取密码 if(strcmp(f,"123456")==0)//判断密码是否正确 { do { printf("请选择删除以方式回车键结束: \n");//打印删除方式菜单 printf("1.按航班号删除\n" "2.按航线删除\n" "0.返回\n"); printf("请选择: "); scanf("%d",&n);//读取删除方式 if(n==0) break;//跳出循环 switch(n) { case1: printf("请输入航班号: "); scanf("%d",&no);//读取航班号 read();//调用读取函数 break;//跳出循环 case2: printf("请输入起始站名称: "); scanf("%s",name1);//读取起始站 printf("请输入终点站名称: "); scanf("%s",name2);//读取终点站 read();//调用读取函数 break;//跳出循环 } for(i=0;i { if(flight[i].num==no||strcmp(flight[i].start,name1)==0&&strcmp(flight[i].end,name2)==0)//判断输入信息是否存在 { flight[i]=flight[m-1]; m--; } } printf("没有您需要的信息或查找完毕,是否继续查找? 请按yes或no继续\n"); scanf("%s",ii);//读取是否继续信息 save();//调用读取函数 if(! strcmp(ii,"yes"))//判断是否继续删除 printf("请按任意键返回上层菜单: \n"); break; }while(n! =1&&n! =2&&n! =3&&n! =4&&n! =0);//判断结束 } else printf("对不起密码错误! 请检查您的密码是否正确! \n"); } voiddingpiao()//订票模块 { intn; chara[10]; do { search();//调用查询模块 printf("请输入您要订的机票数: "); scanf("%d",&n);//读取所订机票数 if(n<0) { printf("请输入有效的机票数: ");//判断机票数是否出错 break; } if(flight[i].count! =0&&flight[i].count>=n)//判断是否出错 { flight[i].count=flight[i].count-n; save();//调用保存函数 printf("订票成功! \n"); break; } if(flight[i].count { printf("请输入有效的机票数: "); break; } printf("是否继续? 请输入yes或no继续: \n");//判断是否继续订票 scanf("%s",a); }while(! strcmp(a,"yes"));//判断结束 } voidtuipiao()//退票模块 { intn; chara[10]; do { search();//调用查询模块 printf("请输入您要退的机票数目: "); scanf("%d",&n);//输入所退票数 if(n<0)//判断票数是否有效 printf("请输入有效的机票数: "); flight[i].count=flight[i].count+n; save();//调用保存模块 printf("退票成功! \n"); printf("是否继续? 请键入yes或no继续: \n");//判断是否继续退票 scanf("%s",a); }while(! strcmp(a,"yes"));//判断并跳出循环 getchar(); } voidxiugai()//修改模块 { structxiu//定义结构体 { intno; charname1[20]; charname2[20]; chartime[20]; intcount; }x[1]; charj[10]; charf[]="123456";//设置密码 intn; printf("请输入密码: "); scanf("%s",f);//读取密码 if(strcmp(f,"123456")==0)//判断是否出错 { read();//调用读取模块 do { printf("请选择修改方式: \n" "1,按航班号修改\n" "2,按航线修改\n"); printf("请选择: "); scanf("%d",&n);//读取修改方式 switch(n) { case1: printf("请输入航班号: "); scanf("%d",&x[0].no);//读取航班号 break; case2: printf("请输入起始站: "); scanf("%s",x[0].name1);//读取起始站 printf("请输入终点站: "); scanf("%s",x[0].name2);//读取终点站 break; } for(i=0;i { if(strcmp(flight[i].end,x[0].name1)==0&&strcmp(flight[i].end,x[0].name2)==0)//判断输出条件 { printf("航班号起始站终点站时间机票数\n"); printf(PRINT); break; } if(flight[i].num==x[0].no)//判断输出条件 { printf("航班号起始站终点站时间机票数\n"); printf(PRINT); break; } } x[0].no=0;//将结构体中的号为零 printf("请输入新航班号、起始站、终点站、时间(星期几)、机票数: \n"); scanf("%d%s%s%s%d",&x[0].no,x[0].name1,x[0].name2,x[0].time,&x[0].count);//定义输入格式 flight[i].num=x[0].no;//替换航班号 strcpy(flight[i].start,x[0].name1);//替换其始站 strcpy(flight[i].end,x[0].name2);//替换终点站 strcpy(flight[i].time,x[0].time);//替换时间 flight[i].count=x[0].count;//替换机票数 save();//调用保存模块 printf("是否继续? 请按yes或no继续: \n"); scanf("%s",j); }while(strcmp(j,"yes")==0);//判断结束 } else printf("对不起密码错误! 请检查您的密码是否正确! \n"); } 4.测试分析 4.1测试结果及分析 ①第一次运行程序(输入初始数据) ②第二次运行程序(进行航班信息的浏览) ③查询航班信息(按航班号查询) 4查询航班信息(按终点站查询) 5查询航班信息(按时间查询) 5.总结 程序整体上运行与题目要求很吻合,算法大多比较通用,各个函数模块的正确性、完备性、对输入的容错能力以及算法的进一步改进在设计中都有表述,这道题使我熟悉了文件的输入输出操作,真切的感受到了fprintf和fwrite函数的区别! 经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。 通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;学会遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,并能够完成设计、编写、调试和测试应用程序及编写文档的任务。 参考文献 [1]刘成.C语言程序设计实验指导与习题集.北京: 中国铁道出版社,2006 [2]詹红霞.visualc++6.0程序设计.西安: 西安电子科技大学出版社,2009 [3]黄明等.C语言程序设计.大连: 大连理工大学出版社,2005 [4]李成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 飞机 订票 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)