📄 关于消息的传递系统.cpp
字号:
#include<iostream> // 用类模块写的头文件, .h不是用类模块写的
#include<stdio.h>
#include<stdlib.h> //exit()函数的函数库
#include<string> //string 的库函数
using namespace std; //标准名词空间
int empty=10; //邮箱的容量。
int full=0; //已装入邮件的数目
int i=0; //定义一个全局变量
int P(int &m);
int p=1;
void v(int &k);
typedef struct MAINBOX //定义邮箱的结构体
{
string NEMS; //邮箱中的消息,字符串类型
}news, *YouXiang;
int RECEIVER(YouXiang MAINBOX); //接收函数
YouXiang CREATER()
{
YouXiang MAINBOX = new news[10]; //动态内存分配,由用户控制生存期
cout<<endl<<endl; //进入界面
cout<<" __________________________________________________"<<endl;
cout<<" -------------------------------------------- "<<endl;
cout<<" "<<endl;
cout<<" 欢迎进入基于消息的传递系统 "<<endl;
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" 计算机科学与技术学院 "<<endl;
cout<<" "<<endl;
cout<<" 软件工程051班 06号 "<<endl;
cout<<" "<<endl;
cout<<" 余靖工作室 "<<endl;
cout<<" -------------------------------------------- "<<endl;
cout<<" —————————————————————————"<<endl;
cout<<" "<<endl;
cout<<endl<<endl;
for(i=0;i<10;i++) //初始化邮箱,全部置空
MAINBOX[i].NEMS='0';
return(MAINBOX); //返回邮箱首地址
}
void SENDER(YouXiang MAINBOX) //发送消息
{
string n; //字符串类型
int flag,x,k,j;
flag=1; //while循环标志
cout<<"如果你要输入消息请按:1,退出请按:2。"<<endl;
cout<<"请输入:";
cin>>k; //是否要输入消息的变量,"1"进入,"2"退出
while(flag==1)
{
if(k==1)
{
cout<<"请输入你想要传递的消息数目:";
cin>>j; //消息数目
for(i=1;i<=j;i++)
{
cout<<"请输入第"<<i<<"条消息:";
cin>>n; //输入消息
MAINBOX[i-1].NEMS=n; //将消息放入邮箱
full++; //消息数目加一
empty--; //邮箱容量减一
if(empty<=0) //邮箱满
{
cout<<"邮箱已满,请收出去\n";
cout<<"你是否接收消息?请输入:(1)转向接收消息(2)退出"<<endl;
cin>>x;
if(x==1)
RECEIVER(MAINBOX); //接收消息
else if(x==2)
exit(0); //退出系统
}
}
flag=0; //发送完毕,退出while循环。
cout<<"你是否接收消息?请输入:(1)转向接收消息(2)退出"<<endl;
cin>>x;
if(x==1)
RECEIVER(MAINBOX); //接收消息
else if(x==2)
flag=0; //退出消息传送系统
}
else if(k==2) //你已经退出发送消息系统
{
cout<<"你已经退出发送消息系统!"<<endl;
flag=0; //退出while循环
}
else //非法操作
{
cout<<"对不起,操作非法!"<<endl;
cout<<"请再次输入。(1)进入系统(2)退出系统"<<endl;
cin>>k; //是否再次进入发送消息
if(k==1)flag=1; //继续发送消息
else if(k==2)flag=0; //退出发送
}
}
}
int RECEIVER(YouXiang MAINBOX) //接收消息
{
int flag2=1; //控制while循环
int flag3=1; //控制while里的那个while循环
int a=0,b=0;
int c,t,x;
cout<<"是否接收消息:是(1)否(2)"<<endl;
cin>>a;
while(flag2==1)
{
if(a==1) //接收消息
{ while(flag3==1){
cout<<"请输入你要接收消息的数目:"<<endl;
cin>>c;
for(i=0;i<c;i++)
{
cout<<"请输入要接收消息的序号:"<<endl;
cin>>b; //消息在邮箱中位置
full--; //接收到一条消息后,邮箱中的消息数目减一
empty++; //邮箱的容量加一
if(full<0) //判断邮箱是否为空的。
{
cout<<"信箱已空!!!!!!!!";
return(0); //为空则返回0
}
cout<<"收到的第"<<b<<"条消息是:"<<MAINBOX[b-1].NEMS<<endl;//输出收到的消息
MAINBOX[b-1].NEMS='0'; //消息已经被接收,则邮箱的相应位置空!
}
cout<<"是否还继续接收消息?请输入:(1)继续,(2)退出."<<endl;
cin>>t;
if(t==1)flag3=1; //继续接收消息
else if(t==2){ //已经接收了消息,是发送还是退出系统
cout<<"你已经接收了消息!"<<endl;
cout<<"你是否还想回消息?请输入:(1)回消息(2)退出"<<endl;
cin>>x;
if(x==1) //转向发送
SENDER(MAINBOX);
else if(x==2) //退出系统
return(0);
}return(0);
}
}
if(a==2) //退出接收消息
{
cout<<"你已经退出接收消息"<<endl;
return(0);
}
if(a!=1&&a!=2) //非法操作
{
cout<<"非法操作!!"<<endl;
flag2=0;
cout<<"请再次输入一个数;(1)接收,(2)退出"<<endl;
cin>>a;
if(a==1)flag2=1; //再次输入一个数
else if(a==2)flag2=0; //退出
}
return (0); //操作完成
}
return(0);
}
int P(int &m)
{
if(m==1) //p原语
{
m--;
return 1;
}
else
return 0;
}
void v(int &k) //V原语
{
k++;
}
void main()
{
int mutex=1; //信号量机制
YouXiang MAINBOX;
MAINBOX=CREATER(); //创建邮箱
cout<<"初始信箱中的消息状况为:"<<endl;
for ( i =0; i<10; i++)
cout << MAINBOX[i].NEMS <<' ' ;//显示初始化邮箱的值
cout<<endl;
if(p==P(mutex)) //是否有人正在使用
SENDER(MAINBOX); //无人使用则进入发送
else cout<<"有人正在使用,请等待!"<<endl;//有人正在用,则等待
cout<<"此时信箱中消息状况为:"<<endl;//使用后邮箱的状况
for ( i =0; i<10; i++) //输出使用后邮箱的状况
cout << MAINBOX[i].NEMS <<' ' ;
cout<<endl;
RECEIVER(MAINBOX); //接受消息
v(mutex); //用完后释放资源
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -