[ fromfile: lists.xml id: relationships-exercises ]
In these exercises, you implement some relationships loosely based on Figure 4.2. The diagram is only a starting point. to complete the assignment you need to add some members to the classes.
Implement an Employer::findJobs()
function to return a list of all open Position
s.
Implement a Person::apply(Position*)
function to call Employer::hire()
, and return the same result as hire()
, if successful.
To make things interesting, have the Employer::hire()
function randomly return false
half of the time.
For the Person
methods that return information about employment, be sure to handle the case where the Person is not employed yet, and return something meaningful.
Create some more test Employer
objects (Galactic Empire and Rebel Forces), Person
objects (Darth Vader, C3PO, Data), and Position
objects (Tie Fighter Pilot, Protocol Android, Captain) in your client code.
Define a static QList<Person*> s_unemploymentLine
in class Person
, and ensure that all persons without a job are on it.
Make up some funny job application scenarios, and run your program to determine whether they are successful.
You can find the complete solution in solutions.zip:lists/employer
.
Figure 4.4 describes a model[39] for a Contact
system. ContactList
can derive from or reuse any Qt container that you like, as long as it supports the operations listed.
getPhoneList(int category)
accepts a value to be compared with a Contact
's category member for selection purposes. It returns a QStringList containing, for each selected Contact
, the name and phone number, separated by the tab symbol: "\t"
.
getMailingList()
has a similar selection mechanism and returns a QStringList containing address label data.
Write a ContactFactory
class that generates random Contact
objects. Example 4.4 contains a substantial hint.
There are many ways to generate random names/addresses. One way is to have the ContactFactory
create lists of typical first names, last names, street names, city names, and so forth.[40] When it is time to generate a Contact
, it can pick a random element from each list, add randomly generated address numbers, zip codes, etc. We demonstrate the use of the random()
function in Section 1.13.3
Write client code to test your classes. In particular, the client code should generate some random contacts. After that, it should test the two query methods (getPhoneList()
and getMailingList()
) to ensure that they return the proper sublists. Print the original list and the query results to standard output. Summarize the results by listing the number of elements in the original ContactList
compared to the query results.
[39] We discuss models and views in Chapter 13. For now we refer to a data structure that manages information for an application (but not the acquisition, display, or transmission of that information) as a model.
[40] Spam is a great source of names - just browse through your spam folder and grab names from the mail headers or from the message bodies. We have provided a starter list of spam names in the Dist directory.
Generated: 2012-03-02 | © 2012 Alan Ezust and Paul Ezust. |