#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("小王", "笑脸"); }