杨晓志课设报告文档格式.docx
- 文档编号:1462440
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:25
- 大小:130.70KB
杨晓志课设报告文档格式.docx
《杨晓志课设报告文档格式.docx》由会员分享,可在线阅读,更多相关《杨晓志课设报告文档格式.docx(25页珍藏版)》请在冰点文库上搜索。
1、友好提示2、时间片选择3、时间片输入报错4、退出本系统
3、周转时间计算模块
各个模块周转时间的计算
4、完成时间计算模块
各个模块完成时间的计算
5、带权周转时间计算模块
各个模块带权周转时间的计算
6、模块完成顺序输出
模块完成顺序的输出
要求:
1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5)实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6)上机演示。
二、进度安排
第19周星期二晚上18:
00-22:
00
星期四晚上18:
星期五上午8:
00-12:
00下午13:
00-17:
第20周星期一上午8:
00
星期二下午14:
00-18:
目录
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系统需求分析
时间片轮转算法,从键盘输入若干个进程,选择时间片,能算出平均周转时间和带权周转时间。
2总体设计
2.1总体设计图
图2.1总体设计图
2.2各函数之间的调用关系
各函数之间的调用关系如图2.1所示:
图2.2各函数的调用关系
3详细设计
3.1采用C++语言定义的相关数据类型
#include<
iostream>
iomanip>
#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<
<
"
进程号:
name<
到达时间:
daoda<
服务时间:
fuwu<
完成时间:
wan<
endl;
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<
n2;
i++)
{
if(b[i].getxh()==1)
{
if(b[i].getfu()<
q2)
{
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;
if(temp>
=b[i].getdao())
b[w2].setxh(i+1);
d=d+1;
w2=d;
}
}
for(j=0;
j<
d;
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;
cout<
输入进程名"
cin>
c2[0];
a[i].setname(c2);
输入进程的到达时间"
t2;
a[i].setdao(t2);
输入进程的服务时间"
t3;
a[i].setfu(t3);
-------------------------------------------------"
|"
setw(8)<
进程名"
到达时间"
服务时间"
for(inti2=0;
i2<
i2++)
a[i2].getname()<
a[i2].getdao()<
a[i2].getfu()<
a[0].setxh
(1);
//将第一个到达的进程的信号设置为1
for(i2=0;
c[i2]=a[i2].getfu();
//此时初始服务时间由数组c[]来存储
请输入时间片的长度"
q;
compute(a,q,n);
//计算每个进程的完成时间
for(i2=0;
s=s+a[i2].compute2();
//就算每个进程的周转时间
pingz=float(s)/float(n);
dqz[i2]=float(a[i2].compute2())/float(c[i2]);
--------------------------------------------------"
进程号"
完成时间"
带权周转时间"
cout<
c[i2]<
a[i2].getwan()<
dqz[i2]<
setw(5)<
平均周转时间"
pingz;
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源代码
#defineN100
xinhao=10000;
voidsetname(charc[])
voidsetdao(intt1)
voidsetfu(intt2)
voidsetxh(intx)
voidsetwan(intw)
chargetname()
intgetdao()
intgetfu()
intgetxh()
intgetwan()
voidshuchu()
intcompute2()//计算每个进程的周转时间
voidcompute(prob[],intq2,intn2)//计算每个进程的完成时间
//时间片的长度
//存储进程的服务时间
//记录平均周转时间
//记录每个进程的带权周转时间
----------------时间片调度算法---------------"
s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 杨晓志课设 报告