模拟投递信件的程序
题目
1. 根据题目要求编写模拟投递信件的程序
( 1) 寄信者(Sender)写了一封信(Letter),并将信件交给邮局(PostOffice)寄送。信的属性包括:收信地址(address)、内容(content)、寄信者信息、收信人姓名(recipientName)等。寄送信件时,要选择是“平邮”( surface mail) 还是“EMS”。
( 2) 邮局收到信件之后,首先根据业务类型向寄信者收费。平邮是 1 元 / 封信, EMS 是 15 元 / 封信。寄信者付费。然后,邮局将信件交给邮递员(Postman)送信。
邮局共有 2 名邮递员。邮递员 Tom 负责投递“平邮”信件;邮递员 Jerry 负责投递“EMS”信件。
( 3) 邮递员要根据收信地址将信件交给收信人( Recipient)。收信人收到信件后,会阅读信件的内容。
2. 题目要求
( 1) 创建新的工程项目 DeliverLetters;
( 2) 主程序对应的源文件名为 main.cpp,里面包含 main()函数。
3.编写程序并测试。 可以自由定义类的成员,可以自由扩展下列程序,只要实现题目要求即可。
4.程序执行完毕后,命令行窗口显示的结果:
我要寄信,收信人是: Wang Huiming,选择投递方式是: surface mail
收到信件,收信人是: Wang Huiming,邮费是: 1 元
支付邮费 1 元
收到邮费 1 元
我是邮递员 Tom,马上投递信件,收信人是: Wang Huiming
收到信件,信件的内容是: Happy birthday, wang
提示 1:采用下面的方法判断一个字符串是否与另一个字符串相同。
if (str1 == str2) {
·····
}
提示 2:先定义全部类,在全部类的后面定义每个类的成员函数。
提示 3: 尽量使用引用类型,可以简化程序。
代码
#include <iostream> #include <string> using namespace std; // 信 class Letter { public: Letter(string address, string content, string senderName, string recipientName) : address(address), content(content), senderName(senderName), recipientName(recipientName) {} string getAddress() { return this->address; } string getContent() { return this->content; } string getSenderName() { return this->senderName; } string getRecipientName() { return this->recipientName; } ~Letter(){}; private: string address; string content; string senderName; string recipientName; }; // 邮递员 class Postman { public: Postman(string name) : name(name) {} void deliverLetter(Letter &letter) { cout << "我是邮递员" << this->name << ",马上投递信件,收信人是:" << letter.getRecipientName() << endl; } ~Postman(){}; private: string name; }; // 邮局 class PostOffice { public: //内嵌引用变量作为成员变量要用初始化列表方式初始化 PostOffice(Postman& postman1, Postman& postman2) : tom(postman1), jerry(postman2) {} double dealService(Letter &letter, string type) { double postage; cout << "收到信件,收信人是:" << letter.getRecipientName(); if (type == "surface mail") { postage = 1; } else { postage = 15; } cout << ",邮费是:" << postage << "元" << endl; return postage; } void charge(double postage) { cout << "收到邮费" << postage << "元" << endl; } Postman &assignPostman(string type) { if (type == "surface mail") { return this->tom; } else { return this->jerry; } } ~PostOffice(){}; private: Postman &tom; Postman &jerry; }; // 寄信者 class Sender { public: Sender(string name) : name(name) {} string sendLetter(Letter &letter, PostOffice postoffice, string type) { cout << "我要寄信,收信人是:" << letter.getRecipientName() << ",选择投递方式是:" << type << endl; return type; } string getName() { return this->name; } void pay(PostOffice postoffice, double postage) { cout << "支付邮费" << postage << "元" << endl; } ~Sender(){}; private: string name; }; // 收信人 class Recipient { public: Recipient(string name) : name(name) {} void receiveLetter(Letter &letter) { cout << "收到信件,信件的内容是:" << letter.getContent() << endl; } string getName() { return this->name; } ~Recipient(){}; private: string name; }; int main() { Sender zhang("Zhang Haifan"); Letter letter("信息学院南楼A310", "Happy Birthday, Huiming", "Zhang Haifan", "Wang Huiming"); Postman tom("Tom"); Postman jerry("Jerry"); PostOffice oucBranch(tom, jerry); Recipient wang("Wang Huiming"); string type = zhang.sendLetter(letter, oucBranch, "surface mail"); // string type = zhang.sendLetter(letter, oucBranch, "EMS"); double postage = oucBranch.dealService(letter, type); zhang.pay(oucBranch, postage); Postman &postman = oucBranch.assignPostman(type); postman.deliverLetter(letter); wang.receiveLetter(letter); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧