收银员程序设计Word文档下载推荐.docx
- 文档编号:18293918
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:11
- 大小:86.22KB
收银员程序设计Word文档下载推荐.docx
《收银员程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《收银员程序设计Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
DWORDdwMilliseconds//time-outinterval
hHandle为等待的对象,也就是实现同步或者互斥的对象。
该函数一执行,相应的信号量就减去1,如果信号量小于等于0,那么他一直在循环。
(3)实现信号量互斥和同步
CreateSemaphore用于创建信号量,根据参数的不同可以利用它实现互斥和同步。
ReleaseSemaphore用于释放信号量,使用后相应的信号量加1
HANDLECreateSemaphore(
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>
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;
next=l->
front;
front=p;
//cout<
<
l->
front->
name;
chardeque(linklist&
charname=NULL;
if(l->
front!
=NULL)
{
name=l->
l->
next;
}
//cout<
"
del"
name<
endl;
returnname;
voidshow(linklist&
while(l->
cout<
voidp()
xin_guke--;
if(xin_guke>
=0)
if(dengdai->
{
cout<
顾客"
dengdai->
到就绪队列"
enque(jiuxu,deque(dengdai));
}
}else{
收银员忙,调度顾客到等待队列~~~"
voidv()
xin_guke++;
if(xin_guke>
0)
if(jiuxu->
enque(dengdai,deque(jiuxu));
voidsy()
for(intj=shouyin;
j>
0;
j--)
jiuxu->
收钱完毕!
~~"
deque(jiuxu);
guke--;
voidgk()
intj=guke;
for(inti=j;
i>
i--)p();
sy();
for(i=j;
i--)v();
intmain()
cout<
请输入顾客数:
cin>
>
guke;
请输入收银员数:
shouyin;
xin_guke=shouyin;
/*
guke=8;
shouyin=xin_guke;
*/
init(dengdai);
init(jiuxu);
for(inti=guke;
i--)
enque(dengdai,(char)(i+97));
while(dengdai->
=NULL||jiuxu->
gk();
return0;
六、运行结果
图6.1输入顾客数
图6.2输入收银员数
图6.3运行结果
如图所示,可以输入任意数量的顾客数和收银员数。
当顾客数大于收银员数时,后面的顾客将到等待队列中等待前面的顾客付完款。
当前面的顾客将款付完后,后面的顾客进入就绪队列付款,付款后进入等待队列,表示付款完毕。
七、设计心得
此次操作系统的课程设计,从理论到实践,在两个星期的日子里,可以说是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
通过这次操作系统的课程设计,我研究了收银员与顾客的问题,进一步深入了解了同步与互斥机制。
比如什么是同步,什么是互斥,什么是信号量等等。
课程设计和平时的实验课比较起来有很大的差距,实验课只是将这一章的一部分内容练习操作一遍,而课程设计需要的是他们综合起来的东西,这要更难一些。
总体来说我认为操作系统这门学科在计算机科学当是中非常重要的。
他将我们学过的编程语言联系起来,可以说是第一次利用C语言利用windows的API与系统进行“沟通”。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,自身知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
比如说编语言掌握得不好,应用程序编写不太会……通过这次课程设计之后,一定把以前所学过的知识重新温故。
在此,也感谢在课程设计过程中帮我解惑的老师和同学。
总而言之,这次操作系统的课程设计收获颇丰,复习了许多东西,也从新学会了许多东西。
我想这也许就是课程设计的最终目的吧。
八、参考文献
[1]刘振安、刘燕君著.《C++程序设计课程设计》.北京:
机械工业出版社,2004
[2][美]AbrahamSilberschatz,PeterBaerGalvin,GregGagne著.郑扣根译.操作系统概念(第六版).北京:
高等教育出版社,2004
[3]陈向群,向勇等.Windows操作系统原理(第二版).北京:
机械工业出版社,2004.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 收银员 程序设计