语言课程设官计报告航空订票系统

上传人:痛*** 文档编号:73160189 上传时间:2022-04-11 格式:DOC 页数:39 大小:932.03KB
返回 下载 相关 举报
语言课程设官计报告航空订票系统_第1页
第1页 / 共39页
语言课程设官计报告航空订票系统_第2页
第2页 / 共39页
语言课程设官计报告航空订票系统_第3页
第3页 / 共39页
点击查看更多>>
资源描述
西安郵電學院C语言课程设计报告题 目: 航空订票系统院系名称: 计算机学院 专业名称: 计算机科学与技术设计起止时间:2013年06月17日2013年06月20日一. 设计目的 对所学知识进行体系化、系统化的整理; 进行模块化的训练,将大的程序转化为一个个小的函数一次解决问题; 统筹规划,在设计之前有一个大的构想,以此为基础进行发散设计; 关注细节,避免在设计程序中因为一个小小的bug导致程序崩溃 代码健壮性,考虑一些错误的操作可能带来的影响。二. 设计内容 航空订票系统三概要设计1 功能模块图;系统首页查询航班信息订单详情账号管理删除航班增加航班申请帐号管理员登陆游客登陆修改航班信息信息查询订票系统退票系统2 各个模块详细的功能描述。 游客登陆: 1、信息查询 a.航班号查询 (依据输入的航班号来找到对应的航班信息) b.起降地查询 (依据输入的起飞地和目的地来找到对应航班信息) c.时间查询 (依据输入的时间找到对应航班信息 时间可逐渐具体) 2、订票系统 根据输入的起飞地与目的地显示出所有走此航线的航班信息,然后根 据显示的信息输入想要订购航班的航班号,确认购票后系统自动付款将此 航班加入登陆用户的订单信息中。 3、退票系统 进入后首先显示出当前登陆者已有的航班订单,输入需要退票的航班 的航班号,退票成功。 4、订单详情 显示出当前登陆者已有的航班订单信息,并按照时间先后顺序显示。 管理员登陆: 1、增加航班 确定增加新航班后依据提示以此输入航班号、起飞地、目的地、起飞 时间、到达时间、票价;之后选择是否继续输入,若选Y继续刚才的循环, 否则退出增加航班。 2、删除航班 输入需要删除航班的航班号,回车后该航班即被删除。 3、修改航班信息 输入需要修改航班的航班号,显示出该航班的航班信息,选项选择修 改航班信息的哪一项,选择后即可对该项信息进行修改。 4、信息查询 a.时间查找 (与游客登陆中的时间查询一样) b.起始地查询 (输入起始地,显示出由此地起飞的所有航班信息) c.目的地查询 (输入目的地,显示飞往此地的所有航班信息) d.起降地查询 (与游客登陆中起降地查询一致) e.航班号查询 (与游客登陆中航班号查询一致) f.所有航班 (显示出当前已录入的所有航班航班信息) 5、账号管理 a.密码修改 (针对遗忘密码的用户可以进行密码的重置) b.所有用户 (显示出所有已注册用户的用户名) 帐号申请: 根据提示输入用户名,若该用户名已有则显示“该用户已存在”,若用户 名可用,则继续输入密码,两次密码一致则注册成功,可使用该用户以游客 身份登陆。 四详细设计1 功能函数的调用关系图航班号查询函数打开航班信息 文件函数起降地查询函数时间查询函数显示所有用户名函数修改用户密码函数航班信息排序函数 管理员首页函数所有航班查询函数 航班号查询函数 起降地查询函数 目的地查询函数 起始地查询函数 时间查询函数保存航班信息 文件函数打开航班信息 文件函数管理员首页函数 管理员首页函数 账号管理函数查看航班信息函数修改航班信息函数 删除航班函数 增加航班函数管理员首页函数密码输入函数打开游客信息 文件函数储存游客信息 文件函数航班信息排序函数 支付宝函数打开游客信息 文件函数打开航班信息 文件函数信息查询函数游客首页函数打开游客信息 文件函数首页函数订单详情函数退票系统函数订票系统函数信息查询函数密码输入函数首页函数游客首页函数帐号申请函数管理员登陆函数游客登陆函数首页函数主函数2 各功能函数的数据流程图; 游客登陆后将该游客对应链表中的节点位置进行传递,以便以后对该游客的信息操 做; 在使用到链表时用打开文件的函数将文件信息转化为链表返回其头指针,使用处用 相同类型的指针变量作为接收即可对该链表进行操作; 在对链表操作完成后,将链表头指针传递给保存信息到文件的函数,该函数会将链 表转化为文件信息进行储存; 输入密码函数,只需将用于保存密码的数组名作为参数传递,则可对该数组进行密 码的输入与回删。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=(Youke *)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=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 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(*);五测试数据及运行结果1 正常测试数据(3组)及运行结果;首页游客登陆游客首页信息查询航班号查询起降地查询查询结果时间查询查询结果查询结果订票系统订票系统支付宝功能退票系统订单详情管理员登陆管理员首页增加航班删除航班修改航班查看已有航班起始地查找查询结果目的地查询查询结果所有航班查询用户管理密码修改所有用户帐号申请2 非正常测试数据(2组)及运行结果。登陆密码错误错误的航班号错误的起降地错误的时间六调试情况,设计技巧及体会1 对自己的设计进行评价,指出合理和不足之处,提出改进方案; 仍有很多待优化的地方,例如订购机票时没有显示出此航班飞机还有多少座位,是 否还能订购;没有区分游客与用户的区别,作为游客不需要登陆即可进行简单的查询操 作;过期机票不应当予以现实.2 对设计及调试过程的心得体会。 期间会遇到许多难以解决的问题,每次出现Bug使用调试工艺挨个检错,有时也在 必要的地方进行printf来检测当前变量值是否为预期的值。七 参考文献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 of 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;dosystem(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);break;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密 码:);passwd(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(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;dosystem(clear);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:system(clear);printf(nnnnttt正在退出.n);sleep(1);home_page();break;while(1);void polling(Youke *UK) /查询信息主页面char ch;dosystem(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;case2: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(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); /没有找到时再次进入本函数printf(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(UK);printf(nnttt目的地:);gets(end);system(clear);printf(nttt 查询结果nn);printf(n);Pri_Titfor(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_Fliif(flag=0)system(clear);printf(nnnntt没有找到 %s-%-s 的航班n,start,end);sleep(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,0)=0) polling(UK);system(clear);printf(nttt 查询结果nn);printf(n);Pri_Titfor(p1=head_flight-next;p1!=NULL;p1=p1-next) if(strncmp(year,p1-flight_time_start,4)=0) /比对时间字符串中前4个字符是否是输入的字符flag=1;Pri_Fliif(flag=0)printf(nttt没有找到相关信息n);printf(nttt按任意键返回上页n);getch();polling(UK);flag=0;printf(nt【0】返回上页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_Titfor(p1=head_flight-next;p1!=NULL;p1=p1-next) if(strncmp(year,p1-flight_time_start,7)=0) /对比时间字符串中前7个字符是否时输入的字符flag=1;Pri_Fliif(flag=0)printf(nttt没有找到相关信息n);printf(nttt按任意键返回上页n);getch();polling(UK);flag=0;printf(nt【0】返回上页n);printf(nttt日:);gets(day);if(strcmp(day,0)=0) polling(UK);if(strlen(day)=1)day1=day0;day0=0;year7=-;year8=0;strcat(year,day);system(clear);printf(nttt 查询结果nn);printf(n);Pri_Titfor(p1=head_flight-next;p1!=NULL;p1=p1-next) if(strncmp(year,p1-flight_time_start,10)=0)flag=1;Pri_Fliif(flag=0)printf(nttt没有找到相关信息n);printf(nttt按任意键返回上页n);getch();polling(UK);printf(nttt按任意键返回上页n);getch();polling(UK);int ding_ticket(Youke *UK)Flight *head_flight,*p1;head_flight=file_3();printf(an);char start20,end20;char num20;int flag=0;system(clear);printf(nttt订票系统n);printf(nt【0】返回上页n);printf(nnttt起飞地:);gets(start);if(strcmp(start,0)=0) youke(UK);printf(nnttt目的地:);gets(end);system(clear);printf(nttt 结果如下n);printf(n);Pri_Titfor(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_Fliif(flag=0)system(clear);printf(nnnntttSorry! 暂无该路线航班.n);sleep(1);ding_ticket(UK);printf(ntt请输入需要订票的航班号:); /根据现实输入需要订票的航班号gets(num);ding_ticket_next(UK,num); /将所定的航班号传递的下一个函数中youke(UK); return 0;int ding_ticket_next(Youke *UK,char num20)Flight *head_flight,*p1,*p2;Youke *head_youke,*q1;head_flight=file_3();head_youke=file_1();int i,j,flag=0,flag1;char ch;for(q1=head_youke-next;q1!=NULL;q1=q1-next) /让q1与当前登陆者UK所指向的节点相同 if(strcmp(q1-name,UK-name)=0) break;for(p1=head_flight-next;p1!=NULL;p1=p1-next) if(strcmp(num,p1-flight_num)=0)flag=1;printf(nnt 是否订购 %s 号 %s-%-s 的航班? Y/Nn,p1-flight_num,p1-flight_start,p1-flight_end);ch=getch();if(ch=Y|ch=y)printf(nnttt正在跳转到支付宝nnttt );for(i=0;i3;i+)printf(. );fflush(NULL);sleep(1);pay(); /选择支付后跳转到pay()函数 在pay.h中定义for(j=0;jnext;p2!=NULL;p2=p2-next)if(strcmp(q1-numj,p2-flight_num)=0) /判断当前numj中是否有航班信息flag1=1; /如果有 则跳出这个循环j+1 再次进行本循环break;if(flag1=0) /当找到某个numj没有保存航班信息的时候跳出循环 break;strcpy(q1-numj,p1-flight_num); /将订购的该航班的航班号赋给numjfile_2(head_youke); /将信息保存到文件 文件函数均定义在file.h中elseprintf(nnttt 已放弃订票n);printf(nnttt按任意键返回上页n);getch();youke(UK);if(flag=0)printf(nnttt没有找到 %s 号航班n,num);sleep(1);ding_ticket(UK); return 0;void tui_ticket(Youke *UK)Youke *head_youke,*q1;head_youke=file_1();Flight *head_flight,*p1;Flight *new_flight,*a1,*a2;new_flight=(Flight *)malloc(LEN_Flight);new_flight-next=NULL;a1=a2=new_flight;head_flight=file_3();char num20;int i,j,flag;for(q1=head_youke-next;q1!=NULL;q1=q1-next) if(strcmp(q1-name,UK-name)=0) break;for(q1=head_youke-next;q1!=NULL;q1=q1-next) if(strcmp(q1-name,UK-name)=0) break;system(clear);for(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) /如果当前登陆者没有订购机票if(strcmp(q1-num0,p1-flight_num)=0) flag=1;if(flag=0)system(clear);printf(nnnnttt 您没有任何订单信息nn);printf(nnttt 按任意键返回上页n);getch();youke(UK);printf(nnttt 你所拥有的订单nn );Pri_Tit/*/for(i=0;i+) /将游客所定的航班信息找到并新建链表储存 将该链表传入time_fun()函数进行排序 之后输出for(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) if(strcmp(q1-numi,p1-flight_num)=0) /核对并找信息flag=1;a1=(Flight *)malloc(LEN_Flight); /新建链表a1=p1;a1-next=NULL;a2-next=a1;a2=a1;if(flag=0) break;i=1;new_flight=time_fun(new_flight); /传递链表进行排序for(a1=new_flight-next;a1!=NULL;a1=a1-next)printf(%d,i+);Pri_Flia /输出 Pri_Flia为定义在file.h里的宏/*for(a1=new_flight-next;a1!=NULL;a1=a1-next)printf(%d,i+);Pri_Fliafor(i=0;i+)for(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) /寻找航班信息中与当前游客所存航班号一致的航班信息进行输出 if(strcmp(q1-numi,p1-flight_num)=0) flag=1;break;if(flag=0)break;printf(%d,i+1);Pri_Fli /输出 在file.h中宏定义*/printf(nt【0】返回上页n);printf(nnttt需要退票的航班序号:);gets(num);if(strcmp(num,0)=0) youke(UK);for(i=0,flag=0;inumi)=0) /将输入的需要退票的航班号与当前登陆者所存的航班号进行比对 相同的即让后面数据覆盖flag=1;for(j=i;jnumj,q1-numj+1); /此处为数据覆盖break;if(flag=0)system(clear);printf(nnnnttt您没有订购 %s 号航班n,num); /若找不到输入的航班号 则现实没有订购sleep(1);tui_ticket(UK);printf(nnnttt 退票成功n);sleep(1);file_2(head_youke);void ding_dan(Youke *UK) /现实当前登陆者所有的订单信息int i,flag=1;Flight *head_flight,*p1;Youke *head_youke,*q1;Flight *new_flight,*a1,*a2;head_flight=file_3();head_youke=file_1();new_flight=(Flight *)malloc(LEN_Flight);new_flight-next=NULL;a1=a2=new_flight;for(q1=head_youke-next;q1!=NULL;q1=q1-next) if(strcmp(q1-name,UK-name)=0) break;system(clear);printf(nnttt 你所拥有的订单nn );Pri_Titfor(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) /如果当前登陆者没有订购机票if(strcmp(q1-num0,p1-flight_num)=0) flag=1;if(flag=0)system(clear);printf(nnnnttt 您没有任何订单信息nn);printf(nnttt 按任意键返回上页n);getch();youke(UK);/*/for(i=0;i+) /将游客所定的航班信息找到并新建链表储存 将该链表传入time_fun()函数进行排序 之后输出for(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) if(strcmp(q1-numi,p1-flight_num)=0)/核对并找信息flag=1;a1=(Flight *)malloc(LEN_Flight);/新建链表a1=p1;a1-next=NULL;a2-next=a1;a2=a1;if(flag=0) break;i=1;new_flight=time_fun(new_flight); /传递链表进行排序for(a1=new_flight-next;a1!=NULL;a1=a1-next)printf(%d,i+);Pri_Flia /输出 Pri_Flia为定义在file.h里的宏/*/*for(i=0;i+)for(flag=0,p1=head_flight-next;p1!=NULL;p1=p1-next) /遍历链表 找到当前登陆者拥有的航班号输出其信息 if(strcmp(q1-numi,p1-flight_num)=0)flag=1; break;if(flag=0)break;printf(%d,i+1);Pri_Fli*/printf(nnttt 按任意键返回上页n);getch();youke(UK);void manager_denglu() /管理员登陆函数 char manager_name20;char manager_passwd20;int flag=0;system(clear);printf(nttt管理员登陆n);printf(nt【0】返回上页);printf(nnttt用户名:);gets(manager_name);if(strcmp(manager_name,0)=0) home_page();printf(nnttt密 码:);passwd(manager_passwd);if(strcmp(manager_name,root_name)=0)&strcmp(manager_passwd,root_passwd)=0) /管理员登陆信息在头文件root.h中储存flag=1;system(clear);printf(nnnnttt登陆成功!n);sleep(1);manager();if(flag=0)system(clear);printf(nnnnttt登陆失败!n);sleep(1);manager_denglu();void manager() /登陆成功后跳转到管理员首页char ch;dosystem(clear);printf(nttt管理员操作nnn);printf(ttt【1】增加航班nn);printf(ttt【2】删除航班nn);printf(ttt【3】修改航班信息nn);printf(ttt【4】查看已有航班nn);printf(ttt【5】帐号管理nn);printf(ttt【0】退出登陆nn);ch=getch();switch(ch)case1:add_hangban();break;case2:del_hangban();break;case3:mod_hangban();break;case4:pri_hangban();break;case5:manager_youke();break;case0:system(clear);printf(nnnnttt正在退出.n);sleep(1);home_pag
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!