杨晓志课设报告.docx
- 文档编号:1238754
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:25
- 大小:130.70KB
杨晓志课设报告.docx
《杨晓志课设报告.docx》由会员分享,可在线阅读,更多相关《杨晓志课设报告.docx(25页珍藏版)》请在冰点文库上搜索。
杨晓志课设报告
课程设计报告
课程名称操作系统
课题名称时间片轮转算法
专业信息管理与信息系统
班级信管1001
学号201003110109
姓名杨晓志
指导教师李峰、张益星、吴德建
2012年7月9日
湖南工程学院
课程设计任务书
课程名称操作系统
课题时间片轮转算法
专业班级信管1001
学生姓名杨晓志
学号201003110109
指导老师李峰、张益星、吴德建
审批
任务书下达日期2012年6月21日
任务完成日期2012年7月9日
一、设计内容与设计要求
1.课程设计目的
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
进一步提高上机动手能力,培养使用计算机解决实际问题的能力,为后继课程(数据结构、数据库和JAVA\C#语言编程等课程)的实验以及课程设计,特别是自学、毕业论文的完成打下扎实的基础。
2.课题题目
时间片轮转算法:
从键盘输入若干个进程;选择时间片,能算出平均周转时间和带权周转时间。
3.设计要求:
主要模块:
1、输入进程模块
具有功能:
1、输入进程2、输入进程报错3、友好提示4、输入到达时间5、输入服务时间6、退出本系统
2、时间片选择模块
具有功能:
1、友好提示2、时间片选择3、时间片输入报错4、退出本系统
3、周转时间计算模块
具有功能:
各个模块周转时间的计算
4、完成时间计算模块
具有功能:
各个模块完成时间的计算
5、带权周转时间计算模块
具有功能:
各个模块带权周转时间的计算
6、模块完成顺序输出
具有功能:
模块完成顺序的输出
要求:
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6)上机演示。
二、进度安排
第19周星期二晚上18:
00-22:
00
星期四晚上18:
00-22:
00
星期五上午8:
00-12:
00下午13:
00-17:
00
第20周星期一上午8:
00-12:
00
星期二下午14:
00-18:
00
目录
1系统需求分析1
2总体设计1
2.1总体设计图1
2.2各函数之间的调用关系2
3详细设计2
3.1采用C++语言定义的相关数据类型2
3.2程序的运行结果9
3.3程序调试中的问题10
4使用说明11
5心得体会11
6附录13
6.1源代码13
6.2参考文献20
7评分表21
1系统需求分析
全面熟悉、掌握计算机系统与系统软件基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,增强面向对象程序设计概念,熟悉C++语言编程,养成提供文档资料的习惯和规范编程的思想,为后继课程的实验以及课程设计打下较扎实的基础。
时间片轮转算法,从键盘输入若干个进程,选择时间片,能算出平均周转时间和带权周转时间。
2总体设计
2.1总体设计图
图2.1总体设计图
2.2各函数之间的调用关系
各函数之间的调用关系如图2.1所示:
图2.2各函数的调用关系
3详细设计
3.1采用C++语言定义的相关数据类型
#include
#include
#defineN100//定义存储对象数组的元素的最大数目
usingnamespacestd;
classpro
{
public:
pro()
{
wan=0;
};
voidsetname(charc[])//设置进程的名
{
inti=0;
name=c[0];
}
voidsetdao(intt1)//设置进程的到达函数
{
daoda=t1;
}
voidsetfu(intt2)//设置进程的服务时间
{
fuwu=t2;
}
voidsetxh(intx)//设置进程的信号
{
xinhao=x;
}
voidsetwan(intw)//设置进程的完成时间
{
wan=w;
}
chargetname()//返回进程的名
{
returnname;
}
intgetdao()//返回进程的到达时间
{
returndaoda;
}
intgetfu()//返回进程的服务时间
{
returnfuwu;
}
intgetxh()//返回进程的信号
{
returnxinhao;
}
intgetwan()//返回进程的完成时间
{
returnwan;
}
voidshuchu()//输出进程的各项信息
{
cout<<"进程号:
"< "< "< "< } intcompute2()//计算每个进程的周转时间 { return(wan-daoda); } private: charname;//存储进程的名 intdaoda;//存储进程的到达时间 intfuwu;//存储进程的服务时间 intxinhao;//存储进程的信号 intwan;//存储进程的完成时间 }; oidcompute(prob[],intq2,intn2)//计算每个进程的完成时间 { intf[N],k=0;//记录完成进程调度的数目 inttemp=0;//记录总时间 inti=0,j=0; intd=1;//记录进入队列进程的数目 intw2=1;//记录数据 for(;;) { for(i=0;i { if(b[i].getxh()==1) { if(b[i].getfu() { temp=temp+b[i].getfu(); b[i].setwan(temp); b[i].setxh(-1); k=k+1; } if(b[i].getfu()>=q2) { f[i]=b[i].getfu()-q2; b[i].setfu(f[i]); temp=temp+q2; if(b[i].getfu()==0) { b[i].setwan(temp); b[i].setxh(-1); k=k+1; } } if(w2<=n2&&q2==1) { d=d+1; b[w2].setxh(d); w2=w2+1; } if(q2>1&&w2<=n2) { for(i=w2;i { if(temp>=b[i].getdao()) b[w2].setxh(i+1); d=d+1; } w2=d; } } } for(j=0;j { intj2=b[j].getxh()-1; if(j2==0) b[j].setxh(d); else b[j].setxh(j2); } if(k==n2) break; } } voidmain() { proa[N];//定义了对象数组a[] intn,t2,t3; charc2[1];//存储要输入的进程名 inti=0; intq;//时间片的长度 intc[N];//存储进程的服务时间 floatpingz;//记录平均周转时间 ints=0; floatdqz[N];//记录每个进程的带权周转时间 cout<<"请输入进程的个数"< cin>>n; for(i=0;i { cout<<"输入进程名"< cin>>c2[0]; a[i].setname(c2); cout<<"输入进程的到达时间"< cin>>t2; a[i].setdao(t2); cout<<"输入进程的服务时间"< cin>>t3; a[i].setfu(t3); } cout<<"-------------------------------------------------"< cout<<"|"< for(inti2=0;i2 { cout<<"|"< } cout<<"-------------------------------------------------"< a[0].setxh (1);//将第一个到达的进程的信号设置为1 for(i2=0;i2 c[i2]=a[i2].getfu();//此时初始服务时间由数组c[]来存储 cout<<"请输入时间片的长度"< cin>>q; compute(a,q,n);//计算每个进程的完成时间 for(i2=0;i2 s=s+a[i2].compute2();//就算每个进程的周转时间 pingz=float(s)/float(n); for(i2=0;i2 dqz[i2]=float(a[i2].compute2())/float(c[i2]); cout< cout<<"--------------------------------------------------"< cout<<"|"< for(i2=0;i2 { cout<<"|"< } cout<<"--------------------------------------------------"< cout< cout<<"平均周转时间"< cout< cout< } 3.2程序的运行结果 程序运行的结果如下所示: 图3.1输入界面 图3.2显示所输入的数据 图3.3显示计算的结果 3.3程序调试中的问题 (1)使用操作符,要在源程序的文件开头包含iomainp头文件 (2)在相同的作用域内,不允许在同一个函数的多个声明中队同一个参数的默认值重复定义,即使前后定义的值相同也不行。 (3)“{”和“}”的数目要相同。 (4)写完类的定义后要在“}”加上“;”。 (5)类成员函数的默认值,一定要写在类定义中,而不能写在类定义之外的函数实现中。 4使用说明 (1)进入程序界面,输入你需要的进程的个数 (2)输入每个进程的进程名,到达时间,服务时间 (3)输入你想要的时间片的长度 (4)运行程序,屏幕上显示出程序运行的结果 5心得体会 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的 我们先学习c语言,后来学习数据结构,现在学C++,刚开始接触面向对象的概念时跟你现在的情况一样,不过经过一段时间的实际编程后,现在回头再认真读一下这两个定义,发现自己有了许多深入的理解,感觉自己开始体会到当初那么多c语言的大牛为什么要转到面向对象上来了。 实际编程会对你的理解起到很大帮助作用的。 如果只是做些1000行以下的小程序,C++的优势倒真体现不出来,现在的程序已经到了几万行,十几万行(已经不能称为程序,是一个软件系统),编写的话需要很成熟的软件工程来控制,C++的优势就在于此,你所提到的继承,虚拟,摸版,每一个概念都有软件工程的基础 真正的想理解C++,你应该先学OOA和OOD,因为首先面向对象是一种思想,是一种程序分析和程序设计的思想。 面向对象可以可以很好的体现现实之间事务的关系。 因而它是一种比较好的程序分析和设计方法。 而C++语言不过是可以很好的实现这些方法的成果的一种语言,如果你愿意,你也可以用C来实现实现这些设计,一样可以做到,只是难度更大一点。 国内的程序员大多只注重编程,不注重分析和设计的能力,所以到最后学到了C++的时候就感到很迷茫。 所以我建议你看看北大的翻译过的一本《面向对象分析》和《面向对象设计》。 我原来有,可惜丢了。 VC说穿了就是微软提供给大家的一个C++编译平台而已。 千万不要将C++和VC这两个不同的东西混淆了。 正如楼上的几位高人所说,学习C++是学习OO编程思想的精髓,而学习VC则是如何掌握和运用这个编译平台。 之所以许多初学者被VC搞得头昏脑胀(包括当时的我自己),那是因为VC和MFC里面包含有太多有关WindowsAPI的定义和结构,往往看了半天都不知道是干什么用的,因为每一项引深出去都是一大堆的未知,这样也只能造成更加的迷惑和不解。 其实,我建议初学者大可不必早早的进入Windows编程这个领域,先把C++的基础打牢,尤其是对OO编程要有一个很清晰的概念。 那时你再学习Windows编程,将会容易得多,说穿了用MFC对Windows编程无非也就是按照微软所事先定义好的一些规范和结构,对一些对象的来回调用而已,而这些Windows编程往往在整个软件项目中只是占据了UI这一小部分。 一个程序真正的内涵还是在于程序员对程序内容、框架和结构本身的一种创新。 有志者事竟成! 大家千万不要被困难所吓倒,努力是不会白费的! "有效的程序员不应该浪费很多时间用于程序调试,他们应该一开始就不要把故障引 入。 " "程序测试是表明存在故障的非常有效的方法,但对于证明没有故障,调试是很无能 为力的。 " Dijkstra大力鼓吹程序正确性证明,但这一方法离实用还有相当距离,因为一段源程 序的正确性证明的文字往往比源代码还要长,所以充分的软件测试今天仍不可或缺。 但是 程序员的科学训练是十分重要的,有人曾做过一个试验: 一个题目由一批印度程序员编程 ,其结果惊人地相似;而由一批中国程序员来做,编出的程序五花八门。 中国的软件人员 有时把创造性放在不恰当的地方。 只有规范的科学的编程,一个大项目才能得到有效的管 理,其质量才有保证。 中国软件产业的发展需要有洞察力的帅才,也需要一大批训练有素的程序设计人员和 既懂技术又懂管理的项目领导人。 做程序一定要规范。 反正我做的时候,就想如果别人看,能不能懂。 好的习惯和约定一定要学好的。 6附录 6.1源代码 #include #include #defineN100 usingnamespacestd; classpro { public: pro() { wan=0; xinhao=10000; }; voidsetname(charc[]) { inti=0; name=c[0]; } voidsetdao(intt1) { daoda=t1; } voidsetfu(intt2) { fuwu=t2; } voidsetxh(intx) { xinhao=x; } voidsetwan(intw) { wan=w; } chargetname() { returnname; } intgetdao() { returndaoda; } intgetfu() { returnfuwu; } intgetxh() { returnxinhao; } intgetwan() { returnwan; } voidshuchu() { cout<<"进程号: "< "< "< "< } intcompute2()//计算每个进程的周转时间 { return(wan-daoda); } private: charname; intdaoda; intfuwu; intxinhao; intwan; }; voidcompute(prob[],intq2,intn2)//计算每个进程的完成时间 { intf[N],k=0;//记录完成进程调度的数目 inttemp=0;//记录总时间 inti=0,j=0; intd=1;//记录进入队列进程的数目 intw2=1;//记录数据 for(;;) { for(i=0;i { if(b[i].getxh()==1) { if(b[i].getfu() { temp=temp+b[i].getfu(); b[i].setwan(temp); b[i].setxh(-1); k=k+1; } if(b[i].getfu()>=q2) { f[i]=b[i].getfu()-q2; b[i].setfu(f[i]); temp=temp+q2; if(b[i].getfu()==0) { b[i].setwan(temp); b[i].setxh(-1); k=k+1; } } if(w2<=n2&&q2==1) { d=d+1; b[w2].setxh(d); w2=w2+1; } if(q2>1&&w2<=n2) { for(i=w2;i { if(temp>=b[i].getdao()) b[w2].setxh(i+1); d=d+1; } w2=d; } } } for(j=0;j { intj2=b[j].getxh()-1; if(j2==0) b[j].setxh(d); else b[j].setxh(j2); } if(k==n2) break; } } voidmain() { proa[N]; intn,t2,t3; charc2[1]; inti=0; intq;//时间片的长度 intc[N];//存储进程的服务时间 floatpingz;//记录平均周转时间 ints=0; floatdqz[N];//记录每个进程的带权周转时间 cout<<"----------------时间片调度算法---------------"< cout<<"请输入进程的个数"< cin>>n; for(i=0;i { cout<<"输入进程名"< cin>>c2[0]; a[i].setname(c2); cout<<"输入进程的到达时间"< cin>>t2; a[i].setdao(t2); cout<<"输入进程的服务时间"< cin>>t3; a[i].setfu(t3); } cout<<"-------------------------------------------------"< cout<<"|"< for(inti2=0;i2 { cout<<"|"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 杨晓志课设 报告