华中科技大学C语言知识课程教学设计实验报告及源代码.doc

举报
资源描述
^` 课 程 设 计 报 告 题目: 航班时刻表信息查询系统 课程名称: C语言程序设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院 毕业设计[论文]任务书 姓名: 班号: 专业: 计算机科学与技术 同组姓名: 指导教师: 一、课题名称 航班时刻表查询系统 二、主要内容 建立航班时刻表查询系统,提供创建、编辑和查询等基本功能和服务。 三、任务要求 收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交《课程设计报告》。 四、系统功能 系统主要提供航班信息的快速查询、检索和统计。应该具有①按航班、按机场等查询信 息的功能;②模糊条件检索航班信息;③统计航班座次情况等。 五、系统数据 系统主要涉及“航班”、“经停机场”和“经停航班” 3类信息。 六、基本要求 1)、只能使用C语言,源程序要有适当的注释,使程序容易阅读; 2)、要有用户界面,要求至少采用教材p215-p216类似的简易菜单,鼓励采用文本菜单界面甚至采用图形菜单界面; 3)、必须使用结构和十字交叉链表等数据结构; 4)、使用文件保存数据; 5)、至少输出一份报表(屏幕输出即可),鼓励自行增加新功能; 6)、设计测试的模拟数据,完成系统测试; 7)、写实验报告(要求正规打印,A4幅面)。 前言 本C语言程序课程设计报告是由wt编写的。本课程设计主要内容包括,内容中文摘要、Abstract(英文摘要)、正文、致谢、参考文献以及附录,其中: 正文主要内容有:一、系统功能模块,主要介绍该课程设计的航班时刻表查询系统的组成功能模块有哪些;二、数据结构设计及用法说明,主要是介绍说明本航班时刻表查询系统设计时用到的一些数据信息结构的设计思路和用法;三、程序结构流程图,用流程图的方式解释本课程设计中一些功能函数的设计思路和实现方法;四、各模块的功能,主要展示了本系统最终功能的解释说明;五、试验结果,主要展示了本航班时刻表查询系统最终功能的实现效果;六、体会,讲述作者在制作过程中的一些心得体会。 本C语言程序课程设计部分参考了曹计昌,卢萍,李开等老师2008年编著的《 C语言程序设计》和李开,卢萍,曹计昌等老师编著的《 C语言实验与课程设计》。在此,谨向这些提供无私支持的老师们致以诚挚地谢意!感谢他们默默无闻的奉献! 附录主要有两个部分:附录1是源程序代码清单,附录2是系统测试数据。 由于作者水平有限,加之时间仓促,难免有些缺点和错误,望广大读者给予批评指正。 编者 2012年10月于华中科技大学 摘要 本系统可在VC++ 6.0、CODE:BLOCKS和C-Free中编译运行通过。本系统支持快捷键操作,简单的鼠标操作和键盘操作。本系统大量使用了标注,尽量使程序明了易懂,运用较多的数据结构,用三方向的十字交叉链表储存数据信息,运用数组,指针,结构与联合及文件输入输出,控制台等知识,系统主要提供航班信息以及机场信息的快速查询、检索和统计,本程序有飞机时刻查询,对各三级链表分别进行插入,删除,修改的操作。 本系统的一些主要功能及快捷键说明如下: 1、F1 显示帮助主题; 2、Alt + X 退出系统; 3、Alt + C 清除屏幕; 4、Alt + F 弹出"文件(F)"的下拉菜单; 5、Alt + E 弹出"编辑(E)"的下拉菜单; 6、Alt + I 弹出"查询(I)"的下拉菜单; 7、Alt + S 弹出"统计(S)"的下拉菜单; 8、Alt + H 弹出"帮助(H)"的下拉菜单; 9、ESC 键 关闭弹出窗口,回到主菜单栏; 关键词:航班时刻表查询系统,模糊查询,关键字突显,数据实时更新, 数据自动加载,文件操作,时间动态显示 Abstract The system can be in VC++ 6.0, CODE:BLOCKS and C-Free compiled to run through. The system supports shortcut key operation, simple operation of the mouse and keyboard operation. This system uses a large number of tagging, try to make the program easier to understand, use more data structure, with three direction cross storage data information, the use of the array, pointer, and joint structure and file input and output, console and other knowledge, system is mainly to provide flight information, airport information query, retrieval and statistics, the present procedures have the aircraft time query, on each of three levels of linked respectively insertion, deletion, modification of the operation. This system main function and shortcuts as follows: 1、F1 displays help topics; 2、Alt + X to exit the system; 3、Alt + C clear screen; 4、Alt + F pop " File ( F ) " drop-down menu; 5、Alt + E pop " Edit ( E ) " drop-down menu; 6、Alt + I pop " Query ( I ) " drop-down menu; 7、Alt + S pop " Statistics ( S ) " drop-down menu; 8、Alt + H pop " Help ( H ) " drop-down menu; 9、ESC key to close the pop-up window, back to the main menu bar; Key words: flight schedule query system, fuzzy query,keyword salience, Data updated in real time, Automatic data loading, file operation, Time dynamic display 目录 前言 ………………………………………………………………………………… I 第1章 摘要 ……………………………………………………………………… II 1.1 航班时刻表查询系统摘要 ………………………………………………… II 1.2 关键字 ………………………………………………………………………… II 第2章 Abstract ………………………………………………………………… III 2.1 Flight Schedule Query System Abstract …………………………………………… III 2.2 Keywords …………………………………………………………………… III 第3章 正文 ………………………………………………………………………… 1 3.1 系统功能模块结构 ………………………………………………………… 1 3.2 数据结构设计及用法 ……………………………………………………… 2 3.3 程序结构(流程图) ………………………………………………………… 5 3.4 各模块的功能 ……………………………………………………………… 22 3.5 实验结果 …………………………………………………………………… 23 3.6 体会 ……………………………………………………………………… 34 致谢 ………………………………………………………………………………… 35 参考文献 …………………………………………………………………………… 35 附录 ………………………………………………………………………………… 36 附录1 源程序清单 ……………………………………………………………… 36 附录2 系统测试数据 ………………………………………………………… 92 一、系统功能模块结构 航班时刻表信息查询系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。如下图1所示: 图3.1.1 系统功能模块结构图 1、文件模块包括五个子模块:数据保存,数据加载,数据备份,备份恢复,退出; 2、编辑模块包括九个子模块:航班插入,航班修改,航班删除, 机场插入,机场修改,机场删除, 经停航班插入,经停航班修改,经停航班删除; 3、查询模块包括三个子模块:航班查询,机场查询,模糊查询; 4、统计模块包括两个子模块:座位统计,价格统计; 5、帮助模块包括三个子模块:帮助主题,关于系统,清屏。 二、数据结构设计及用法说明 1、帐号密码信息链数据结构(IP)及用法 typedef struct ip_node{ char id[15]; /*帐号*/ char password[15]; /*密码*/ struct ip_node *next; } IP; 2、航班信息链数据结构(FLIGHT_NODE)及用法 typedef struct flight_node{ char flight_number[10]; /*航班编号*/ char aircraft_model[20]; /*客机名称*/ char flight_corp_number[10]; /*所属航空公司编号*/ char flight_corp_name[20]; /*所属航空公司名称*/ char initial[10]; /*始发地*/ char terminal[10]; /*目的地*/ char begin_time[10]; /*始发时间*/ char end_time[10]; /*到达终点时间*/ float one_price; /*单程票价*/ float round_price; /*来回票价*/ char full_time[10]; /*全程时间*/ int mileage; /*飞行里程*/ struct flight_node *next; /*指向下一结点*/ struct stop_airport_node * anext; /*指向经停机场信息链结点的指针*/ } FLIGHT_NODE; 3、经停机场信息链数据结构(STOP_AIRPORT_NODE)及用法 typedef struct stop_airport_node{ char airport_number[10]; /*机场编号*/ char airport_name[20]; /*机场名称*/ char regional_number[10]; /*所属地域编号*/ char flight_number[10]; /*航班编号*/ char arrive_time[10]; /*到达时间*/ char leave_time[10]; /*离开时间*/ char cur_time[10]; /*到目前为止飞行时间*/ int cur_mileage; /*到目前为止飞行里程*/ struct stop_airport_node *next; /*指向下一节点*/ struct stop_flight_node *fnext; /*指向经停航班信息结点的指针*/ } STOP_AIRPORT_NODE; 4、经停航班信息链数据结构(STOP_FLIGHT_NODE)及用法 typedef struct stop_flight_node{ char flight_number[10]; /*经停航班编号*/ char aircraft_model[20]; /*经停客机型号*/ char airport_number[10]; /*机场编号*/ char regional_number[10]; /*所属地域编号*/ char flight_type[20]; /*航班类型:始发-经停-终到*/ char arrive_time[10]; /*到达时间*/ char leave_time[10]; /*离开时间*/ float cur_one_price; /*本机场到终点单程票价*/ float cur_round_price; /*本机场到终点来回票价*/ int surplus_ticket; /*余票数量*/ struct stop_flight_node *next;/*指向下一个结点*/ } STOP_FLIGHT_NODE; 5、屏幕窗口信息链数据结构(LAYER_NODE)及用法 typedef struct layer_node { char LayerNo; /*弹出窗口层数*/ SMALL_RECT rcArea; /*弹出窗口区域坐标*/ CHAR_INFO *pContent; /*弹出窗口区域字符单元原信息存储缓冲区*/ char *pScrAtt; /*弹出窗口区域字符单元原属性值存储缓冲区*/ struct layer_node *next; /*指向下一结点的指针*/ } LAYER_NODE; 6、标签束信息结构(LABEL_BUNDLE)及用法 typedef struct label_bundle { char **ppLabel; /*标签字符串数组首地址*/ COORD *pLoc; /*标签定位数组首地址*/ int num; /*标签个数*/ } LABEL_BUNDLE; 标签束信息包括标签字符串数组内容,标签位置,标签个数。用一个字符型的二重指针变量ppLabel指向标签字符串数组内容,用一个COORD类型的字符指针变量pLoc指向标签串数组输出时的首位置坐标,用整型变量num表示标签的个数。 7、热区信息结构(HOT_AREA)及用法 typedef struct hot_area { SMALL_RECT *pArea; /*热区定位数组首地址*/ char *pSort; /*热区类别(按键、文本框、选项框)数组首地址*/ char *pTag; /*热区序号数组首地址*/ int num; /*热区个数*/ } HOT_AREA; 热区信息包括热区的位置,类别,序号及个数。因此用一个SMALL_RECT结构类型的指针变量pArea指向热区的定位范围;用字符指针变量pSort指向热区的类别类型,其中数字’0’表示按钮型热区,’1’表示文本框热区,’2’表示选项框热区;用字符指针变量pTag指向热区的序号,热区编号一般为1,2,3,4,5......这些自然数表示多个热区的排列顺序,整型变量num表示热区个数。 8、航班信息数据结构见表3.2.1 表3.2.1 中文字段名 类型及长度 举例 航班编号 char[10] 1 客机型号 char[20] 波音737 所属航空公司编号 char[10] 南方航空公司 所属航空公司名称 char[20] NH101 始发地 char[10] 北京 始发时间 char[10] 08:00 目的地 char[10] 成都 到达时间 char[10] 18:00 单程票价 float 1000 来回票价 float 2000 全程飞行时间 char[10] HH:MM 全程飞行里程 int 1200km 9、经停机场信息数据结构见表3.2.2 表3.2.2 中文字段名 类型及长度 举例 机场编号 char[10] CTU 机场名称 char[20] 首都国际机场 所属地域编号 char[10] BJ110 航班编号 char[10] 1 到达时间 char[10] HH:MM 离开时间 char[10] HH:MM 飞行时间 char[10] 注:从始发机场计算 飞行里程 int 注:从始发机场计算 10、经停航班数据信息结构见表3.2.3 表3.2.3 中文字段名 类型及长度 举例 经停航班编号 char[10] 1 经停客机型号 char[20] 波音737 机场编号 char[10] CTU 所属地域编号 char[10] 43001101 航班类型 char[20] 北京—上海—成都 到达时间 char[10] HH:MM 离开时间 char[10] HH:MM 单程票价 float 注:从本机场到终点机场 来回票价 float 注:从本机场到终点机场 余票数量 int 93张 11、三方向的十字交叉链表结构见图3.2.1 图3.2.1 经停机场1 经停机场2 经停机场n 航班1 航班121222 航班n 主链头gp_head 经停航班1 … 经停航班n ∧ … … 三、程序结构(流程图) 3.1、主程序运行流程见图3.3.1 加载文件中存储的链表数据信息 文本菜单界面初始化 系统功能模块的选择及运行 退出系统前保存链表数据信息 清理内存中的缓存信息,关闭系统 开始 结束 加载用户名及密码文件信息 登入系统 图3.3.1 3.2、数据保存流程见图3.3.2 开始 打开航班,经停机场,经停航班信息文件 P1==NULL Y N 在文件1写入一条航班信息 P2==NULL P1=P1->next Y N 在文件2写入 一条经停机场信息 P2=p2->next P3==NULL Y 关闭文件 退出系统 N 在文件3写入 一条经停航班信息 P3=p3->next 结束 图3.3.2 3.3、数据加载流程开始 见图3.3.3 打开航班,经停机场,经停航班信息文件,定义三个文件指针in1,in2,in3分别指向三个文件中的信息 feof(in1)==0 Y N 动态创建在一个航班结点p1,从文件1中读入一条航班信息记录 p1->anext=NULL; p1->next=hd; hd=p1; feof(in2)==0 Y N 动态创建在一个机场结点p2,从文件2中读入一条机场信息记录 在航班链中寻找经停该机场的航班,在该航班下建一条机场链 N p2->fnext=NULL;p2->next=p1->anext;p1->anext=p2; feof(in3)==0 Y N 动态创建在一个机场结点p3,从文件3中读入一条机场信息记录 在机场链中寻找该机场的经停航班,在该机场下建一条经停航班链 N p2=p1->anext; p3->next=p2->fnext; p2->fnext=p3; 结束 图3.3.3 3.4、航班插入流程见图3.3.4 开始 动态创建一个航班结点p1,并对该节点中数据项赋值 获取链表头指针gp_head ,phead=&gp_head 遍历链表比较原链表中是否已存在该航班编号 是 否 p1 -> next =*phead; *phead = p1; 保存链表信息 结束 图3.3.4 开始 3.5、航班删除流程见图3.3.5 输入所要删除信息的航班fli_num 获取指向航班数据链头的指针P P==NULL Y p=p->next N P->flight_number==fli_num N Y P是否为头指针 未找到符合的航班 Y 将目标结点的前驱结点指向后继结点 N 结束 将目标结点的后继结点指针置为链表头指针 保存信息 释放结点指针p,并且循环释放该航班结点下的机场和经停航班信息 图3.3.5 3.6、航班修改流程见图3.3.6 开始 输入所要修改的航班编号fli_num 获取指向航班数据链头的指针P P==NULL Y P=P ->next N P->flight_number==fli_num N 未找到符合的航班 Y 输入修改后的信息 保存信息 结束 图3.3.6 3.7、机场插入流程见图3.3.7 开始 动态创建一个机场结点p2,并对该节点中数据项赋值 遍历链表比较原链表中是否已存在该机场编号 获取链表头指针gp_head ,pfli_node=gp_head 是 遍历链表是否找到与该机场相对应的航班结点pfli_node 否 否 free(p2);释放结点 是 p2 -> next = pfli_node -> anext ; pfli_node -> anext = p2 保存链表信息 结束 图3.3.7 3.8、机场修改流程见图3.3.8 开始 输入所要修改的航班编号air_num 获取指向航班数据链头的指针phead 寻找与air_num匹配的机场信息结点pair_temp SeekAirNode(phead,air_num) 动态创建机场结点pair_node,并对其数据项赋值 pair_temp==NULL Y 未找到符合的机场 N pair_next = pair_temp -> next; *pair_temp = *pair_node; pair_temp ->next = pair_next; free(pair_node) 保存信息 结束 图3.3.8 开始 3.9、机场删除流程见图3.3.9 输入所要删除信息的航班air_num 获取指向航班数据链头的指针gp_head,pfli_node=gp_head pfli_node==NULL Y N pair_current = pfli_node ->anext; pair_current = pair_current ->next; pair_node是否为 头指针 Y 未找到符合的机场 Y N 结束 将目标结点的前驱结点指向后继结点 将目标结点的后继结点指针置为链表头指针 保存信息 释放结点指针pair_node,并且循环释放该机场结点下的经停航班信息 图3.3.9 3.10、经停航班插入流程见图3.3.10 开始 动态创建一个经停航班结点p3,并对该节点中数据项赋值 遍历机场链表比较原链表中是否已存在该经停航班编号 获取链表头指针gp_head ,pfli_node=gp_head, pair_node=pfli_node->anext pref_node=pair_node->fnext 是 遍历链表是否找到与该经停航班相对应的机场结点pair_node 否 否 free(p3);释放经停航班结点 是 pref_node ->next = pair_node ->fnext; pair_node ->fnext = pref_node; 保存链表信息 结束 图3.3.10 开始 3.11、经停航班修改流程见图3.3.11 输入所要修改的经停航班编号ref_num, 以及该对应的机场编号air_num 获取指向航班数据链头的指针phead 寻找与air_num和ref_num匹配的 经停航班信息结点pref_temp SeekAirNode(phead,air_num) 动态创建经停航班结点pair_node, 并对其数据项赋值 pref_temp==NULL Y 未找到符合的经停航班 N pref_next = pref_temp ->next; *pref_temp = *pref_node; pref_temp -> next = pref_next; free(pref_node) 保存信息 结束 图3.3.11 开始 3.12、经停航班删除流程见图3.3.12 输入所要删除信息的经停航班ref_num 获取指向航班数据链头的指针gp_head,pfli_node=gp_head pfli_node==NULL Y N 找到相应机场结点pair_node pref_current = pair_node ->fnext; pref_prior = pref_current; pref_current = pref_current -> next; pref_prior是否为 头指针 未找到符合的机场 Y N 结束 将目标结点的前驱结点指向后继结点 将目标结点的后继结点指针置为链表头指针 保存信息 释放结点指针pref_node 图3.3.12 3.13、航班查询流程见图3.3.13 开始 输入所要查询航班的编号fli_num 获取航班链的链头指针p P==NULL Y P=p->next N p->flight_number==fli_num Y 输出此时p所指向结点的信息 结束 图3.3.13 3.14、机场查询流程见图3.3.14 开始 输入所要查询的机场编号num 获取链表的链头指针P1 P1==NULL Y P1=p1->next N 获取第二级链表的链头指针p2=p1->anext P2==NULL Y P2=p2->next 获取第三级链表的链针p3=p2->fnext N P
展开阅读全文
相关搜索
温馨提示:
taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 教育专区 > 教案示例


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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁