




已阅读5页,还剩30页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言课程设计一、系统功能模块结构航班时刻表信息查询系统由五大功能模块组成:文件模块,编辑模块,查询模块,统计模块,帮助模块。如下图1所示:图3.1.1 系统功能模块结构图1、文件模块包括五个子模块:数据保存,数据加载,数据备份,备份恢复,退出;2、编辑模块包括九个子模块:航班插入,航班修改,航班删除,机场插入,机场修改,机场删除,经停航班插入,经停航班修改,经停航班删除;3、查询模块包括三个子模块:航班查询,机场查询,模糊查询;4、统计模块包括两个子模块:座位统计,价格统计;5、帮助模块包括三个子模块:帮助主题,关于系统,清屏。二、数据结构设计及用法说明1、帐号密码信息链数据结构(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 initial10; /*始发地*/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、经停机场信息链数据结构(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; /*到目前为止飞行里程*/struct 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; /*所属地域编号*/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 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中文字段名类型及长度举例航班编号char101客机型号char20波音737所属航空公司编号char10南方航空公司所属航空公司名称char20NH101始发地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中文字段名类型及长度举例经停航班编号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开始加载用户名及密码文件信息登入系统加载文件中存储的链表数据信息文本菜单界面初始化系统功能模块的选择及运行退出系统前保存链表数据信息清理内存中的缓存信息,关闭系统结束图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分别指向三个文件中的信息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; 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将目标结点的后继结点指针置为链表头指针释放结点指针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_node否否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_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,并且循环释放该机场结点下的经停航班信息保存信息结束 图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_node;保存链表信息 结束 图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;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=NULL YP3=p3-next NP3-airport_number=num N Y输出p3指向的第三级链结点的信息结束 图3.3.143.15、模糊查询(关键字匹配查询)流程见图3.3.15开始输入所要查询的关键字KeyWord获取第一级链头指针p1=gp_headP1=NULLYP1=p1-nextNMyStrstr(KeyWord,p1-)=0 YN输出当前指针p1指向结点信息结束图3.3.153.16、余票统计流程见图3.3.16开始获取链表第一级链头指针P1=headP1=NULLP1=p1-nextP2=p1-anextP2=NULLP2=p2-nextP3=p2-fnextP3=NULLP3=p3-next输出p3指向的结点座位等信息结束图3.3.163.17、价格统计流程见图3.3.17开始获取链表第一级链头指针P1=headP1=NULLP1=p1-nextP2=p1-anextP2=NULLP2=p2-nextP3=p2-fnextP3=NULLP3=p3-next输出p3指向的机票价格等信息结束图3.3.17四、各模块的功能4.1.1 数据保存:保存输入系统的数据信息。4.1.2 数据加载:加载文件中的信息。4.1.3 数据备份:将当前系统内保存的数据信息另存到另一文件中备份。4.1.4 备份恢复:将上一次备份文件中的数据信息恢复到当前系统中。4.1.5 退出Alt+X:退出系统。4.2.1 航班插入:插入用户所需的一条航班信息。4.2.2 航班修改:修改用户所指定的某条航班信息。4.2.3 航班删除:删除用户所指定的某条航班信息。4.2.4 机场插入:插入用户所需的一条机场信息。4.2.5 机场修改:修改用户所指定的某条机场信息。4.2.6 机场删除:删除用户所指定的某条机场信息。4.2.7 经停航班插入:插入用户所需的一条经停航班信息。4.2.8 经停航班修改:修改用户所指定的某条经停航班信息。4.2.9 经停航班删除:删除用户所指定的某条经停航班信息。4.3.1 航班查询:按航班号查询相关信息。4.3.2 机场查询:按机场编号查询相关信息。4.3.3 模糊查询:根据子串匹配模糊查询信息。4.4.1 余票统计:统计所有航班的剩余票数。4.4.2 价格统计:统计所有航班中的价格信息。4.5.1 帮助主题:本程序快捷操作使用说明。4.5.2 关于系统:介绍本系统的主要功能及基本情况。4.5.3 清屏Alt+C:清除屏幕信息。五、试验结果(输入数据与输出结果)I、注册系统登入帐号进入首界面,选择快速登入(输入字母L)还是免费注册一个新账号(输入字母R)图3.5.1进入注册帐号界面(帐号栏输入xxxx 密码栏输入xxxx)图3.5.2新帐号注册成功,自动跳转到登入界面图3.5.3 II、登入系统界面输入帐号:wangtao 密码:123456图3.5.4登入成功后进入欢迎界面图3.5.5III、按任意键进入本系统图3.5.65.1.1、数据保存图3.5.75.1.2、数据加载图3.5.85.1.3、数据备份图3.5.9图3.5.105.1.4备份恢复图3.5.11图3.5.125.1.5退出按住快捷键Alt+X执行退出功能图3.5.13图3.5.145.2.1、航班插入图3.5.155.2.2、航班修改图3.5.165.2.3、航班删除图3.5.175.2.4、机场插入图3.5.185.2.5、机场修改图3.5.195.2.6、机场删除 图3.5.205.2.7、经停航班插入图3.5.21 5.2.8、经停航班修改图3.5.225.2.9、经停航班删除图3.5.23 5.3.1、航班查询图3.5.245.3.2、机场查询图3.5.25 5.3.3、模糊(关键字)查询 如输入北京的北字,系统将会输出系统里含有北字的相关信息,并突出显示。图3.5.26 再如输入数字3,系统将会输出系统中含有3的相关信息,并突出显示。图3.5.275.4.1、余票统计图3.5.28图3.5.295.4.2、价格统计图3.5.30 5.5.1、帮助图3.5.315.5.2、关于系统图3.5.325.5.3、清屏按住快捷键Alt+C执行清屏功能清屏前:图3.5.33清屏后:图3.5.34六、体会1、 刚开始我看到题目时一头雾水,不知该从何处下手,因为平时学的C根本没有提及控制台程序,根本不知该用哪方面的知识来实现文本菜单界面,因为平时只做过一些输入输出的普通小程序,根本没有界面的概念。于是我就想如果先运行一下老师给的样例程序,脑中大概也就有了一些概念和想法。可是把老师给的几个代码拿来一运行编译error就有几十行,面对那上千行的代码,我就不知该怎么下手了。一气下就将那电脑丢在一旁,痛快的玩了八天。后来实在没办法,离开学还二十来天了,我又开始行动起来。首先我拿起那本C语言实验与课程设计,我就看了三天,大概懂了一些控制台函数的用法,我就开始将书上的代码一段一段的输入进去跑一跑,慢慢的就大概懂了怎么来实现那些界面。2、 我首先把那个任务说明看了几遍,就将我的程序主要分成五大块功能:一、文件处理功能:首先得有将数据信息保存的功能,这就得用到老师讲的“文件”那章的知识,我又拿起课本看了几遍。其次还得有数据备份的功能,以备在重大失误后能找回一些数据,将损失降低。有了备份,还得有恢复备份数据地功能。最后必须有安全退出系统的功能。二、数据处理功能:首先得让系统能读入操作者输入的数据并将数据存储在文件中。然后如果操作者输入数据有误那还得有对数据修改,部分数据删除,以及数据添加的功能。三、查询功能:第一可以按照航班来查询,第二还可以按照机场查询,第三还可以按照目的地以及其他条件综合查询。四、统计信息功能:最重要的要有航班剩余座位统计功能,其次还可以有各航班机票价格的统计。五、系统帮助功能:第一得告诉操
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 瓷砖专卖店年终总结
- 消防安全普及培训报道课件
- 2025至2030中国加筋土工合成材料行业项目调研及市场前景预测评估报告
- 二手房屋买卖合同模板:含房屋交易风险评估及建议
- 文化创意产业园区空场地租赁及运营管理合同
- 因男方过错离婚的财产分割及子女监护安排协议
- 企业核心技术人员离职竞业限制保密协议书
- 高端人才离职后商业秘密保护与竞业禁止合同
- 2025至2030中国皮肤套刮器行业项目调研及市场前景预测评估报告
- 离婚协议书范本:共同财产分割与债务处理
- 2025-2026学年度武汉市部分学校高三年级九月调研考试 语文试卷(含标准答案)
- 2025年禁毒知识竞赛试题及参考答案
- 初二入团考试内容及答案
- 针灸科感控知识培训课件
- 微生物学讲课文档
- 2024新版2025秋人教版二年级艺术造型美术上册全册教案教学设计(含大单元教学设计)
- 2025年湖北省武汉市中考物理试卷(含答案与解析)
- 汽车维修工国家职业资格二级技能试题(附答案)
- 《劳模工匠之光》课件 第1、2单元 民族大厦的基石、改革攻坚的先锋
- 规范网络文化市场促进健康有序发展
- 四川星亿饰品科技有限公司年产1亿包家居水晶饰品生产项目环评报告
评论
0/150
提交评论