首页 > 编程语言 >模拟投递信件的程序

模拟投递信件的程序

时间:2022-08-30 21:58:11浏览次数:57  
标签:Postman 投递 Letter 模拟 letter 信件 string name

题目

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;
}

标签:Postman,投递,Letter,模拟,letter,信件,string,name
From: https://www.cnblogs.com/catting123/p/16640984.html

相关文章