理发师问题《操作系统》课程设计报告 1Word格式.docx

上传人:b****5 文档编号:19255837 上传时间:2023-01-04 格式:DOCX 页数:14 大小:87.28KB
下载 相关 举报
理发师问题《操作系统》课程设计报告 1Word格式.docx_第1页
第1页 / 共14页
理发师问题《操作系统》课程设计报告 1Word格式.docx_第2页
第2页 / 共14页
理发师问题《操作系统》课程设计报告 1Word格式.docx_第3页
第3页 / 共14页
理发师问题《操作系统》课程设计报告 1Word格式.docx_第4页
第4页 / 共14页
理发师问题《操作系统》课程设计报告 1Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

理发师问题《操作系统》课程设计报告 1Word格式.docx

《理发师问题《操作系统》课程设计报告 1Word格式.docx》由会员分享,可在线阅读,更多相关《理发师问题《操作系统》课程设计报告 1Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

理发师问题《操作系统》课程设计报告 1Word格式.docx

一个理发店由一个有N张沙发的等候室和一个放有一张理发椅的理发室组成。

没有顾客要理发时,理发师便去睡觉。

当一个顾客走进理发店时,如果所有的沙发都已被占用,他便离开理发店;

否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;

如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。

在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店。

试用信号量实现这一同步问题。

3.设计要求:

1.根据自己对应的课题完成以下主要工作:

(1).分析设计要求,给出解决方案,建立必要的数据结构,然后设计总体流程(包括界面)、详细设计必要的算法,并最终显示结果。

基于WINDOWS或LINUX操作系统都可以,用何种编程语言都有可以。

(2).提交设计报告,包括设计要求、设计思想流程、设计所涉及的主要数据结构、程序清单、运行结果、设计心得、参考资料等。

(3).严禁抄袭,复制设计内容,查出后相关同学设计成绩以零分处理。

(4).所提交源程序应是能够运行通过的完整程序。

(5).提交不少于5000字的课程设计报告,含系统说明,系统功能图,流程图,程序设计说明,源程序清单

2.设计过程中既要虚心接受老师的指导,又要充分发挥主观能动性、独立思考、努力钻研、勤于实践、勇于创新。

3.在设计过程中,要严格要求自己,树立严密、严谨的科学态度,必须按时、保质、保量完成任务。

要求独立完成规定的设计内容,不得弄虚作假,不准抄袭或拷贝他人的程序或其他内容。

4.不得迟到、早退、旷课。

缺课节数达两次以上者,成绩按不及格处理。

二、进度安排

第15周星期一14:

30—18:

30

星期三14:

星期四14:

第16周星期二14:

1需求分析1

1.1系统设计题目1

1.2问题具体描述1

1.3问题分析1

1.4运行环境分析1

2总体设计1

2.1简要介绍2

2.2概要设计流程图2

2.3数据结构说明2

3详细设计3

3.1详细设计流程图3

3.2C++语言定义相关的数据类型3

3.3各模块功能4

4调试与运行结果4

4.1调试4

4.2运行结果4

5心得体会6

6附录6

6.1源代码7

6.2参考文献11

7评分表12

1需求分析

1.1系统设计题目

理发店有三个理发师,有三张沙发。

顾客来了理发师正忙可以坐在沙发上。

理发师理完发可以从沙发上叫醒顾客理发。

1.2问题具体描述

所以主要由理发师,沙发和顾客组成,当顾客数为零时,理发师休息,当顾客来时,判定理发师是否空闲,如果空闲则理发师理发。

当顾客数超过理发师数时,理发师都忙碌,顾客则坐沙发休息,如果未理发的顾客数超过沙发数则顾客离开。

1.3问题分析

理发师问题是一个利用信号量进行PV操作的经典问题。

设计程序实现此问题,要使得理发师的活动与顾客的活动得到各自真实得模拟。

所执行的程序应体现:

理发师在没有顾客的时候去睡觉,有顾客则工作;

顾客在理发师工作时坐下等待,无座时离开,直至等到理发师自己理理发。

1.4运行环境分析

操作系统:

windows7\8\2000\2003\xp

运行环境:

MicrosoftVisualStudio6.0

内存:

1G

CPU:

2.0GHz

系统硬盘:

30G

2总体设计

2.1简要介绍

此程序主要完成下面各大功能

(1)友好界面

(2)实现本程序是否开始的功能。

(3)实现理发师的理发功能。

(4)设置控制程序结束的语句,可根据用户需要而结束程序

2.2概要设计流程图

图2.1概要设计流程图

2.3数据结构说明

本程序用到了数据结构中的队列,理发的顾客由随机函数产生,顾客遵从先到先理发的原则,但队列的长度限制为输入的理发店中的椅子的个数,当理发店的椅子没有空位的时候,到来的顾客主动退出加入队列。

理发师对队列中的顾客进行先到先服务的原则理发。

3详细设计

3.1详细设计流程图

图3.1详细设计流程图

3.2C++语言定义相关的数据类型

intchairs;

//普通椅子数

intcustomers=0;

//顾客数

intcount=0;

//循环中用来计量的

intwaiting=0;

//等候理发的人数

intfinish=0;

//已经理完发的人数

intwork=0;

//理发师是否在工作

intsleeping=0;

//理发师是否在打瞌睡

charopendoor;

//理发店是否开门接待顾客

charblank;

//获取空白字符

3.3各模块功能

(1)来理发的顾客是随机产生,代码如下:

#definerandom(rand()*10000)/RAND_MAX//用来产生随机数

(2)停顿时间,代码如下:

Sleep(2000);

//为一个顾客理发需要时间

printf("

理发完成。

\n"

);

work=0;

//理发完成,理发师空闲

finish++;

//理发完人数加1

4调试与运行结果

4.1调试

在开始程序是,先由程序员输入椅子数chairs,然后询问程序员是否开门营业:

若程序员输入‘y’,则开门营业;

若输入‘n’,则持续询问程序员是否营业。

在刚开门营业之后,先随机产生顾客:

若没顾客来,则理发师打瞌睡,再次进行产生顾客;

若有顾客来,则直接为顾客理发。

在为顾客理发期间,程序自动产生顾客,最多产生5个顾客。

顾客进来后,先看看理发师是否在理发,是则看看是否有空椅子,若有则坐下,无则离开。

如果理发师正空闲,则直接为顾客理发。

当理发完成之后,先判断已经为多少人理发了,如果未超过4人,则继续营业。

若已超过,则询问程序员是否继续营业。

若继续理发,则先判断是否有人等待,若有则先为等待最久的顾客理发,若没则理发师打瞌睡,程序继续回到随机产生顾客。

4.2运行结果

(1)进入程序运行界面,输入理发店等待的椅子发数目

图4.1

(2)理发师开门营业

图4.2

(3)理发师理发完成

图4.3

(4)退出程序

图4.4

5心得体会

课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。

通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容;

《计算机操作系统》从课程性质上讲是一门专业基础课,它的目的和任务就是训练学生对计算机操作系统的认识,让学生对计算机操作系统有更进一部的认识,进而增加其对学习和应用相关专业课的兴趣。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,将结论用于实践,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中当然遇到了问题,可以说得是困难重重,毕竟这是不可避免的,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

由于能力有限,其中文档的编写是参考书上资料,我想在以后的学习中,要更注重实践这一环节。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到种种问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

从设计过程看,在整整两个星期的日子里,做到精益求精,学到了很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

从设计结果看,设计要求完成任务,达到了预期的目的,设计、演示效果较好。

最主要是从中学到了知识。

通过这次课程设计,我学到了很多,得到了很多,不仅充分的将在书本中学到的知识运用到解决实际问题上,而且加强了自己的动手能力。

我会总结出这次课程设计的所有的成功以及失败的经验和心得,并希望老师能够批评指出存在的错误之处,期待有更多的机会让我实践理论知识。

 总的来说,这次课程设计确实学到很多,不仅锻炼了我遇到问题解决问题的勇气和能力,还练就了遇到挫折不达目的不罢休的韧性,这在以后的工作与学习中将会非常重要。

6附录

6.1源代码

#include<

stdio.h>

#include<

windows.h>

voidmain()

{

请输入理发店内的普通椅子数:

scanf("

%d"

&

chairs);

blank=getchar();

理发店内总共有%d把普通椅子。

chairs);

要开门接待顾客吗?

y/n\n"

opendoor=getchar();

while(opendoor!

='

y'

{

对不起,尚未营业!

}

开门迎接客人!

//开门接待顾客

if(random%2)//刚开门时随机产生顾客,分有顾客和没顾客两种情况,若为真,则有顾客

刚开门就有顾客到来。

customers++;

//顾客数加1

理发师为第%d个顾客理发。

customers);

work=1;

//进入工作状态

Loop:

for(count=0;

random%2&

&

count<

=5;

count++)/*理发师为一个顾客理发的期间随机产生顾客,分有顾客和没顾客两种情况,若为真则有顾客,且最多为来了五个*/

customers++;

第%d个顾客到来了。

sleeping=0;

//设定理发师不在打瞌睡状态

if(work==1)//判断是否正为顾客理发,是则新来顾客等待,否则不用等待

{

if(waiting<

chairs)//判断是否有空椅子

{

printf("

有%d把空椅子,顾客坐下等待。

chairs-waiting);

waiting++;

}

else

printf("

没有空椅子,顾客离开。

}

work=1;

if(work==1)

Sleep(2000);

if(finish>

4)//完成为4个人理发的任务,询问理发师是否继续工作

已经为%d位顾客理发了,还有%d个顾客在等待,是否继续工作?

finish,waiting);

opendoor=getchar();

if(opendoor=='

n'

exit(0);

//继续工作则改为清醒状态

if(waiting>

0)//看看是否有人在等待理发

{

有%d位顾客等待,理发师继续为等待的顾客理发\n"

waiting);

waiting--;

//有则进入工作状态

gotoLoop;

else//无则打瞌睡

if(sleeping==0)

没有顾客来理发,理发师打瞌睡中……\n"

sleeping=1;

gotoLoop;

//继续边打瞌睡边等顾客

else//刚开门时随机产生顾客,若为假,则无顾客,理发师打瞌睡

if(sleeping==0)

sleeping=1;

}

6.2参考文献

[1]郁红英,李春强.计算机操作系统.北京:

清华大学出版社,2008

[2]孟庆昌.操作系统.北京:

电子工业出版社,2009

[3]汤子瀛,哲凤屏.计算机操作系统.北京:

[4]尤晋元,史美林等.windows操作系统原理.北京:

机械工业出版社,2001

[5]孟静.计算机操作系统原理教程.北京:

清华大学出版社,2005

[6]广树建.新编C/C++程序设计教程.广州:

华南理工出版社,2008

7评分表

计算机与通信学院课程设计评分表

课程名称:

操作系统

项目

评价

设计与调试结果

设计说明书的质量

答辩陈述与回答问题情况

课程设计周表现情况

综合成绩

教师签名:

日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1