Description
Doctor Celebi is a psychologist who works in his own office. He stores patient appointments in a text file.
He just stores the initial characters of name and surnames of patients. He usually needs to take unscheduled
travels, so he gives a number for appointment day e.g. 5, 23 or 35 instead of a date. When he does not have
a trip, he comes to work at 8:00 o’clock in the morning. And he leaves the office after the last appointment
of the day. Each appointment takes one hour. His assistant arranges the appointments by day and time
manually which is error-prone and time consuming. Therefore, these days, they are looking for a programmer
to write an app that does this arrangement process automatically. Adding task ascending order with respect
to day number and time, removing task, delaying one task to the next time or delaying all tasks of a day
will be performed by this app. Some important instructions about this app as below;
• A part from the text file noted is given below as example(Figure 1).Each row is an appointment
information for a patient.
Figure 1: The text file that contains appointments info
• Each task (Task will be used instead of appointment in this document and vice verse.) has a name
(two capital letters e.g. AN: Ali Nevehirli), a day number (an integer bigger than 0), an hour (an
integer between 0 and 23 , 24 hour style) and priority degree (an integer between 1 and 3) info. 3 is
the top priority and 1 is lowest priority. (Do not care about minute, we are just dealing with hour)
• The appointments will be arranged by day number and time in ascending order. The first task of each
day points out the first tasks of the next and previous days (Figure 2). Also, each task has a pointer
that keeps the next task in the same day. Cycled list allows you to use shortest path to achieve target
place in operations such as adding, removing etc.
• If there are more than one task in the same day and time, take into account the priorities of tasks.
The task which has smaller priority is delayed to first next available time. Available times are
explained in the following paragraph. If available time does not exist, the task is delayed to next free
(not allocated) hour between 8:00 and 16:00(in the current day or following day).
• Available times are the times when Dr Celebi is at office and an appointment does not exist. The
available times are restricted between 8:00 and 16:00. After 16:00 o’clock there is not any available
time even if Dr Celebi is at office.Do not forget that Dr Celebi leaves from office after the last
appointment in a day. The next available times for an appointment are the available times that
comes after the appointment. An example of appointment schedule (Figure 3) and next available times
according to this schedule (Figure 4, Figure 5) are given below;
Page 1 of 6
BLG 233E Data Structures Homework #2
Figure 2: The data structure, circular multi-linked list that is required to use in this implementation
Figure 3: An example schedule of appointments
Implementation Details
1. First of all, you are not allowed to include any Standard Template Library (STL) container.
You will use the below data structure named as Task.
struct Task {
char * name ;
int day ;
int time ;
int priority ;
Task * previous ;
Task * next ;
Task * counterpart ;// to link the other tasks on the same day
};
Page 2 of 6
BLG 233E Data Structures Homework #2
Figure 4: Next available times for the task that is on 1st day at 10:00
Figure 5: Next available times for the task that is on 4th day at 8:00
Page 3 of 6
BLG 233E Data Structures Homework #2
2. The header file of the source code that you will implement is given below. You can add new
functions or variables if you need, but you are not allowed drop any of these functions or variables
that is declared in given header file. You can find the source codes in the folder that is given you
for this implementation.
# ifndef TASK_MANAGEMENT_TOOL
# define TASK_MANAGEMENT_TOOL
# include
# include ” task .h”
struct WorkPlan {
void create ();
void close ();
void add ( Task * task );
void checkAvailableNextTimesFor ( Task * delayed );
int getUsableDay ();
int getUsableTime ();
void remove ( Task * target );
void display ( bool verbose , bool testing );
void delayAllTasksOfDay (int day );
Task * getTask (int day , int time );
Task * head ;
int usable_day ;
int usable_time ;
};
# endif
3. The following functions are already written. You can find them in the file named as ’task management tool.cpp’
Please, do not change these functions. They are explained briefly as below.
void display(bool verbose, bool testing) function takes two boolean arguments that controls what will be the written to command line.
int getUsableDay() function returns the int usable day variable for a task.
int getUsableTime() function returns the int usable time variable for a task. (Please look
’Problem Definition’ section for available day and time.)
4. The variables are explained as below.
Task *head keeps the address of header.
int usable day and int usable time keep the first available day and time respectively for a
task. If the They change for each task. According to task they need to be declared again.
5. The following functions will be implemented by you. Please, do not change function declarations.
void create() function will be used for initialization of the structure.
void close() function will be used for termination of the structure.
Page 4 of 6
BLG 233E Data Structures Homework #2
void add(Task *task) function will add the Task *task to the structure according to the mentioned rules above.
void checkAvailableNextTimesFor(Task *delayed) function will check the available next times
for a task that is given as parameter and assigns the first available day and time to the int
usable day and int usable time variables respectively. If available time does not exist, int
usable day and int usable time variables stores respectively the day number and time of the
next free (not allocated) hour between 8:00 and 16:00 (in the current day or following day).
void delayAllTasksOfDay(int day) function will delay all tasks of the given day to the next
available times respecting their time order. If available time does not exist, the tasks are
delayed to the next free (not allocated) hours between 8:00 and 16:00 in the following day respecting their time order.
void remove(Task *target) function will remove the task that is given as parameter.
Task * getTask(int day, int time) function will return the address of the task that is on
given day and time.
Given Files, Compilation and Screen Output
– Five files are given for you to do this implementation. They are briefly described as below;
You have the app.cpp source file to check and test your implementations.
PLEASE, DO NOT CHANGE app.cpp FILE.
You have a text file named as appointments. This file contains the appointments data that
you will arrange as mentioned above.
You have task.h and task management tool.h header files.
PLEASE, DO NOT CHANGE task.h FILE.
PLEASE, DO NOT REMOVE ANY FUNCTION OR VARIABLE IN task management tool.h
FILE, IF YOU NEED YOU CAN ADD NEW FUNCTIONS.
You have task management tool.cpp source file to implement this application.
PLEASE, DO NOT CHANGE ALREADY WRITTEN FUNCTIONS. YOU HAVE TO WRITE
THE REQUIRED FUNCTIONS THAT IS MENTIONED ABOVE. YOU CAN ADD NEW
FUNCTIONS IF YOU NEED.
– You should compile and run your implementation on Linux environment using g++ (version
4.8.5 or later). For this purpose, you can use ITUs Linux Server using SSH protocol. Compile
and link source files using the following commands. Finally, run executable file as below;
//Compiling-only
g++ -c -Wall -Werror task management tool.cpp -o task management tool.o
g++ -c -Wall -Werror app.cpp -o app.o
//Linking
g++ task management tool.o app.o -o app
//Running
./app
– Only command line outputs of void display(bool verbose, bool testing) function will be
checked in evaluation. So, do not worry about the other functions command line outputs.
Page 5 of 6
BLG 233E Data Structures Homework #2
Your program will be checked using Calico(https://bitbucket.org/uyar/calico) automatic
checker. Therefore, make sure that the application works as desired. You will get zero
marks if the automatic checker fails.
Submission Rules
• You will summit only four files, two source and two header files, that are mentioned above. Please, do
not change file names or extensions.
• Only electronic submissions through Ninova will be accepted no longer than November, 13 at 11:59pm.
• Use comments wherever necessary in your code to explain what you did.
• You may discuss the problems at an abstract level with your classmates, but you should not share
or copy code from your classmates or from the Internet. You should submit your own, individual
homework.
• Academic dishonesty, including cheating, plagiarism, and direct copying, is unacceptable.
• Note that YOUR CODES WILL BE CHECKED WITH THE PLAGIARISM TOOLS!
• Make sure you write your name and number in all of the source files of your project, in the following
format:
/* @Author
Student Name:
Student ID :
Date:
•
If there is unclear statement about this homework, you can ask your questions under the thread
that is specially started for homework 2 (Questions about HW2) on the message board for BLG
233E on NINOVA. Please check before writing your question whether your question is asked by
someone else.
Do not share any code or text that can be submitted as a part of an assignment (discussing ideas
is okay).
.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Page 6 of 6 End of homework.