首页 > 文库大全 > 精品范文库 > 11号文库

计算机基础课程设计报告

计算机基础课程设计报告



第一篇:计算机基础课程设计报告

设计报告范文

一、任务内容

通过对《大学计算机基础》和《大学计算机基础学习与实验指导》这两本教材的学习后,我们应综合应用计算机进行一系列操作与使用,全面掌握并用所学的知识进行综合实践。本论文的任务主要为学习运用网页制作软件FrontPage2003制作自己的网页,了解制作过程,再者学习网站的发布和网页的发布和学习运用演示软件PowerPoint2003制作幻灯片并设计和编辑文稿进行综合演示浏览,按要求结合相应的图文素材。这里将会报告指出制作的步骤与方法,以及根据自己的主题进行网页和幻灯片的页面修饰的方法,如插入图片,用Flash制作的动画(这里将会报告制作的方法)等等。

二、设计步骤 a)利用网页制作软件FrontPage2003制作一个关于“成都著名小吃”的网页,并用文本的编辑与格式化以及对象、表格、框架的插入与设置等操作进行网页的编辑。设置该网站的内容主题和格式,并发布该网站。

首先设计主页,内容为“成都著名小吃”,主要介绍成都著名小吃的历史和独特的风味,并用表格的方式输入各个将要介绍的小吃名“麻辣烫”、“麻婆豆腐”、“棒棒鸡”、“担担面”、“夫妻肺片”、“毛血旺”、“传统锅魁”,像菜单形式呈现出来。

接下来设计各个分页面,都用主标题“美味吧”大字体标记,下面再用各个美食的名字作为副标题,接下来就用文字阐释其特征或做法或风味或历史或吃法、、、再加上五彩的图片将该小吃描述的淋漓尽致,形象而鲜活。

最后在最后一行输入“返回主页”的字样,以便于每当看完一项小吃的网页后,可以及时返回主页看另一项小吃的网页,既方便又美观,用超链接的方式把各分页面联系在一起,自动进入对应的网页并完成网页之间的转换。

制作好网页之后,需创建一个网站,主题已确定“成都著名小吃”,则要设计结构,设置各分网页与主页之间为树形链接,主要链接都在主页上,再分别展开,以高效完成操作。可以使用网站模板修饰网站。

接下来就是将网站上传到到网上,以便让更多人能浏览到该页面,可以 在网上申请一个存放网页的空间,存放自己的网页,生成个人主页。到此作业就完成了。

 利用演示软件PowerPoint2003制作一个关于“世界著名的成都名景”的幻灯片,包含若干个ppt页面,并用幻灯片的编辑与格式化及对象的插入、版面设计、放映和切换效果与设置、演示文稿的超链接等操作进行制作。

首先设计幻灯片的第一页,也就是主页,标题为“世界著名的成都名景”,可以插入一些小图片和小动画,音乐,视频之类的,或者可以插入背景图片修饰页面,让主页看起来很漂亮和吸引人,也可以设计艺术字写上自己的名字等。

下面设计各个分页面,用风景地名作为大标题位于正文上方,用图片在左边,文字在右边的的幻灯片版式,插入风景照两张,在右边输入文本介绍该景点的历史背景或建造规模格式或相关人物或迷人风景,可以插入一些小玩意等等,在适当调一下版面排版,使看起来更美观。设置自己喜欢的幻灯片动画效果和放映切换效果,使文本和标题以不同的方式显示出来,有着极好的视觉效果。也可以选择代表超链接起点的文本或其他对象,插入超链接,链接到其他文档的幻灯片和网页。

三、采取的方法与手段 a)使用FrontPage2003制作网页的方法操作

①打开网页制作软件 FrontPage2003,自动创建一个空白网页。②插入一幅事先制好的图片,点击工具栏上的“插入”“|图片”|“来自文件”即选择要插入的图片插入,点图片可以用鼠标拖动位置和改变大小。③在下面输入文本,文本字体可以点击“格式”|“字体”调整大小、字体、下划线等。④文本下用表格来展示各小吃名,点击工具栏上的“表格”|“插入”|“表格”,在出来的窗口中设置表格行数和列数,即插入相应表格。在各格输入小吃名。⑤插入网页背景,点击“格式”|“背景”|“填充效果”|“图 片”|“选择图片”,即在文件中选择要作为背景的图片并插入。⑥可以插入自己制作的Flash动画,点击工具栏上的“插入”|“Web组件”|“高级控件”|“Flash影片”即可插入。

以下几张网页也根据类似方法做好就行。 使用PowerPoint2003制作幻灯片的方法操作

①打开演示软件PowerPoint2003,自动创建一个新的空白页。②编辑第一页,点击幻灯片上的文本框,输入“成都略知”作为大标题,在小标题上输入姓名班级,字体、文本位置都可以自己作调整。③需插入另一文字,则需点击工具栏上的“插入”|“文本框”,选择“横排”或“竖排”即可在文本框内填字。④插入图片,点击工具栏上的““插入”|“图片”|“来自文件”即选择要插入的图片插入,点图片可以用鼠标拖动位置和改变大小。⑤设置页面背景,点击“格式”|“背景”|“填充效果”|“图片”|“选择图片”,即在文件中选择要作为背景的图片并插入。插入背景后,以后的每张幻灯片都以这为背景。⑥要制作第二张幻灯片,只需点击工具栏上的“插入”|“新幻灯片”即可。

⑦在第二张幻灯片上,先确定采用的幻灯片模板,点击工具栏上的“格式”|“幻灯片版式”,即在右边会出现竖型栏,里面包含幻灯片的各种版式,选择左边可插两幅图,右边为文本框的版式。⑧在上面插入标题,点击左边的图文框里的“插入图片”的图标即可在文件中选择需要插入的图片,在右边插入文 3 字,如需在其他地方插入小图片,也可。⑨如需插入音乐或视频,则点击工具栏上的“插入”|“影片和声音”|“文件中的影片”或“文件中的声音”,在文件中找到视频文件或音频文件并插入。不过需安装相应的播放器才能播放文件。⑩设置幻灯片放映效果,点击工具栏上的“幻灯片放映”|“动画方案”,即在右边会出现竖型栏,里面包含各种放映效果,每张幻灯片选择一种效果。 使用Flash制作动画

①打开动画制作软件Flash,点击“开始”页面中“创建新项目”下面的“Flash文档”即创建一个空白页面。②我想做一个飘落的叶子,首先绘制叶子的图形,点击工具箱中的“铅笔工具”,在工具栏底端“选项区”调颜色,并设置笔触方式为“平滑”,画出叶子图形。点击“颜料桶工具”,给叶子填充颜色。③点击工具箱中的“选择工具”,框中叶片,点击工具栏上的“修改”|“转换为元件”,打开对话框,名称设为“树叶”,行为选择为“图形”,注册点选择中心位置。④调整树叶图形的形状、大小、方向,点击“工具箱”中的“任意变形工具”,选中树叶进行调整。⑤插入末关键帧,选中第50帧,按F6则在此时间点插入一个关键帧。⑥为图层1添加引导层,选中图层1,点击“时间轴”面板中的“添加引导层”,即为图层1的引导层。⑦在引导层绘制路径曲线,点击“工具箱”中的“铅笔工具”,画一条曲线即为树叶运动的路径。⑧设置图层1的属性,选择图层1的第一帧,按Ctrl+F3打开属性面板,设置补间动画为“动作”,并选中“调整到路径”和“对齐”两个框。⑨位置调整,点击工具箱中的“选择工具”,在单击“对象”,选择图层1第一帧,将树叶拖到路径起点,中心点对其,再选择第50帧,将树叶拖到路径终点。⑩如要插入音乐文件,点击“文件”|“导入”|“导入到库”,在文件中选择需要插入的mp3格式文件。

最后,按Ctrl+Enter测试影片。

四、遇到的问题与解决的办法

1、在制作网页的时候,当把每个网页都链接好了之后,突然想修改其中一个页面,改完后再用其他页面的链接来观看该网页,就出现了网页错误的页面,最先不知道怎么回事,想了想,明白这个页面已经变了,就不能在链接了,只有重新设置链接,最后解决了这个问题。

2、在制作网页的时候,做好后,我移动了一下图片的位置,想归类整理一下,结果在网页中就显示不出该图,通过这个,我知道了在网页中插入的图片存放位置不能移动,只要存放位置变了,在网页中就显示不出该图了。

3、在制作幻灯片的时候,我想插入一点音乐,我就按照那个插入步骤做,结果放不出。最后搞明白了,没有相应的播放器。后来下了个“暴风影音”,插入了视频,使网页更加丰富多彩了。

4、在制作Flash动画的时候,步骤全对,树叶就是不按照我定的轨迹跑,而是直接从起点直线到终点,试了几次还是不行,想了想应该是对齐的时候没对齐吧,就很仔细的对齐,结果就作出来了。

5、在插入Flash动画的时候,总是出现不能播放的情况,看书也搞不明白,最后通过问同学知道了播放的方法和步骤,在打开插有Flash动画的网页后,上面会出现一个黄色的询问长条,左击,点击“允许阻止的内容”,即出现“安全警告”的对话框,点击“是”,动画就放出来了。

五、总结

通过学习运用网页制作软件FrontPage2003制作自己的网页和学习运用演示软件PowerPoint2003制作幻灯片以及用动画制作软件用Flash制作动画,激发了制作的学习兴趣,自己动脑、动手、动口,运用网络资源,结合教材和老师大指导,通过自身的实践,摸索出自己的方法,也根据和同学交流分享自己的方法,结合运用,创建自己个人风格和个人特色的网页、幻灯片和动画。培养了自己的能力,也学到很多关于计算机的知识,积累了制作的相关经验。

做好页面,并不是一件容易的事情,它包括主题的选择、网页图片的采集、图片处理、页面的排版、背景及色调、插入的各种内容和格式等很多方面,更需要灵活掌握各方面的技术与技巧,这次制作提高了我设计的能力,更提高了我独 立思考的能力和虚心学习和同学交流分享的能力。虽然还有很多不足的、需要提高的地方,但是这是一个积累和循序渐进的过程,我相信通过这次的制作我所学到的,下次一定可以做的更好。

六、参考文献

[1] 刘卫国,杨长兴.大学计算机基础[M].2版.北京:高等教育出版社,202_.[2] 施荣华,王小玲.大学计算机基础学习与实验指导[M].2版.北京:高等教育出版社,202_.[3] 葛敏敏.网页制作[M].上海:上海交通大学出版社,202_.[4] 孙一轩,计算机实践报告.http://wenku.baidu.com/view/58d27626a5e9856a561260eb.html.[5] 计算机实践课程报告.http://wenku.baidu.com/view/4da5d81cc281e53a5802fff3.html?from=rec&pos=1&weight=41&lastweight=22&count=5 6

第二篇:浅谈《计算机应用基础》课程设计

浅谈《计算机应用基础》课程设计

摘要:该文针对目前高职院校计算机应用基础课程教学中存在的问题进行分析,提出以能力为本位,以工作任务为导向,以行业规范标准为牵引,以应用为目的的原则对这门课进行了课程设计。该课程设计采用了以任务为导向,基于项目教学法的教学模式,并在教学过程中实行了理论实践一体化教学,以满足学生职业素养和就业岗位的双重需要。

关键词:高职;计算机应用基础课;课程设计

中图分类号:G424文献标识码:A文章编号:1009-3044(202_)29-7315-02

长期以来,在高职院校中,《计算机应用基础》作为一门计算机专业基础课而开设,为其他专业课的学习做铺垫,虽然该课程的开设有了数十年的历史,但目前该课程教学的改革尚有不少探索空间。计算机应用基础作为高职院校的基础必修课程,其任务是为社会培养高素质技能型人才。为了使本课程的教学更适应社会对人才的需求、对能力的要求,我们适时地对原有的培养过程做出相应的调整与改革,对于提高计算机应用基础课程的教学水平具有非常重要的意义。

该文从课程总体设计、课程内容与标准、课程教学资源组织、教学过程设计、学习效果评估方式设计和课程的改革与创新等六个方面进行了阐述。

课程总体设计

课程总体设计包括课程设计的原则和课程定位。

1.1 课程设计的原则

高职院校提倡加强学生动手能力与实践能力,以促进学生知识、能力、素质协调发展。因此,我们坚持以能力为本位,以工作任务为导向,以行业规范标准为牵引,以应用为目的的原则对计算机应用基础这门课程进行课程设计。如图1所示。

1.2 课程定位

计算机应用基础是其他专业课的一门前续课程,该课程的定位与教学效果对后续课程的学习有着重要的意义。我们对该课程的定位就是培养学生计算机基本应用能力和信息素养,为其以后的职业能力发展提供信息化平台和使用工具,使这门课成为一门结构优化、内容先进、与职业能力直接接轨、适应社会发展需要的课程体系。

课程内容与标准

过去这门课的课程目标设置为一般技术目标,即简单传授课本知识。现在,我们的课程目标直接体现了就业岗位所需技能。我们的课程内容也从之前的知识本位转向就业能力本位。

2.1 课程目标

1)职业素质目标:

能够将计算机作为工具为其它专业及课程的学习服务,能够获得学习新的软件、使用新的软件的能力。

本课程是继续学习计算机其它课程及计算机辅助设计、辅助制造等课程的重要基础。

2)职业能力目标:

通过本课程的学习,要求学生能够熟练的掌握计算机操作技能,掌握使用计算机进行文字编辑和处理的技术,掌握使用计算机进行电子表格处理的技术,掌握使用计算机进行演示文稿处理的技术,掌握计算机网络的基本知识和Internet的应用技术,为以后其它课程的学习和今后的工作打下坚实的基础。

3)知识目标:

要求学生掌握计算机的基础知识、应用范围及计算机网络的基础知识,并取得全国计算机等级考试一级资格证书。

2.2 课程内容

根据职业岗位技能需求,我们对课程内容做了如表1所示的设置。

例如:《文字处理软件》这一章,我们根据要求学生应能运用Word 202_软件进行文字录入及图文混排功能的这一能力目标,明确了其知识要点为Word文档的文字编辑和格式、查找替换、文字与段落格式设置;美化文档、打印文档等。

2.3 教学重点、难点解决

如图2所示:

1)利用多媒体教学手段,学中练、练中学。

主讲教师用多媒体教学系统操作演示,学生人手一机实际操作训练,遇有有问题现场就解决。

2)全程采用项目化教学,让学生在教师的指导下完成各个项目单元任务,将信息及时反馈,提高教学质量。

3)分析学情,教学过程中承认个体差异,因材施教。

课程教学资源组织

3.1 教材分析

《全国计算机等级考试:一级B教程(202_年版)》由教育部考试中心组织,在全国计算机等级考试委员会指导下由有关专家按照《全国计算机等级考试一级B考试大纲(202_年版)》的要求而编写,内容包括计算机基础知识、Windows XP操作系统、Word 202_的使用、Excel 202_的使用、因特网的基础知识和简单应用等。

教材以帮助学生提高信息素养为主要目的,满足不同专业的学生个性发展为基本理念,包括了教学基本要求规定的知识点和实习教学内容。在体系结构上突出了基本性、典型性、简约性、逻辑性、实践性;以任务的方式让学生从建立模型、寻找方法,直到问题解决的全过程中得到计算机知识和技能的训练。

3.2 教学环境

教学环境包括硬件环境和网络资源。

信息学院建设有五个大型机房,每个机房配备教学用计算机能同时满足80人次的实训。每台机器装有Windows XP操作系统、Office办公软件,有良好的网络链接能力。

教师会根据教学需求收集各类网络资源,提供学生课后自主学习。计算机应用基础这门课程为省级精品课程,信息学院建设了相关的网站,提供与此门课程相关的文字资料及视频,以供学生学习参考。

教学过程设计

4.1 教学对象分析

计算机应用基础这门课程的教学对象为高职院校一年级学生,他们在知识储备、性格因素和技能现状上具备以下特点:有一定的英语识读能力,能对计算机进行简单操作,有较好的语言组织能力;性格因素可分为内向型和外向型;计算机操作仅限简单系统操作,计算机应用软件使用技能不熟悉。

4.2 教学过程设计

通过对教学对象的分析,我们对教学过程做了如下设计:

1)教学的组织:典型工作任务贯穿,理论教学与实践教学交融推进,采取任务驱动的教学方法。整个教学组织过程包括:分组、讨论、审核、实施和评估。

分组,即任务下达,以5人为小组,明确人员职责,按照项目要求各自独立开展工作;以任务驱动开展项目化教学;讨论,即明确分组以后各组围绕主题、重点和工作步骤开展讨论。根据讨论结果拿出各组的方案、具体步骤、注意事项;审核,即教师根据各组提出的方案审核方案是否完整及具体可操作性、是否需要技术支持等,给出建议;实施,即各小组按照审核通过的方案组织实施,进行实际训练操作。教师巡查协助指导;评估,即各组完成方案,由老师验收任务,同时提出建议。

2)教学计划学时分配

本课程以任务驱动开展项目化教学模式,课时为64。

3)教学方法

计算机应用基础课程的开设用什么样的教学方法一直是我们所关心和研究的,以下采用的一些教学方法已经融合到课程中。

参观认知:对计算机基础知识教学内容的讲解,可以采用参观认知法。如:介绍计算机硬件,可以准备一些硬件实物(硬盘、软盘、U盘、主板、显卡、网卡、声卡等),通过实物的感观认识来进一步认识教学内容中的知识点。

现场教学:对计算机操作系统、Word、Excel软件的教学可以采用现场教学法:如:讲解计算机操作系统的使用内容,可以结合多媒体教学,通过教师的实际操作来加深学生的理解,将课本的枯燥知识提升为动感的感观认识。案例教学:对计算机安全知识的教授可以采用此方法,如:介绍计算机病毒的危害性,可以举出一些实际案例,像“熊猫烧香”病毒、特洛伊木马病毒等对计算机造成的危害,让学生能切身感受到病毒的危害,加深理解。

情境模拟:对计算机网络基本知识的教学可以采用情境模拟,如:介绍局域网的共享内容,可以采用教学用机来设定共享,让学生通过网络邻居在局域网中查找和共享教学内容;介绍广域网的使用,可以通过聊天室的建立来进行互动。

4)教学手段

采用项目化教学,将课程搬移到计算机实训中心,使教与学同步进行;采用多媒体教学手段,教授课程内容更加形象生动,吸引学生兴趣;采用先进的教学软件,实时与学生交流。学习效果评估方式设计

建立多元化考核评价体系,采用注重实际能力的考核方式,对学生的整个学习过程进行监控和评价,并实行平时实践考核成绩、平时作业成绩和期末的无纸化考试成绩相结合的评价方式。平时考察主要为学生的职业素养考察,阶段性网络测验和期末考试为职业能力考察。

课程的改革与创新

将以知识目标本位转化为以能力目标本位;教学方法采用任务驱动法;课程设计采用以岗位需求为主导;评价方式的创新是由过去的纸质试卷测评转化为以过程性考核为主。

参考文献:

[1] 陈樱之.职业教育适时而行服务浙江转型升级[N].浙江日报:求学求职?高职特刊, 202_-12-10.[2] 我国职业院校计算机应用与软件技术专业领域教育改革调研――信息产业部电子教育中心等单位联合调研结果[Z].[3] 赵智群.对工学结合课程的认识(一)[J].职教论坛,202_(1).[4] 席先杰.论高职计算机应用专业课程优化与整合[J].中国成人教育,202_(14).[5] 陈霄.从就业形势谈高职院校计算机专业课程的教学改革[J].电脑知识与技术,202_(15).

第三篇:大学计算机基础课程设计实践报告

中南大学

本科生课程设计(实践)任务书、设计报告

(大学计算机基础)

题 目 学生姓名 指导教师 学 院 专业班级 学生学号

课程设计实践报告

计算机基础教学实验中心

202_年12月13日 ⑴任务内容: 本期我们进行了网页制作的实践,我选择做一个关于中华武术的网页.中国的历史贯穿了几千年,留下许多古老而美丽的文明,其中有一些甚至为世界文明作出了重要贡献,为人们所广泛称道.所以我希望把这些不可多得的精神财富展现给大家.恰好这些天我迷上了中国武术,带着这份热忱,我选择了这个主题.中国武术与古典文学,是同根同源的共生关系,是中华传统文化的双碧,堪称双子星座,同样辉煌,同样灿烂。稍加留意,就会发现,中国武术的滥觞,正是中国古典文学的发轫;文事与武备至少在两三千年以前,就像是一对孪生兄弟携手而行;舞枪弄棒与吟诗作赋,很早就是被我们先民所看重的文化修养的两个方面。历史中,有无数的武术家本身就是文学家,而许许多多文学作品中也洋溢着武术的风采。这在世界文化史上尚无先例,可以说是中华民族独有的文化现象

⑵设计的步骤: 我做的网页包括了中国武术的起源、代表人.少林武术.太极拳.四个方面。第一个内容是见证中国武术的起源和发展, 武术的起源可以追溯到原始社会,原始人使用棍捧、石器等同野兽搏斗。学会了一些基本的格斗和搏杀技能。原始战争的出现,单人应战技能得以完善。先秦时期,各国诸侯都非常重视培养和训练将士们的搏击技术,剑术得到发展。汉代,带有搏击性质的“角抵”已有广泛的基础,还发明了铁兵器,出现了编排起来的攻防连续套路。到了晋代,练武活动已有“口决要术”,武术初见雏形。唐代,是中国武术的兴盛时期,唐武则天开武举,不少武术人才脱颖而出,天下闻名的少林武术的最早记载也起于唐朝初年。

第二个内容是中华武术的代表——少林武术.少林武术发源于河南嵩山少林寺。少林武术内容极为丰富,其中少林拳的精华被称为“少林五拳”,系指龙拳、虎拳、豹拳、蛇拳和鹤拳,分为小洪拳、大洪拳、罗汉拳、梅花桩炮捶等几十种少林拳法,还有刀、枪、剑、铲、棒等器械的技击法,并创造出少林易筋功、小武功、阴阳功、混元一气功等气功。少林拳在一千多年的发展中,逐渐分为北派少林拳和南派少林拳。

网页中还有十一张名为“自我介绍”的幻灯片,介绍了一下我自己,以一种非常风趣的风格介绍我的成长,我的成就,和我在一些比赛中的剪影。在首页上,我加入了一个有关下雪的成就的flash,使网页更加唯美,展示方式更多样化.网页一共有四个页面,其中幻灯片独成一页.首页与各个分页之间采用超链接联系起来,形成一个系统的整体.⑶采取的方法与手段: 我用Powerpoint做好幻灯片.在PPT中,为了让表达效果更好,能更让人有耳目一新的感觉,我在每一页都有不同的处理.如采取不同的页面转换方式,采用不同的动画效果,或者自己绘制动作路线来突出主题和重点.用Frontpage做网页,在网络上收集各类文字与图片信息,来美化自己的网页画面.用Flash做出动画.,使网页动静结合,以动衬静,以静应动,更具美感.⑷遇到的问题和解决的办法: 进行实践的时候,由于基础不够好,实践机会不够多,我遇到了不少挫折,也花费了大量时间.在制作过程中,首先我要确定整个网页的主题和基本布局.网页的主题是中华武术,我要通过描述中国武术的博大精深将它们展示出来,利用历史资料为表达载体,各种武术形式来共同表达.首先,我在纸上先计划好网页的框架,确定怎样才能更鲜明地表达主题,怎样安排小标题的顺序才更合理.随后,我上网查找相关图片,思考怎样安排图片的位置和标注内容,凸显网页的美感.框架确定好后,我开始在工作界面上按自己的想法摆放各个需要的元素,并一边思索对文字的处理来进一步美化网页.操作flash时一些动画处理方式不熟悉,做出来的效果和预期的不一样.我仔细地看了《大学计算机基础》,回忆老师课堂上教学软件上的内容,再在工作界面上反复试验,终于知道了如何调整图片的透明度:单击ɑ,调整上面的数值,0%则全透明,100%则图片颜色全显.在做PPT时,我想作为背景的图片总是覆盖在文字上面,如果先输入文字再插入图片,图片就会遮挡住文字.我和同学进行交流,发现在图片上单击鼠标右键,选择“置于底层”这一项就解决了.PPT的模板不一定符合我们想做出来的效果.如果没张幻灯片都按模板做,则会显得过于刻板.此时,我们可以新建一个空白文档,就可以随心所欲地插入不同图案,在想插入文字的地方插入水平或竖直的文本框.在做网页时,我没有办法把超链接做好.本来我先将光标置于要进行超链接的文字之前,单击“插入”中的“超链接”,发现在文字之前出现一排极为不和谐的网址符号,十分影响网页的整体效果.之后我发现用鼠标左键选中那行文字,再进行超链接的插入,文字下方则出现一条笔直的下划线,链接成功了.怎样把PPT插入网页中,这是个困扰了我很久的问题.在插入那一栏中并没有设置这一操作项.与大家探讨后,我通过把PPT“另存为网页”,然后直接在Frpntpage上点击插入超链接,PPT就被引进来了.⑸感想:

这次实践完成后,我发现计算机最重要的是实践,有了实践,我们才能更明确地了解书上教给我们的内容,巩固自己的知识.做网页时,一张空白网页就像是一张画纸,需要我们合理地利用它的每一寸空白,需要我们想各种办法去美化它.在画纸上挥洒墨水的同时,我们会遇到不同的问题,这就调动了我们自主学习与合作学习的能力.通过不同的方法解决问题的同时,我们的计算机知识和实践能力也在不知不觉中得到锻炼与提高.而且通过自己摸索所找到的方法,会更深地扎在我们的脑海里,比在课堂中听一百遍理论更有效.还有一件事我感触很深,那就是没有什么东西我们可以轻松获得.想要获得成功,我们就得通过自己艰难的努力,调动活用自己所学的知识.而通过对自己掌握的知识进行总结概括,进行广泛的迁移,能给自己储备更系统化的技能.我想,老师安排每位同学进行这次实践,除了让我们更熟悉计算机以外,还旨在培养我们的创新意识和不畏艰难的精神,培养具综合素质的人。做的同时真的学会了很多。

第四篇:大学计算机基础课程设计报告[小编推荐]

-----大学

本科生课程设计(实践)任务书、设计报告

(大学计算机基础)

题目

学生姓名 指导教师 学院 专业班级

学生学号

计算机基础教学实验中心 年月日

“诗圣”杜甫

——计算机实践课程设计报告

一、任务内容 我所选的主题是介绍伟大的现实主义诗人杜甫。杜甫是我国唐代伟大的现实主义诗人、世界文化名人。经历了唐代的由盛到衰的过程。因此,与诗仙李白相比,杜甫更多的是对国家的忧虑及对老百姓的困难生活的同情。我想通过制作这个关于杜甫的PPT和网页增加人们对杜甫的更深一层的认识,同时也锻炼了自己的计算机方面的操作能力。

二、设计的步骤

对于杜甫,我主要分为4个重要方面介绍:基本信息、诗歌成就与影响力、生平经历和诗歌风格。此外,我还加入了一些经典篇目的朗诵音频。因此,我选择制作4个网页。其中一个为首页,在首页上放上其余分页的超链接,从而将我想要介绍的东西结合在一起。生平经历部分,我采用ppt的形式展示。

1)在首页中,我分别插入了从网上下载的图片、自己制作的flash、音频文件等。

2)在分页设计中,我在每个分页都放上了返回首页的超链接,以方便人们阅读。网页背景是自己选择的图片,同时,我还对字的颜色做了调整,不再是单调的黑字。

3)在介绍杜甫生平经历时,运用了Powerpoint软件,因为PPT能比较好的解决每一页面之间的光滑链接问题。

4)安排好内容后,我想要追求的就是页面的美观。我是这样做的:首页作为一个总起的页面,一定要精美新奇,才能第一时间吸引人们产生往下阅读的好奇心。所以我在首页的制作上花费了较多的时间,而在其他网页的制作中我想追求的是简明清晰地效果,并且加入与页面内容相关的图片,争取减少花哨的装饰,达到一个清晰的显示效果。

三、采取的方法与手段

1)在网页制作中,我尽可能运用自己的知识插入了图片、交互式按钮、超链接、音频文件、flash等等。分页的背景图片也是我自己结合主题在网上搜索到的素材,清新淡雅。网页也就不那么苍白了。

2)幻灯片的制作相对而言花费时间较少。主要是介绍了杜甫的生平经历及在各个阶段选取了一个代表作,由于有图片的支撑使得画面丰富不少,所以没有添加太多其他的元素比如flash等。但是我在每个阶段经历的最后一张幻灯片的右下方都插入了链接到目录页的超链接,方便人们在观看时自由的选择不同的阶段来了解杜甫。同时,我在每张幻灯片的右下角还插入了链接到首页的超链接,方便人们在观看过程中随时退出。后来演示幻灯片时又发现衔接始终不太自然,于是又设置了幻灯片间的切换效果,获得了最佳的表现效果。

3)我还运用了Adobe Photoshop CS软件,结合网上有的教程自己制作了几个特效字。特效字比系统自带的艺术字更精美,现实效果更好。与此同时,我对Photoshop的了解也有所加深。

4)为了使首页变得更加生动,我将自己制作的特效字运用Flash软件简单地做成了逐帧动画作为首页的标题。

四、遇到的问题与解决的方法

1)以前看网页时发现flash都能贴合网页显示,而我自己做出来的flash的背景总是白色,插在网页中显得非常突兀。后来通过上网查询发现在Frontpage制作网页是只要在flash上点右键设置属性,将flash背景改为透明就可以解决这个问题。

2)制作后的flash插入到网页后并没有按我想的方式放映,通过查阅课本,我发现原来是自己的保存方式有问题。我一直是直接按另存为、保存、退出的步骤来操作的,实际上应该按文件、导出、导出影片、退出的步

骤操作。

五、总结

通过这次网页制作实践,我收获良多,具体如下:

1)书本往往是知道我们解决困惑的良师。在制作网页的过程中,我发现自己有许多知识上得缺口。如在制作FLASH时不知补间动画如何制作,在这个时候,翻阅书本令我疑惑顿解。我深刻的意识到了自己知识的匮乏,也发现书本上的知识应该被重视起来,只有结合课本与实践操作,才能学好计算机这门科学。

2)要重视合作。我制作网页的时候遇到许多瓶颈,例如不能很好的结合网页与幻灯片,做好了以后不知如何令网页变得更美观等等,在这个时候,与同学们交流,看看他们的制作思路令我受益匪浅。他们会热心地交给我一些制作网页的小窍门,我也会仔细观察他们的网页排版,从而又对我的网页做了几次大德改进,完成了现在的这个作品。

总之,这是一次有意义的成功的计算机实践。

第五篇:计算机操作系统 课程设计报告(推荐)

操作系统课程设计报告

时间:202_-12-20~202_-12-31 地点:信息技术实验中心

计算机科学与技术专业 202_级2班15号

杨 烨

202_-12-31

信息工程学院计算机科学与技术082班

目录

一、课程设计的目的和意义...........................................................................................................2

二、进程调度算法模拟...................................................................................................................2

1、设计目的.............................................................................................................................2

2、设计要求.............................................................................................................................2

3、时间片轮转算法模拟.........................................................................................................3

实现思想:.......................................................................................................................3(1)流程图.....................................................................................................................3(2)程序代码.................................................................................................................3(3)运行结果.................................................................................................................5

4、先来先服务算法模拟.........................................................................................................6 算法思想...................................................................................................................................6

(1)流程图.....................................................................................................................7(2)程序代码.................................................................................................................7(3)运行结果...............................................................................................................11

三、主存空间的回收与分配.........................................................................................................11

1、设计目的...........................................................................................................................11

2、设计要求...........................................................................................................................12

3、模拟算法的实现...............................................................................................................13(1)流程图...................................................................................................................13(2)程序代码...............................................................................................................13(3)运行结果...............................................................................................................28

四、模拟DOS文件的建立和使用...............................................................................................28 设计目的.............................................................................................................................28 2 设计要求.............................................................................................................................28

3、模拟算法实现...................................................................................................................31(1)流程图...................................................................................................................31(2)程序代码...............................................................................................................31(3)运行结果...............................................................................................................36

五、磁盘调度算法模拟.................................................................................................................36

1.设计目的..............................................................................................................................36 2.实验原理..............................................................................................................................37 3.设计要求...........................................................................................................................37

4、模拟算法的实现...............................................................................................................38(1)各算法流程图.......................................................................................................38(2)程序代码...............................................................................................................39(3)运行结果...............................................................................................................45

六、总结.........................................................................................................................................45

信息工程学院计算机科学与技术082班

一、课程设计的目的和意义

本次操作系统课程设计的主要任务是进行系统级的程序设计。本课程设计是操作系统原理课程的延伸。通过该课程设计,使学生更好地掌握操作系统各部分结构、实现机理和各种典型算法,加深对操作系统的设计和实现思路的理解,培养学生的系统设计和动手能力,学会分析和编写程序。课程设计的实施将使学生在以下几个方面有所收获:

(1)加深对操作系统原理的理解,提高综合运用所学知识的能力;

(2)培养学生自主查阅参考资料的习惯,增强独立思考和解决问题的能力;(3)通过课程设计,培养严谨的科学态度和协作精神。

二、进程调度算法模拟

1、设计目的

(1)要求学生设计并实现模拟进程调度的算法:时间片轮转及先来先服务。(2)理解进程控制块的结构。(3)理解进程运行的并发性。(4)掌握进程调度算法。

2、设计要求

在多道程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同的进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。

进程是程序在处理机上的执行过程。进程存在的标识是进程控制块(PCB),进程控制块结构如下:

typedef struct node { char name[10];/* 进程标识符 */ int prio;/* 进程优先数 */ int round;/* 进程时间轮转时间片 */ int cputime;/* 进程占用 CPU 时间*/ int needtime;/* 进程到完成还需要的时间*/ int count;/* 计数器*/ char state;/* 进程的状态*/ struct node *next /*链指针*/ }PCB;系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管

信息工程学院计算机科学与技术082班

理,进程任务完成,由系统收回其PCB,该进程便消亡。每个进程可以有三个状态:运行状态、就绪状态和完成状态。

用C语言、C++或者Java语言编写一个程序实现进程调度的算法,模拟进程调度的过程,加深对进程控制块概念和进程调度算法的理解。

本任务要求完成时间片轮转及先来先服务两个算法。

3、时间片轮转算法模拟

实现思想:

每次调度时,系统吧处理机分配给队列首进程让器执行一个时间片,当执行的时间片用完时,由一个计时器发出时钟中断请求,调度根据这个请求停止该进程的运行将其送到就绪队列的末尾,再把处理机分给就绪队列中新的队首进程,同时让它执行一个时间片。(1)流程图

进程调度—时间片轮转开始输入进程总数输入各进程信息更新在运行的进程的已运行时间输出为就绪状态的进程信息N输出此时为就绪状态的进程信息当前进程是否运行结束是否存在下个进程Y指向下一个进程YN结束跳过

(2)程序代码

#include #include using namespace std;typedef struct PNode {

// PCB

struct PNode *next;// 定义指向下一个节点的指针

char name[10];

// 定义进程名,并分配空间

信息工程学院计算机科学与技术082班

int All_Time;

// 定义总运行时间

int Runed_Time;

// 定义已运行时间

char state;

// 定义进程状态 Ready / End } * Proc;// 指向该PCB的指针 int ProcNum;// 总进程个数

void InitPCB(Proc &H)// 初始化就绪队列

{

cout<<“请输入总进程个数: ”;

cin>>ProcNum;// 进程总个数

int Num=ProcNum;

H=(Proc)malloc(sizeof(PNode));// 建立头节点

H->next=NULL;

Proc p=H;//定义一个指针

cout<<“总进程个数为 ”<

while(Num--){

p=p->next=(Proc)malloc(sizeof(PNode));

cout<<“进程名 总运行时间 已运行时间 :”;

cin>>p->name>>p->All_Time>>p->Runed_Time;

p->state='R';

p->next=NULL;}

p->next=H->next;

} void DispInfo(Proc H)//输出运行中的进程信息 {

Proc p=H->next;

do {

if(p->state!= 'E')

//如果该进程的状态不是End的话

{

cout<<“进程名:”<

name<<“t总运行时间:”<

All_Time

<<“t已运行时间:”<

Runed_Time

<<“t状态:”<

state<

p=p->next;

}

else p=p->next;

}

} void SJP_Simulator(Proc &H)// 时间片轮转法 { while(p!= H->next);// 整个进程链条始终完整,只是状态位有差异

信息工程学院计算机科学与技术082班

cout<

int flag=ProcNum;// 记录剩余进程数

int round=0;// 记录轮转数

Proc p=H->next;

while(p->All_Time > p->Runed_Time)

{

// 即未结束的进程

round++;

cout<name<<“ 进程”<

p->Runed_Time++;

// 更改正在运行的进程的已运行时间

DispInfo(H);

// 输出此时为就绪状态的进程的信息

if(p->All_Time == p->Runed_Time){

// 并判断该进程是否结束

p->state='E';

flag--;

cout<

name<<“ 进程已运行结束,进程被删除!n”;

}

p=p->next;

while(flag && p->All_Time == p->Runed_Time)

p=p->next;// 跳过先前已结束的进程 } cout<

Proc H;

InitPCB(H);// 数据初始化

DispInfo(H);// 输出此刻的进程状态

SJP_Simulator(H);// 时间片轮转法

system(“pause”);}(3)运行结果

输入相关进程信息:

输出相关运行结果:

信息工程学院计算机科学与技术082班

4、先来先服务算法模拟 算法思想

按照进程的某种顺序进行排序,然后按照这个顺序进行调度。例如:可以按照作业提交时间或进程变为就绪状态的先后次序来分派处理器,让排在后面的进程占用处理器,知道该进程执行完或者由于某种原因被阻塞才让出处理器。

在该调度策略中还规定,当有一个事件发生(如一个I/O操作完成)时,会有一些进程被唤醒,这些被唤醒的进程并不能立即恢复执行,而是要等到当前运行的进程出让处理器后才可以被调度执行。采用此算法存在以下几个特点:

周转时间:对进程i来说,假设Tei是进程的完成时间,Tsi是进程的提交时间,那么进程i的周转时间Ti=进程完成时间-进程提交时间;

进程平均周转时间:T=1/nETi;

进程带权周转时间=进程等待时间+进程运行时间。

信息工程学院计算机科学与技术082班

(1)流程图

Begin输入当前磁道号now磁头移动距离sum=abs(now-array[0])磁头移动总距离sum+=abs(array[j]-array[i])输出磁盘调度序列array[j]目前位置编程当前的位置i++j

(2)程序代码

#include “stdio.h” #include #include

#define getpch(type)(type*)malloc(sizeof(type))#define NULL 0

struct pcb { /* 定义进程控制块PCB */ char name[10];char state;int super;

信息工程学院计算机科学与技术082班

int ntime;int rtime;struct pcb* link;}*ready=NULL,*p;typedef struct pcb PCB;

void sort()/* 建立对进程进行优先级排列函数*/ {

PCB *first, *second;int insert=0;

if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首*/ {

p->link=ready;ready=p;}

else /* 进程比较优先级,插入适当的位置中*/ {

first=ready;second=first->link;while(second!=NULL){

if((p->super)>(second->super))/*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面*/ p->link=second;first->link=p;second=NULL;insert=1;}

else /* 插入进程优先数最低,则插入到队尾*/ {

first=first->link;second=second->link;} }

if(insert==0)first->link=p;} }

void input()/* 建立进程控制块函数*/ { int i,num;

printf(“n 请输入进程数:”);scanf(“%d”,&num);for(i=0;i

信息工程学院计算机科学与技术082班

printf(“n 进程号No.%d:n”,i+1);p=getpch(PCB);printf(“n 输入进程名:”);scanf(“%s”,p->name);printf(“n 输入进程优先数:”);scanf(“%d”,&p->super);printf(“n 输入进程运行时间:”);scanf(“%d”,&p->ntime);printf(“n”);

p->rtime=0;p->state='w';p->link=NULL;

sort();/* 调用sort函数*/ } } int space(){

int l=0;PCB* pr=ready;while(pr!=NULL){ l++;pr=pr->link;} return(l);}

void disp(PCB * pr)/*建立进程显示函数,用于显示当前进程*/ {

printf(“n qname t state t super t ndtime t runtime n”);printf(“|%st”,pr->name);printf(“|%ct”,pr->state);printf(“|%dt”,pr->super);printf(“|%dt”,pr->ntime);printf(“|%dt”,pr->rtime);printf(“n”);}

void check()/* 建立进程查看函数 */ { PCB* pr;

printf(“n **** 当前正在运行的进程是:%s”,p->name);/*显示当前运行进程*/ disp(p);pr=ready;

printf(“n ****当前就绪队列状态为:n”);/*显示就绪队列状态*/ while(pr!=NULL){

信息工程学院计算机科学与技术082班

disp(pr);pr=pr->link;} }

void destroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/ {

printf(“n 进程 [%s] 已完成.n”,p->name);free(p);}

void running()/* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {

(p->rtime)++;

if(p->rtime==p->ntime)

destroy();/* 调用destroy函数*/ else {

(p->super)--;p->state='w';

sort();/*调用sort函数*/ } } int

main()/*主函数*/ {

int len,h=0;char ch;input();len=space();

while((len!=0)&&(ready!=NULL)){

ch=getchar();h++;

printf(“n The execute number:%d n”,h);p=ready;ready=p->link;p->link=NULL;p->state='R';check();running();

printf(“n 按任一键继续......”);ch=getchar();}

printf(“nn 进程已经完成.n”);

信息工程学院计算机科学与技术082班

ch=getchar();}(3)运行结果

输入相关进程信息:

输出相关运行结果:

三、主存空间的回收与分配

1、设计目的

主存是中央处理器能直接存取指令和数据的存储器,能否合理地利用主存,在很大程度

信息工程学院计算机科学与技术082班

上将影响到整个计算机系统的性能。主存分配是指在多道作业和多进程环境下,如何共享主存空间。主存回收是指当作业执行完毕或进程运行结束后将主存空间归还给系统。主存分配与回收的实现是与主存储器的管理方式有关。本次设计主要是为了帮助学生深入理解主存空间的分配与回收的几种算法。

(1)掌握最先适应分配算法(2)掌握最优适应分配算法(3)掌握最坏适应分配算法

2、设计要求

用户提出内存空间请求,系统根据申请者要求,按照最先适应分配算法的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者,当程序执行完毕时,系统要收回它所占用的内存空间。建立空闲数据文件,空闲区数据文件包括若干行,每行有两个字段:起始地址、内存块大小(均为整数),各字段以逗号隔开。下面是一个空闲区数据文件的示例:

0,10 10,08 18,10 28,06 34,10 44,09 读取空闲区数据文件,建立空闲区表并在屏幕上显示空闲内存状态,空闲区表记录了可供分配的空闲内存的起始地址和大小,用标志位指出该分区是否是未分配的空闲区。

接收用户的内存申请,格式为:作业名、申请空间的大小。

按照内存分配算法中的一种方法选择一个空闲区,分割并分配,修改空闲区表,填写内存已分配区表(起始地址、长度、标志位),其中标志位的一个作用是指出该区域分配给哪个作业。

进程结束后回收内存。空闲区表的结构如下:

typedef struct node{ int start;int length;char tag[20];}job;本次设计要求完成如下算法:

(1)设计一个内存分配回收的程序使用最先适应分配算法(2)设计一个内存分配回收的程序使用最优适应分配算法(3)设计一个内存分配回收的程序使用最坏适应分配算法 用户提出内存空间请求,系统根据申请者要求,选择上述算法的一种分配策略分析内存空间的使用情况,找出合适的空闲区,分给申请者,当进程执行完毕时,系统收回它所占用的内存空间。

信息工程学院计算机科学与技术082班

3、模拟算法的实现

(1)流程图

内存分配开始划定内存总量输入进程信息所需内存<剩余内存?Y在剩余空间中划分出所需空间N剩余空间分配给请求者,修改有关数据输出进程信息结束

(2)程序代码

#include #include #define LEN sizeof(struct area)#define LEN_POINTER_LIST sizeof(struct AreaPointer_list)struct area{

};//分区指针的链表

//当把空闲分区链表和占用分区链表按照地址先后顺序合并 //以显示整个内存情况的时候使用 struct AreaPointer_list{ struct area * data;struct AreaPointer_list * next;int start;//分区的其始地址 int length;//分区的长度 int job;//若被作业占用值为作业号,若空闲值为0 struct area * next;

信息工程学院计算机科学与技术082班

};struct area * idle;struct area * used;

//全局变量,空闲分区链表头指针 //全局变量,占用分区链表头指针

struct AreaPointer_list * whole = NULL;//全局变量,分区指针链表头指针 //p(previcious)n(next)指出在链表中的何处插入新生成的元素 //p==NULL 在链表头插入,返回头指针

//p!=NULL 在链表中或链表尾插入,返回当前插入的元素的指针 struct area * insert(int s,int l,int j,struct area * p,struct area * n){

} //此模块居于次要地位,只被使用一次 //打印分区链表

void print(struct area * head){

if(head == NULL){ } else{

while(head!= NULL){

if(head->job == 0)else

printf(“begin:%dKtlength:%dKtuse:Job%dt|n”,head->start,head->length,hea

printf(“begin:%dKtlength:%dKt空闲tt|n”,head->start,head->length);printf(“Area list is null...n”);struct area * current =(struct area *)malloc(LEN);current->start = s;current->length = l;current->job = j;if(p == NULL){//在链表头插入

} else{

} if(p->next == NULL){//在链表尾插入

} else{//在链表中插入

} return current;current->next = p->next;p->next = current;current->next = NULL;p->next = current;current->next = n;return current;

d->job);

信息工程学院计算机科学与技术082班

} void file_print(struct area * head,FILE * file){

if(head == NULL){ } else{

while(head!= NULL){

if(head->job == 0)else

fprintf(file,“begin:%dKtlength:%dKtuse:Job%dt|n”,head->start,head->length,fprintf(file,“begin:%dKtlength:%dKt空闲tt|n”,head->start,head->length);fprintf(file,“Area list is null...n”);

} } head = head->next;

head->job);

} //打印分区链表

} } head = head->next;//释放分区链表空间

void free_AreaList(struct area * head){

} //释放分区链表空间 //在分区链表中搜索插入位置

//flag==0 表明分区链表按起始地址从小到大排列 //flag==1 表明分区链表按分区长度从小到大排列 //输入参数 element 不能为NULL struct area * search_pos(struct area * element,struct area * head,int flag){

struct area * p = NULL;while(head!= NULL){

if(flag == 0){ if(element->start < head->start)struct area * temp;while(head!= NULL){

} temp = head;head = head->next;free(temp);

信息工程学院计算机科学与技术082班

} //返回值p==NULL表明插入位置在链表头 //返回值p!=NULL表明插入位置在p 之后 //进行分区链表的实际插入工作

//flag==0 表明分区链表按起始地址从小到大排列 //flag==1 表明分区链表按分区长度从小到大排列 //输入参数 element->next 要为NULL struct area * insert_list(struct area * element,struct area * list,int flag){

if(list == NULL)else{

} return list;struct area * pos = search_pos(element,list,flag);if(pos == NULL){

} else{

} element->next = pos->next;pos->next = element;element->next = list;list = element;list = element;

} return p;} else {

} p = head;head = head->next;if(element->length < head->length)

break;

break;}//返回插入元素之后新链表的头指针

//进行查询空闲分区链表动态分配分区的实际工作,算法步骤:

//1。查询空闲分区链表中是否有长度大于或等于申请长度的分区,若没有返回FALSE //2。若查找到符合条件的分区,把它从空闲链表中取出

//3。根据请求把取出的空闲分区分块,把新的占用分区和剩余空闲分区分别插入链表

//注意:插入占用分区链表按照固定的地址先后顺序,插入空闲分区链表的方式要根据flag的值 int memory_alloc(int length,int job,int flag){ struct area * used_element;

信息工程学院计算机科学与技术082班

struct area * free_element;struct area * head = idle;struct area * head_temp = used;struct area * p = NULL;//检测输入的作业号是否存在 while(head_temp!= NULL){

} //在空闲分区链表中查找 while(head!= NULL){

} if(head!= NULL){

} else return 0;//生成新的占用区链表元素并插入占用区链表 used_element =(struct area *)malloc(LEN);used_element->start = head->start;used_element->length = length;used_element->job = job;used_element->next = NULL;used = insert_list(used_element,used,0);//若空闲分区分块后有剩余,生成新的空闲区链表元素并插入空闲区链表 if(head->length > length){ free_element =(struct area *)malloc(LEN);//从空闲区链表中取出

if(p == NULL)//链表中的第一个分区符合条件 { } else { } head->next = NULL;p->next = head->next;idle = idle->next;if(head->length >= length)break;p = head;head = head->next;if(head_temp->job == job)return 2;head_temp = head_temp->next;

信息工程学院计算机科学与技术082班

} //进行查询占用分区链表动态释放分区的实际工作,算法步骤:

//1。根据作业号查询到占用分区链表中要释放的分区,若没有返回FALSE //2。若查找到要释放的分区,把它从空闲链表中取出 //3。根据取出的分区的数据建立新的空闲分区

//4。在空闲分区链表中查询是否有和新空闲分区相邻的空闲分区,有则合并 //5。根据flag的取值按照特定方式插入空闲分区链表 int memory_free(int job,int flag){

struct area * used_element;struct area * free_element;struct area * head = used;struct area * p = NULL;struct area * previcious1 = NULL;struct area * current1 = NULL;struct area * previcious2 = NULL;struct area * current2 = NULL;//根据作业号在占用分区链表中查找 while(head!= NULL){

} if(head!= NULL){

//从占用区链表中取出

if(p == NULL)//链表中的第一个分区符合条件 { } else { used = used->next;if(head->job == job)break;p = head;head = head->next;

} //释放空间 free(head);return 1;free_element->start = head->start + length;free_element->length = head->length-length;free_element->job = 0;free_element->next = NULL;idle = insert_list(free_element,idle,flag);

信息工程学院计算机科学与技术082班

} else return 0;//建立新的空闲分区 used_element = head;free_element =(struct area *)malloc(LEN);free_element->start = used_element->start;free_element->length = used_element->length;free_element->job = 0;free_element->next = NULL;//从空闲区链表查找和新的空闲分区相邻分区 head = idle;p = NULL;while(head!= NULL){

} //合并相邻空闲分区 if(current1!= NULL){

} //把和新分区相邻的分区从空闲分区链表中取出 if(previcious1 == NULL)else previcious1->next = current1->next;current1->next = NULL;//修改新空闲分区的相关数据 free_element->start = current1->start;free_element->length = free_element->length + current1->length;idle = idle->next;if(head->start + head->length == used_element->start){

} if(used_element->start + used_element->length == head->start){

} p = head;head = head->next;previcious2 = p;current2 = head;previcious1 = p;current1 = head;} head->next = NULL;p->next = head->next;

信息工程学院计算机科学与技术082班

} //和分区指针链表相关的操作,用来合并空闲分区链表和占用分区链表,保存链表元素的指针 struct AreaPointer_list * search_position(int s,struct AreaPointer_list * head){

} struct AreaPointer_list * emerge(struct area * idle_temp,struct area * used_temp){

struct AreaPointer_list * previcious;struct AreaPointer_list * temp;

if(used_temp!= NULL){

whole =(struct AreaPointer_list *)malloc(LEN_POINTER_LIST);whole->data = used_temp;whole->next = NULL;previcious = whole;used_temp = used_temp->next;while(used_temp!= NULL){ temp =(struct AreaPointer_list *)malloc(LEN_POINTER_LIST);struct AreaPointer_list * p = NULL;while(head!= NULL){

} return p;if(s <(head->data)->start)break;p = head;head = head->next;if(current2!= NULL){

} //根据flag的取值按照特定方式插入空闲分区链表 idle = insert_list(free_element,idle,flag);//释放空间 free(used_element);return 1;//把和新分区相邻的分区从空闲分区链表中取出 if(previcious2 == NULL)else previcious2->next = current2->next;current2->next = NULL;//修改新空闲分区的相关数据

free_element->length = free_element->length + current2->length;idle = idle->next;

信息工程学院计算机科学与技术082班

} void printall(struct AreaPointer_list * head){

struct area * data_temp;if(head == NULL)else{

while(head!= NULL){

data_temp = head->data;if(data_temp->job == 0)else

printf(“begin:%dKtlength:%dKt空闲tt|n”,data_temp->start,data_temp->lenprintf(“Area pointer list is null...n”);

} while(idle_temp!= NULL){

} return whole;struct area * idle_next = idle_temp->next;struct AreaPointer_list * pos = search_position(idle_temp->start,whole);if(pos == NULL){

} else {

} idle_temp = idle_next;temp =(struct AreaPointer_list *)malloc(LEN_POINTER_LIST);temp->data = idle_temp;temp->next = pos->next;pos->next = temp;temp =(struct AreaPointer_list *)malloc(LEN_POINTER_LIST);temp->data = idle_temp;temp->next = whole;whole = temp;

} temp->data = used_temp;temp->next = NULL;previcious->next = temp;previcious = temp;used_temp = used_temp->next;

gth);

printf(“begin:%dKtlength:%dKtuse:Job%dt|n”,data_temp->start,data_temp->length,data_temp->job);head = head->next;

信息工程学院计算机科学与技术082班

} void file_printall(struct AreaPointer_list * head,FILE * file){

struct area * data_temp;if(head == NULL)else{

while(head!= NULL){ data_temp = head->data;if(data_temp->job == 0)else

fprintf(file,“begin:%dKtlength:%dKt空闲tt|n”,data_temp->start,data_tempfprintf(file,“Area pointer list is null...n”);} }

->length);

fprintf(file,“begin:%dKtlength:%dKtuse:Job%dt|n”,data_temp->start,data_temp->length,data_temp->job);

} void free_PointerList(struct AreaPointer_list * head){

} //和分区指针链表相关的操作,用来合并空闲分区链表和占用分区链表,保存链表元素的指针 void input_by_hand(){

int job;int is_alloc;//1 申请分区 0 释放分区 int length;int flag;printf(“请选择分区分配算法:输入0---最先适配 输入1---最优适配n”);scanf(“%d”,&flag);while(flag!= 0 && flag!= 1){ printf(“数据输入错误,请参照提示重新输入n”);scanf(“%d”,&flag);struct AreaPointer_list * temp;while(head!= NULL){

} temp = head;head = head->next;free(temp);

} } head = head->next;

信息工程学院计算机科学与技术082班

} if(flag == 0)printf(“选择最先适配算法--->请输入请求队列数据:(输入 0 0 0 结束)n”);printf(“选择最优适配算法--->请输入请求队列数据:(输入 0 0 0 结束)n”);if(flag == 1)printf(“输入数据格式:作业号(int>0)[输入1--申请|输入0--释放] 分区长度(int>0)n”);printf(“例如输入 5 1 130 表示 作业5申请130Kn”);printf(“例如输入 3 0 200 表示 作业3释放200Kn”);while(1)//输入 0 0 0 结束 {

scanf(“%d%d%d”,&job,&is_alloc,&length);if(job == 0 && is_alloc == 0 && length == 0){

} if(is_alloc == 1){

} if(is_alloc == 0){

int r = memory_free(job,flag);if(!r){ int r = memory_alloc(length,job,flag);if(!r){

} if(r == 2){

}

printf(“n”);

printf(“输入作业号已存在于占用分区链表,请重新输入...n”);printf(“n”);continue;printf(“n”);

printf(“没有符合条件的空闲分区可供分配,请等待释放...n”);printf(“n”);continue;printf(“数据输入错误,请参照提示重新输入n”);scanf(“%d%d%d”,&job,&is_alloc,&length);if(job == 0 && is_alloc == 0 && length == 0)

return;break;while(job<=0 ||(is_alloc!= 0 && is_alloc!= 1)|| length<=0)

信息工程学院计算机科学与技术082班

} /*void input_by_file(int flag){

int job;int is_alloc;//1 申请分区 0 释放分区 int length;char* result;int r;FILE * file1;FILE * file2;if(flag == 0)else result = “result_data_2.txt”;result = “result_data_1.txt”;

} //释放空间 free_AreaList(idle);free_AreaList(used);idle = NULL;used = NULL;

} emerge(idle,used);printf(“n”);printf(“------------------n”);printf(“空闲分区链表:ttttt|n”);print(idle);printf(“tttttt|n”);printf(“占用分区链表:ttttt|n”);print(used);printf(“tttttt|n”);printf(“整个内存情况:ttttt|n”);printf(“低地址tttttt|n”);printall(whole);printf(“高地址tttttt|n”);printf(“------------------n”);printf(“n”);free_PointerList(whole);whole = NULL;

}

printf(“n”);

printf(“没有与指定作业号符合的占用分区,请重新输入...n”);printf(“n”);continue;

信息工程学院计算机科学与技术082班

if((file1 = fopen(“source_data.txt”,“r”))== NULL){

} if((file2 = fopen(result,“w”))== NULL){

} if(flag == 0){

} else {

} while(!feof(file1)){

fscanf(file1,“%d%d%d”,&job,&is_alloc,&length);if(job<=0 ||(is_alloc!= 0 && is_alloc!= 1)|| length<=0){

} if(is_alloc == 1){

printf(“JOB %d申请%dKnn”,job,length);fprintf(file2,“JOB %d申请%dKnn”,job,length);r = memory_alloc(length,job,flag);if(!r){

} if(r == 2){

printf(“输入作业号已存在于占用分区链表,不于处理nn”);

printf(“没有符合条件的空闲分区可供分配,不于处理nn”);fprintf(file2,“没有符合条件的空闲分区可供分配,不于处理nn”);continue;printf(“文件中数据%d %d %d输入的格式错误,不于处理nn”,job,is_alloc,lengtfprintf(file2,“文件中数据%d %d %d输入的格式错误,不于处理nn”,job,is_alloc,continue;printf(“按照最优分配算法得出的结果:nn”);fprintf(file2,“按照最优分配算法得出的结果:nn”);printf(“按照最先分配算法得出的结果:nn”);fprintf(file2,“按照最先分配算法得出的结果:nn”);printf(“不能打开source_data.txt文件...n”);exit(0);printf(“不能打开source_data.txt文件...n”);exit(0);

h);

length);

信息工程学院计算机科学与技术082班

} else {

} emerge(idle,used);printf(“------------------n”);fprintf(file2,“------------------n”);printf(“空闲分区链表:ttttt|n”);fprintf(file2,“空闲分区链表:ttttt|n”);print(idle);file_print(idle,file2);printf(“tttttt|n”);fprintf(file2,“tttttt|n”);printf(“占用分区链表:ttttt|n”);fprintf(file2,“占用分区链表:ttttt|n”);print(used);file_print(used,file2);printf(“tttttt|n”);fprintf(file2,“tttttt|n”);printf(“整个内存情况:ttttt|n”);fprintf(file2,“整个内存情况:ttttt|n”);printf(“低地址tttttt|n”);fprintf(file2,“低地址tttttt|n”);printall(whole);file_printall(whole,file2);printf(“高地址tttttt|n”);fprintf(file2,“高地址tttttt|n”);printf(“------------------n”);fprintf(file2,“------------------n”);printf(“n”);fprintf(file2,“n”);printf(“JOB %d释放%dKnn”,job,length);fprintf(file2,“JOB %d释放%dKnn”,job,length);r = memory_free(job,flag);if(!r){

}

printf(“没有与指定作业号符合的占用分区,不于处理nn”);fprintf(file2,“没有与指定作业号符合的占用分区,不于处理nn”);continue;

}

fprintf(file2,“输入作业号已存在于占用分区链表,不于处理nn”);continue;

信息工程学院计算机科学与技术082班

}*/ int main()

} { idle = insert(0,640,0,NULL,NULL);used = NULL;input_by_hand();

} printf(“========================================nn”);fprintf(file2,“========================================nn”);//释放空间 free_AreaList(idle);free_AreaList(used);idle = NULL;used = NULL;fclose(file1);fclose(file2);free_PointerList(whole);whole = NULL;

信息工程学院计算机科学与技术082班

(3)运行结果

四、模拟DOS文件的建立和使用 设计目的

磁盘文件是磁盘上存储的重要信息,通过本实验模拟DOS文件的建立和使用情况,理解磁盘文件的物理结构。文件管理是操作系统中重要的内容之一,不同的文件系统提供了不同的物理结构,通过实验,深入理解文件的物理结构与存取方法之间的关系,以便更好的掌握文件系统的概念。设计要求

<1> 模拟设计DOS操作系统中磁盘文件的存储结构

DOS操作系统对磁盘文件的管理采用链接结构,将所有的链接指针集中在一起,存放在文件分配表(FAT)中。连接文件的第一个物理块号登记在文件目录中。其设计思想是:假定磁盘上共有N个物理块可供使用,当要存放文件时,从FAT表中寻找其值为0的项,用其对应的物理块存放文件信息,并把文件占有的各物理块用链接指针登记在FAT表中,再把文

信息工程学院计算机科学与技术082班

件的第一个物理块号登记在文件目录中。

文件目录及FAT表如图所示:

在DOS中FAT表的前两项用来记录磁盘的类型。而从第2项开始记录磁盘的分配情况和文件各物理块的链接情况。在FAT表中第三项的值如果为0,表示对应的第三块空闲。由图还知道文件A的各记录依次存放在第2、第4、第15、第16、第50等六个物理块中。第50块中的指针为FFF,表示文件A的结束。文件B的各记录依次存放在第7、第10、第20等三个物理块中。第20块中的指针为FFF。

假定磁盘存储空间共有100个物理块,设计一个文件分配表。为了简单,文件分配表可用一个数组定义,其中每一个元素与一个物理块对应。当第 i 个元素为 0 时,表示第 i 块空闲;当第 i 个元素既不为 0 也不为 FFF 时,其值表示该文件的下一个物理块号。另外,再设一个空闲块总数变量记录系统还有的空闲块数。为了简单,假定一个物理块指存放一个逻辑记录,要求设计一个程序,把文件的逻辑记录结构转换成 DOS 的链接结构。当用户要求将已在主存的文件保存在磁盘上时,给出文件名及文件的记录个数,系统应能在磁盘上正确地保存文件。或当用户要求给指定文件增加记录时,也应正确的实现,并插在指定记录之后。

为了正确地执行模拟程序,可用键盘模拟输入用户的要求。输入格式为:

write(文件名,记录个数)或

insert(文件名,逻辑记录号)<2> 模拟设计便于直接存取的索引文件结构 为了便于用户直接存取文件的各个逻辑记录,在 MS-DOS 中通过文件目录,再沿着链查找FAT表,便可直接找到指定逻辑记录对应的物理块。在小型机或更高级的文件系统中,直接存取文件的方法是为每个文件建立一个索引表,指出各逻辑记录与物理块的对应关系。最简单的形式是一个逻辑记录对应一个物理块。文件目录与索引表的关系如图所示。

信息工程学院计算机科学与技术082班

通常索引表按照逻辑记录顺序建立,这样既有利于顺序存储,又有利于直接存储。为了标识哪些记录已经建立,哪些记录还没建立,故在索引表中增设一个标志位。写文件或插入一个记录的过程是寻找一个空闲物理块,然后将其填入索引表对应项中。其建立过程同第一题,即 write(文件名,记录号)和 insert(文件名,记录号)。

要求用位示图描绘出磁盘的使用情况,并要求模拟程序执行过程的每一步都能显示文件目录、位示图、索引表。

信息工程学院计算机科学与技术082班

3、模拟算法实现

(1)流程图

创建文件流程开始读取文件流程开始查询未打开的文件表查询已打开文件表在未打开表中?N是否在已打开的文件表里?YY是否在已打开表中查询剩余未打开的文件表NYY显示无文件是否在剩余表中?N输出无文件读取文件记录读取文件记录返回Read参数合法?Nwrite参数是否合法?Y返回写入磁盘显示参数非法显示成功Y显示参数非法根据参数读取记录并显示END

(2)程序代码

#include #include #include #include #include //#include using namespace std;const int FDF=-2;const int FFF=-1;const int N=100;//存储空间(FAT表长度)int fnum;//文件数量 struct FILEINFO{

};

char filename[10];int filestart;int filelength;

信息工程学院计算机科学与技术082班

FILEINFO file[10];int FAT[N],blankspace;//FAT表和剩余空间 void printfmenu(){

int i;cout<

文件名

起始块号

文件长度”<

} void write(char *tmpname,int tmplength){

int last,i,j;//复制文件名和文件块个数 strcpy(file[fnum].filename,tmpname);file[fnum].filelength=tmplength;//存文件 for(i=2;i

} for(i=1;i

for(j=2;j

FAT[last]=j;

if(FAT[i]==0){

} file[fnum].filestart=i;//首个空闲块为文件开始块 last=i;FAT[last]=FFF;break;int i;cout<<“空闲块数:”<

} cout<<“ No.”<

信息工程学院计算机科学与技术082班

} void insert(char *tmpname,int insertpoint){

int i;int last,brpoint;//寻找要执行插入操作的文件,将其数组下标存入last for(i=0;i

} //brpoint记录当前文件扫描到的位置 brpoint=file[last].filestart;

for(i=0;i

} //改变空闲块个数与文件长度

if(FAT[i]==0){

} FAT[i]=FAT[brpoint];FAT[brpoint]=i;break;brpoint=FAT[brpoint];//扫描直到找到插入位置 if(strcmp(file[i].filename,tmpname)==0){

} else printf(“没有指定文件!n”);last=i;break;

} FAT[last]=FFF;//文件末存结束标记 blankspace-=tmplength;//改变空闲块个数 fnum++;cout<<“name and size :”<

}

last=j;FAT[last]=FFF;break;

信息工程学院计算机科学与技术082班

} void itol(int i){ //LPCTSTR yy;char zz[10];file[last].filelength++;blankspace--;cout<<“name and size :”<

//sprintf(zz, “%d”, i);

//itoa(i,zz,10);

//yy = LPCTSTR(zz);

} void ctol(char *c){

} void Graph(){

int i,x=200,y=50;//initgraph(640, 480);//setfillstyle(SOLID_FILL,WHITE);//floodfill(5,5,WHITE);//setcolor(BLACK);for(i=0;i

} //getch();//closegraph();

//moveto(x+(i/20)*60-25,y+(i%20)*20);itol(i);//rectangle(x+(i/20)*60,y+(i%20)*20,x+(i/20)*60+30,y+(i%20)*20+20);//moveto(x+(i/20)*60,y+(i%20)*20);if(FAT[i]==FFF)ctol(“FFF”);ctol(“FDF”);else if(FAT[i]==FDF)else itol(FAT[i]);//LPCTSTR yy;//yy = LPCTSTR(c);//moverel(3,2);//outtext(yy);//moveto(x+i*2,y+20);//moverel(5,3);//outtext(yy);//return yy;

信息工程学院计算机科学与技术082班

}

void main(){

} int i;char tmpname[10];int tmplength;//要写入文件长度 int o;//命令 fnum=0;for(i=0;i

} FAT[0]=FDF;FAT[1]=FFF;FAT[3]=999;blankspace=98;while(1){

} printFAT();cin.get();cout<<“请选择: 1.写入 2.插入 3.显示文件目录 4.显示FAT表”<>o;switch(o){

} case 1: cout<<“输入文件名:”;

cin>>tmpname;

cout<<“输入文件长度:”;cin>>tmplength;

write(tmpname,tmplength);break;cin>>tmpname;int insertpoint;

cout<<“输入插入点:”<>insertpoint;

insert(tmpname,insertpoint);break;FAT[i]=0;case 2: cout<<“输入文件名:”<

信息工程学院计算机科学与技术082班

(3)运行结果

五、磁盘调度算法模拟

1.设计目的

(1)要求学生设计一个模拟磁盘调度的程序(2)理解磁盘调度过程中的三个时间段(3)理解磁盘调度的三种算法

信息工程学院计算机科学与技术082班

2.实验原理

共享设备的典型代表为磁盘,磁盘的物理块的地址由柱面号、磁道号、扇区号来指定,完成磁盘某一个物理块的访问要经过三个阶段:寻道时间 Ts、旋转延迟 Tw 和读写时间 Trw。

寻道时间 Ts 是磁头从当前磁道移动到目标磁道所需要的时间;旋转延迟 Tw 是当磁头停留在目标磁道后,目标物理块从当前位置旋转到磁头位置的时间;读写时间 Trw 是目标物理块内容与内存中对应交换的时间。磁盘调度的原则是公平和高吞吐量,衡量指标有访问时间 T 和平均访问时间 Ta:

T=Ts+Tw+Trw Ta=Tsa+Twa+Trwa 寻道时间和旋转延迟成为调度算法的主要考虑因素。减少访问时间就是要减少寻道时间和旋转延迟。

3.设计要求

(1)设计并实现一个函数,完成先来先服务的磁盘调度功能

(2)设计并实现一个函数完成最短寻道时间优先的磁盘调度功能。(3)设计并实现一个函数完成电梯算法的磁盘调度功能。

信息工程学院计算机科学与技术082班

4、模拟算法的实现

(1)各算法流程图

先来先服务算法

Begin输入当前磁道号now磁头移动距离Sum=abs(now-array[0])磁头总移动距离Sum+=abs(array[j]-array[i])输出磁盘调度序列Array[j]N目前的位置变为当前的位置j++J

信息工程学院计算机科学与技术082班

最短寻道时间优先算法流程图

Begin奖磁道从小到大排序输入当前磁道号nowArray[m-1]<=now?输出磁盘调度序列array[j]Array[0]>=now?磁头移动总距离Sum=now-array[i]输出磁盘调度序列array[j]确定当前磁道在已排的序列中的位置目前的位置变为当前的位置now=array[i]磁头移动的总距离Now-array[l]<=array[r]-now?先向磁道号减小方向访问,再向磁道号增加方向访问先向磁道号增加方向访问,再向磁道号减小方向访问目前为止变为当前的位置now=array[i]i>=0i

(2)程序代码

#include #include #include void FCFS(int array[],int m)// 先来先服务算法 {

int j,i,now;float sum = 0,avg;

cout<<“输入当前的磁道号:”;//输入当前磁道号

信息工程学院计算机科学与技术082班

cin>>now;sum=abs(now-array[0]);

cout<<“先来先服务算法调度后的序列为”<

for(i=0,j=1;j

sum=sum+abs(array[j]-array[i]);

cout<

//输出磁盘调度序列

}

avg=sum/(m);

cout<int temp;

int k=1;

int now,l,r;

int i,j;

float sum=0,avg=0;

for(i=0;i

for(j=i+1;j

{

if(array[i]>array[j])//将磁道号从小到大排序 {

temp=array[i];

array[i]=array[j];

array[j]=temp;

}

cout<<“请输入当前的磁道号:”;//输入当前磁道号

cin>>now;

cout<<“最短寻道时间优先算法调度后的序列为”;//输出磁盘调度序列

if(array[m-1]<=now)//若被访问的下一最大的磁道号不大于当前的磁道号

{

for(i=m-1;i>=0;i--)

{ cout<

}

else

{ if(array[0]>=now)//若被访问的下一最小的磁道号不小于当前的磁道号 {

sum=now-array[i];

now=array[i];} }

信息工程学院计算机科学与技术082班

for(i=0;i

{ cout<

sum=array[i]-now;

} } {

{ k++;

} now=array[i];

else //当前的磁道号的值在若所有被访问的下的磁道号之间

while(array[k]

l=k-1;

r=k;

if((now-array[l])<=(array[r]-now))

{

while(l>=0)

//先向磁道号减小方向访问

{ cout<

sum=sum+now-array[l];

now=array[l];

l=l-1;

}

else

//先向磁道号增加方向访问

{

while(r

}

now=array[0];

for(j=r;j

{ cout<

sum+=array[j]-now;

}

now=array[j];

{

cout<

sum+=array[r]-now;

now=array[r];

r=r+1;

}

now=array[m-1];

for(j=l;j>=0;j--)//再向磁道号减小方向访问

{ cout<

sum+=now-array[j];

}

now=array[j];

信息工程学院计算机科学与技术082班

}

avg=sum/(m);

cout<int temp;

int k=1;

int now,d,l,r;

int i,j;

float sum=0,avg=0;

for(i=0;i

for(j=i+1;j

{

if(array[i]>array[j])//将磁道号从小到大排序 {

temp=array[i];

array[i]=array[j];

array[j]=temp;

}

cout<<“请输入当前的磁道号:”;//输入当前磁道号

cin>>now;

cout<<“请输入当前移动臂的移动的方向(1 表示向磁道号增加方向,0 表示向磁道号减小方向): ”;

cin>>d;

//先要给出当前磁道号和移动臂的移动方向

cout<<“电梯算法调度后的序列为”;

if(array[m-1]<=now)

//若被访问的下一最大的磁道号不大于当前的磁道号

{

for(i=m-1;i>=0;i--)

{ cout<

}

else

{ if(array[0]>=now)//若被访问的下一最小的磁道号不小于当前的磁道号 {

sum=now-array[i];

now=array[i];} }

} }

for(i=0;i

{ cout<

sum=array[i]-now;

信息工程学院计算机科学与技术082班

} } {

{ k++;

} now=array[i];

else //当前的磁道号的值在若所有被访问的下的磁道号之间

while(array[k]

l=k-1;

r=k;

switch(d)

{

case 0:

//先向磁道号减小方向访问

{

while(l>=0)

{

cout<

sum=sum+now-array[l];

now=array[l];

l=l-1;

{

while(r

}

now=array[0];

for(j=r;j

{ cout<

sum+=array[j]-now;

} break;}

now=array[j];

case 1:

//先向磁道号增加方向访问

{

cout<

sum+=array[r]-now;

now=array[r];

r=r+1;

}

now=array[m-1];

for(j=l;j>=0;j--)

{ cout<

sum+=now-array[j];

}break;

now=array[j];

}

信息工程学院计算机科学与技术082班

}

avg=sum/(m);

cout<int i,m,n,flag=1,array[100];

cout<<“输入磁盘调度序列的个数:”;

cin>>m;

cout<<“分别输入磁盘调度序列:”;for(i=0;i>array[i];} do {

cout<<“0 终止”<

cout<<“1 先来先服务算法”<

cout<<“2 最短寻道时间优先算法”<

cout<<“3 电梯算法算法”<

cout<<“选择以上的算法:”;

} cin>>n;{

case 0: { flag=0;break;} //终止程序

case 1:

} { FCFS(array,m);break;} //先来先服务算法 { SSTF(array,m);break;}//最短寻道时间优先算法 { SCAN(array,m);break;}//电梯算法

case 2:

switch(n)

default: cout<<“输入有误”<

} }

case 3:

default: cout<<“输入有误,请重新输入:”<

信息工程学院计算机科学与技术082班

(3)运行结果

输入相关调度信息:

先来先服务算法:

最短寻道时间优先算法:

电梯算法:

六、总结

本人在刘发升老师的指导下,顺利完成该课程设计。通过此次课程设计,收获颇多。

一、对实验原理有更深的理解 通过模拟DOS的课程设计,掌握了DOS各项功能实现的根本原理。并通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。

二、对该理论在实践中的应用有深刻的理解 通过把该算法的内容,算法的执行顺序在计算机上实现,知道和理解了该理论在计算机中是怎样执行的,对该理论在实践中的应用有深刻的理解。

三、激发了学习的积极性

信息工程学院计算机科学与技术082班

通过此次课程设计,全面系统的理解了计算机操作系统中各项功能的一般原理和基本实现方法。把死板的课本知识变得生动有趣,激发了学习的积极性。把学过的计算机操作系统的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。以前对与计算机操作系统的认识是模糊的,概念上的,现在通过自己动手做实验,从实践上认识了操作系统是如何处理命令的,如何协调计算机内部各个部件运行。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意指针,将不必要的命令去除。在这次课程设计中,我就是按照实验指导的思想来完成。加深了理解文件系统的内部功能及内部实现,培养实践动手能力和程序开发能力的目的。

四、理解了该知识点以及学科之间的融合渗透

本次课程设计程序部分是用C语言编写的,把《计算机操作系统》和《C语言》两门门学科联系起来,把各个学科之间的知识融合起来,把各门课程的知识联系起来,对计算机整体的认识更加深刻。使我加深了对《计算机操作系统》和《C语言》课程的认识。同时对操作系统中各种功能的本质有了充分地了解。

相关内容

热门阅读

最新更新

随机推荐