Exercise: Search a User By Lastname

Description

The original C implementation (download userdb.h, download userdb.cpp to search a user is by equality of her lastname:

struct User* userdb_search_by_lastname(struct UserDB*, char lastname[]);

As always, in C this can be done better: in class UserDB, implement a method

class UserDB
{
public:
    ...
    User search_by_lastname(const std::string& lastname) const;
    ...
};

search_by_lastname() returns the first user whose lastname is lastname. If there are multiple users with that name, the rest goes undetected.

Test this using the following program (feel free to use your own version of it):

#include "userdb.h"
#include <iostream>
#include <cassert>

int main()
{
    UserDB db;

    // setup db to have something to search for
    // ----------------------------------------
    db.insert(User("Philipp", "Lichtenberger", 35));
    db.insert(User("Joerg", "Faschingbauer", 55));
    db.insert(User("Caro", "Faschingbauer", 24));

    // test the search
    // ---------------

    // we find the *first* user if it exists
    User found = db.search_by_lastname("Faschingbauer");
    assert(found.firstname() == "Joerg");
    assert(found.lastname() == "Faschingbauer");
    assert(found.age() == 55);

    // lacking knowledge of exception handling, we have to return an
    // invalid user when none exists.
    User notfound = db.search_by_lastname("DoesNotExist");
    assert(!notfound.isvalid());

    return 0;
}