实验内容及要求:
编程建立循环队列存储结构,对排队买票过程进行模拟。要求程序在控制台屏幕上显示字符菜单:
1. 排队——输入新到达的买票人姓名,加入买票队列中;
2. 售票——排队队列中最前面的人购票成功,显示信息并将其从队列中删除;
3. 查看队列——从队首到队尾依次列出所有正在排队买票人的姓名;
4. 结束——退出系统。
“排队”时,若队满,应提示等待(排队不成功);
“售票”时,若队空,应提示无人排队(售票失败)。
实验目的:掌握循环队列的基本操作。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#define MAX_SIZE 20
using namespace std;
typedef struct Queue {
int MaxSize;
string name[MAX_SIZE];
int front;
int rear;
}SqQueue;
//初始化队列
void Init(SqQueue & q) {
q.front = -1;
q.rear = -1;
q.MaxSize = MAX_SIZE;
}
//判断队列是否为空
bool Empty(SqQueue& q) {
if (q.rear == q.front)return true;
else return false;
}
//判断队列是否已满
bool Full(SqQueue& q) {
if ((q.rear + 1) % MAX_SIZE == (q.front + MAX_SIZE) % MAX_SIZE)
return true;
else return false;
}
//入队
bool EnQueue(SqQueue&q,string e ) {
//判断是否队满
if (Full(q))
return false;
//尾指针移动入队
q.rear = (q.rear + 1) % q.MaxSize;
//赋值
q.name[q.rear] = e;
return true;
}
//出队
bool Pop(SqQueue&q,string & e) {
//判断该队列是否为空
if (Empty(q))
return false;
//头指针移动
q.front = (q.front + 1) % q.MaxSize;
//赋值
e = q.name[q.front];
return true;
}
//排队
void Line(SqQueue&q) {
string name;
cout << "请输入新到达的买票人姓名:" << endl;
cin >> name;
if (EnQueue(q, name))
cout << "排队成功!!!" << endl;
else cout << "排队不成功!!!" << endl;
}
//售票
void Sale(SqQueue&q) {
string name ;
if (Pop(q, name))
cout <<name<< "购票成功!!!" << endl;
else cout << "购票失败!!!" << endl;
}
//查看队列
void LookSq(SqQueue&q) {
//判断队列是否为空
if (Empty(q))
cout << "无人排队!!!" << endl;
else {
cout << "正在排队的人:" << endl;
for (int i = q.front+1 ; i <= q.rear; i++) {
cout << q.name[i]<<endl;
}
}
}
int Menu(SqQueue& q)
{
cout << "***********************" << endl;
cout << "主菜单" << endl;
cout << "1.排队" << endl;
cout << "2.售票" << endl;
cout << "3.查看队列" << endl;
cout << "4.结束" << endl;
cout << "5.清除界面" << endl;
cout << "***********************" << endl;
int choice;
while (cin >> choice)
{
switch (choice)
{
case 1:
Line(q);
break;
case 2:
Sale(q);
break;
case 3:
LookSq(q);
break;
case 4:
return 0;
case 5:
{system("cls");
Menu(q);
break;
}
default:
return -1;
}
}
system("pause");
}
void main() {
SqQueue q;
Init(q);
Menu(q);
}