⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于消息的传递系统.cpp

📁 就是一个基于消息的通讯系统
💻 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 + -