收银员程序设计_第1页
收银员程序设计_第2页
收银员程序设计_第3页
收银员程序设计_第4页
收银员程序设计_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/目录一、课程设计目的及要求 1二、相关学问 1三、题目分析 2四、概要设计 5五、代码及流程 5六、运行结果 5七、设计心得 9八、参考文献 9一、课程设计目的及要求收银员和顾客(信号量操作)设计目的:加深对操作系统原理的进一步相识,加强实践动手实力和程序开发实力的培育,提高分析问题解决问题的实力,培育合作精神,以巩固和加深磁盘调度的概念。操作系统是一门工程性很强的课程,它不仅要求学生驾驭操作系统的工作原理和理论学问,也要求学生的实际动手实力,以加深对所学习内容的理解,使学生娴熟地驾驭计算机的操作方法,运用各种软件工具,加强对课程内容的理解。要求:在某超市里有一个收银员,且同时最多允许有n个顾客购物,我们可以将顾客和收银员看成是两类不同的进程,且工作流程如下图所示。为了利用PV操作正确地协调这两类进程之间的工作,设置了三个信号量S1、S2和Sn,且初值分别为0、0和n。二、相关学问WindowsAPI:在本试验中涉及的API有:(1)ExitThread用于结束当前线程。VOIDExitThread(DWORDdwExitCode //exitcodeforthisthread);(2)信号量限制:WaitForSingleObject可在指定的时间内等待指定对象为可用状态;DWORDWaitForSingleObject(HANDLEhHandle, //handletoobjectDWORDdwMilliseconds //time-outinterval); hHandle为等待的对象,也就是实现同步或者互斥的对象。该函数一执行,相应的信号量就减去1,假如信号量小于等于0,那么他始终在循环。(3)实现信号量互斥和同步CreateSemaphore用于创建信号量,依据参数的不同可以利用它实现互斥和同步。ReleaseSemaphore用于释放信号量,运用后相应的信号量加1HANDLECreateSemaphore( LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,//SD LONG,lInitialCount, //initialcount LONG,lMaximumCount, //maximumcount LPCTSTRlpName //objectname ); ReleaseSemaphore( HANDLEhSemaphore, //handletosemaphore LONGlRelseaseCount, //contincrementamount LPLONGlpPreviousCount //previouscount );三、题目分析(1)构筑收银员和顾客的队列 构造两个队列用来分别存放收银员和顾客的P,V信息typedefstructLNode,typedefstructa(2)判定顾客处于哪个操作 voidenque(linklist&l,charname)对顾客进行插入操作,从等待状态到付款(付款到付款完毕) chardeque(linklist&l)对顾客进行删除操作,当顾客由等待到付款时,就从等待队列里将顾客删除,当顾客从付款到等待时,就从付款队列里将顾客删除(3)对顾客进行P,V操作 P操作,对顾客进行减1操作,推断结果是否大于等于0,假如大于等于0则进入付款队列,反之接着等待。 V操作,对顾客进行加1操作,推断结果是否大于0,假如大于0则从付款进入等待,反之付款未成功。图3.1P操作流程图图3.2V操作流程图(4)构造收银员操作 当顾客付款后,收银员推断是否收到付款,推断成功后,付款成功,反之付款未成功。图3.3收银员流程图图3.4主函数流程图四、概要设计(1)限制流程用voidenque(linklist&l,charname),chardeque(linklist&l)这两个函数对顾客进行队列的插入和删除(2)创建收银员和顾客 用voidsy()函数创建收银员相应的操作。 用voidgk()函数创建顾客相应的操作。 voidp()用来限制顾客的P操作。 Voidv()用来限制顾客的V操作。(3)收银员和顾客进程 参见图3.4收银员—顾客的完整流程图。五、代码及流程#include<iostream>#include<malloc.h>usingnamespacestd;intxin_guke;intguke,shouyin;typedefstructLNode{ charname; LNode*next;}*Llist;typedefstructa{ LNode*front; Llistlast;}*linklist;linklistdengdai,jiuxu;voidinit(linklist&l){ l=(linklist)malloc(sizeof(a)); l->front=l->last=NULL;}voidenque(linklist&l,charname){ Llistp=(Llist)malloc(sizeof(LNode)); p->name=name; p->next=l->front; l->front=p;// cout<<l->front->name;}chardeque(linklist&l){ charname=NULL; if(l->front!=NULL) { name=l->front->name; l->front=l->front->next; } //cout<<"del"<<name<<endl; returnname;}voidshow(linklist&l){ while(l->front!=NULL) { cout<<l->front->name<<endl; l->front=l->front->next; }}voidp(){ xin_guke--; if(xin_guke>=0) { if(dengdai->front!=NULL) { cout<<"顾客"<<dengdai->front->name<<"到就绪队列"<<endl; enque(jiuxu,deque(dengdai)); } }else{ cout<<"收银员忙,调度顾客到等待队列~~~"<<endl; }}voidv(){ xin_guke++; if(xin_guke>0) { if(jiuxu->front!=NULL) { enque(dengdai,deque(jiuxu)); } }}voidsy(){ for(intj=shouyin;j>0;j--) if(jiuxu->front!=NULL) { cout<<jiuxu->front->name<<"收钱完毕!~~"<<endl; deque(jiuxu); guke--; }}voidgk(){ intj=guke; for(inti=j;i>0;i--)p(); sy(); for(i=j;i>0;i--)v();}intmain(){ cout<<"请输入顾客数:"<<endl; cin>>guke; cout<<"请输入收银员数:"<<endl; cin>>shouyin; xin_guke=shouyin; /* guke=8; shouyin=xin_guke; */ init(dengdai); init(jiuxu); for(inti=guke;i>0;i--) { enque(dengdai,(char)(i+97)); } while(dengdai->front!=NULL||jiuxu->front!=NULL) { gk(); } return0;}六、运行结果 图6.1输入顾客数 图6.2输入收银员数 图6.3运行结果 如图所示,可以输入随意数量的顾客数和收银员数。当顾客数大于收银员数时,后面的顾客将到等待队列中等待前面的顾客付完款。 当前面的顾客将款付完后,后面的顾客进入就绪队列付款,付款后进入等待队列,表示付款完毕。七、设计心得此次操作系统的课程设计,从理论到实践,在两个星期的日子里,可以说是苦多于甜,但是可以学到许多许多的的东西,同时不仅可以巩固了以前所学过的学问,而且学到了许多在书本上所没有学到过的学问。通过这次课程设计使我懂得了理论和实际相结合是很重要的,只有理论学问是远远不够的,只有把所学的理论学问和实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手实力和独立思索的实力。通过这次操作系统的课程设计,我探讨了收银员和顾客的问题,进一步深化了解了同步和互斥机制。比如什么是同步,什么是互斥,什么是信号量等等。课程设计和平常的试验课比较起来有很大的差距,试验课只是将这一章的一部分内容练习操作一遍,而课程设计须要的是他们综合起来的东西,这要更难一些。总体来说我认为操作系统这门学科在计算机科学当是中特殊重要的。他将我们学过的编程语言联系起来,可以说是第一次利用C语言利用windows的API和系统进行“沟通”。同时在设计的过程中发觉了自己的不足之处,对以前所学过的学问理解得不够深刻,驾驭得不够坚实,自身学问的许多漏洞,看到了自己的实践阅历还是比较缺乏,理论联系实际的实力还急需提高。比如说编语言驾驭得不好,应用程序编写不太会……通过这次课程设计之后,确定把以前所学过的学问重新温故。在此,也感谢在课程设计过程中帮我解惑的老师和同学。总而言之,这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论