第一篇:最新计算机课程设计工作总结
课程设计是每一个大学生在大学生涯中都不可或缺的,它使我们在实践中了巩固了所学的知识、在实践中锻炼自己的动手能力;实习又是对每一位大学生所学专业知识的一种拓展手段,它让我们学到了很多在课堂上根本就学不到的知识,不仅开阔了自己的视野,增战了自己的见识,也为我们以后进一步走向社会打下了坚实的基础,是我们走向以后走向工作岗位的奠基石。
一、实习目的 计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。针对于此,在经过相应的课程如《计算机网络》、《计算机基础知识》、《操作系统》等课程的系统学习之后,可以说对计算机网络已经是耳目能熟了,所有的有关计算机网络的基础知识、基本理论、基本方法和结构体系,我都基本掌握了,但这些似乎只是纸上谈兵,倘若将这些理论性极强的东西搬上实际上应用,那我想我肯定会是无从下手,一窍不通。自认为已经掌握了一定的计算机网络理论知识在这里只能成为空谈。于是在坚信实践是检验真理的唯一标准下,认为只有把从书本上学到的理论应用于实际的网络设计操作中去,才能真正掌握这门知识。
二、实习的过程 计算机网络的设计是一个要求动手能力很强的一门实践课程,在课程设计期间我努力将自己以前所学的理论知识向实践方面转化,尽量做到理论与实践相结合,在课程设计期间能够遵守纪律规章,不迟到、早退,认真完成老师布置的任务,同时也发现了自己的许多不足之处。在课程设计过程中,我一共完成了11个实验,分别是1.制作直通电缆和交叉utp、2.交换机console口和telnet配置、3.交换机端口和常规配置、4.虚拟局域网vlan配置、5.路由器console口 telnet配置方法和接口配置、6.路由器静态路由配置、7单臂路由配置、8.动态路由协议配置、9.ppp协议配置、10路由器访问控制表(acl)、11.网络地址转换(nat)。在制作直通电缆和交换utp的实验中,我起初不能完全按照要求来剪切电缆,导致连接不通,后来在同学的帮助下,终于将实验完成。在做到单臂路由配置和动态路由协议配置的实验,由于自身的基础知识掌握不牢,忘掉了一些理论知识,在重新翻阅课本和老师的指导之下,也成功的完成了试验。从抽象的理论回到了丰富的实践创造,细致的了解了计算机网络连接的的全过程,认真学习了各种配置方法,并掌握了利用虚拟环境配置的方法,我利用此次难得的机会,努力完成实验,严格要求自己,认真学习计算机网络的基础理论,学习网络电缆的制作等知识,利用空余时间认真学习一些课本内容以外的相关知识,掌握了一些基本的实践技能。课程设计是培养我们综合运用所学知识,发现、提出、分析、解决问题的一个过程,是对我们所学知识及综合能力的一次考察。随着科学技术日新月异的不断发展,计算机网络也在不断的变化发展当中,这就要求我们用相应的知识来武装自己,夯实基础,为将来走向工作岗位,贡献社会做好充分的准备。
第二篇:计算机组成原理课程设计
《计算机组成原理》课程设计
任务书
中原工学院计算机学院 2007年6月
前言
“计算机组成原理”是大学本科计算机相关专业的一门核心专业基础课程,必修,在先导课和后继课之间起着承上启下的作用。主要讲授单处理机系统的组成和工作原理,包括运算器、存储器、控制器和输入输出系统,其中控制器的设计是课程的重点和难点。为了让学生能融会贯通各知识点,增强对计算机系统各模块协同工作的认识,充分理解数据通路,掌握控制器的设计技术,课程设计一般也侧重于控制器的设计。考虑到学生的基础和现有实验环境,本次课程设计的题目是“微程序控制器的设计与实现”。通过该课程设计,希望学生在理论与实践相结合的基础上,加深对计算机整机概念,进一步理解计算机的内部结构和时空关系,进一步理解和掌握微程序控制器的设计思想和具体方法、步骤,从而提高自行设计、调试和分析问题的能力。课程设计题目
微程序控制器的设计与实现
目的
巩固和深刻理解“计算机组成原理”课程所讲解的原理,加深对计算机各模块协同工作的认识
掌握微程序设计的思想和具体流程、操作方法。 培养学生独立工作和创新思维的能力,取得设计与调试的实践经验。
尝试利用编程实现微程序指令的识别和解释的工作流程
内容
按照要求设计一指令系统,该指令系统能够实现数据传送,进行加、减运算和无条件转移,具有累加器寻址、寄存器寻址、寄存器间接寻址、存储器直接寻址、立即数寻址等五种寻址方式。
具体要求
仔细复习所学过的理论知识,掌握微程序设计的思想,并根据掌握的理论写出要设计的指令系统的微程序流程。指令系统至少要包括六条指令,具有上述功能和寻址方式。 根据微操作流程及给定的微指令格式写出相应的微程序 将所设计的微程序在虚拟环境中运行调试程序,并给出测试思路和具体程序段
尝试用C或者Java语言实现所设计的指令系统的加载、识别和解释功能。 撰写课程设计报告。
设计环境
伟福COP2000型计算机组成原理实验仪,微机,相关虚拟软件。
VC开发环境或者Java开发环境。
课程设计时间
1.5周
课程设计报告要求 完成设计任务后,在课程设计的最后阶段,需要总结全部设计工作,写出完整,规范的设计报告,在指定的时间内提交指导教师.课程设计报告要求有完整的格式,包括封面,目录,正文等,具体如下:
一、封面
包括:课程设计题目,姓名,学号,班级,指导教师,完成日期.二、目录
正文前必须要有目录.三、正文 正文包括的内容有: ⑴ 设计任务与要求;⑵ 设计方案(包括设计思路,采用的微指令格式,每条指令的指令流程及其微程序清单)(3)调试过程(包括实验步骤,出现的问题,解决的方法(4)小结(在整个课程设计过程中的总结和体会)(5)参考资料
成绩评定
课程设计的考核结果按优秀,良好,中等,及格和不及格来评价.对设计任务理解透彻,能够全面,正确,独立地完成设计内容所规定的任务,得出设计结果,并按时提交准确,完整,规范的设计报告,可评为优秀;按照设计任务要求能够顺利地完成任务,得出结果,按时提交较完整的,符合要求的设计报告,可评定为良好;按照设计要求完成了软件的编程与调试,基本完成了任务要求,提交符合要求的设计报告,可评为中等;基本完成设计目标,但不够完善,可能有若干小的缺陷,在帮助下能够完成任务要求,提交设计报告,可评为及格;不能完成指定的要求和任务,未提交设计报告的,评为不及格.参考资料 1.“计算机组成原理课程设计任务书” 2.“计算机组成原理” 课堂教材
第三篇:计算机网络安全课程设计报告
大学
计算机网络安全 课 程 设 计 报 告
学院:信息工程学院 专业:信息安全 班级: 学生: 学号: 指导教师:
目录
第一章 Windows服务器的安装...............................4 1.1需求分析:.............................................4 1.2设计实现:.............................................4 1.3安装检测:.............................................6 第二章IIS的安装与配置....................................7
2.1需求分析:.............................................7 2.1.1 IIS简介............................................7 2.2设计实现:.............................................7 2.2.1 IIS安装............................................7 2.2.2 www.xiexiebang.com
图4.2.3-2 设定新建主机中区域名称yangbo.com
步骤三:点击下一步,设置动态更新为“允许非安全和安全动态更新”,完成新建区域向导,正向查找区域新建并配置完成。
图4.2.3-3 正向查找区域新建并配置完成
步骤四:在新建区域中添加主机,完整名称为www.xiexiebang.com里面的主机名为dns的记录,选择它并确定。
图4.2.4-5新建指针配置
步骤六:完成后 再按 【确定】(这是建立反向解析,172.16.102.221指向域名dns.yangbo.org),并在网络中的其他主机中设置DNS服务器地址为172.16.102.221其他主机能够顺利上网。
第五章DHCP服务器的安装与配置
5.1需求分析:
DHCP 服务器本身必须采用固定的IP地址 为DHCP服务器的规划可用IP地址
5.2设计实现: 5.2.1安装DHCP服务器
步骤一:在windows server 2003 的“开始”>“管理工具”菜单中点击“配置你的服务器向导”命令。如下图
图5.2.1-1 配置服务器向导—新建DHCP服务器
步骤二:在“服务器角色”列表单击“DHCP服务器”选项,再单击“下一步”按钮,打开“新建作用域导向”导向页。
图5.2.1-2 配置服务器向导—新建作用域
步骤三:新建DHCP作用域。填入作用域名。
图5.2.1-3设定作用域名称及描述
步骤四:址·范围”始IP地址、和掩码。
在“IP地中,输入起结束IP地址
图5.2.1-4设定作用域IP地址范围
步骤五:根据实际需要,则在“添加排除”页中,配置起始IP地址和结束IP地址。如果要排除单个IP地址,只需在“起始IP地址”输入地址。
图5.2.1-5添加排除作用域IP地址范围
步骤六:在“租约期限”窗口中,设置租约的期限,默认为8天。
图5.2.1-6设定作用域使用期限
步骤七:激活作用域。
图5.2.1-7激活作用域
步骤八:指定作用域要分配的路由器或默认网关。
图5.2.1-8指定
路由器IP地址
步骤九:安装和新建作
完成DHCP用域。
图5.2.1-9DHCP服务器安装完成及作用域新建完成
步骤十:安装好“active directory”(active directory的安装将在“安装活动目录”实验中进行详细介绍),右键“yb-.......”选择“授权”可对DHCP服务起进行授权,如图。
图5.2.1-10授权
5.2.2验步骤证查看
证检测:
一:完成验DHCP服务器
图5.2.2-1验证查看DHCP 步骤二:release本地IP地址,看重连后是否连接“172.16.102.221”
图5.2.2-2release 步骤三:renew重连后,重新连接的DHCP服务器还是“172.16.102.221”
图5.2.2-2renew
第六章安装活动目录AD 6.1需求分析:
在活动目录中创建域环境,同时将计算机加入域,并能使用域的管理员账户在客户机上登陆。
6.2设计实现:
6.2.1 活动目录AD安装与配置
步骤一:在“开始”>“管理工具”中选择“配置你的服务器向导”。选择“活动目录”,按下一步。
图6.2.1-1安装域控制器
步骤二:选择:新域控制器,然后按“下一步”。
图6.2.1-2设置新域控制器类型
步骤三:选择“在新林中的域”然后“下一步”。
图6.2.1-3创建一个新域
步骤四:在“新的域名”对话框中输入“DNS全名”为yb.local。步骤五:默认的域NETBIOS,下一步。
步骤六:"数据库和日志文件夹"放着默认的指定文件夹下,然后继续“下一步”。
图6.2.1-4设置数据库和日志文件夹
步骤七:默认的配置,按下图:
图6.2.1-5设置共享系统卷
步骤八:选择第二项。
图6.2.1-6设置DNS注册诊断
步骤九:按下图:
图6.2.1-7设置权限
步骤十:输入管理员密码。
图6.2.1-8设置目录服务还原模式的管理员密码
步骤十一:点击下一步,完成安装。
图6.2.1-9设置目录服务还原模式的管理员密码
6.2.2 创建用户
步骤一:“开始”>“管理工具”,点击进入“active directory用户和计算机”。在“yb.local”中的用户,右击“新建”>“组”,设置组名“abc”,下一步。
图6.2.2-1新建组abc
步骤二:在组“abc”中,新建用户test1,并填写“姓”与“登录名”,下一步
图6.2.2-1新建对象—用户
步骤三:填入密码,并设置密码永不过期。
图6.2.2-2设置密码
步骤四:完成创建并查看用户属性:
图6.2.2-3用户属性
步骤五:在一台客户机上右键“我的电脑”>“属性”>“计算机名”>“更改”,并
在里面修改内容为yangbotest,选择新加入域“yb.local”,修改完成后点击“确定”。
图6.2.2-4用户属性
步骤六:重启客户机,用服务器中创建的用户名登录,同时AD目录中Computer中显示用户test1。用户添加成功。
6.2.3 设置共享文件
步骤一:完成上述步骤后,在C盘中创建文件夹share,并设置为文件夹共享,在文件夹中创建文件test1,并设置属性共享,在属性—>安全中设置用户权限。
图6.2.3-1设置共享文件夹并配置属性
步骤二:在AD中用户test1属性中,配置文件路径172.16.102.221test1$
图6.2.3-2配置用户共享文件路径
6.3验证检测:
步骤三:在客户机中点击网上邻居,双击“Microsoft Windows Network”进入,找到服务器主机,进入即可看到所有该服务器主机分享的内容。
第七章E-MAIL服务器的安装与配置
7.1需求分析:
邮件服务器构成了电子邮件系统的核心,没有收信人都有一个位于某个邮件服务器上的邮箱(mailbox)。简单邮件传送协议(SMTP)是因特网邮件系统首要的应用层协议,它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个端:在发信人的邮件服务器上之星的客户端和在收信人的邮件服务器上之星的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器发送邮件消息时,它是作为SMTP客户在运行。当一个邮件服务器从其他邮件服务器接收邮件消息时,它是作为SMTP服务器在运行。
7.2设计实现: 7.2.1安装POP3和smtp 步骤一:在“开始”>“控制面板”菜单中单击“添加或删除程序”命令。步骤二:继续单击“添加/删除windows组件”按钮,在“windows组件向导”对话框单击“电子邮件服务”。单击“详细信息”。可以看到,有:pop3服务和
pop3服务WEB管理,如下图:
图7.2.1-1添加电子邮件服务中POP3服务和POP3服务Web管理
步骤三:选中两项后单击“确定”退出。
步骤四:在“windows组件向导”中选择“应用程序服务器”,单击“详细信息”。步骤五:接着,在“internet组件向导”对话框选择“应用程序服务器”项,单击“详细信息”,选中“smtp service”项。
步骤六:在完成以上设置后,在“windows组件向导”对话框中单击“下一步”。系统完成安装和配置POP3与SMTP服务。
图7.2.1-2添加SMTPservice 7.2.2 创建邮件域
步骤一:在“开始”>“管理工具”菜单中单击“POP3服务”命令,打开“POP3服务”的控制台窗口。
图7.2.2-1POP3服务控制台
步骤二:在控制台树中,右键单击“计算机名”节点,在右键快捷菜单中的单击“域”命令,弹出“添加域”对话框,在域名栏中输入邮件服务器的域名。
图7.2.2-2添加域
7.2.3创建用户邮箱
选中刚刚新建的“yb.local”域,单击“添加邮箱”,弹出添加邮箱对话框,在邮箱名栏中输入邮件用户名,然后设置用户密码,最后单击“确定”按钮,完成邮箱的创建。建议至少创建两个。
图7.2.3-1添加邮箱
7.2.4配置SMTP服务器
完成POP3服务器的配置后,就可以开始配置SMTP了。
步骤一:在“开始”>“管理工具”菜单中单击“internet信息服务(IIS)管理器”命令,在“IIS管理器”窗口中右击“默认SMTP虚拟服务器”选项,在弹出的菜单中选中“属性”,进入“默认SMTP虚拟服务器”窗口。切换到常规标签栏,在“IP地址”下拉列表框中选中邮件服务启动IP地址就可以了。
图7.2.4-1配置SMTP虚拟服务器
步骤二:单击“确定”按钮,这样一个简单的邮件服务器就架设完成了。步骤三:完成以上设置后,用户就可以使用邮件客服端软件连接邮件服务器进行邮件收发共合作了。在设置邮件客户端软件的SMTP和POP3服务器地址时,输入邮件服务器域名“yb.local"即可。
7.3 验证检测
步骤一:打开outlook,“工具”>“账户”>“邮箱”>“添加”
图7.3-1设置Internet电子邮件地址
步骤二:在电子邮件服务器名处填写一下信息
图7.3-2设置电子邮件服务器名
步骤三:邮件登录处键入账号和密码
图7.3-2设置Internet邮件登陆
步骤四:用“abc@yb.local”为发送方地址给收件方“yangbo@yb.local”发送主题为“asdgaga”,内容为“asdfgaserygdfg”的邮件。
图7.3-3发送邮件
步骤五:登录“yangbo@yb.local”账号,查看收到一份邮件,发件人为“abc@yb.local”主题为“asdgaga”,内容为“asdfgaserygdfg”。
图7.3-4收件箱显示
第八章视频服务器的安装与配置
8.1需求分析:
我们大家知道,Windows Media服务采用流媒体的方式来传输数据。WindowsMedia是一整套的流媒体制作、发布和播放工具,其服务器端的Windows Media Sever集成在Windows 2003 Sever中,Windows Media服务支持ASF和WMV格式的视频文件,以及WMA和MP3格式的音频文件。
在实验开始之前,检查Windows Media安装条件,完整无误后安装Media play播放器及其组件;同时安装使用Media编码器,创建视频点播发布点,并在客户机中设置与访问测试。
8.2设计实现:
8.2.1 Windows Media服务的安装
步骤一:打开“配置您的服务器向导”选择“流式媒体服务器”,点击“下一步”。
图8.2.1-1 选择服务器角色
步骤二:安装“流式媒体服务器”。
图8.2.1-2配置组件
步骤三:安装完成。
图8.2.1-3完成安装
步骤四:在Windows组件向导窗口中选择Windows media services点击“下一步”。如下图:
图8.2.1-4添加Windows Media Service 步骤五:选择“开始”>“管理工具”>“Windows media services”进入主窗口,右键“发布点”>“添加发布点(向导)”
图8.2.1-5添加发布点
步骤六:设置发布点名称为“ybkc”,内容类型选择第四个,发布点类型选择点播
图8.2.1-6设置发布点名称及内容类别
图8.2.1-7设置发布点类型为点播
步骤七:选择视频源的路径
图8.2.1-8设置目录位置
步骤八:按照提示即可完成“发布点向导”。
图8.2.1-9完成“添加发布点向导”
8.2.2 单播公告向导配置
步骤一:置后会弹出导”。
在完成上面配“单播公告向
图8.2.2-1单播公告向导
步骤二:“点播目录”选择“目录中的一个文件”,即发布点向导中的目录位置。
图8.2.2-2设置点播目录
步骤三:选择公告文件名和位置,及创建一个带有嵌入的播放机和指向该内容的链接的网页;如图示选择。
图8.2.2-3设置公告选项
步骤四:完成向导。
图8.2.2-4编辑公告源数据
图8.2.2-5完成向导
8.3验证检测
8.3.1 在文件目录中播放
步骤一:在源处选择测试的视频,并按图示点击测试。
图8.3.1-1源测试
步骤二:视频源可以正常播放
图8.3.1-2视频源正常播放
步骤三:在“我的电脑”地址栏输入“mms:/172.16.102.221/ybkc/1.wmv”,视频能够正常打开播放。
图8.3.1-3文件检索视频正常播放
8.3.2 在网页中播放
步骤一:编辑名为“yangbo.html”的目录网页。
图8.3.2-1目录网页yangbo.html
步骤二:编辑名为“video1.html”的子网页。其它3个子网页同理。
图8.3.2-2子网页video1.html
步骤三:将编辑好的“yangbo.html”,和其它4个子网页放在“C:Inetpubwwwroot”
目录下。
图8.3.2-3五个网页放到同一文件夹
步骤四:在IIS管理平台“网站”“yangbo”>>”属性”>“文档”中添加“yangbo.html”,并将其上调到最高位置。
图8.3.2-4添加属性文档
步骤五:在客户机中设置服务器为“172.16.102.221”在IE中键入服务器地址,即可看到视频目录,选择一个视频,可以成功播放。
第四篇:计算机操作系统 课程设计报告(推荐)
操作系统课程设计报告
时间:2010-12-20~2010-12-31 地点:信息技术实验中心
计算机科学与技术专业 2008级2班15号
杨 烨
2010-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
// 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< 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 #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 };//分区指针的链表 //当把空闲分区链表和占用分区链表按照地址先后顺序合并 //以显示整个内存情况的时候使用 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 }; 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表”< } case 1: cout<<“输入文件名:”; cin>>tmpname; cout<<“输入文件长度:”;cin>>tmplength; write(tmpname,tmplength);break;cin>>tmpname;int insertpoint; cout<<“输入插入点:”< 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 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 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语言》课程的认识。同时对操作系统中各种功能的本质有了充分地了解。 设计报告范文 一、任务内容 通过对《大学计算机基础》和《大学计算机基础学习与实验指导》这两本教材的学习后,我们应综合应用计算机进行一系列操作与使用,全面掌握并用所学的知识进行综合实践。本论文的任务主要为学习运用网页制作软件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版.北京:高等教育出版社,2009.[2] 施荣华,王小玲.大学计算机基础学习与实验指导[M].2版.北京:高等教育出版社,2009.[3] 葛敏敏.网页制作[M].上海:上海交通大学出版社,2005.[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第五篇:计算机基础课程设计报告