模拟电梯问题实验报告
数据结构 电梯模拟的报告

1.课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。
2.课程设计任务与要求:任务根据教材《数据结构题集(C语言版)》(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。
设计题目从《数据结构题集》“第二篇实习篇”中选取,每班每题不得超过2人。
另选题:学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课程所学的知识。
学生自选课题需在17周前报课程设计指导教师批准方可生效。
要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。
前期准备工作完备与否直接影响到后序上机调试工作的效率。
在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。
2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。
3、程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。
数据结构课程设计报告第5页,共页数据结构课程设计报告第13页,共页数据结构课程设计报告第19页,共页数据结构课程设计报告第20页,共页。
数学建模实验报告

数学建模实验报告一、实验目的1.通过具体的题目实例, 使学生理解数学建模的基本思想和方法, 掌握数学建模分析和解决的基本过程。
2、培养学生主动探索、努力进取的的学风, 增强学生的应用意识和创新能力, 为今后从事科研工作打下初步的基础。
二、实验题目(一)题目一1.题目: 电梯问题有r个人在一楼进入电梯, 楼上有n层。
设每个乘客在任何一层楼出电梯的概率相同, 试建立一个概率模型, 求直到电梯中的乘客下完时, 电梯需停次数的数学期望。
2.问题分析(1)由于每位乘客在任何一层楼出电梯的概率相同, 且各种可能的情况众多且复杂, 难于推导。
所以选择采用计算机模拟的方法, 求得近似结果。
(2)通过增加试验次数, 使近似解越来越接近真实情况。
3.模型建立建立一个n*r的二维随机矩阵, 该矩阵每列元素中只有一个为1, 其余都为0, 这代表每个乘客在对应的楼层下电梯(因为每个乘客只会在某一层下, 故没列只有一个1)。
而每行中1的个数代表在该楼层下的乘客的人数。
再建立一个有n个元素的一位数组, 数组中只有0和1,其中1代表该层有人下, 0代表该层没人下。
例如:给定n=8;r=6(楼8层, 乘了6个人),则建立的二维随机矩阵及与之相关的应建立的一维数组为:m =0 0 1 0 0 01 0 0 0 0 00 0 0 0 0 00 1 0 0 0 00 0 0 0 0 00 0 0 0 0 10 0 0 0 1 00 0 0 1 0 0c = 1 1 0 1 0 1 1 14.解决方法(MATLAB程序代码):n=10;r=10;d=1000;a=0;for l=1:dm=full(sparse(randint(1,r,[1,n]),1:r,1,n,r));c=zeros(n,1);for i=1:nfor j=1:rif m(i,j)==1c(j)=1;break;endcontinue;endends=0;for x=1:nif c(x)==1s=s+1;endcontinue;enda=a+s;enda/d5.实验结果ans = 6.5150 那么, 当楼高11层, 乘坐10人时, 电梯需停次数的数学期望为6.5150。
电梯实训报告_1

电梯实训报告电梯实训报告一、实训目的1、认识并掌握电梯的结构。
2、了解电梯的常见故障,掌握电梯常见故障的排除方法。
3、掌握电梯的平层调整。
4、掌握调整电阻改变电梯门开关速度。
二、实训器材模拟电梯一部数字万用表螺丝刀三、实训内容1、电梯的结构电梯的组成部分:控制柜、曵引机、终端保护装置、轿厢架、开关门机构、导轨、导靴、曳引钢丝绳、对重装置、缓冲器、厅门、显层器。
2、电梯的常见故障及其排除方法用万用表检查故障,根据电梯的故障图。
其有两种方:第一当电源接通时,以304为基点,按图的序号依次测电压,若万用表电压的值为0,则此处有故障,万用表电压的值显示为20V,则此处没有故障;第二当电梯没有接电时,则以301为基点,按图的序号依次测电阻,若万用表出现蜂鸣,则说明此处没有故障,万用表没有出现蜂鸣,则说明此处有故障。
(1)无法正常关电梯门故障的原因:A、轿厢顶的关门限位开关常闭接点和开门按钮的常闭接点闭合不好,从而导致整个关门控制回路有断点,使关门继电器不能吸合。
B、关门继电器故障或门机通信故障。
C、门机电动机损坏或有关线路松动。
D、门未关闭到位,门锁开关未能接通。
排除方法:A、用导线短接法将门控制回路中的断点找出,然后修复或更换。
B、用万用表检查电动机是否损坏,线路是否畅通,并加修复或更换。
C、重新开关门,如不奏效,应调整门速。
(2)平层误差大故障的原因:A、平层感应器与隔磁板位置不当或光电编码器故障。
B、制动器弹簧过松或曳引钢丝绳打滑导致溜车。
C、变频器出现故障。
排除方法:调整排除或层楼校准。
(3)电梯已选向,但门关闭后不能启动故障的原因:A、轿门闭合到位开关未接通。
B、厅门门锁开关出现故障。
C、安全回路不通。
D、拖动运行故障。
E、制动接触器粘连或制动器未打开。
排除方法:调整、更换和排除用万用表检查确定并排除。
(4)电梯到站后,电梯门不开故障的原因:A、轿厢顶上开门限位开关闭合不好或接点折断无法正常开门。
电梯实习报告

电梯实习报告电梯实习报告「篇一」一、电梯故障应对法电梯发生故障时,应首先切断电梯电源。
为了使电梯尽快重新运行,电梯管理员要把故障情况及时、详细的报告给专业维修人员。
二、简单故障诊断法管理员可以排除一些简单的故障。
1、关不上电梯门时,检查开关盒内的开关设定位置是否正常。
2、电梯门不能完全关上时,检查门槛槽内有无故障物。
3、检查电梯是否有人为阻碍,例如杂物阻止门的关闭,轿厢门的安全触板被强行动作等。
三、乘客被关在轿厢内时1、打电话告诉维修人员。
管理员应尽最大努力消除乘客的紧张情绪.与乘客通电话,直到维修人员赶来现场.告诉乘客轿厢内很安全,不要试图自行逃出轿厢。
2、切勿尝试强行释放乘客。
3、若确有已受过培训的电梯管理人员,在确保安全的情况下按“困人救援法”救出被困乘客。
四、谨防事故1、停电时。
告诉乘客停电的实际情况,劝乘客不要试图逃出轿厢(轿厢内辅助照明灯会自动照亮),电源恢复接通后,只要按轿厢内或门厅的楼层按钮,轿厢就会起动。
2、发生水灾时。
应当停用电梯,并采取行动阻截水流入电梯。
电梯再运行前,要先联络电梯维修员来进行检查。
3、发生火灾时。
指引所有乘客离开电梯到安全地方。
确认轿厢内无人后,切断电梯的电源开关。
火灾时,除消防人员执行援救任务外其他人员不许使用电梯逃难。
五、困人救援法电梯发生故障时,应及时通知电梯维修部门。
在专业维修人员到达之前,由经过训练的电梯管理救援人员,根据需要,依照下列步骤释放被困乘客。
1、故障电梯的轿厢位置确认。
在进行救援被困乘客时,先要确保自己安全,由机房控制柜或厅外的轿厢位置指示器确认轿厢位置。
2、电源切断确认。
在进行救援时,为防止轿厢突然移动,发生危险事故,应先将该电梯的机房总电源切断。
3、在轿厢所在的楼层,用专用厅门钥匙小心开启厅门查看轿厢地板和楼面高低相差是否为0.5米以内。
4、轿厢停于接近厅门位置,且高于或低于楼层不超过0.5米时。
先用专用厅门钥匙开启厅门,然后在轿顶用人力开启轿厢门,并协助乘客离开轿厢,最后重新将门关妥。
关于电梯的实习报告三篇

电梯的实习报告关于电梯的实习报告三篇在经济发展迅速的今天,报告与我们愈发关系密切,报告包含标题、正文、结尾等。
其实写报告并没有想象中那么难,下面是小编为大家整理的电梯的实习报告3篇,供大家参考借鉴,希望可以帮助到有需要的朋友。
电梯的实习报告篇1电梯中,门是掌管电梯出入的生命线。
门本身的质量与安装,保养的好差直接影响到电梯的舒适度与安全性!所以电梯门方面的实训是大家不容忽视的一课。
目前门电机使用较广的:有三相异步电机和三相同步电机。
原理就不便多说了。
此次实训主要是拆装门吊板,要求保证尺寸,垂直度、水平度及间隙、噪声等。
持续一个星期的实训让我受益匪浅,学到书本不能传授的知识,懂得实际与理论间的差距。
在此,谢谢指导老师对我的教诲,没有你们的帮助我们可能到现在还不能把那个中分双折门调整好,至少是不合格。
在老师的提示与帮助下我们能较快,较准确、有技巧地将轿门,层门安装好。
最终结果也比较满意。
这次实训我们的任务是一拆一装,谁都知道拆是三分钟的事。
足足装了两天我们组遇到的问题多多,到处走弯路,处处碰壁。
但是,我们还是坚持,因为我们相信只要坚持就一定能成功!我们边看书,边思考,必要时还会询问老师。
轿门安装需要注意的事项有:1门槛水平度,2门扇两个方向的垂直度(小于千分之一),3门扇与门扇间隙(1——6mm),4门扇无明显喇叭口,5开关门噪音,6门刀安装要求。
等等还有很多需要注意的要求。
很多时候理论与实际操作往往相差很大。
就像调整门扇的垂直度,如果没有一定的技巧没有一定的经验会觉得很吃力,到头来效果还很不客观。
刚开始指导老师没有给我们讲解需要注意的问题前我们就干活,做了很久,很累,但是还是没成效。
因为我们没有经验,不知道应该怎样走捷径也不知道技巧。
后来在不断的摸索中找到了技巧,懂得在干每个部位时需要注意的细节!需要把握的尺寸。
最后我们分组比赛!我就采用老师教我们的技巧。
在门板下塞垫片的方案,不但减少了测量的时间同时准确度更高。
电梯运行模拟

东北大学信息科学与工程学院数据结构课程设计报告题目电梯运行模拟课题组组长盛川课题组成员彭斌华尹泽阳杨箭王帅专业名称计算机科学与技术班级计1005指导教师孟凡荣2012 年6月课程设计任务课题任务分工目录课题一1 课题背景 (6)1.1 课题来源 (6)1.2 课题任务 (6)1.3 课题原理 (6)1.4 课题调研 (6)2 需求分析 (6)2.1 业务(用户)需求 (6)2.2 功能需求 (7)3 方案设计 (7)3.1 总体(功能)设计 (7)3.2 数据结构设计 (8)3.3 接口函数原型设计 (8)3.4 界面设计 (8)3.5 主算法设计 (8)4 方案实现 (8)4.1 开发环境与编程工具 (8)4.2 程序设计关键技术 (8)4.3 数据结构类实现 (8)4.4 接口函数实现 (8)4.5 界面设计实现 (9)4.6 主算法实现 (9)5 测试与运行 (9)5.1 测试方案 (9)5.2 数据结构测试 (10)5.3 模块测试 (10)5.4 组装测试 (10)5.5 系统测试 (10)5.6 系统运行 (10)6 用户手册(可选) (11)6.1 运行环境说明 (11)6.2 操作说明 (11)7 课题总结 (11)7.1 课题评价 (11)7.2 设计心得 (12)8 附录A(组员分课题报告) (13)8-1 盛川分课题报告 (13)8-2 彭斌华分课题报告 (20)8-3 尹泽阳分课题报告 (29)8-4 杨箭分课题报告 (32)8-5 王帅分课题报告 (37)9 附录B(源程序文件清单) (42)9-1 .H头文件清单 (42)9-2 .CPP文件清单 (42)10 附录C(光盘)10-1 课程设计报告(电子版)10-2 源程序代码(*.H,*.CPP)10-3 可执行打包文件(EXE文件,可选)1 课题背景1.1课题来源东北大学综合办公楼有14层,设有4部自动电梯。
每梯最多载客12人。
模拟电梯的设计与实现实验报告(微机原理)

2011年9月目录一理论部分 (2)1课题要求与内容 (2)2 系统方案设计 (3)3 系统硬件设计 (3)4 系统软件设计 (5)二实践部分 (5)1 系统硬件原理简介 (6)2 系统硬件调试中出现的问题及解决措施 (6)3 系统软件 (6)3.1 软件设计 (6)3.2软件调试中出现的问题及解决措施 (6)三附录 (10)一、理论部分理论设计课题名称:模拟电梯的设计与实现1课题要求与内容1.1设计基本要求用键盘、按钮、发光二极管和LED显示单元来模拟电梯工作过程。
楼层设为8层,用键盘键入希望停的楼层,8 个发光二极管显示希望停的楼层,LED 指示电梯当前所在楼层,按钮用来启、停电梯。
电梯正常运行时以每 2 秒1层的速度上升或下降。
并在到达相关楼层时发错声音提示。
1.2提高要求设计几个按钮,模拟更多的电梯运行功能,如:直达按钮。
若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层;急停按钮。
电梯运行中,若按此按钮,则电梯立即停在下一到达的楼层。
2.实验内容电梯工作按以下方式运行:2.1假设当前电梯停在某层(LED显示相应楼层,8个发光二极管全灭)。
键入数字键,如键入的数字与当前电梯停靠层相同,则什么也不做,若不同则相应楼层的发光二极管亮;电梯自动判别上升或下降(在运行过程中用八段码来显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应LED 灭)。
2.2假设当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED 指示希望抵达的楼层),若键入新的希望停靠的楼层数字(相应的LED 亮),则对同方向(上升或下降)未到的楼层能停靠,对其它情况则先停靠原先希望停的楼层,然后继续运行)。
如下几例:1)设电梯当前在2层,向上运行,LED指示希望在4层停,此时若键入3,则电梯将在3楼停,然后继续运行至4层停;2)同上情况,若键入的不是3而是5,则电梯将先停在4层,然后运行至5层停;同上情况,若键入的不是3(或5),而是1,则电梯先停在4层,然后运行至1层停。
电梯逻辑认知实验报告(3篇)

一、实验目的1. 理解电梯的基本工作原理和逻辑控制过程。
2. 掌握电梯控制系统的基本组成和功能。
3. 通过实验加深对电梯运行逻辑的理解和认知。
4. 培养动手实践能力和问题解决能力。
二、实验原理电梯作为一种垂直运输工具,其核心是电梯控制系统。
该系统通过控制电梯的运行速度、开关门、停靠楼层等来实现安全、高效的运输。
电梯控制系统主要由以下几个部分组成:1. 输入设备:包括楼层按钮、紧急停止按钮、速度传感器等。
2. 控制器:通常采用可编程逻辑控制器(PLC)来实现对电梯的控制。
3. 执行机构:包括电动机、制动器、门机等。
4. 辅助设备:如照明、通风、对讲等。
电梯的运行逻辑主要包括以下几个步骤:1. 启动:按下启动按钮,电梯开始运行。
2. 加速:根据速度传感器反馈,控制器控制电动机加速。
3. 运行:根据楼层按钮信号,控制器控制电梯运行到指定楼层。
4. 减速:接近目标楼层时,控制器控制电动机减速。
5. 停靠:电梯到达目标楼层,控制器控制门机开门。
6. 停止:电梯完成停靠后,控制器控制电动机停止。
三、实验设备1. 电梯实验装置2. PLC编程器4. 电梯控制程序四、实验步骤1. 连接设备:将电梯实验装置与PLC编程器和电脑连接好。
2. 编程:使用PLC编程器编写电梯控制程序,实现电梯的基本运行逻辑。
3. 下载程序:将编写的程序下载到PLC中。
4. 调试:启动电梯实验装置,进行调试,观察电梯的运行状态是否符合预期。
5. 测试:对电梯进行全面的测试,包括启动、加速、运行、减速、停靠、停止等环节。
五、实验结果与分析1. 启动:按下启动按钮后,电梯能够正常启动,并开始运行。
2. 加速:电梯启动后,电动机能够根据速度传感器反馈进行加速,直至达到设定的运行速度。
3. 运行:电梯根据楼层按钮信号,能够准确运行到指定楼层。
4. 减速:接近目标楼层时,电梯能够根据控制器指令进行减速。
5. 停靠:电梯到达目标楼层后,能够准确停靠,并控制门机开门。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电梯模拟问题一、目的与要求1. 掌握线性结构的逻辑特点及存储实现;2. 根据选题,按规范化流程完成课程设计报告:⑴.提供需求分析。
(15分)⑵.列出概要设计。
(包括:抽象数据类型的描述;程序结构图或功能模块图)(20分)⑶.给出详细设计。
(包括:①存储结构的描述;②算法的详细设计,对复杂算法,最好画出其N-S流程图;③函数的调用关系图)(30分)⑷.进行调试分析(注:调试时遇到的问题及解决方法,程序的输出结果及对结果的分析)。
(15分)⑸. 整理设计总结。
(设计心得体会,以及其他总结信息等)(10分)⑹.附有程序清单(注:代码可具有适当注释,用来说明程序的功能、结构)。
(10分)二、设计步骤1、线性结构是有序数据元素的集合,存在着“一对一”的线性关系且只有一个首结点,一个尾结点,首结点只有后继没有前趋,尾结点只有前趋没有后继。
顺序表的存储结构包括顺序表和链表,顺序存储是指将线性表元素按照逻辑顺序依次存储在一组连续的地址单元中。
链式存储是通过结点中的链域将线性表中n个结点按其逻辑顺序链接在一起。
分为:单向链表,双向链表,循环链表。
2、(1)设计一个电梯模拟系统。
这是一个离散的模拟程序,因为电梯系统是乘客和电梯等“活动体”够成的集合,虽然他们彼此交互作用,但是他们的行为是基本独立的。
在离散的模拟中,一模拟时钟决定每个活动体的动作发生的时刻和顺序,系统在某个模拟瞬间处理有待完成的各种事情,然后把模拟时钟推进到某个动作预定要发生的下一个时刻。
可模拟某校五层教学楼的电梯系统,或者九层教学楼的电梯系统。
此程序的关键是模拟好电梯运行状态的转换与乘客进出的同步进行,需要一个函数判断电梯的运行状态,决定电梯的下一个运行状态如电梯的开门,关门,上升,下降,减速,加速等,也需要模拟时钟的函数来判断该运行哪个函数,也需要定义几个结构体存放结点信息。
(2)时钟函数:void DoTime(){//此函数用于模拟时钟while(1){if(Time>MaxTime)return;TestPeople();//两个始终都会被调用的函数Controler();struct Activity* p=activity.next;if(p==NULL){Time=MaxTime;}if(p&&Time>=p->time){//取出活动队头的,检测定时是否到了activity.next=p->next;p->fn();free(p);}Time++;}}其中activity是关键,它是一个链表在链表的头部是计时器时间最小的函数,根据模拟时钟判断是否调用这个函数以及删除这个节点。
以下是Activity的具体定义:typedef struct Activity{int time;void(*fn)(void);struct Activity* next;}Activity;定义说明:#ifndef _DIANTI_H_#define _DIANTI_H_#define GoingUp 1//匀速上升#define GoingDown 2//匀速下降#define SpeedUp 3//加速上升#define SpeedDown 4//加速下降#define SlowUp 5//减速上升准备停靠#define SlowDown 6//减速下降准备停靠#define Idle 7//空闲#define Stop 8//停止且已关门#define DoorOpen 9//停止且门已打开#define DoorOpening 10#define DoorCloseing 11#define CloseTest 40//电梯关门测试时间#define OverTime 300//电梯停候超时时间#define Accelerate 15//加速时间#define UpTime51//上升时间#define DownTime 61//下降时间#define UpDecelerate 14//上升减速#define DownDecelerate 23//下降减速#define DoorTime20//开门关门时间#define InOutTime25//进出电梯时间#define MaxTime 10000#define MaxFloor 5#define BaseFloor 1程序框图:开始Input()Dotime()结束(3)存储结构描述:此代码采用单链表的存储结构,结点存放起始楼层、目标楼层、容忍时间、下一个用户的到来时间等信息。
typedef struct Person{int Id;int OutFloor;int GiveupTime;struct Person* next;}Person;N-S流程图:Input():开始Person* p = (Person*)mallo c(sizeof(Person输入用户信息判断输入信息是否合p->Id=PersonId ++;Whil e (1) 否是否是 p->GiveupTime=giveuptime+Timep->next=NULL;p->OutFloor=ou tfloor;Dotime()N-S图:outfloor>infloCallUp[infloor]=1;CallDown[infloor]=1;是否AddQueue(infloor,p);AddAct(intertime,Input);结束开始While(1)Time>MareturnTestPeople();Controler();StructActivity*p=activity.next;p==NUTime=MaxTime;p&&Time>=p-activity.next=p->next;p->fn();Time++;结束函数调用关系图:运行结果截图:输入起始楼层和目标楼层,且保证在最大范围之内,再输入用户的等待时间和下一个用户的到达时间,电梯开始运行第一个用户走进电梯,电梯开始加速加速上升超过第二个用户的最长等待时间,用户二放弃了等待,电梯继续上升到达四层Main ()Input()Dotime()AddQueue(infloor ,p);AddAct(intertime,Input);TestPeople(); Controler();停止三、设计总结设计电梯模拟系统用了链表存储结构来存放节点信息,虽然做的不够全面,只是一个简单的模型,在熟悉链表的基础上做了多个链表的联合联合使用,新学到了时钟模拟函数,对我有很大帮助。
四、代码清单#include<stdio.h>#include<string.h>#define N 20typedef struct{char num[10];//车次号char startsa[10];//始发站char endsa[10];//终点站char date[10];//char startti[10];//发车时间char endti[10];//到达时间char type[10];//char price[10];//价格}Fight;typedef struct{Fight elem[N];int length;}Table;void Printf(Table &F,int n){int i;printf("请输入数据");for(i=1;i<=n;i++){printf("第%d个\n",i);printf("车次号为:");scanf("%s",&F.elem[i].num);printf("始发站为:");scanf("%s",&F.elem[i].startsa);printf("终点站为:");scanf("%s",&F.elem[i].endsa);printf("日期为:");scanf("%s",&F.elem[i].date);printf("出发时间为:");scanf("%s",&F.elem[i].startti);printf("到达时间为:");scanf("%s",&F.elem[i].endti);printf("类型为:");scanf("%s",&F.elem[i].type);printf("价格为:");scanf("%s",&F.elem[i].price);}}void Save(Table &F,int n)//将文件中的数据放入顺序表中{int i;n=0;FILE *fp;if((fp=fopen("train.txt","rb"))==NULL){printf("文件中没有数据,请输入信息!\n");}while((fp=fopen("train.txt","rb"))!=NULL){fscanf(fp,"%s%s%s%s%s%s%s%s",F.elem[i].num,F.elem[i].startsa,F.el em[i].endsa,F.elem[i].date,F.elem[i].startti,F.elem[i].endti,F.elem[i ].type,F.elem[i].price);n++;}F.length=n;fclose(fp);}void Read(Table &F,int n) //将数据保存在文件中{int i;FILE *fp;fp = fopen("train.txt", "wb");for(i=1;i<=n;i++){fprintf(fp,"%s%s%s%s%s%s%s%s",F.elem[i].num,F.elem[i].startsa,F.e lem[i].endsa,F.elem[i].date,F.elem[i].startti,F.elem[i].endti,F.elem[ i].type,F.elem[i].price);}F.length=n;fclose(fp);}void numsort(Table &F)//车次号排序{//冒泡排序int i,j;for(i=1;i<=F.length;i++){for(j=1;j<=F.length-i;j++){if(strcmp(F.elem[j].num,F.elem[j+1].num)==1){F.elem[0]=F.elem[j];F.elem[j]=F.elem[j+1];F.elem[j+1]=F.elem[0];}}}}void numsearch(Table &F,char key[10])//根据车次号查询{numsort(F);//折半查找int mid,low,high;low=1; high=F.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,F.elem[mid].num)==0){printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].st artsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[m id].endti,F.elem[mid].type,F.elem[mid].price);break;}else if(strcmp(key,F.elem[mid].num)==-1){high=mid-1;}elselow=mid+1;}}void startsasort(Table &F)//根据始发站排序{//冒泡排序int i,j;for(i=1;i<=F.length;i++){for(j=1;j<=F.length-i;j++){if(strcmp(F.elem[j].startsa,F.elem[j+1].startsa)==1){F.elem[0]=F.elem[j];F.elem[j]=F.elem[j+1];F.elem[j+1]=F.elem[0];}}}}void startsasearch(Table &F,char key[10])//始发站查找{startsasort(F);//折半查找int mid,low,high;low=1; high=F.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,F.elem[mid].startsa)==0){printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].st artsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[m id].endti,F.elem[mid].type,F.elem[mid].price);break;}else if(strcmp(key,F.elem[mid].startsa)==-1){high=mid-1;}elselow=mid+1;}}void endsasort(Table &F)//终点站排序{//冒泡排序int i,j;for(i=1;i<=F.length;i++){for(j=1;j<=F.length-i;j++){if(strcmp(F.elem[j].endsa,F.elem[j+1].endsa)==1){F.elem[0]=F.elem[j];F.elem[j]=F.elem[j+1];F.elem[j+1]=F.elem[0];}}}}void endsasearch(Table &F,char key[10])//终点站查找{endsasort(F);//折半查找int mid,low,high;low=1; high=F.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,F.elem[mid].endsa)==0){printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].st artsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[m id].endti,F.elem[mid].type,F.elem[mid].price);break;}else if(strcmp(key,F.elem[mid].endsa)==-1){high=mid-1;}elselow=mid+1;}}void starttisort(Table &F)//发车时间排序{//冒泡排序int i,j;for(i=1;i<=F.length;i++){for(j=1;j<=F.length-i;j++){if(strcmp(F.elem[j].startti,F.elem[j+1].startti)==1){F.elem[0]=F.elem[j];F.elem[j]=F.elem[j+1];F.elem[j+1]=F.elem[0];}}}}void starttisearch(Table &F,char key[10])//发车时间查询{starttisort(F);//折半查找int mid,low,high;low=1; high=F.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,F.elem[mid].startti)==0){printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].st artsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[m id].endti,F.elem[mid].type,F.elem[mid].price);break;}else if(strcmp(key,F.elem[mid].startti)==-1){high=mid-1;}elselow=mid+1;}}void endtisort(Table &F)//到达时间排序{//冒泡排序int i,j;for(i=1;i<=F.length;i++){for(j=1;j<=F.length-i;j++){if(strcmp(F.elem[j].endti,F.elem[j+1].endti)==1){F.elem[0]=F.elem[j];F.elem[j]=F.elem[j+1];F.elem[j+1]=F.elem[0];}}}}void endtisearch(Table &F,char key[10])//到达时间查找{endtisort(F);//折半查找int mid,low,high;low=1; high=F.length;while(low<=high){mid=(low+high)/2;if(strcmp(key,F.elem[mid].endti)==0){printf("%s %s %s %s %s %s %s %s\n",F.elem[mid].num,F.elem[mid].st artsa,F.elem[mid].endsa,F.elem[mid].date,F.elem[mid].startti,F.elem[m id].endti,F.elem[mid].type,F.elem[mid].price);break;}else if(strcmp(key,F.elem[mid].endti)==-1){high=mid-1;}elselow=mid+1;}}void Out(Table F)//输出所有列车信息{int i;printf("车次号\t始发站\t终点站\t日期\t出发时间\t到达时间\t类型\t价格\n");for(i=1;i<=F.length;i++){printf("\n");printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",F.elem[i].num,F.elem[i] .startsa,F.elem[i].endsa,F.elem[i].date,F.elem[i].startti,F.elem[i].e ndti,F.elem[i].type,F.elem[i].price);}}void Paixu(Table F){int x;printf("1.车次号排序\n");printf("2.始发站排序\n");printf("3.终点站排序(冒泡排序)\n");printf("4.发车时间排序\n");printf("5.到达时间排序\n");scanf("%d",&x);switch(x){case 1:numsort(F);Out(F);break;case 2:startsasort(F);Out(F);break;case 3:endsasort(F);Out(F);break;case 4:starttisort(F);Out(F);break;case 5:endtisort(F);Out(F);break;}}void Search(Table F){int x;char n[10];printf("1.车次号查询(折半查找)\n");printf("2.起点站查询\n");printf("3.到达站查询\n");printf("4.出发时间查询\n");printf("5.到达时间查询\n");scanf("%d",&x);switch(x){case 1:printf("输入车次号:");scanf("%s",n);numsearch(F,n);break;case 2:printf("输入起点站:");scanf("%s",n);startsasearch(F,n);break;case 3:printf("输入到达站:");scanf("%s",n);endsasearch(F,n);break;case 4:printf("输入出发时间站:");scanf("%s",n);starttisearch(F,n);break;case 5:printf("输入到达时间站:");scanf("%s",n);endtisearch(F,n);break;}}int main(){int n;int way;Table F;Save(F,n);printf("输入列车个数:");scanf("%d",&n);Printf(F,n);Read(F,n);Out(F);while(1){printf("1.排序2.查询");printf("\n请选择");scanf("%d",&way);switch(way){case 1:Paixu(F);break;case 2:Search(F);break;default:printf("请重新输入");}}return 0;}。