土木工程综合实验报告
(隧道与轨道工程方向)
班级:
姓名:
学号:
成绩:
福建工程学院土木工程学院
一、实验报告要求
(1)实验报告的格式形式应统一。
(2)编写实验报告要规范,一般包括:实验名称、目的、内容、原理、设备及仪表(名称、规格、型号)、实验装置或连接示意图、实验步骤、实验记录、数据处理(或原理论证、或实验现象描述、或结构说明等)。
(3)实验报告应附有实验原始记录。
(4)每个实验要求实验记录数据完整、计算正确、图表清晰。
二、实验课的考核方式与评分办法或标准
(1)本课程考试方式:考查。
(2)实验成绩评定标准:
要求每名学生按指导书要求参加所列所有试验项目。
实验成绩组成:
出勤 20%、实验操作 30%、实验报告 50%。
实验成绩分:优、良、中、合格、不合格五级。
目 录
试验一 量测仪器参观与操作练习…………………………………3
试验二 回弹法测定混凝土强度试验………………………………4
试验三 超声—回弹综合法测定混凝土强度试验…………………7
试验四 锚杆拉拔试验………………………………………………11
试验五 隧道周边收敛量测…………………………………………13
试验六 钢筋扫描检测实验…………………………………………16
试验七 桥梁跨中挠度验证设计实验………………………………18
试验一 量测仪器的参观与操作练习
一、试验目的
通过参观、练习,进一步了解各种仪器的工作原理、用途,掌握使用方法。
二、所列量测应变的机械式仪表装置有:机械百分表、 机械千分表 。这些仪表装置都是量测试样的某一预先选定的原始长度的 前后 变化值,然后计算其应变值,该原始长度称为 初始值 。它们的刻度值分别为: 0.01 mm,量程分别为: mm 。
三、量测位移的仪表装置有: 机电百分表 、 位移计
和 测高仪 。
四、量测力的仪器装置有: 拉力测力计、 压力测力计 、拉测力传感器 、
和 压测力传感器 。
五、百分表、千分表的区别有:(1) 精度 、(2) 量程 、(3) 误差 。用它们测挠度应配 读数显微镜 ,测应变应配 手持应变仪 ,测转角应配 倾角仪 ,测力应配 测力传感器 。
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验二 回弹法测定混凝土强度试验
一、目的要求
1. 了解回弹仪的构造及其工作原理;
2. 掌握回弹仪的使用方法与技术要求;
3. 掌握回弹法检测混凝土抗压强度技术规程JGJ/T23-2011;
二、试验内容
用回弹仪在测区内随机布点测得回弹值
三、仪器名称及主要规格(包括量程、分度值、精度等)、 材料
1、混凝土回弹仪;
2、检测钢砧;
3、混凝土试件。
每一结构或构件的测区应符合下列规定:
1 每一结构或构件测区数不应少10个,对某一方向尺寸不大于4.5m且另一方向尺寸不大于0.3m的构件,其测区数量可适当减少,但不应少于5个。
2 相邻两测区的间距应控制在2m以内,测区离构件端部或施工缝边缘的距离不宜大于0.5m,且不宜小于0.2m。
3 测区应选在使回弹仪处于水平方向检测混凝土浇筑侧面。当不能满足这一要求时,可使回弹仪处于非水平方向检测混凝土浇筑表面或底面。
4 测区宜选在构件的两个对称可测面上,也可选在一个可测面上,且应均匀分布。在构件的重要部位及薄弱部位应布置测区,并应避开预埋件。
5 测区的面积不宜大于0.04m2。
6 检测面应为混凝土原浆面,并应清洁、平整,不应有疏松层、浮浆、油垢、涂层以及蜂窝、麻面。
7 对弹击时产生颤动的薄壁,小型构件应进行固定。
四、试验步骤
检测前后均应在钢砧上做率定试验,在洛氏硬度HRC为60+-2的钢砧上,回弹仪率定值应为80+-2。
检测时,回弹仪的轴线应始终垂直于结构或构件的混凝土检测面,缓慢施压,准确读数,快速复位。
测点宜在测区范围内均匀分布,相邻两测点的净距不宜小于20mm,测点距外露钢筋、预埋件的距离不宜小于30mm,测点不应在气孔或外露石子上,同一测点只应弹击一次,每一测区应记取16个回弹值,每一测点的回弹值读数应精确至1。
测试过程中,仪器的纵轴线应始终与被测混凝土表面保持垂直,其操作程序应符合使用说明书的规定。
五、试验结果及分析
1. 原始记录的整理,把各项记录、图形按要求加以整理、计算与修正。(在记录表格上进行)
回弹法检测原始记录表
工程名称: 第 页 共 页
测试: 记录: 计算: 测试时间: 年 月 日
2. 试验成果计算(计算出换算强度,并进行结果评定)
六、讨论
1.回弹法的适用范围。
一、适用温度范围:-4~40℃;
二、适用龄期范围:14~1000天,长龄期应采用钻芯法修正;
三、适用强度范围:10~60MPa;
四、不适用于表层与内部质量有明显差异或内部存在缺陷的构件检测,如遭受冻害、 化学侵蚀、火灾、高温损伤后的检测。
五、不适用于厚度小于100mm构件的混凝土强度检测。
2. 采用回弹法时,如何评定混凝土的实测强度?
回弹法测取砼的强度:首先测出回弹实测值,在进行碳化深度测量,得出两者结果后进行换算得出砼的强度。取得回弹同批次砼合格报告后,不需要在对同批次砼进行评定。
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验三 超声—回弹综合法测定混凝土强度试验
一、试验目的
1、了解回弹仪、超声仪的基本工作原理;
2、掌握回弹仪、超声仪使用方法、步骤;
3、掌握回弹法检测混凝土抗压强度技术规程JGJ/T23-20##、超声-回弹综合法检测混凝土抗压强度技术规程CECS02:2005;
二、试验内容
1.用超声仪在测区内随机布点测得声速
2.结合回弹仪测得的回弹值得出混凝土强度
三、仪器名称及主要规格(包括量程、分度值、精度等)、 材料
1、混凝土回弹仪;
2、检测钢砧;
3、混凝土试件。
4、超声仪;
第4.1.2条 测区布置应符合下列规定,
一、当按单个构件检测时,应在构件上均匀布置测区,每个构件上的测区数不应少于10个;
二、对同批构件按批抽样检测时,构件抽样数应不少于同批构件的30%,且不少于10件,每个构件测区数不应少于10个;
三、对长度小于或等于2m的构件,其测区数量可适当减少,但不应少于3个。
第4.1.3 当按批抽样检测时,符合下列条件的构件才可作为同批构件,
一、混凝土强度等级相同,
二、混凝土原材料、配合比、成型工艺、养护条件及龄期基本相同,
三、构件种类相同,
四、在施工阶段所处状态相同。
第4.1.4条 构件的测区应满足下列要求:
一、测区布置在构件混凝土洗灌方向的侧面,
二、测区均匀分布,相邻两测区的间距不宜大于2m,
三、测区避开钢筋密集区和预埋件,
四、测区尺寸为200mm×200mm,
五、测试面应清洁、平整、干燥,不应有接缝、饰面层、浮浆和油垢,并避开蜂窝、麻面部位,必要时可用砂轮片清除杂物和磨平不平整处,并擦尽残留粉尘。
第4.1.5条 结构或构件上的测区应注明编号,并记录测区位置和外观质量情况。
第4.1.6条 结构或构件的每一测区,宜先进行回弹测试,后进行超声测试。
第4.1.7条 非同一测区内的回弹值及超声声速值,在计算混凝土强度换算值时不得混用。
四、试验步骤
1、操作前应仔细阅读仪器使用说明书;
2、仪器在接通电源前,应检查电源电压,接上电源后,仪器宜预热10min;
3、换能器与标准棒应耦合良好,调节首波幅度至30~40mm后测读声时值,有调零装置的仪器,应调节调零电位器以扣除初读数;
4、在实测时,接收信号的首波幅度均应调至30~40mm后,才能测读每个测点的声时值。
五、 试验结果及分析
1. 原始记录的整理,把各项记录、图形按要求加以整理、计算与修正。(在记录表格上进行)
超声----回弹综合法检测原始记录表
工程名称: 第 页 共 页
测试: 记录: 计算: 测试时间: 年 月
2. 试验成果计算(计算出换算强度,并进行结果评定)。
六、讨论
1.回弹法、超声法各有哪些优缺点?为什么采用超声-回弹综合法能提高检测精度?
超声回弹综合法检测混凝土强度能够检测到混凝土结构内部,推测出强度。而回弹法检测混凝土强度只能对混凝土结构物表面强度进行推断。
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验四 锚杆拉拔试验
一、试验目的
1.掌握锚杆拉拔计的使用方法。
2.掌握隧道开挖过程中围岩松动圈、塑性圈范围的确定方法
二、试验内容
使用锚杆拉拔计,测出拉拔力,从而得出锚杆的锚固力
三、仪器名称及主要规格
1.锚杆拉拔仪;
2.锚杆(钢筋代替)混凝土试件。
四、试验步骤
1.将锚杆拉拔计和反力扳套在锚杆上。
2.油泵手动加压。
3.记录拉拔力。
五、 试验结果及分析
1.锚杆拉拔试验用途说明。
检验锚杆安装质量,评估锚杆锚固能力
2.拉拔力原始记录。
3.HC数显式锚杆拉拔仪的基本原理。
利用锚固在锚杆上的油压千斤顶提供的反向压力的大小,检测出锚杆上的锚固力,通过应变线将力转化为数字形式,显示在数字屏上。
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验五 隧道周边收敛量测
一、试验目的
1.了解隧道周边位移收敛量测的意义及量测目的。
2.了解收敛计的性能,掌握使用方法。
3.掌握隧道围岩稳定性判别准则。
二、试验内容
1.了解仪器的结构。
2.测二基准点间距离,读三次数,取平均值,并做记录。
三、仪器名称及主要规格
隧道周边收敛计
主要规格:JSS30A
四、试验步骤
1)首先在测点处牢固的埋设预埋件;预埋件长度根据需要加工,连接件与预埋件的连接,应使销钉孔方向铅直。
2)检查预埋测点有无损坏、松动并将测点灰尘擦净。
3)打开收敛计钢尺摇把,拉出尺头挂钩放入测点孔内,将收敛计拉至另一测点,并将尺架挂钩挂入测点孔内,选择合适的尺孔,将尺孔销插入与联尺架固定。
4)调整调节螺母,仔细观察,使塑料窗口上的刻线对在张力窗口内标尺上的两条白线之间(每次应一致)。
5)记下钢尺存联尺架端时的基线长度与数显读数。为提高量测精度,每次基线应重复测三次取平均值。当三次读数极差大于0.05mm时.应重新测试。
6)测试过程中,若数显读数己超过25mm,则应将钢尺收拢(换尺孔)25mm重新测试,两组平均值相减,即为两尺孑L的实际间距,以消除钢尺冲孔距离不精确造成的测量误差。
7)记录数据、时间、温度、尺孔位置和测点编号。
8)一条基线测完后,应及时逆时针转动调节螺母,摘下收敛计,打开尺卡收拢钢一特尺,为下一次使用作好准备。
五、 试验结果及分析
记录数据有三项内容,包括数显读数;钢卷尺使用长度及测点附近气温。一般情况下读数取三次平均值,三次读数的偏差应小于0.05mm。基线两点间收敛值S按下式计算:
S= (Do+Lo)- (Dn+Ln)
式中:Do—首次数显读数,(mm);
Lo—首次钢尺长度,(mm);
Dn—第n次数显读数,(mm);
Ln—第n次钢尺长度,(mm)。
如第n次测量与首次测量的环境温度相差较大时,要进行温度修正。公式如下:
Ln' = Ln - a(Tn - To) Ln。
式中:Ln'一温度修正后钢尺长度,(mm);
a一钢尺材料的线膨胀系数,取1.17×10-6℃:
Tn一第n次量测环境温度,(℃);
To一首次测量环境温度,(℃);
钢尺温度修正后收敛值(S')按下式计算:
S'= (Do + Lo)- (Dn + Ln')
基线缩短,S或S'为正值,反之为负。
六、简述收敛仪构造。
收敛计主要由(1)钩、(2)尺架、(3)调节螺、(4)外壳、(5)塑料盖、(6)显示窗口、(7)
张力窗口、(8)联尺架、(9)尺卡、 (10)尺孔销、(11)带孔钢尺等部件组成,见图1。
图1收敛计结构与工作示意图
收敛计是利用机械传递位移的方法,将两个基准点间的相对位移转变为数显位移计的二次读数差。如图1所示,当用挂钩连接两准点A、B预埋件时,通过调整调节螺母,改变收敛计机体长度可产生对钢尺的恒定张力,从而保证量测的准确性及可比性,机体长度的改变量,由数显电路测出。当A、B两点间随时间发生相对位移时,存不同时间内所测读数的不同,其差值就是A,B两点间的相对位移值。
当两点间的相对位移值超过数显位移计有效量程时,可调整尺孔销所插尺孔,仍能继续用数显位移计读数。
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验六 钢筋扫描检测实验
一、试验目的
1.掌握钢筋扫描仪的使用方法。
2.测试钢筋位置、数量,并绘图。
二、试验内容
用钢筋扫描仪扫描出混凝土构件内的钢筋排布
三、仪器名称及主要规格
1.混凝土构件模型;
2.钢筋扫描仪;
3. 直尺。
四、试验步骤
1. 确定检测区
根据需要在被测构件上选择一块区域作为检测区,尽量选择表面光滑的区域,以便提高检测精度。
2. 确定主筋(或上层筋)位置
选择一个起始点,沿主筋垂向(对于梁、柱等构件)或上层筋垂向(对于网状布筋的板、墙等)进行扫描,以确定主筋或上层筋的位置,然后平移一定距离,进行另一次扫描,将两次扫描到的点用直线连起来。注意:如果扫描线恰好在箍筋或下层筋上方,则有可能出现找不到钢筋或钢筋位置判定不准确的情况,表现为重复扫描时钢筋位置判定偏差较大。此时应将该扫描线平移两个钢筋直径的距离,再次扫描。
3. 确定箍筋(或下层筋)位置
在已经确定的两根钢筋的中间位置沿箍筋(或下层筋)垂向进行扫描,以确定箍筋(或下层筋)的位置,然后选择另两根的中间位置进行扫描,将两次扫描到的点用直线连接起来。
五、试验结果及分析
1.简述钢筋扫描仪的原理。
根据电磁场理论,线圈是严格磁偶极子,当信号源供给交变电流时,它向外界辐射出电磁场;钢筋是一个电偶极子,它接收外界电场,从而产生大小沿钢筋分布的感应电流。钢筋的感应电流重新向外界辐射出电磁场(即二次场),使原激励线圈产生感生电动势,从而使线圈的输出电压产生变化,钢筋位置测定仪正是根据这一变化的来确定钢筋所在的位置及其保护层厚度。而且在钢筋的正上方时,线圈的输出电压受钢筋所产生的二次磁场的应响最大。根据这一特点,因此在测试中,探头移动的过程中,可以自动锁定这个受影响最大的点,即信号值最大的点。更具保护层厚度和信号之间的对应关系得出厚度值。
2.绘制所测构件钢筋分布图。
3.试分析影响测量精度的因素。
1、钢筋材质的变化
2、钢筋直径的变化:椭圆、螺纹、月牙纹
3、钢筋分布的影响:密集的相邻钢筋,密集的双层(多层)钢筋
4、混凝土中的磁性介质
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
试验七 桥梁跨中挠度验证设计实验
一、试验目的
掌握挠度实验的实验方法
学会用实验来验证理论
二、试验内容
在实验室用钢筋模拟桥梁,通过在跨中增减砝码,并用仪器测出挠度值。
三、仪器名称及主要规格
钢筋,位移计,砝码
四、试验步骤
用实验室的砖块模拟桥墩,钢筋模拟桥梁的主体结构
通过在不同的负重(用砝码模拟集中荷载),记录挠度值。
五、试验结果及分析
1.简支梁跨中挠度理论计算。
2.不同集中荷载下跨中挠度实验数据分析,是否正确?判据是什么?
3.影响挠度大小的因素有哪些?并对实验误差因素分析。
4.若该实验误差较大,请自己根据已学知识设计实验,假设实验室已购所需仪器设备及材料。
5. 谈谈你对科学实验的认识?设计某个实验前,应该考虑哪些因素?
同组实验者:张友明 张伟峰 李榕波 陈敏 陈湘 曹吉伟
实验时间:
《计算机能力训练》
课程设计实验实验报告
学号:
姓名:
班级:
学院
2009.09
一、实验目的
利用TURBOC2.0实现学生成绩管理系统的录入、查询、删除、统计等基本操作。进一步巩固C语言的学习,以提高学生对开发环境的进一步认识和综合编程能力。
二、需要处理的基础数据
学生基本信息:学号(例如20##级12班6号写作20031206)、姓名、性别、年龄、课程名称(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])、考试成绩等。
三、系统功能
1.学生基本情况录入。
2.允许对已经录入的数据进行显示。
3.允许进行数据的插入。
4.删除基本数据的相关信息。
5.基于姓名的查询。如:姓张的所有同学。
6.基于各种基本数据的统计计算。如:
①统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
②列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。
③统计并输出各门功课的平均成绩和总平均成绩。
四、实验模块功能
Main()主函数
主函数是程序的入口,采用模块化设计。首先声明必要的变量,然后进行链表的初始化,完成程序入口。
init()初始化
单链表需要一个头指针指向表的第一个结点,对单链表的访问使从头指针开始的,初始化单链表为空。空用NULL表示,该值在头文件stdio.h中定义为常数0.
_menu主菜单
程序引用putch()输出图形符号的ASCII 码值来实现边框。
利用window函数制作显示窗口,该窗口比边框略小一些,正好包含于边框之中。通过key()实现对光标键的捕捉,光条的移动通过ups()和dns()实现。同时检测ENTER键,若捕捉到此键,则执行相应的函数模块。
create()创建单链表
进入主菜单中的“Enter list”选项,进入创建链表函数,即输入学生信息,按照提示信息输入学号,姓名,性别,课程成绩,每输入一个数按一下回车,当输入学号字符为@时结束输入,返回主函数,单链表创建完毕,输入界面如图:
数据完整性的验证由两个函数create()和inputs()完成。设置头指针为空,申请内存空间,如果申请不到,则内存空间满,无法保存数据,则返回主函数,否则输入数据,并进行相应的校监,成绩就在create()中边输入边验证,以保证输入和法数据。当成绩输入后,系统自动计算生成总分和平均分,并将名次数据先置1,待排序后再赋予新值。数据输入后,将其后继结点指针指向前头的结点,新头指针指向新插入的结点,这样新插入的结点总在前头。数据输入结束后返回链表的头指针,返回_menu()函数,进行其他操作。
delete()删除结点
删除指定学号的学生记录。首先输入要删除结点的学号,输入后根据学号顺序查找结点,如果没找到,则输出没找到信息;否则,显示找到的结点信息,按任意键后显示已删除信息。注意删除结点时的操作,如果该结点是首结点,则要修改头指针,否则,将该结点的前趋指针的后继指向其后继结点,然后释放该结点。
print()显示单链表
本函数实现显示链表数据功能。由于链表只能采取顺序访问的方法,所以定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所指的记录的数据后,将指针后移一个记录,直到p指针值为空值,则所有记录输出完毕。
search()查找结点
按照姓名查找结点,从头结点开始顺序查找,成功显示记录信息,失败,显示没找到。姓名是字符串,比较功能利用字符串比较函数strcmp()实现。
save()保存记录到文件
将学生信息保存到指定文件中。按照文件读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名,如果输入的是绝对路径,则文件保存到指定位置;如果只给文件名,则文件保存在Turbo C默认的路径下,
load()从文件中读取记录
按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的磁盘文件名,然后确定文件的大开放式。如果文件打不开,则退出函数,否则选择一种度文件方式,从文件头开始,将记录读入内存,直到文件尾。
computer()计算各门课程的总分和课程平均分
头指针开始,每读一条记录,分别累加各科成绩,并统计记录条数,当所有数据处理完毕,求出平均分,最后输出结果为所有学生各门课程的总分和平均分。
insert()插入结点
插入结点需要输入插入位置和新结点信息。输入某个结点的学号,新结点将插入在这个指定结点之前。申请空间得到指针info,输入新结点信息,存放到新申请的空间info中。设链表的头指针为h,p为指定结点的指针,q为p的前驱指针,从头结点开始循环移动指针p查找指定的结点,查找和插入时分一下几种情况处理:
① 指针为空,如果p等于头h,说明链表为空,则新结点为头结点,修改指针h=info,否则,说明没有指定结点。则新结点在表尾部,此时q所指的结点时最后一个结点,所以修改指针q->next=info。
② 指针p不为空,如果p=h,说明新结点插入在当前结点之前,为新的头结点,修改指针info=next=p,h=info。否则,说明新结点的位置在p和q之间,修改指针为info->next=p,q->next=info
sort()分类统计
从头指针开始,分别对学生的各门功课成绩进行判别,并按照科目输出处于各个分数段的学生学号,姓名,成绩。
五、系统功能模块结构图
六、要求
1、只能使用C语言,源程序要有适当的注释,使程序容易阅读。
2、要有用户界面。要求至少采用文本菜单界面;鼓励采用图形菜单界面。
3、必须使用结构和链表等数据结构。
4、使用文件保存数据。
七、实验流程图
八、程序
#include <stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
#include<memory.h>
#include<ctype.h>
#include<malloc.h>
#define LEN sizeof(STUDENT)
typedef struct stu
{char num[8];
char name[8];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
STUDENT *init();
int menu_select();
STUDENT *create();
void print(STUDENT *head);
void search(STUDENT *head);
STUDENT *delete(STUDENT *head);
STUDENT *sort(STUDENT *head);
STUDENT *insert(STUDENT *head,STUDENT *new);
void save(STUDENT *head);
STUDENT *load();
main()
{STUDENT *head,new;
head=init();
for(;;)
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=delete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&new);break;
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0);
}
}
}
STUDENT *init()
{
return NULL;
}
menu_select()
{int n;
printf("press any key to enter the menu......");
getchar();
system("cls");
printf("********************************************************************************\n");
printf("\t\t Welcome to\n");
printf("\n\t\t The student score manage system\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. Enter the record\n");
printf("\t\t\t2. Print the record\n");
printf("\t\t\t3. Search record on name\n");
printf("\t\t\t4. Delete a record\n");
printf("\t\t\t5. Sort to make new a file\n");
printf("\t\t\t6. Insert record to list\n");
printf("\t\t\t7. Save the file\n");
printf("\t\t\t8. Load the file\n");
printf("\t\t\t9. Quit\n");
printf("\n\t\t Made by : Wang Zhi Fu .\n");
printf("********************************************************************************\n");
do{
printf("\n\t\t\tEnter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9);
return(n);
}
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p;
system("cls");
for(;;)
{p=(STUDENT *)malloc(LEN);
if(!p)
{printf("\nOut of memory.");
return (head);
}
printf("Enter the num(0:list end):");
scanf("%s",&p->num);
if(p->num[0]=='0') break;
printf("Enter the name:");
scanf("%s",&p->name);
printf("Please enter the %d scores\n",3);
s=0;
for(i=0;i<3;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 ||p->score[i]>100)
printf("Data error,please enter again.\n");
}while(p->score[i]<0 ||p->score[i]>100);
s=s+p->score[i];
}
p->sum=s;
p->average=(float)s/3;
p->order=0;
p->next=head;
head=p;
}
return(head);
}
void print(STUDENT *head)
{int i=0;
STUDENT *p;
system("cls");
p=head;
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %8s | %8s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
void search(STUDENT *head)
{STUDENT *p;
char s[5];
system("cls");
printf("Please enter name for searching.\n");
scanf("%s",&s);
p=head;
while(strcmp(p->name,s) && p != NULL)
p=p->next;
if(p!=NULL)
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %8s | %8s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\nThere is no num %s student on the list.\n",s);
}
STUDENT *delete(STUDENT *head)
{int n;
STUDENT *p1,*p2;
char c,s[6];
system("cls");
printf("Please enter the deleted num: ");
scanf("%s",&s);
p1=p2=head;
while(strcmp(p1->num,s) && p1 != NULL)
{p2=p1;
p1=p1->next;
}
if(strcmp(p1->num,s)==0)
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %8s | %8s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("Are you sure to delete the student Y/N ?");
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N') break;
if(c=='y'||c=='Y')
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
n=n-1;
printf("\nNum %s student have been deleted.\n",s);
printf("Don't forget to save.\n");break;
}
}
}
else
printf("\nThere is no num %s student on the list.\n",s);
return(head);
}
STUDENT *sort(STUDENT *head)
{int i=0;
STUDENT *p1,*p2,*t,*temp;
temp=head->next;
head->next=NULL;
while(temp!=NULL)
{
t=temp;
temp=temp->next;
p1=head;
p2=head;
while(t->average<p1->average&&p1!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1==p2)
{
t->next=p1;
head=t;
}
else
{
t->next=p1;
p2->next=t;
}
}
p1=head;
while(p1!=NULL)
{
i++;
p1->order=i;
p1=p1->next;
}
printf("Sorting is sucessful.\n");
return (head);
}
STUDENT *insert(STUDENT *head,STUDENT *new)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head;
p0=new;
printf("\nPlease enter a new record.\n");
printf("Enter the num:");
scanf("%s",&new->num);
printf("Enter the name:");
scanf("%s",&new->name);
printf("Please enter the %d scores.\n",3);
sum1=0;
for(i=0;i<3;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&new->score[i]);
if(new->score[i]>100||new->score[i]<0)
printf("Data error,please enter again.\n");
}while(new->score[i]>100||new->score[i]<0);
sum1=sum1+new->score[i];
}
new->sum=sum1;
new->average=(float)sum1/3;
new->order=0;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{while((p0->average<p1->average)&&(p1->next!=NULL))
{p2=p1;
p1=p1->next;
}
if(p0->average>=p1->average)
{if(head==p1)head=p0;
else p2->next=p0;
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}
}
n=n+1;
head=sort(head);
printf("\nStudent %s have been inserted.\n",new->name);
printf("Don't forget to save the new file.\n");
return(head);
}
void save(STUDENT *head)
{FILE *fp;
STUDENT *p;
char outfile[10];
printf("Enter outfile name,for example c:\\score\n");
scanf("%s",&outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("Cannot open the file\n");
return;
}
printf("\nSaving the file......\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
printf("Save the file successfully!\n");
}
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL;
FILE *fp;
char infile[10];
printf("Enter infile name,for example c:\\score\n");
scanf("%s",&infile);
if((fp=fopen(infile,"rb"))==NULL)
{
printf("Can not open the file.\n");
return(head);
}
printf("\nLoading the file!\n");
p1=(STUDENT *)malloc(LEN);
if(!p1)
{
printf("Out of memory!\n");
return(head);
}
head=p1;
while(!feof(fp))
{
if(fread(p1,LEN,1,fp)!=1) break;
p1->next=(STUDENT *)malloc(LEN);
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1;
p1=p1->next;
}
p2->next=NULL;
fclose(fp);
printf("You have success to read data from the file!\n");
return (head);
九、执行结果
十.实验体会
小学期的计算机能力训练实验使我对C语言编程有了更深的认识与体会,在老师的指道下我们经过努力都实现了学生成绩管理系统要求的基本功能,体会到将知识应用到实践中的作用以及自我努力之后的快乐。同时我们也大概了解了复杂程序的产生过程,首先应对要实现的功能有个清晰的认识,并且建立一个总体的架构,然后将整体分成若干的小部分,每个部分都编写具体有效的程序来实现其功能,然后把各部分连接起来,在这个过程中要注意变量在程序各部分中的衔接问题,区分总体变量与局部变量,在编写程序的时候要做到胆大心细,每个微小的错误都很难察觉,但是对程序的影响却是不可小觑的。同时调试的过程也是对我们的耐心的一个极大的考验,只有有耐心的人才能发现并改正错误,使程序运行无误。当然在这一周中我们也认识到了自己对知识的把握仍有精进的空间,对C的运用还有待提高。但是我们会把这次实验看成是一个契机,在以后的学习生活中我们会更加努力的提高自 己。
我想还有一点比较重要的是我们在编程的过程中也学会了利用我们身边的有效途径来获取信息,我们可以去图书馆查阅相关的资料,也可以在网络上学习。我想这不仅是一次实验更是一次学习方法的训练,我们会受益匪浅的。
最后要感谢老师的辛苦指导才使我们的实验能够顺利完成。
内蒙古科技大学本科生材料综合实验报告题目热轧Q345钢10压下率空冷和水冷后的组织和硬度的分析报告专业材料成型及控制工程班级成型1…
综合实验实验报告安息香的辅酶合成及其转化班级轻化1101姓名童飞昀汪娇学号实验名称安息香的辅酶合成及其转化实验目的1学习安息香缩合…
信号波形分离及合成大综合电路设计题目一课题的任务课题任务对一个特定频率的方波进行变换产生3个不同频率的正弦信号再将这些正弦信号合成…
专业综合实验报告宋体一号加粗居中请注意行距的区别实验项目名称所属课程名称专业综合实验学生姓名学号专业宋体小三加粗居中20xxXXX…
综合实验报告书20xx20xx学年实验题目粒毛盘菌胞外多糖的提取及其脱蛋白前后抗氧化活性学院名称生物与食品工程学院专业班级生物工程…
金属专业综合实验报告班级金属材料一班姓名##学号##实验目的:熟悉金属材料的常规制备技术,掌握常见的材料成型技术。实验要求:要求学…
报告编号检测报告委托单位检测内容化学植筋拉拔力检测工程名称广西天等盛源建设工程质量检测有限公司委托单位工程名称检测部位墙体拉结筋检…
土钉墙抗拔试验检测报告工程名称金新鼎邦项目基坑支护及降排水工程工程地点通江南路以东通济路以北委托单位江苏盐城二建集团有限公司检测日…
浙江大合建设工程检测有限公司后锚固抗拉拔性能检测报告第1页共1页委托单位浙江广源建设公司报告编号DH20xxQJ00027工程名称…
综合实验报告20xx20xx年度第一学期名称汇编语言程序设计综合实验题目院系班级学号学生姓名指导教师设计周数成绩日期20xx年1月…