#include <iostream>
#include "address_management.h"
int main()
{
auto number_of_addresses = 0;
while (true) {
std::cout << "Please enter the number of addresses: ";
std::cin >> number_of_addresses;
if (std::cin.fail()) {
std::cout << "Please enter an integer!"
<< "\n";
std::cin.clear();
std::cin.ignore();
}
else {
break;
}
}
AddressManagement address_management(number_of_addresses);
std::cout << "\n";
address_management.ReadAllAddresses();
std::cout << "Unsorted:"
<< "\n";
address_management.WriteAllAddresses();
std::cout << "Sorted (zip code):"
<< "\n";
address_management.SortAddresses();
address_management.WriteAllAddresses();
std::cout << "\n";
std::cout << "Press <Enter> to quit!"
<< "\n";
std::cout << "\n";
std::cin.seekg(0, std::ios::end);
std::cin.clear();
std::cin.get();
return 0;
}
#ifndef ADDRESS_H_
#define ADDRESS_H_
#include <string>
class Address {
public:
std::string name_;
std::string street_;
std::string city_;
int zip_code_ = 0;
bool operator>(Address other) const noexcept;
bool operator<(Address other) const noexcept;
void Write() const;
void Read();
};
#endif // ADDRESS_H_
#include "address.h"
#include <iostream>
bool Address::operator>(Address other) const noexcept
{
return zip_code_ > other.zip_code_;
}
bool Address::operator<(Address other) const noexcept
{
return zip_code_ < other.zip_code_;
}
void Address::Write() const
{
std::cout << "Name: " << name_ << "\n";
std::cout << "Street: " << street_ << "\n";
std::cout << "City: " << zip_code_ << " " << city_ << "\n";
}
void Address::Read()
{
std::cout << "Please enter the name: ";
std::cin >> name_;
std::cout << "Please enter the street: ";
std::cin >> street_;
while (true) {
std::cout << "Please enter the zip code: ";
std::cin >> zip_code_;
if (!std::cin.fail()) {
break;
}
else {
std::cout << "Please enter an integer!"
<< "\n";
std::cin.clear();
std::cin.ignore();
}
}
std::cout << "Please enter the city: ";
std::cin >> city_;
}
#ifndef ADDRESS_MANAGEMENT_H_
#define ADDRESS_MANAGEMENT_H_
#include <string>
#include <vector>
#include "address.h"
class AddressManagement {
public:
std::vector<Address> addresses_;
AddressManagement(int number_of_addresses);
void ReadAllAddresses();
void WriteAllAddresses() const;
void SortAddresses();
private:
static void ShowAddress(const std::string& name, const std::string& street,
const std::string& city, int zip_code);
};
#endif // ADDRESS_MANAGEMENT_H_
#include "address_management.h"
#include <algorithm>
#include <iostream>
#include "address.h"
AddressManagement::AddressManagement(int number_of_addresses)
{
addresses_.reserve(number_of_addresses);
for (auto i = 0; i < number_of_addresses; ++i) {
addresses_.emplace_back();
}
}
void AddressManagement::ReadAllAddresses()
{
for (auto& address : addresses_) {
address.Read();
std::cout << "\n";
}
}
void AddressManagement::WriteAllAddresses() const
{
for (auto address : addresses_) {
ShowAddress(address.name_, address.street_, address.city_,
address.zip_code_);
}
}
void AddressManagement::SortAddresses()
{
std::sort(addresses_.begin(), addresses_.end());
}
void AddressManagement::ShowAddress(const std::string& name,
const std::string& street,
const std::string& city, int zip_code)
{
std::cout << "Name: " << name << "\n";
std::cout << "Strasse: " << street << "\n";
std::cout << "Ort: " << zip_code << " " << city << "\n";
std::cout << "\n";
}