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

上传人:土8路 文档编号:11073607 上传时间:2021-06-26 格式:DOC 页数:99 大小:1.87MB
返回 下载 相关 举报
华中科技大学C语言课程设计实验报告及源代码.doc_第1页
第1页 / 共99页
华中科技大学C语言课程设计实验报告及源代码.doc_第2页
第2页 / 共99页
华中科技大学C语言课程设计实验报告及源代码.doc_第3页
第3页 / 共99页
华中科技大学C语言课程设计实验报告及源代码.doc_第4页
第4页 / 共99页
华中科技大学C语言课程设计实验报告及源代码.doc_第5页
第5页 / 共99页
点击查看更多>>
资源描述

《华中科技大学C语言课程设计实验报告及源代码.doc》由会员分享,可在线阅读,更多相关《华中科技大学C语言课程设计实验报告及源代码.doc(99页珍藏版)》请在三一文库上搜索。

1、课 程 设 计 报 告题目: 航班时刻表信息查询系统 课程名称: C语言程序设计 专业班级: 学 号: 姓 名: 指导教师: 报告日期: 计算机科学与技术学院毕业设计论文任务书 姓名: 班号: 专业: 计算机科学与技术 同组姓名: 指导教师: 一、课题名称 航班时刻表查询系统二、主要内容建立航班时刻表查询系统,提供创建、编辑和查询等基本功能和服务。三、任务要求收集与阅读相关文献资料,确定系统目标与范围,分析系统需求,确定系统功能;设计系统方案,完成系统实现;提交课程设计报告。四、系统功能系统主要提供航班信息的快速查询、检索和统计。应该具有按航班、按机场等查询信 息的功能;模糊条件检索航班信息;

2、统计航班座次情况等。五、系统数据系统主要涉及“航班”、“经停机场”和“经停航班” 3类信息。六、基本要求1)、只能使用C语言,源程序要有适当的注释,使程序容易阅读;2)、要有用户界面,要求至少采用教材p215-p216类似的简易菜单,鼓励采用文本菜单界面甚至采用图形菜单界面;3)、必须使用结构和十字交叉链表等数据结构;4)、使用文件保存数据;5)、至少输出一份报表(屏幕输出即可),鼓励自行增加新功能;6)、设计测试的模拟数据,完成系统测试;7)、写实验报告(要求正规打印,A4幅面)。 前言本C语言程序课程设计报告是由wt编写的。本课程设计主要内容包括,内容中文摘要、Abstract(英文摘要)

3、、正文、致谢、参考文献以及附录,其中:正文主要内容有:一、系统功能模块,主要介绍该课程设计的航班时刻表查询系统的组成功能模块有哪些;二、数据结构设计及用法说明,主要是介绍说明本航班时刻表查询系统设计时用到的一些数据信息结构的设计思路和用法;三、程序结构流程图,用流程图的方式解释本课程设计中一些功能函数的设计思路和实现方法;四、各模块的功能,主要展示了本系统最终功能的解释说明;五、试验结果,主要展示了本航班时刻表查询系统最终功能的实现效果;六、体会,讲述作者在制作过程中的一些心得体会。本C语言程序课程设计部分参考了曹计昌,卢萍,李开等老师2008年编著的 C语言程序设计和李开,卢萍,曹计昌等老师

4、编著的 C语言实验与课程设计。在此,谨向这些提供无私支持的老师们致以诚挚地谢意!感谢他们默默无闻的奉献!附录主要有两个部分:附录1是源程序代码清单,附录2是系统测试数据。由于作者水平有限,加之时间仓促,难免有些缺点和错误,望广大读者给予批评指正。 编者 2012年10月于华中科技大学摘要 本系统可在VC+ 6.0、CODE:BLOCKS和C-Free中编译运行通过。本系统支持快捷键操作,简单的鼠标操作和键盘操作。本系统大量使用了标注,尽量使程序明了易懂,运用较多的数据结构,用三方向的十字交叉链表储存数据信息,运用数组,指针,结构与联合及文件输入输出,控制台等知识,系统主要提供航班信息以及机场信

5、息的快速查询、检索和统计,本程序有飞机时刻查询,对各三级链表分别进行插入,删除,修改的操作。 本系统的一些主要功能及快捷键说明如下: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 键 关闭弹出窗口,回到主菜单栏;关键词:航班时刻表查询系统,模糊查询,关键字突显,数据实时更新,数据自动加载,文件操作,时间动态显示Abstr

6、actThe 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 t

7、hree 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

8、 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 )

9、 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 ti

10、me, Automatic data loading, file operation, Time dynamic display 目录前言 I第1章 摘要 II1.1 航班时刻表查询系统摘要 II1.2 关键字 II第2章 Abstract III2.1 Flight Schedule Query System Abstract III2.2 Keywords III第3章 正文 1 3.1 系统功能模块结构 13.2 数据结构设计及用法 23.3 程序结构(流程图) 53.4 各模块的功能 223.5 实验结果 233.6 体会 34致谢 35参考文献 35附录 36 附录1 源程序清单 3

11、6 附录2 系统测试数据 92一、系统功能模块结构航班时刻表信息查询系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。如下图1所示:图3.1.1 系统功能模块结构图1、文件模块包括五个子模块:数据保存,数据加载,数据备份,备份恢复,退出;2、编辑模块包括九个子模块:航班插入,航班修改,航班删除,机场插入,机场修改,机场删除,经停航班插入,经停航班修改,经停航班删除;3、查询模块包括三个子模块:航班查询,机场查询,模糊查询;4、统计模块包括两个子模块:座位统计,价格统计;5、帮助模块包括三个子模块:帮助主题,关于系统,清屏。二、数据结构设计及用法说明1、帐号密码信息链数据

12、结构(IP)及用法typedef struct ip_node char id15; /*帐号*/ char password15; /*密码*/ struct ip_node *next; IP;2、航班信息链数据结构(FLIGHT_NODE)及用法typedef struct flight_nodechar flight_number10; /*航班编号*/char aircraft_model20; /*客机名称*/char flight_corp_number10; /*所属航空公司编号*/char flight_corp_name20; /*所属航空公司名称*/char initia

13、l10; /*始发地*/char terminal10; /*目的地*/char begin_time10; /*始发时间*/char end_time10; /*到达终点时间*/float one_price; /*单程票价*/float round_price; /*来回票价*/char full_time10; /*全程时间*/int mileage; /*飞行里程*/struct flight_node *next; /*指向下一结点*/struct stop_airport_node * anext; /*指向经停机场信息链结点的指针*/ FLIGHT_NODE;3、经停机场信息链数

14、据结构(STOP_AIRPORT_NODE)及用法typedef struct stop_airport_nodechar airport_number10; /*机场编号*/char airport_name20; /*机场名称*/char regional_number10; /*所属地域编号*/char flight_number10; /*航班编号*/char arrive_time10; /*到达时间*/char leave_time10; /*离开时间*/char cur_time10; /*到目前为止飞行时间*/int cur_mileage; /*到目前为止飞行里程*/stru

15、ct stop_airport_node *next; /*指向下一节点*/struct stop_flight_node *fnext; /*指向经停航班信息结点的指针*/ STOP_AIRPORT_NODE;4、经停航班信息链数据结构(STOP_FLIGHT_NODE)及用法 typedef struct stop_flight_nodechar flight_number10; /*经停航班编号*/char aircraft_model20; /*经停客机型号*/char airport_number10; /*机场编号*/char regional_number10; /*所属地域编号

16、*/char flight_type20; /*航班类型:始发-经停-终到*/char arrive_time10; /*到达时间*/char leave_time10; /*离开时间*/float cur_one_price; /*本机场到终点单程票价*/float cur_round_price; /*本机场到终点来回票价*/int surplus_ticket; /*余票数量*/struct stop_flight_node *next;/*指向下一个结点*/ STOP_FLIGHT_NODE;5、屏幕窗口信息链数据结构(LAYER_NODE)及用法 typedef struct lay

17、er_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; /*标签定

18、位数组首地址*/ int num; /*标签个数*/ LABEL_BUNDLE; 标签束信息包括标签字符串数组内容,标签位置,标签个数。用一个字符型的二重指针变量ppLabel指向标签字符串数组内容,用一个COORD类型的字符指针变量pLoc指向标签串数组输出时的首位置坐标,用整型变量num表示标签的个数。7、热区信息结构(HOT_AREA)及用法typedef struct hot_area SMALL_RECT *pArea; /*热区定位数组首地址*/ char *pSort; /*热区类别(按键、文本框、选项框)数组首地址*/ char *pTag; /*热区序号数组首地址*/ int

19、 num; /*热区个数*/ HOT_AREA;热区信息包括热区的位置,类别,序号及个数。因此用一个SMALL_RECT结构类型的指针变量pArea指向热区的定位范围;用字符指针变量pSort指向热区的类别类型,其中数字0表示按钮型热区,1表示文本框热区,2表示选项框热区;用字符指针变量pTag指向热区的序号,热区编号一般为1,2,3,4,5.这些自然数表示多个热区的排列顺序,整型变量num表示热区个数。8、航班信息数据结构见表3.2.1 表3.2.1中文字段名类型及长度举例航班编号char101客机型号char20波音737所属航空公司编号char10南方航空公司所属航空公司名称char20

20、NH101始发地char10北京始发时间char1008:00目的地char10成都到达时间char1018:00单程票价float1000来回票价float2000全程飞行时间char10HH:MM全程飞行里程int1200km9、经停机场信息数据结构见表3.2.2表3.2.2中文字段名类型及长度举例机场编号char10CTU机场名称char20首都国际机场所属地域编号char10BJ110航班编号char101到达时间char10HH:MM离开时间char10HH:MM飞行时间char10注:从始发机场计算飞行里程int注:从始发机场计算10、经停航班数据信息结构见表3.2.3表3.2.3

21、中文字段名类型及长度举例经停航班编号char101经停客机型号char20波音737机场编号char10CTU所属地域编号char1043001101航班类型char20北京上海成都到达时间char10HH:MM离开时间char10HH:MM单程票价float注:从本机场到终点机场来回票价float注:从本机场到终点机场余票数量int93张11、三方向的十字交叉链表结构见图3.2.1图3.2.1 经停机场1 经停机场2经停机场n航班1 航班121222航班n 主链头gp_head经停航班1 经停航班n 三、程序结构(流程图)3.1、主程序运行流程见图3.3.1加载文件中存储的链表数据信息文本菜

22、单界面初始化系统功能模块的选择及运行退出系统前保存链表数据信息清理内存中的缓存信息,关闭系统开始结束加载用户名及密码文件信息登入系统图3.3.13.2、数据保存流程见图3.3.2 开始 打开航班,经停机场,经停航班信息文件P1=NULL Y N在文件1写入一条航班信息 P2=NULLP1=P1-nextY N在文件2写入一条经停机场信息P2=p2-next P3=NULL Y关闭文件退出系统N在文件3写入一条经停航班信息P3=p3-next 结束图3.3.23.3、数据加载流程开始见图3.3.3打开航班,经停机场,经停航班信息文件,定义三个文件指针in1,in2,in3分别指向三个文件中的信息

23、feof(in1)=0 Y N动态创建在一个航班结点p1,从文件1中读入一条航班信息记录 p1-anext=NULL; p1-next=hd;hd=p1; feof(in2)=0 YN动态创建在一个机场结点p2,从文件2中读入一条机场信息记录在航班链中寻找经停该机场的航班,在该航班下建一条机场链 Np2-fnext=NULL;p2-next=p1-anext;p1-anext=p2; feof(in3)=0 Y N动态创建在一个机场结点p3,从文件3中读入一条机场信息记录在机场链中寻找该机场的经停航班,在该机场下建一条经停航班链 Np2=p1-anext; p3-next=p2-fnext;

24、p2-fnext=p3; 结束 图3.3.33.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获取指向航班数据链头的指针PP=NULLYp=p-nextNP-flight_number=fli_numNYP是否为头指针未找到符合的航班Y将目标结点的前驱结点指向后继结点N结束将目标结点的后

25、继结点指针置为链表头指针保存信息释放结点指针p,并且循环释放该航班结点下的机场和经停航班信息图3.3.53.6、航班修改流程见图3.3.6 开始输入所要修改的航班编号fli_num获取指向航班数据链头的指针PP=NULLYP=P -nextNP-flight_number=fli_num N未找到符合的航班Y输入修改后的信息保存信息结束图3.3.63.7、机场插入流程见图3.3.7 开始 动态创建一个机场结点p2,并对该节点中数据项赋值遍历链表比较原链表中是否已存在该机场编号获取链表头指针gp_head ,pfli_node=gp_head是遍历链表是否找到与该机场相对应的航班结点pfli_n

26、ode否否free(p2);释放结点 是p2 - next = pfli_node - anext ; pfli_node - anext = p2保存链表信息 结束 图3.3.73.8、机场修改流程见图3.3.8 开始输入所要修改的航班编号air_num获取指向航班数据链头的指针phead寻找与air_num匹配的机场信息结点pair_tempSeekAirNode(phead,air_num)动态创建机场结点pair_node,并对其数据项赋值pair_temp=NULLY未找到符合的机场N pair_next = pair_temp - next; *pair_temp = *pair_

27、node;pair_temp -next = pair_next;free(pair_node)保存信息结束图3.3.8开始3.9、机场删除流程见图3.3.9 输入所要删除信息的航班air_num获取指向航班数据链头的指针gp_head,pfli_node=gp_headpfli_node=NULLYNpair_current = pfli_node -anext;pair_current = pair_current -next;pair_node是否为头指针Y未找到符合的机场YN结束将目标结点的前驱结点指向后继结点将目标结点的后继结点指针置为链表头指针保存信息释放结点指针pair_node

28、,并且循环释放该机场结点下的经停航班信息 图3.3.93.10、经停航班插入流程见图3.3.10 开始 动态创建一个经停航班结点p3,并对该节点中数据项赋值遍历机场链表比较原链表中是否已存在该经停航班编号获取链表头指针gp_head ,pfli_node=gp_head,pair_node=pfli_node-anextpref_node=pair_node-fnext是遍历链表是否找到与该经停航班相对应的机场结点pair_node否否free(p3);释放经停航班结点 是pref_node -next = pair_node -fnext;pair_node -fnext = pref_no

29、de;保存链表信息 结束 图3.3.10开始3.11、经停航班修改流程见图3.3.11 输入所要修改的经停航班编号ref_num,以及该对应的机场编号air_num获取指向航班数据链头的指针phead寻找与air_num和ref_num匹配的经停航班信息结点pref_tempSeekAirNode(phead,air_num)动态创建经停航班结点pair_node,并对其数据项赋值pref_temp=NULLY未找到符合的经停航班 N pref_next = pref_temp -next;*pref_temp = *pref_node;pref_temp - next = pref_next

30、;free(pref_node)保存信息结束图3.3.11开始3.12、经停航班删除流程见图3.3.12 输入所要删除信息的经停航班ref_num获取指向航班数据链头的指针gp_head,pfli_node=gp_headpfli_node=NULLYN找到相应机场结点pair_nodepref_current = pair_node -fnext;pref_prior = pref_current;pref_current = pref_current - next;pref_prior是否为头指针未找到符合的机场YN结束将目标结点的前驱结点指向后继结点将目标结点的后继结点指针置为链表头指针保存信息释放结点指针pref_node 图3.3.123.13、航班查询流程见图3.3.13 开始输入所要查询航班的编号fli_num获取航班链的链头指针pP=NULLYP=p-nextNp-flight_number=fli_numY输出此时p所指向结点的信息结束图3.3.133.14、机场查询流程见图3.3.14 开始输入所要查询的机场编号num获取链表的链头指针P1P1=NULLYP1=p1-next N获取第二级链表的链头指针p2=p1-anextP2=NULL YP2=p2-next获取第三级链表的链针p3=p2-fnext NP3=N

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1