资源描述
航班订票系统 数据结构课程设计 报 告设计题目: 航班订票系统 专 业: 信息管理与信息系统学生姓名: 班级学号: 分组成员: 指导教师: 2013 年 12月 27日数据结构课程设计报告一、 设计时间2013年12月23日-12月27日二、 设计地点湖南城市学院实验楼计算机403机房三、 设计目的1巩固和加深对数据结构课程所学知识的理解,了解并掌握数据结构与算法的设计方法;2初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3提高综合运用所学的理论知识和方法,独立分析和解决问题的能力;4训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;5培养查阅资料,独立思考问题的能力。四、 设计小组成员120660218 钱佳明五、 指导老师陈强、刘洋六、 设计课题航班订票系统七、 基本思路及关键问题的解决方法(需求分析和概要设计)需求分析:程序主要实现的功能模块1. showSystemMenu()显示系统菜单界面2. showAdminMenu()显示管理员操作菜单界面3. showUserMenu()显示用户操作菜单界面4. systemCmd()获取用户输入的命令5. userLogin()用户登陆6. insertFly()新增航班7. editFly()修改航班8. deleteFly()删除航班9. showFly()显示所有航班10. insertUser()新增用户11. editUser()修改用户12. deleteUser()删除用户13. showUser()显示所有用户14. searchFly()航班查询15. checkForm()订票16. deleteForm()退票17. showForm()查询订单18. showInformation()显示个人信息19. editInformation()修改个人信息20. main()程序执行入口21. fly.txt文件用于存储航班信息22. user.txt文件用于存储用户信息23. form.txt文件用于存储订单信息八、 算法及流程图(详细设计)1. showSystemMenu()显示系统菜单界面设计系统初始菜单,包含用户登陆、用户注册、航班查询和退出系统四个选项。运用printf()语句实现。2. showAdminMenu()显示管理员操作菜单界面设计管理员操作菜单,包含新增航班、修改航班、删除航班、航班一览、新增用户、修改用户、删除用户、用户一览和注销九个选项运用printf()语句实现。3. showUserMenu()显示用户操作菜单界面。设计用户操作菜单,包含订票、退票、查询订单、用户信息、信息修改和注销六个选项。运用printf()语句实现。4. systemCmd()获取用户输入的命令将用户输入模块进行封装。运用scanf()语句实现。5. userLogin()用户登陆模块 定义字符数组变量user、pwd,用户输入后进行判断是否为管理员,若是,则进入管理员后台操作界面;若不是,则打开user.txt数据文件进行查找是否存在该用户,若存在,则进入用户操作界面;若不是,则提示登陆失败。6. insertFly()新增航班 定义一个结构体fly,其中包含的变量有航班编号num、起飞城市flyCity、抵达城市arriveCity、起飞时间flyTime、抵达时间arriveTime、飞行时间flyTime、票价price、折扣discount和剩余座位remain。用户输入信息后提示是否保存,若否,则不保存信息到fly.txt文件中;若是,则将结构体fly中的信息保存到fly.txt文件中。7. editFly()修改航班 打开文件fly.txt,将所有的航班信息输出到屏幕中,管理员输入需要修改的航班信息编号进行修改。8. deleteFly()删除航班打开文件fly.txt,将所有的航班信息输出到屏幕中,管理员输入需要删除的航班信息编号进行删除。9. showFly()显示所有航班打开文件fly.txt,将所有的信息输出到屏幕上给管理员进行查看。10. insertUser()新增用户定义一个结构体user,其中包含的变量有用户名userName、密码userPwd和身份证号码userID。用户输入信息后提示是否保存,若否,则不保存信息到user.txt文件中;若是,则将结构体user中的信息保存到user.txt文件中。11. editUser()修改用户信息打开文件user.txt,将所有的用户信息输出到屏幕中,管理员输入需要修改的用户信息编号进行修改。12. deleteUser()删除用户打开文件user.txt,将所有的用户信息输出到屏幕中,管理员输入需要删除的用户信息编号进行删除13. showUser()显示所有用户打开文件user.txt,将所有的信息输出到屏幕上给管理员进行查看。14. searchFly()航班查询获取用户输入的航班编号或者航班起飞城市和抵达城市信息,打开fly.txt文件,进行信息匹配,若匹配成功,则将该航班的相关信息输出到屏幕中。15. checkForm()订票用户查询相关航班后,输入相关航班的编号进行订票,若该航班有余票,则订票成功;若该航班的票已售完,则订票失败。订单信息由订单编号formID、用户名userName、航班编号num、起飞城市flyCity、抵达城市arriveCity、起飞时间flyTime、抵达时间arriveTime、飞行时间flyTime和票价price信息。16. deleteForm()退票打开文件form.txt,将用户相关的订单信息输出到屏幕中,用户输入需要删除的订单编号进行删除。17. showForm()查询订单打开文件form.txt,将用户相关的订单信息输出到屏幕中。18. showInformation()显示用户信息打开文件user.txt,将用户相关的信息输出到屏幕中。19. editInformation()修改用户信息打开文件user.txt,获取相关用户输入的信息,将信息进行修改并保存。20. 其中新增航班insertFly()、修改航班editFly()、删除航班deleteFly()使用线性表的操作21. 其中新增用户insertUser()、修改用户editUser()、删除用户deleteUser()使用线性表的结构22. 在用户登录userLogin()、查询航班searchFly()使用顺序查找进行信息匹配。 九、 调试过程中出现的问题及相应解决办法(调试分析)1. showSystemMenu()显示系统菜单2. showAdminMenu()显示管理员操作菜单界面3. showUserMenu()显示用户操作菜单界面4. userLogin()用户登陆5. insertFly()新增航班信息6. editFly()修改航班信息7. deleteFly()删除航班信息8. showFly()显示所有航班信息9. insertUser()新增用户10. editUser()修改用户信息11. deleteUser()删除用户信息12. showUser()显示所有用户信息13. searchFly()航班查询14. checkForm()订单15. deleteForm()退票16. showForm()查询订单17. showInformation()显示个人用户信息18. editInformation()修改个人用户信息十、 课程设计心得体会(课程总结)在本次课程设计中,是我对数据结构这门课程有了更深入的理解。数据结构是一门实践性较强的课程,为了学好这门课程,必须在掌握理论的同时,加强上级实践。我的课程设计题目是航班订票系统,刚开始做的时候,在函数模块方面想了很多,一开始使用了头文件*.h来封装函数,后来查阅了多次资料,并再三考虑之下,决定将函数一并写在*.cpp文件中。同时在写航班查询的时候一开始没有进行多次考虑,导致代码多次运行错误。在本次课程设计中,我明白了理论与实践应用相结合的重要性,并提高了自己数据及编写大型应用程序的能力。培养了基本的、良好的程序设计分析能力。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。十一、 源程序(核心代码部分加上清晰的程序注释)#include#include#includechar userName10;/用户名 char userPwd10; /密码 char userID20; /身份证 char formID20;/订单编号 struct flyint count;/编号 char num10;/航班号 char flyCity10;/起飞城市 char arriveCity10;/抵达城市 char flyTime10;/起飞时间 char arriveTime10;/抵达时间 char allTime10;/飞行时间 char price10;/票价 char discount10;/票价折扣 char remain2;/剩余座位 newFly;struct userint count;/编号 int index;/用户位置char userName10;/用户名 char userPwd10;/密码char userID20;/身份证 newUser;/-菜单界面-/显示系统菜单界面void showSystemMenu()printf(*n);printf(*欢迎使用梦想航班系统*n);printf(* 1.用户登录 n);printf(* 2.用户注册 n);printf(* 3.航班查询 n);printf(* 4.退出系统 n);printf(*n);/显示管理员操作菜单界面void showAdminMenu()printf(*n);printf(*欢迎使用梦想航班系统*n);printf(* n);printf(* -航班管理-n);printf(* 1.新增航班 n);printf(* 2.修改航班 n);printf(* 3.删除航班 n);printf(* 4.航班一览 n);printf(* -用户管理-n);printf(* 5.新增用户 n);printf(* 6.修改用户 n);printf(* 7.删除用户 n);printf(* 8.用户一览 n); printf(* -其他-n);printf(* 9.注销 n);printf(*n);/显示用户操作菜单界面void showUserMenu()printf(*n);printf(*欢迎使用梦想航班系统*n);printf(* n);printf(* -订单管理-n);printf(* 1.订票 n);printf(* 2.退票 n);printf(* 3.查询订单 n);printf(* -用户信息-n);printf(* 4.用户信息 n);printf(* 5.信息修改 n);printf(* -其他-n);printf(* 6.注销 n);printf(*n);/-用户输入-/获取用户输入的命令int systemCmd()int cmd;printf(请输入菜单命令:);/获取用户输入的菜单命令scanf(%d,&cmd);return cmd;/-用户登陆-/用户登陆int userLogin()int result = 0;char user10;char pwd10;printf(请输入用户名:);scanf(%s,user);printf(请输入密码:);scanf(%s,pwd);/判断是否为管理员 if(!(strcmp(user,admin)&(!strcmp(pwd,admin)result = 1;elseFILE *fp;fp = fopen(user.txt,r);/打开user.txt文件 if(fp=NULL)result = 0;elsenewUser.index = 1;while(!feof(fp)fscanf(fp,%st,userName);fscanf(fp,%st,userPwd);fscanf(fp,%sn,userID);/判断是否存在该用户并且输入的密码正确 if(!(strcmp(user,userName)&!(strcmp(pwd,userPwd)result = 2;break;newUser.index+;fclose(fp);return result; /-航班管理-/新增航班void insertFly()printf(请输入航班号(注意:航班号最长字符串不超过10):);scanf(%s,newFly.num);printf(请输入起飞城市(注意:最长字符串不超过10):);scanf(%s,newFly.flyCity);printf(请输入抵达城市(注意:最长字符串不超过10):);scanf(%s,newFly.arriveCity);printf(请输入起飞时间(格式:HH:MM):);scanf(%s,newFly.flyTime);printf(请输入抵达时间(格式:HH:MM):);scanf(%s,newFly.arriveTime);printf(请输入飞行时间(格式:HH:MM):); scanf(%s,newFly.allTime); printf(请输入票价:); scanf(%s,&newFly.price); printf(请输入票价折扣:);scanf(%s,newFly.discount);printf(请输入剩余座位(最大99):); scanf(%s,newFly.remain); printf(确认保存Y/N?:);char c;c = getchar(); scanf(%c,&c);if(c=Y | c=y)FILE *fp;fp = fopen(fly.txt,a);if(fp=NULL)printf(数据保存失败!n);elsefprintf(fp,%st,newFly.num);/写入航班号 fprintf(fp,%st,newFly.flyCity);/写入起飞城市 fprintf(fp,%st,newFly.arriveCity);/写入抵达城市 fprintf(fp,%st,newFly.flyTime);/写入起飞时间 fprintf(fp,%st,newFly.arriveTime);/写入抵达时间 fprintf(fp,%st,newFly.allTime);/写入飞行时间 fprintf(fp,%st,newFly.price);/写入票价fprintf(fp,%st,newFly.discount);/写入票价折扣 fprintf(fp,%sn,newFly.remain);/写入剩余座位 fclose(fp);printf(数据保存成功!n);/修改航班 void editFly()printf(请输入需要修改航班的编号:);int cmd;scanf(%d,&cmd);if(cmd0&cmd0&cmd0&cmd0&cmdnewUser.count)FILE *fp;FILE *fpt;fp = fopen(user.txt,r);fpt = fopen(temp.txt,a);if(fp=NULL|fpt=NULL)printf(数据打开失败!n);elsefor(int i=1;!feof(fp);i+)fscanf(fp,%st,newUser.userName);/读取用户名 fscanf(fp,%st,newUser.userPwd);/读取密码 fscanf(fp,%sn,newUser.userID);/读取身份证号码 if(i!=cmd)fprintf(fpt,%st,newUser.userName);/写入用户名fprintf(fpt,%st,newUser.userPwd);/写入密码 fprintf(fpt,%sn,newUser.userID);/写入身份证 fclose(fp);fclose(fpt);remove(user.txt);rename(temp.txt,user.txt);printf(删除用户成功!n);elseprintf(错误!无此编号!n);/用户一览int showUser()int result = 1;newUser.count = 1;FILE *fp;fp = fopen(user.txt,r);if(fp=NULL)printf(数据打开失败!n);result = 0;elsewhile(!feof(fp)fscanf(fp,%st,newUser.userName);/读取用户名 fscanf(fp,%st,newUser.userPwd);/读取密码 fscanf(fp,%sn,newUser.userID);/读取身份证号码printf(%-10st,编号);printf(%-10st,用户名);printf(%-10st,密码);printf(%-10sn,身份证);printf(%-10dt,newUser.count+);printf(%-10st,newUser.userName);printf(%-10st,newUser.userPwd);printf(%-18sn,newUser.userID);printf(-n); fclose(fp);return result;/-个人管理-/航班查询void searchFly()int checkFlag = 1;FILE *fp;while(checkFlag)system(cls);printf(请选择您要检索的信息1.航班号 2.起飞城市抵达城市 3.返回:);int cmd=1;scanf(%d,&cmd);switch(cmd)/以航班号检索航班号 case 1:printf(请输入您要检索的航班号:);char flyNum10;scanf(%s,flyNum);fp=fopen(fly.txt,r);if(fp=NULL)printf(对不起!数据打开失败!n);elseint count = 0;while(!feof(fp)fscanf(fp,%st,newFly.num);/读取航班号 fscanf(fp,%st,newFly.flyCity);/读取起飞城市 fscanf(fp,%st,newFly.arriveCity);/读取抵达城市 fscanf(fp,%st,newFly.flyTime);/读取起飞时间 fscanf(fp,%st,newFly.arriveTime);/读取抵达时间 fscanf(fp,%st,newFly.allTime);/读取飞行时间 fscanf(fp,%st,newFly.price);/读取票价fscanf(fp,%st,newFly.discount);/读取票价折扣 fscanf(fp,%sn,newFly.remain);/读取剩余座位if(!strcmp(flyNum,newFly.num)printf(%-10st,编号);printf(%-10st,航班编号);printf(%-10st,起飞城市);printf(%-10st,抵达城市);printf(%-10sn,起飞时间);printf(%-10dt,count+); printf(%-10st,newFly.num);printf(%-10st,newFly.flyCity);printf(%-10st,newFly.arriveCity);printf(%-10sn,newFly.flyTime);printf(%-10st,抵达时间);printf(%-10st,飞行时间);printf(%-10st,票价);printf(%-10st,折扣);printf(%-10sn,剩余座位);printf(%-10st,newFly.arriveTime);printf(%-10st,newFly.allTime);printf(%-10st,newFly.price);printf(%-10st,newFly.discount);printf(%-10sn,newFly.remain);printf(-n);fclose(fp);if(!count)printf(对不起!无此航班!n);char c;printf(是否继续查询?Y/N:);c = getchar();c = getchar();if(c=N|c=n)checkFlag = 0;break;/以起飞城市和抵达城市检索航班信息 case 2:printf(请输入起飞城市:);char
展开阅读全文