1、c语言课程设计报告航空订票系统西安郵電學院C语言课程设计报告题 目: 航空订票系统院系名称: 计算机学院专业名称: 计算机科学与技术设计起止时间:2013年06月17日2013年06月20日1. 设计目地 对所学知识进行体系化、系统化地整理; 进行模块化地训练,将大地程序转化为一个个小地函数一次解决问题; 统筹规划,在设计之前有一个大地构想,以此为基础进行发散设计; 关注细节,避免在设计程序中因为一个小小地bug导致程序崩溃 代码健壮性,考虑一些错误地操作可能带来地影响.二. 设计内容 航空订票系统三概要设计1功能模块图;游客登陆管理员登陆申请帐号信息查询订票系统退票系统订单详情增加航班删除航
2、班修改航班信息查询航班信息账号管理系统首页2各个模块详细地功能描述. 游客登陆: 1、信息查询 a.航班号查询 (依据输入地航班号来找到对应地航班信息) b.起降地查询 (依据输入地起飞地和目地地来找到对应航班信息) c.时间查询 (依据输入地时间找到对应航班信息 时间可逐渐具体) 2、订票系统 根据输入地起飞地与目地地显示出所有走此航线地航班信息,然后根 据显示地信息输入想要订购航班地航班号,确认购票后系统自动付款将此 航班加入登陆用户地订单信息中. 3、退票系统 进入后首先显示出当前登陆者已有地航班订单,输入需要退票地航班 地航班号,退票成功. 4、订单详情 显示出当前登陆者已有地航班订单
3、信息,并按照时间先后顺序显示. 管理员登陆: 1、增加航班 确定增加新航班后依据提示以此输入航班号、起飞地、目地地、起飞 时间、到达时间、票价;之后选择是否继续输入,若选Y继续刚才地循环, 否则退出增加航班. 2、删除航班 输入需要删除航班地航班号,回车后该航班即被删除. 3、修改航班信息 输入需要修改航班地航班号,显示出该航班地航班信息,选项选择修 改航班信息地哪一项,选择后即可对该项信息进行修改. 4、信息查询 a.时间查找 (与游客登陆中地时间查询一样) b.起始地查询 (输入起始地,显示出由此地起飞地所有航班信息) c.目地地查询 (输入目地地,显示飞往此地地所有航班信息) d.起降地
4、查询 (与游客登陆中起降地查询一致) e.航班号查询 (与游客登陆中航班号查询一致) f.所有航班 (显示出当前已录入地所有航班航班信息) 5、账号管理 a.密码修改 (针对遗忘密码地用户可以进行密码地重置) b.所有用户 (显示出所有已注册用户地用户名) 帐号申请: 根据提示输入用户名,若该用户名已有则显示“该用户已存在”,若用户 名可用,则继续输入密码,两次密码一致则注册成功,可使用该用户以游客 身份登陆. 四详细设计1功能函数地调用关系图2各功能函数地数据流程图; 游客登陆后将该游客对应链表中地节点位置进行传递,以便以后对该游客地信息操 做; 在使用到链表时用打开文件地函数将文件信息转化
5、为链表返回其头指针,使用处用 相同类型地指针变量作为接收即可对该链表进行操作; 在对链表操作完成后,将链表头指针传递给保存信息到文件地函数,该函数会将链 表转化为文件信息进行储存; 输入密码函数,只需将用于保存密码地数组名作为参数传递,则可对该数组进行密 码地输入与回删.3重点设计及编码. next=NULL。 p1=head_youke。 if(fp=fopen(youke_information.txt,r)=NULL) printf(Open youke_information error!n)。 exit(1)。 while(feof(fp)=0) /当读取文件没有结尾时 p2=(Yo
6、uke *)malloc(LEN_Youke)。 /新开辟空间 fread(p2,LEN_Youke,1,fp)。 /将一个结构体大小地数据信息存放在该空间中 for(i=0,p3=p2。p3-namei!=0。i+) p3-namei-=3。 /对从文件读入地信息解密 for(i=0,p3=p2。p3-passwdi!=0。i+) p3-passwdi-=4。 p1-next=p2。 /让上一个节点指向这个新节点 p2-next=NULL。 /新节点指向空 p1=p2。 fclose(fp)。 for(p1=p2=head_youke-next。p1-next!=NULL。p2=p1,p1=
7、p1-next)。 p2-next=NULL。 /目地为链表结尾指向NULL,貌似可以不用. return head_youke。 /返回这个链表头节点 以便以后对链表进行操作 next。 /p1为头节点地下一个节点 while(p1!=NULL) for(i=0,p2=p1。p2-namei!=0。i+) p2-namei+=3。 /在将信息保存到文件前进行加密处理 for(i=0,p2=p1。p2-passwdi!=0。i+) p2-passwdi+=4。 if(fwrite(p1,LEN_Youke,1,fp)!=1) /每次向文件中写入一个结构体大小地数据信息 printf(file
8、write error!n)。 p1=p1-next。 fclose(fp)。 3、输入密码函数,可以进行回删 void passwd(char passwd) int i。 char ah。 for(i=0。i+) ah=getch()。 if(ah=13) passwdi=0。 break。 if(ah=127) if(i=0) i=i-1。 continue。 printf(b b)。 i=i-2。 continue。 passwdi=ah。 putchar(*)。 五测试数据及运行结果4正常测试数据(3组)及运行结果;首页游客登陆游客首页信息查询航班号查询起降地查询查询结果时间查询查询
9、结果查询结果订票系统订票系统支付宝功能退票系统订单详情管理员登陆管理员首页增加航班删除航班修改航班查看已有航班起始地查找查询结果目地地查询查询结果所有航班查询用户管理密码修改所有用户帐号申请5非正常测试数据(2组)及运行结果.登陆密码错误错误地航班号错误地起降地错误地时间六调试情况,设计技巧及体会1对自己地设计进行评价,指出合理和不足之处,提出改进方案; 仍有很多待优化地地方,例如订购机票时没有显示出此航班飞机还有多少座位,是 否还能订购;没有区分游客与用户地区别,作为游客不需要登陆即可进行简单地查询操 作;过期机票不应当予以现实.2对设计及调试过程地心得体会. 期间会遇到许多难以解决地问题,
10、每次出现Bug使用调试工艺挨个检错,有时也在 必要地地方进行printf来检测当前变量值是否为预期地值.7参考文献C Primer PlusLinux C编程实战八附录:源代码(电子版)/*= * * Filename: C.c * * Description: Curriculum Design * * Version: 1.0 * Created: 2013年06月08日 18时52分56秒 * Revision: none * Compiler: gcc * * Author: Leehom (RenLixiang), OurHom.759 * Company: Class 1204 o
11、f Computer Science and Technology * * =*/#include #include #include #include #include #include passwd.h#include pay.h#include file.h#include function.h#include getch.h#include root.h#include time_fun.hint main(int argc, char *argv) home_page()。 return EXIT_SUCCESS。void home_page() /最开始界面 char ch。 do
12、 system(clear)。 printf(nntt 航 空 订 票 系 统nn)。 printf(ttt 【1】游客登陆nn)。 printf(ttt 【2】管理员登陆nn)。 printf(ttt 【3】帐号申请nn)。 printf(ttt 【0】退出程序nn)。 ch=getch()。 switch(ch) case1:youke_denglu()。break。 case2:manager_denglu()。break。 case3:zhuce()。break。 case0:system(clear)。printf(nnnnttttByen)。sleep(1)。exit(1)。bre
13、ak。 while(1)。void youke_denglu() /游客登陆函数 实现游客登陆功能 char youke_name20。 char youke_passwd20。 int flag=0。 Youke *head_youke,*p1。 head_youke=file_1()。 system(clear)。 printf(nttt游客登陆nn)。 printf(nt【0】返回上页)。 printf(nnttt用户名:)。 gets(youke_name)。 if(strcmp(youke_name,0)=0) home_page()。 printf(nnttt密 码:)。 pass
14、wd(youke_passwd)。 /调用passwd(char passwd20)函数 在passwd.h中定义 for(p1=head_youke-next。p1!=NULL。p1=p1-next) if(strcmp(p1-name,youke_name)=0)&(strcmp(p1-passwd,youke_passwd)=0) /当密码与用户名匹配时登陆成功 system(clear)。 printf(nnnnttt登陆成功!n)。 sleep(1)。 youke(p1)。 /传递当前登陆者地节点地址 if(strcmp(p1-name,youke_name)=0)&(strcmp(
15、p1-passwd,youke_passwd)!=0) /当用户名存在 但密码输入错误是显示密码错误 system(clear)。 flag=1。 printf(nnnnttt密码错误!n)。 sleep(1)。 youke_denglu(head_youke)。 / if(flag=0) /在之前设置标记符 此时显示无该用户 system(clear)。 printf(nnnnttt无该用户!n)。 sleep(1)。 youke_denglu(head_youke)。 void youke(Youke *UK) /游客登陆成功后跳转到该页面 char ch。 do system(clear
16、)。 printf(nnt 尊敬地 %s 欢迎来到本航空公司服务系统n,UK-name)。 printf(nnttt【1】信息查询nn)。 printf(ttt【2】订票系统nn)。 printf(ttt【3】退票系统nn)。 printf(ttt【4】订单详情nn)。 printf(ttt【0】退出登陆nn)。 ch=getch()。 switch(ch) case1:polling(UK)。break。 case2:ding_ticket(UK)。break。 case3:tui_ticket(UK)。break。 case4:ding_dan(UK)。break。 case0:syste
17、m(clear)。printf(nnnnttt正在退出.n)。sleep(1)。home_page()。break。 while(1)。void polling(Youke *UK) /查询信息主页面 char ch。 do system(clear)。 printf(nnttt信息查询系统nnn)。 printf(ttt【1】航班号查询nn)。 printf(ttt【2】起降地查询nn)。 printf(ttt【3】时间查询nn)。 printf(ttt【0】返回上页nn)。 ch=getch()。 switch(ch) case1:polling_hangban(UK)。break。 ca
18、se2:polling_start(UK)。break。 case3:polling_time(UK)。break。 case0:youke(UK)。break。 while(1)。int polling_hangban(Youke *UK) /根据航班号查询信息 Flight *head_flight,*p1。 head_flight=file_3()。 char num20。 int flag=0。 system(clear)。 printf(ntt 航班号查询nnn)。 printf(nt【0】返回上页n)。 printf(nnttt航班号:)。 gets(num)。 if(strcmp
19、(num,0)=0) polling(UK)。 for(p1=head_flight-next。p1!=NULL。p1=p1-next) if(strcmp(num,p1-flight_num)=0) /判断是否找到需要地航班 system(clear)。 flag=1。 printf(nttt 查询结果nn)。 printf(n)。Pri_Tit /宏 在file.h中定义 Pri_Fli /宏 在file.h中定义 if(flag=0) printf(nntt 没有找到 %s 号航班n,num)。 sleep(1)。 polling_hangban(UK)。 /没有找到时再次进入本函数 p
20、rintf(nttt按任意键返回上页n)。 getch()。 polling(UK)。 /找到后回到查询信息主页面 return 0。int polling_start(Youke *UK) /起降地查询 Flight *head_flight,*p1。 head_flight=file_3()。 char start20,end20。 int flag=0。 system(clear)。 printf(ntt 起降地查询nnn)。 printf(nt【0】返回上页n)。 printf(nnttt起飞地:)。 gets(start)。 if(strcmp(start,0)=0) polling
21、(UK)。 printf(nnttt目地地:)。 gets(end)。 system(clear)。 printf(nttt 查询结果nn)。 printf(n)。Pri_Tit for(p1=head_flight-next。p1!=NULL。p1=p1-next) if(strcmp(start,p1-flight_start)=0)&(strcmp(end,p1-flight_end)=0) /判断是需要找地航班 flag=1。 Pri_Fli if(flag=0) system(clear)。 printf(nnnntt没有找到 %s-%-s 地航班n,start,end)。 slee
22、p(1)。 polling_start(UK)。 printf(nttt按任意键返回上页n)。 getch()。 polling(UK)。 return 0。void polling_time(Youke *UK) /根据时间查找航班 Flight *head_flight,*p1。 head_flight=file_3()。 char year21,month3,day3。 int flag=0。 system(clear)。 printf(ntt 时间查询nnn)。 printf(nt【0】返回上页n)。 printf(nttt年:)。 gets(year)。 if(strcmp(year
23、,0)=0) polling(UK)。 system(clear)。 printf(nttt 查询结果nn)。 printf(n)。Pri_Tit for(p1=head_flight-next。p1!=NULL。p1=p1-next) if(strncmp(year,p1-flight_time_start,4)=0) /比对时间字符串中前4个字符是否是输入地字符 flag=1。 Pri_Fli if(flag=0) printf(nttt没有找到相关信息n)。 printf(nttt按任意键返回上页n)。 getch()。 polling(UK)。 flag=0。 printf(nt【0】
24、返回上页n)。 printf(nttt月:)。 gets(month)。 if(strcmp(month,0)=0) polling(UK)。 if(strlen(month)=1) month1=month0。 /将格式转化为可以进行比对地统一模式 month0=0。 /与之后地管理员时间查询函数一致 /与之后地day格式调整一样 year4=-。 year5=0。 strcat(year,month)。 /将输入地月份续接在year数组之后 system(clear)。 printf(nttt 查询结果nn)。 printf(n)。Pri_Tit for(p1=head_flight-next。p1!=NULL。p1=p1-next) if(strncmp(year,p1-flight_time_start,7)=0) /对比时间字符串中前7个字符是否时输入地字符 flag=1。 Pri_Fli if(flag=0) print
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2