实验三 模拟饭堂排队打饭管理软件(顺序队列、多线程)

编程入门 行业动态 更新时间:2024-10-26 06:25:53

实验三 模拟饭堂排队打饭<a href=https://www.elefans.com/category/jswz/34/1763686.html style=管理软件(顺序队列、多线程)"/>

实验三 模拟饭堂排队打饭管理软件(顺序队列、多线程)

实验内容:

     设计一个模拟饭堂排队打饭管理软件,实现“先来先打饭”的排号叫号管理。

实验分析:

     本次实验模拟饭堂排队打饭管理软件,排队的特点是“先来先出”,所以顺理成章地选用顺序队列,作为处理数据的数据结构。

     在实际生活中,出队和入队的行为的发生是互不干扰的,出队的速度取决于饭堂阿姨的手速,入队的速度则取决于学生的人数。既然两种行为是相互独立的,因此单线程难以模拟出现实情况。所以我采用了多线程的方式,开启两个线程,独立处理入队和出队的行为。


实验源代码:

#include<iostream>
#include<string>
#include <windows.h>using namespace std;const int QueueSize = 20;template <class T>
class CirQueue
{
public:CirQueue() { front = rear = QueueSize - 1; }  //初始化空队列~CirQueue() {}void EnQueue(T x);T DeQueue();T GetQueue();boolean isEmpty(){if (front == rear)return true;elsereturn false;}
private:T data[QueueSize];int front, rear;
};template<class T>
void CirQueue<T> ::EnQueue(T x) //入队操作
{if ((rear + 1) % QueueSize == front)throw "上溢";rear = (rear + 1) % QueueSize;data[rear] = x;
}template<class T>
T CirQueue<T>::DeQueue()
{if (rear == front)throw "下溢";front = (front + 1) % QueueSize;return data[front];
}template<class T>
T CirQueue<T>::GetQueue()
{if (rear == front)return NULL;int i = (front + 1) % QueueSize;return data[i];
}
DWORD WINAPI deQueue(LPVOID pParam)
{	string name;CirQueue<string> *pt = (CirQueue<string> *)pParam;while (true)		//一直等待入队{	cout << "入队:"<<endl;cin >> name;pt->EnQueue(name);}return 0L;}
int main()
{	string stu[20];CirQueue<string>demo;cout << "****************广东海洋大学饭堂欢迎你!****************" << endl;cout << "**********************打饭请排队************************" << endl;cout << endl;demo.EnQueue("霜降");		//初始排队人demo.EnQueue("冬至");demo.EnQueue("秋分");HANDLE hThread = CreateThread(NULL, 0, deQueue, (LPVOID)&demo, 0, NULL);//创建线程   传入参数。CloseHandle(hThread); //释放线程句柄Sleep(5000);		//等待人排队while(!demo.isEmpty())		//队列不为空, 一直输出{cout << "出队:";cout << demo.DeQueue() << endl;Sleep(3000);		  //每三秒出队一个人}cout << "队列已空,欢迎下次就餐!" << endl;return 0;
}

实验截图:


实验总结与个人心得:

     在本次的实验中,我使用了多线程的技术,在此之前,我只是学过java中的多线程技术,并未接触过C++的多线程技术。因此需要不断搜索资料,最后实现了目的。其实多线程技术也不过是C++中的一个类,只要我们去了解一下它如何使用、如何传入参数,就能信手拈来地使用,这点和其他类并无太大区别。

     在学习中,我们不能因为对它陌生而畏惧它,相反只要孜孜不倦地求索,就会发现,其实也不过如此。

     在编程中,只有有想法,就会有现实它的算法。前提是需要我们不断地尝试。


存在的问题:

     在本次的实验中,也存在许多不足。由于出队和入队的信息是打印在同一个控制台上的,导致在入队输入的同时,有可能会输出出队信息,二者信息混在一起,影响观看。尝试过通过“加锁”的方式以解决问题,但效果并不理想。

      目前能想到的解决方法是,让程序打开两个窗口,分别是出队窗口和入队窗口,分别打印出队和入队信息,但这涉及到图形化界面的技术。由于本程序已达到“模拟饭堂排队打饭管理”的实验要求,就不再改写了。

     

更多推荐

实验三 模拟饭堂排队打饭管理软件(顺序队列、多线程)

本文发布于:2024-02-12 23:23:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1689806.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:饭堂   管理软件   队列   多线程   顺序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!