题目
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