#include <iostream>
#include <list>
#include<algorithm>
#include<sstream>
#include<stack>
#include <queue>
#include<map>
#define _CRT_SECURE_NO_DEPRECATE;
#define _CRT_SECURE_NO_WARNINGS;
using namespace std;
class Member;
class AbstractChatroom
{
public:
virtual void registers(Member* member) = 0;
virtual void sendText(string from, string to, string message)=0;
virtual void sendImage(string from, string to, string image)=0;
};
class Member
{
protected:
AbstractChatroom* chatroom;
string name;
public:
Member(string name)
{
this->name = name;
}
string getName()
{
return name;
}
void setName(string name)
{
this->name = name;
}
AbstractChatroom* getChatroom()
{
return chatroom;
}
void setChatroom(AbstractChatroom* chatroom) {
this->chatroom = chatroom;
}
virtual void sendText(string to, string message) = 0;
virtual void sendImage(string to, string image) = 0;
void receiveText(string from, string message)
{
cout << from + "发送文本给" + this->name + ",内容为:" + message + "\n";
}
void receiveImage(string from, string image) {
cout << from + "发送图片给" + this->name + ",内容为:" + image + "\n";
}
};
class AddGroup :public AbstractChatroom
{
private:
map<string, Member*> members;
public:
void registers(Member* member)
{
if (members.count((*member).getName()) == 0)
{
members[(*member).getName()] = member;
(*member).setChatroom(this);
}
}
void sendText(string from, string to, string message)
{
Member* member = (Member*)members[to];//得到要接受消息的会员
if (message.length() > 100) {
cout << "文本太长,发送失败\n";
}
else {
string newMessage = message;
int i = message.find("日");
if (i != -1)
{
newMessage = message.replace(i, 1, "*");
}
(*member).receiveText(from, newMessage);
}
}
void sendImage(string from, string to, string image) {
Member* member = (Member*)members[to];
if (image.length() > 20) {
cout << "图片太大,发送失败\n";
}
else {
(*member).receiveImage(from, image);
}
}
};
class AddMember :public Member
{
public:
AddMember(string name) :Member(name) {};
void sendText(string to, string message)
{
time_t tt = time(NULL);
tm* t = localtime(&tt);
printf("(%d-%02d-%02d %02d:%02d:%02d)",
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
t->tm_hour,
t->tm_min,
t->tm_sec);
cout << "新增会员发送消息:\n";
(*chatroom).sendText(name, to, message);
}
void sendImage(string to, string image)
{
time_t tt = time(NULL);
tm* t = localtime(&tt);
printf("(%d-%02d-%02d %02d:%02d:%02d)",
t->tm_year + 1900,
t->tm_mon + 1,
t->tm_mday,
t->tm_hour,
t->tm_min,
t->tm_sec);
cout << "新增会员发送图片:\n";
(*chatroom).sendImage(name, to, image);
}
};
int main()
{
cout<<"现在正在使用新增聊天室\n";
AbstractChatroom* addChat=new AddGroup();
Member* addMember1;
Member* addMember2;
addMember1 = new AddMember("大王");
addMember2 = new AddMember("小王");
(*addChat).registers(addMember1);
(*addChat).registers(addMember2);
(*addMember2).sendText("大王", "大王,有什么吩咐吗");
(*addMember1).sendText("小王", "给我泡杯红茶");
(*addMember2).sendText("大王", "好的,大王");
(*addMember1).sendImage("小王", "笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸笑脸");
(*addMember2).sendText("大王", "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
(*addMember1).sendImage("小王", "笑脸");
}