课程设计范文

2023-09-22

课程设计范文第1篇

开始的时候感觉设计对我们这些刚刚入门的人来说,无非就是按照条条框框依葫芦画瓢的过程,有的时候感觉挺无聊的,反正按照步骤一定可以完成设计任务。其实不然,设计过程中有许多内容必须靠我们自己去理解,去分析,去取舍。就拿电动机型号选择来说,可以分别比较几种型号电动机总传动比,以结构紧凑为依据来选择;也可以考虑性价比来选择。前者是结构选择,后者确实经济价格选择。如何将两者最优化选择才是值得我们好好深思的。

课程设计是机械设计当中的非常重要的一环,本次课程设计时间仅有三周,但是通过本次每天都过得很充实的课程设计,收获颇多。

在设计过程中培养了我的综合运用机械设计课程及其他课程理论知识来解决实际问题的能力,真正做到了学以致用。在此期间我我们同学之间互相帮助,共同面对机械设计课程设计当中遇到的困难,培养了我们的团队精神。在这些过程当中我充分的认识到自己在知识理解和接受应用方面的不足,特别是自己的系统的自我学习能力的欠缺,将来要进一步加强,今后的学习还要更加努力。

课程设计范文第2篇

[摘要]机械设计课程设计是机械工程类学生一门重要的实践课程,提高其教学质量对学生综合素质的培养起着十分重要的作用。本文针对目前机械设计课程设计过程中存在的问题,从课程设计与教学过程的融合、题目的选择、计算机辅助设计、分组与考核方式、与机械创新大赛接轨等几个方面提出了教学改革思路和措施。

[关键词]课程设计;机械设计;教学改革

0 引言

机械设计是机械工程类学生的一门主干技术基础课,而机械设计课程设计是机械设计课程重要的实践环节,通过课程设计能使学生综合运用机械设计课程以及《机械制图》、《互换性与测量技术基础》、《金属工艺学》等其它先修课程的理论和实践知识,掌握机械设计的一般规律,培养机械设计的能力和机械设计的技能,树立正确的设计思想。

随着科学技术飞速发展,特别是以大规模集成电路和微电子计算机为代表的微电子技术的飞跃发展,极大地推动了不同学科之间的交叉与渗透。信息科学、材料科学、生命科学和现代控制科学等与机械科学不断交叉融合,使传统的机械科学发生了深刻的变革,机械的概念和机械设计过程相对过去有了很大的改变,对工程设计人员也提出了更高的要求。而当前机械设计课程设计的教学模式还相对比较陈旧,存在很多问题,还不能适应科学技术发展的需要,无法培养出符合要求的工程设计人员。因此,机械设计课程设计的改革势在必行。

1 机械设计课程设计过程中存在的问题

1.1教学与课程设计脱节

机械设计课程设计是学生进行的第一次比较正规而全面的设计,由于其涉及课程多,知识面广,且要求学生在有限的时间内完成较大的工作量,因此对学生的能力和素质有较高的要求。

以往机械设计课程设计是机械设计课程的后续,是在将机械设计课程完全授完之后再进行课程设计。一方面这样使得学生对机械设计课程中某些知识点的理解、记忆产生了断续:另一方面,由于单纯针对授课,学生对课程设计与实际工程中很重要的知识点理解的不够透彻,从而使课程设计花费了太多的时间和精力在不必要的复习上。同时,由于课程的断续,在课程设计开始阶段,需要学生根据自己的题目从最开始进行重复式的机械设计基本计算,又花费了一般2~3天的时间。加上事先对设计题目没有一个大致的认识和思考,学生自身又有一定的惰性,临时抱佛脚,缺乏系统思维,乱抄乱设计。这都使得设计过程时断时续,时间紧张,问题层出不穷,直接影响毕业设计乃至毕业后的社会工作,给学生和社会造成了很不必要的浪费与困扰。

1.2设计题目单一化

传统的课程设计重点是巩固和加强所学的理论知识,设计题目和给定数据多年不变,只需要按设计任务中给定的数据、方案及规定的设计方法完成一定的工作量即可,形成相互抄袭的后果“’。学生缺乏主动性、积极性,教师缺乏新思维,师生同受其害。同时,传统课程设计题目与专业、毕业设计相关度不大,使得学生所学专业课程无用武之地,缺乏学习兴趣,设计与专业课程学习不同步,达不到学以致用的目的和充分培养学生理论联系实际的能力。

1.3计算机绘图欠普及

传统机械课程设计,手工绘图贯穿始终,工作强度大、效率低。加上空间想象力不足和缺乏工程设计经验,学生面对二维设计图纸难以想象出机器的整体结构,导致学生对设计缺乏全面认识,似懂非懂,极大地影响了设计的积极性和质量”’。同时,随着计算机技术的发展,CAD技术及Solid—work、Pro/Engineer三维设计软件在机械制造中的应用日趋广泛,使机械设计思想、设计方法与设计手段都发生了极大变化,这些变化对面向新世纪的高校机械类专业学生的计算机能力培养提出了许多新的要求。

1.4协作与团队意识差,缺乏创新意识

以往的机械设计课程设计,每个学生一个题目,题目类似而参数不同。学生在设计过程中各自为政,互不往来,缺乏沟通与交流,虽然能够巩固单个学生对所学课程内容的理解,却难以充分发挥学生的协作能力,更谈不上培养学生的团队精神。而现实生产中,任何一个机械设备不可能单靠一个人就设计完成,也不可能单靠某一个人的设计方法就能完善所需要的功能,必须集思广益、广泛讨论。因此,必须在学生阶段就开始培养学生的协作能力与团队意识,使其逐步与社会接轨。

以往的课程设计由于时间紧张,工作量大,老师往往忽略或不明显鼓励学生的创新设计,从而局限了学生创新能力的培养。而对于学生单一的、互不协作的课程设计,时间紧张,思维狭窄而受限,就更难以充分发挥学生的创新才能。即便是学生有好的想法,也因为没有充裕的时间考虑,没有老师的认真点拨和严密的思考论证而流产。

创新是科技和经济发展的动力,现代企业产品和技术的不断发展,需要更多有创新能力的人才去推动。机械设计课程设计作为机械类学生第一次比较系统而全面的设计训练,必须充分利用其契机,激发和培养学生的创新潜能,为社会创新人才的培养奠定基础。

1.5考核制度不完善

传统机械设计课程设计分二、三、四周三种模式,所布置设计任务根据时间不同稍有区别。在这几周的课程设计过程中,大多数同学都很认真,能够脚踏实地地进行设计,因此对自己最后辛苦所得的成绩也比较在意。而机械设计课程设计的考核主要包含了三个部分:图面成绩50%(包含草图和抄正图成绩)、平时成绩30%和答辩成绩20%。但图面成绩和平时成绩实际上是一个比较笼统的成绩,老师们各凭印象标准,自行决断,并不能像正式考试那样给出一个让学生一目了然、欣然接受的成绩,考核缺乏标准性和透明度。这既有可能造成学生成绩评定的不公,又可能挫伤学生的积极性。即便是答辩成绩学生相对心里有数,但倘若老师们在答辩过程中所问问题难易有所偏颇,也极易造成学生心理上的不平衡,对学生今后的学习和毕业设计产生不好的影响。

2 机械设计课程设计教学模式改革措施

2.1课程设计与理论教学过程相融合

改变课程设计与教学脱节的问题,就必须在机械设计课程开始阶段将课程设计任务布置给学生,使课程设计与教学相同步,把课程设计分部、分阶段穿插在教学过程中,使学生分步完成课程设计的基本内容。带着设计任务听课,既有利于学生充分理解课程内容,又有利于培养学生理论联系实际的能力。同时,学生可以充分利用课余时间思索自己设计任务中的若干问题,有充足的时间和精力与老师交流、沟通,既充分调动了学生的积极性、学习兴趣,增强了学习效果,逐步培养了学生发现问题、解决问题的能力,同时也为学生创新意识、创新能力的培养提供了较为宽广的空间。

在最近两年的机械设计课程中,将课程设计与教学相融合,取得了良好的效果。学生对课程的学

课程设计范文第3篇

钻 床 专 用 夹 具 设 计 心 得 体 会

年 级 专 业:

09机械一班

学 生 姓 名:

陈万宝

号:

0932605120

吉林农业科技学院

课程设计范文第4篇

设计题目:制订轴承端盖工艺及直径为

10mm孔夹具设计

级:

生:

指导教师:

目 录

设计任务书

一、 零件的分析………………………………………

二、 工艺规程设计……………………………………

(一)、确定毛坯的制造形式……………………

(二)、基面的选择………………………………

(三)、制订工艺路线……………………………

(四)、机械加工余量、工序尺寸及毛坯尺 才的确定……………………………………………

(五)、确定切削用量及基本工时………………

三、 夹具设计…………………………………………

四、 参考文献…………………………………………

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 1订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595 ①精基准的选择

1)基准重合原则 2)基准统一原则 3)自为基准原则 4)互为基准原则 5)便于装夹原则

2 基准选择

粗基准的选择:以未加工外圆表面作为粗基准。

对于精基准而言,根据基准重合原则,选Ø16mm用设计基准作为精基准。

(三)

制订工艺路线

制订工艺路线的出发点,应当是使零件的几何形状,尺寸精度及位置精度等技术要求得到合理的保证。在生产纲领为中批生产的条件下,可以考虑采用万能性机床配以专用夹具来提高生产效率。除此以外,还应当考虑经济效率,以便使生产成本尽量下降。

1.工艺路线方案一

工序Ⅰ

铸造成型。

工序Ⅱ

时效处理。

工序Ⅲ

车Ø90mm,Ø52mm外圆。

工序Ⅳ

钻孔Ø32mm,Ø16mm,扩孔Ø32mm,Ø16mm,铰孔Ø32mm,

Ø16mm。

工序Ⅴ

粗车,半精车,精车Ø56mm外圆及端面。 工序Ⅵ

钻Ø11mm沉头孔,Ø7mm螺纹孔,M5螺纹底孔。 工序Ⅶ

钻油孔Ø10mm。 工序Ⅷ

钻孔Ø11mm。 工序Ⅸ

攻丝M5。 工序Ⅹ

攻丝M12。 工序ⅩⅠ 清洗检查。

2.工艺路线方案二

工序Ⅰ

铸造成型。

工序Ⅱ

时效处理。

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 33.钻孔Ø16㎜,扩孔Ø16㎜,铰孔Ø16㎜ 根据“手册”表1—49,

扩孔Ø16㎜ 2Z=1.6㎜ 铰孔Ø16㎜ Z=0.4㎜ 毛坯制造尺寸及技术要求见毛坯图。

图1 毛坯图

(五)确定切削用量及基本工时

1)工序Ⅲ

车Ø90mm,车Ø52mm及端面。。 机床:C6140车床 刀具:YT15硬质合金车刀 确定切削用量及加工工时:

确定加工余量为2mm, 查《切削用量简明手册》,加工切削深度 ap2mm 由表4 f0.5~0.6mm/r,根据[3]表1 当用YT15硬质合金车刀加工铸铁时: ap7mm vt1.82m/s; 切削修正系数:ktv0.65 kxtv0.92 ksv0.8

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 5 vcDnc10003.14565.030.884m/s

1000 tmL250.04min

nf5.030.5660车端面 tm2L/nf0.34min 3)工序Ⅴ

钻孔Ø32mm至Ø31mm,Ø16mm孔至Ø15mm 机床:Z535 刀具:高速钢麻花钻 确定切削用量及工削工时

f=0.75mm/r·Klf=0.75×0.95=0.71㎜/s (表3—38) ν=0.35m/s

(21m/min)

(表3—42)

ns=1000v10000.35==3.48r/s (334r/min) 3.1432πdw

按机床选取

nw=338r/min=5.63r/s

πdwns

故实际切削速度

ν==0.35m/s

1000切削工时

l=80mm,l1= 10mm,l2=2mm

tm=ll1l212102= =6s=0.1min

5.630.71nwf钻Ø16mm孔至Ø15mm 机床:Z535 刀具:高速钢麻花钻 确定切削用量及工削工时

f=0.75mm/r·Klf=0.75×0.95=0.71㎜/s (表3—38) ν=0.35m/s

(21m/min)

(表3—42)

ns=1000v10000.35==5.2r/s (334r/min) 3.1415.4πdw- 7精车端面 tm2L/nf0.34min

4)工序Ⅵ

粗镗Ø32mm至Ø31mm 机床:卧式镗床T618

刀具:硬质合金镗刀,镗刀材料:YT5 切削深度ap:ap0.5mm

进给量f:根据参考文献[3]表2.4-66,刀杆伸出长度取200mm,切削深度为aF=0.5mm。因此确定进给量f0.15mm/r

切削速度V:参照参考文献[3]表2.4-9,取V3.18m/s190.8m/min 机床主轴转速n:

n1000V1000190.81029.9r/mind03.1459,取n1000r/min

实际切削速度v,:vdn143.5910101060093./ms

工作台每分钟进给量fm:fmfn0.151000150mm/min 被切削层长度l:l52.5mm 刀具切入长度l1:l1aptgkr(2~3)0.522.87mm tg30刀具切出长度l2:l23~5mm

取l24mm 行程次数i:i1 机动时间tj1:tj1ll1l2102.8740.112min fm1506)工序Ⅶ

扩,铰Ø16mm孔

扩孔Ø 16㎜ 机床:Z535立式钻床 刀个:高速钢扩孔钻 切削用量及工时: f=1.07 (表3—54) ν=0.175m/s

(10.5m/min)

ns=1000v10000.175==3.48r/s

3.1416πdw- 9n1000V1000190.81029.9r/mind03.1459,取n1000r/min

实际切削速度v,:vdn143.5910101060093./ms

工作台每分钟进给量fm:fmfn0.151000150mm/min 被切削层长度l:l52.5mm 刀具切入长度l1:l1aptgkr(2~3)0.522.87mm tg30刀具切出长度l2:l23~5mm

取l24mm 行程次数i:i1 机动时间tj1:tj1 精镗Φ32 实际切削速度v,:vll1l2102.8740.112min fm150dn143.5910101060093./ms

工作台每分钟进给量fm:fmfn0.151000150mm/min 被切削层长度l:l52.5mm 刀具切入长度l1:l1aptgkr(2~3)0.522.87mm tg30刀具切出长度l2:l23~5mm

取l24mm 行程次数i:i1 机动时间tj1:tj1ll1l2102.8740.112min fm1508)工序Ⅸ

钻Ø11mm沉头孔,Ø7mm螺纹孔,M5螺纹底孔, 攻丝M5。

机床:Z535立式钻床

钻沉孔

刀具:高速钢麻花钻

f=0.75mm/r·Klf=0.75×0.95=0.71㎜/s (表3—38) ν=0.35m/s

(21m/min)

(表3—42)

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 11订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

f=0.30mm/r

由《机械加工工艺实用手册》表10.4-9 v=0.161m/s ns1000v=9.86r/s=12.8r/min dw按机床选取:

n710r/min11.83r/s

 v实际dn10003.145.211.830.193m/s

1000

对于孔1:ll11l121221024mm 记算工时 :

tm1l11l12l257.04s0.117min

nf11.830.30 攻丝M5

a/加工条件:机床:Z535立时钻床.. 刀具:机用丝锥

其中d=5mm,

.b/计算切削用量:ap=1.3mm 由《机械加工工艺手册》表15-53,表15-37可知:

.f=1mm/r

v=0.12m/s

.

确定主轴转速:

n=

1000v=286r/min d0.

按机床选取:

nw272r/min

n0.11m/s

实际机床选取: v=

1000

切入,切出 l1.+l2=4mm

l=12mm

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 13切削工时

l=32mm,l1= 10mm,l2=2mm tm=ll1l232210= =52s=0.868min

120.71nwf攻丝M12 由《机械加工工艺实用手册》表16.2-4

cvd064.8101..2vmy0kv16m/s 0..90..53001Tpns1000v10004.5==143r/min 3.1410dwv

tm22ll111() pnn

1计算得t=0.38min

四、专用夹具设计

为了提高劳动生产率,保证加工质量,降低劳动强度,需要设计专用夹具。本课题选择工序Ⅹ 加工M5螺纹底孔, 攻丝M5专用夹具。

(二)提出问题

利用本夹具主要用来钻M5螺纹底孔Ø4㎜。在加工本工序前,其他重要表面都已加工,因此,在本道工序加工时,主要考虑如何保证中心对齐,如何降低劳动强度、提高劳动生产率,而精度则不是主要问题。

(三)夹具设计 1. 定位基准的选择

由零件图可知,为了定位误差为零,选择零件的上下表面为主要定位基准面。

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

- 15订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595 所需的实际夹紧力为3783N是不算很大,为了使得整个夹具结构紧凑,决定选用双螺纹压块夹紧机构。

1.位误差分析

定夹具的主要定位元件为一平面和一定位销:

定位销是与零件孔16相配合的,通过定位销削边销与零件孔的配合来确定加工孔的中心,最后达到完全定位。因此,定位销与其相配合的孔的公差相同,即公差为h7。

由于4是自由公差,因此满足公差要求。 2.夹具设计及操作的简要说明

如前所述,在设计夹具时,应该注意提高劳动生产率,避免干涉,降低劳动强度。。应使夹具结构简单,便于操作,降低成本。提高夹具性价比,由于切削力较小,所以一般的手动夹紧就能达到本工序的要求,并且避免复杂夹紧机构带来的结构庞大,旋转加工过程中不会干涉。

四、参考文献

1. [1]艾兴、肖诗纲.切削用量手册[M].北京:机械工业出版社,1985

订做 机械制造基础课程设计 工艺及夹具设计

联系QQ 834308595

课程设计范文第5篇

摘 要:本文从绿色制造的理念内涵,及在课程设计中的贯彻实施方面作了有益探讨,将绿色制造理念和方法与传统的机械设计课程设计实际结合做了系统叙述。引导学生从绿色设计开始,考虑产品的再回收再利用,最终实现产品的绿色制造。

关键词:机械设计 课程设计 绿色制造

“机械设计课程设计“是机械类专业本科生的一个重要基础设计训练,是整个教学环节中的一个必不可少的实践性教学环节。以往的“机械设计课程设计“对学生的要求更多强调按照设计对象的基本属性指标进行设计,其设计指导原则侧重于产品的功能性、制造工艺性要求和经济性要求,而很少考虑设计与环境间的协调以及对资源的最优化配置问题,也就是说没有将绿色制造的理念贯穿到整个设计过程中去。

1 明确绿色制造理念内涵

绿色制造的概念是美国制造工程师学会(SME)在1996年提出的。它是一个综合考虑环境影响和资源效率的先进制造模式,其内涵是产品生命周期的全过程均具有绿色性[1]。高校应走在时代前列,充当新科学、新技术发展的先导。在高校课程中应充分体现对新理念、新知识、新技术的快速反应。将绿色理念引入机械设计课程设计中来正是基于这一考虑。

首先应让学生明确传统制造与绿色制造概念间的区别,理解绿色制造的理念。传统的制造过程是:设计→制造→包装→运输→使用→报废。它的弊端在于不重视制造过程的资源消耗和污染问题,不考虑报废后的回收处理问题。而绿色制造强调产品的全生命周期,是将环境问题和资源问题加以同等重视的一种生态和谐的制造模式。绿色制造主要涉及三个方面的问题:产品全生命周期的制造问题、环保问题、资源优化利用问题,它是这三部分的交叉和集成[2]。如图1所示。

2 在设计过程中强化绿色理念

传统制造模式是一个开环系统,而绿色制造过程是一个封闭的循环系统.绿色设计处于绿色制造系统的上端,是实现绿色制造的第一个关键环节,在很大程度上决定了产品的品质。绿色设计包含的要素有:整机设计模式确定;绿色材料和润滑的选取;各零部件连接关系的设计;机器的拆卸设计;采用新型制造技术等。“机械设计课程设计“主要是引导学生完成第一个环节的工作,实现整机的绿色设计。

2.1 整机设计模式确定

在课程设计中引导学生突破传统串行设计模式的框框,在整机设计模式上采用与信息技术结合的绿色并行设计和模块化设计。并行设计(Concurrent Design)强调各部门之间的协同工作,在设计之初就考虑生命周期全过程的各项因素,以提高产品设计、制造的一次成功率;模块化设计是以模块作为其构成单元,通过现有通用模块的不同组合,形成新品种,或者对产品中某个或几个模块改型,形成新品种。使产品开发速度和市场响应能力大大提高,同时极大降低成本,延长产品寿命。符合绿色制造的节约性原则。绿色设计离不开信息化的支撑,在设计过程中倡导学生采用CAD软件或Solidworks软件。建立CAD或Solidworks的二次开发库,整合常用的通用模块,实现模块化设计。

2.2 绿色设计材料和润滑的选取

材料选择是绿色设计的关键技术之一。传统设计选材只注重材料的机械性能、加工工艺性能和经济性能,而忽略材料对环境的影响因素。绿色设计选材重视材料与环境间的关系,并将资源的优化利用纳入重要考虑。绿色设计选择材料的原则应为:(1)优先选用储量丰富、可再生材料和回收材料,以提高资源利用率,实现制造业可持续发展;(2)尽量选用低能耗、少污染的材料;(3)尽量选用无毒、无害和低辐射特性的材料;(4)为便于回收,材料上要标注出其型号、种类、等级等。节约材料是减少环境污染的重要途径。产品加工时采用成型制造技术可以直接或者稍加处理即可用于组成产品,这样就可以大大减少原材料和能源的消耗。

机器的绿色润滑也是绿色设计应该充分考虑的内容。传统课程设计多采用矿物基润滑油。由于运输、泄漏、溅射、自然更换等原因,润滑油不可避免地被排放到环境中,从而对环境造成污染。矿物基润滑油在自然环境中可生物降解能力又很差,滞留时间长,严重污染了土壤和水资源。据不完全统计,每年大约有500万吨石油基化学品进入生物圈[3]。因此在绿色课程设计中应让学生尽量选择干式加工或环境友好型的可生物降解的润滑油,以免对环境造成污染。干式加工简化了工艺、减少成本并消除了冷却液带来的一系列问题,如废液排放和回收等等[4]。目前美国、日本、德国等采用干车削、干磨削、干镗削等都取得了一定的成果,但在我国还属于起步阶段,有待学生毕业后的研究与探讨。

2.3 绿色设计中的可拆卸设计

在课程设计阶段,就应该充分考虑到产品中各种不同连接关系和类型的拆卸特点,将可拆卸作为绿色设计的目标之一。拆卸性好的产品,在产品的装配、维修、检查过程中不易造成意外损坏;也不会因拆卸过程而导致损坏;可以回收利用报废机器中可以直接继续使用的零部件。同时使不同材质零部件的能顺利分类,为回炉重炼提供方便。CAD软件或Solidworks软件可以学生实现在满足功能和使用要求的前提下,尽可能采用最简单的结构和外形,组成产品的零部件材料种类尽可能少,采用易于拆卸的联结方法,拆卸部位的紧固件数量尽量减少。

3 将产品回收再利用纳入设计之中

产品的回收再制造是绿色产品生命周期中的重要环节。在课程设计中帮助学生建立产品全生命周期的概念,按照封闭循环的原则在设计之初就充分考虑到产品报废后的零部件及材料回收的可能性与可行性、回收价值分析、回收结构工艺性与回收处理方法及回收经济性等有关一系列问题,以达到零部件及材料的充分有效利用[5]。在设计中建立产品零部件的回收再制造、再利用的信息清单,对所设计的全部内容做出绿色度等级标识;提供回收再利用相关技术和方法的实用信息;让学生参与建立回收再利用信息平台和回收再利用数据库,利用计算机技术和信息技术为产品的回收再利用提供信息服务。

4 结语

我国机械制造行业具有“高投入、高消耗、高污染、低水平、低效益“的特征,它的快速发展是以过度的能源消耗和对生态环境的破坏为代价的。这种发展模式给国家的能源和资源安全带来严峻挑战,也成为制约中国制造业发展的瓶颈。为了实现我国机械制造业的可持续性发展,推行绿色制造已成为刻不容缓的当务之急。因此,将绿色制造理念渗透于本科生“机械设计课程设计“成为一项重要内容。

参考文献

[1] 李建国,张秀棉.绿色再制造—资源环境与经济效益巨大的工程[J].轻工机械,2006,24(2):1~3.

[2] Zhang Hua,Jiang Zhi gang.A study ofprocess route selection for green manufacturing.Proceedings of the lnternational Conference on Agile Manufacturing,Advances in Agile Manufacturing,ICAM2003,523~527.

[3] 王德岩,徐连芸,常明华.绿色润滑剂的过去、现在和将来[J].润滑油,2004(4):6~7.

[4] 何春燕,林朝平,机械制造中绿色工艺技术的应用[J].轻工机械,2005(2):72~73.

[5] 林朝平.机电制造业回收再制造系统[J].轻工机械,2007(7):114~116.

课程设计范文第6篇

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main() {

int n=1; while(n!=0) {

srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title();

void list(student s[]); int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; }

void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }

void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { //n表示人数

int i;//rank=1; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…) ******** 70‐79 7(…) ******* 80‐89 8(…) ******** >=90 4(…) ****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n

1、n

2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);

void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i

printf("请输入第%d个学生的姓名和成绩 ",i+1);

scanf("%s%d",&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i

if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i

if(s[i].score>=ave)

printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; }

//要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } save(); //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");

for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {

FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {

printf("can not open file! ");

exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i

fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { int i; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5. 实践4(1)(2) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;

}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)

return 0; if(m==-1||m==0)

return 0; if(k==-1||k==0)

return 0; printStudent(stu,s1,s2,n,m,k);

system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {

printf("error1");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

fscanf(fp,"%d",&stu[i].scores[j]);

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); }

return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student

{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {

system("cls");

printf("1.显示学生信息 ");

printf("2.姓名升序排序 ");

printf("3.平均成绩降序 ");

printf("4.学号查询学生信息 ");

printf("0.退出 ");

printf(" 输入需要查询的序号:");

scanf_s("%d",&b);

switch(b)

{

case 1:

n=readData("f:StudentInfo.txt",stu);

m=readDataxy("f:SexInfo.txt",s1);

k=readDataco("f:CodeInfo.txt",s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf("按平均成绩降序排序如下:");

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {

printf("error");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

for(j=0;j<10;++j)

{

fscanf(fp,"%d",&stu[i].scores[j]);

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); } return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(j=0;j<10;++j)

printf("%4d",stu[i].scores[j]);

printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i

for(int j=0;j

{

if(strcmp(stu[i].name,stu[j].name)>0)

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf("按姓名的升序排序如下! "); for(int i=0;i

printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j

flag=0;

for (i=0;i

{

if (stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0) break; } }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

上一篇:淡水养殖范文下一篇:七步成诗范文