Assignment 1 Veterinarian Clinic System Milestone 2 solution

$30.00

Original Work ?
Category: You will Instantly receive a download link for .ZIP solution file upon Payment

Description

5/5 - (1 vote)

Milestone – 2

Milestone-2 comes with a starting framework for the veterinary clinic system (the menu system and basic
display functions). Although a lot of code is already provided for you, there are still many functions you will
need to define.

Milestone-2 focuses on the management of the clinic’s “patients” which are the records representing the
family pets. You will need to create some data structures along with several functions that will be
responsible for carrying out menu selections which perform specific tasks in the managing of patient data.

A new module “clinic” is now required which will be used to organize all the clinic-centric components and
where you will be placing most of your remaining work.

Specifications

It is important to note that this code will not compile until you copy your work from Milestone-1 into the
files for Milestone-2, create some new data types, and define the remaining uncoded function definitions.

Core Module
The first thing you will need to do is copy and paste the contents of your Milestone-1 core module code
(core.h and core.c files) into the Milestone-2 core.h and core.c files. Carefully review the source code
comments provided in this milestone’s core.h and core.c files and insert your code from Milestone-1 where
directed.

The Core module you developed from Milestone-1 will need to be reviewed and upgraded to include the
application of string library functions wherever it makes sense to apply them. The string library contains
many functions, so to help you narrow your efforts, a list of functions to evaluate and consider have been
provided for you below.

String Library
• Review your code in the core.c file and upgrade where necessary to use functions available from the
string library. Functions you should be considering can be any of the following (but no others):
strlen, strcpy, strcat, strcmp, strncat, strncmp, strncpy, strchr, strrchr
Reminder: You will need to include the string library to implement any of the string functions!

Clinic Module
You will need to create a couple of new data structures to represent the patient information. This includes
a Patient and Phone type. These types need to be defined in the clinic.h file (review the comments in the
clinic.h file for placement).

Data Structure Types
Review the function “displayPatientData” in the clinic.c file and the pets variable initialization in the main
function (a1m2.c file) to determine the member names and order/sequence.
Phone

The Phone type will have two members:
1. A C string member for storing the phone description that can be any one of the following values:
o “CELL”, “HOME”, “WORK”, “TBD”
o Use the appropriate provided macro’s for sizing

2. A C string member for storing the 10-digit phone number (example: “1112224444”)

Patient
The Patient type will have three members:
1. An integer member responsible for storing a unique patient number
2. A C string member for storing the patient’s (pet’s) name
o Use the appropriate provided macro for sizing
3. A Phone type for storing the patient’s contact information

Now that this is done, the only remaining thing to do is to define the functions!
Functions
Familiarize yourself with the functions already coded for you in the clinic.c file that implement the function
prototypes defined in the clinic.h file. These functions implement the main menu system for the
application. Notice how they call other functions to perform specific tasks? Many of these functions need
to be defined.

The functions needing to be defined are identified in the clinic.h file under the commented section “All the
below functions need defining”.

Apply the same development strategy as mentioned in Milestone-1 (Strategy-2) whereby you can create
“empty function shells” to satisfy the existence of the functions but give them no logic until you are ready
to program them. Applying this strategy will allow you to compile the project and begin coding the function
definitions gradually (testing along the way as you complete one by one).
clinic.c

1. Locate the section of code where you need to begin defining the remaining function definitions (“!!! Put
all the remaining function definitions below !!!”
2. Copy the function prototypes in-place of the “ToDo:” comment for each respective function, and
remove the trailing semi-colon ‘;’ and replace with a code block using curly braces { }

3. If the function requires a return value (not a void) then return a hardcoded value as a temporary
measure (obviously you will have change this later).

4. At this point you should be able to compile your project without errors. If you are not able to, review
the preceding steps carefully and don’t proceed until you can compile the code.
The following is a short description of what each function needs to accomplish (these are described in the
order they are listed in the core.h file).

Note: You may code the definitions to these functions in any order you like
Menu & Item Selection Functions
// Display’s all patient data in the FMT_FORM | FMT_TABLE format
void displayAllPatients(const struct Patient patient[], int max, int fmt);
• This function should iterate the patient array for up to the max number of elements and display
each patient record in the desired format as specified by the last argument ‘fmt’.

• Patient records that have a zero value for the patient number should NOT be displayed.
• This function should display: “*** No records found ***” if there were no eligible records to
display.

• Reminder: There are functions already provided to you that will display the table header (if required
based on ‘fmt’) and display a single record!
// Search for a patient record based on patient number or phone number
void searchPatientData(const struct Patient patient[], int max);

• This function should present a menu with two search options:
1. “By patient number”
o When this option is chosen, you should call the function searchPatientByPatientNumber

2. “By phone number”
o When this option is chosen, you should call the function searchPatientByPhoneNumber
• Review the sample output to see how this is used by the user
// Add a new patient record to the patient array
void addPatient(struct Patient patient[], int max);

• This function should test to see if the patient array has a free element for a new record (this is
identified when the patient number value is zero). Be sure to store the array index!
• If the array does not have room for a new record, it should display “ERROR: Patient listing is
FULL!”

• If an index was found where a new record can be stored, you must determine the next unique
patient number (call function: nextPatientNumber) and assign that number to the element at the
index where the new record will be stored
• Finally, get user input for the new record by calling the function: inputPatient
• Display a confirmation message after the data is input: “*** New patient record added ***”

// Edit a patient record from the patient array
void editPatient(struct Patient patient[], int max);
• The user must be prompted to enter the unique patient number for the record to be edited: “Enter
the patient number: ”

• You must then locate that record to see if it exists by calling the function:
findPatientIndexByPatientNum
• If the patient record exists, then call the function: menuPatientEdit for editing options
• If the patient record does not exist, display an error message: “ERROR: Patient record not
found!”
// Remove a patient record from the patient array
void removePatient(struct Patient patient[], int max);

• Like the editPatient function (above), you must prompt the user to enter the unique patient
number for the record to remove
• You must then locate that record to see if it exists by calling the function:
findPatientIndexByPatientNum

• If the patient record exists, then you must display the record to the user in “form” format and
prompt for confirmation to remove the record: “Are you sure you want to remove this
patient record? (y/n): ”

o If the user confirms to remove the record, the patient information should be set to a safe
empty state to make it available again for a new record and display the message: “Patient
record has been removed!”
o If the user does not confirm the removal, display the message: “Operation aborted.”
• If the patient record does not exist, display an error message: “ERROR: Patient record not
found!”

Utility Functions
// Search and display patient record by patient number (form)
void searchPatientByPatientNumber(const struct Patient patient[], int max);
• The user must be prompted for the unique patient number: “Search by patient number: ”
• You must then locate that record to see if it exists by calling the function:
findPatientIndexByPatientNum

• If the patient record exists, then you must display the record to the user in “form” format
• If the patient record can’t be located, display the message: “*** No records found ***”
// Search and display patient records by phone number (tabular)
void searchPatientByPhoneNumber(const struct Patient patient[], int max);
• The user must be prompted for the patient 10-digit phone number: “Search by phone number: ”
• The patient array must be searched for all matchs on the entered phone number
o Note: There can be more than one match since one family can have several pets
• For each patient record found, display the patient record in “tabular” format
• If no record matches could be found, display the message: “*** No records found ***”

// Get the next highest patient number
int nextPatientNumber(const struct Patient patient[], int max);
• The next patient number is determined by adding one to the largest patient number in the patient
array
• The calculated next number should be returned
// Find the patient array index by patient number (returns -1 if not found)
int findPatientIndexByPatientNum(int patientNumber,
const struct Patient patient[], int max);

• This function should search the patient array for the element that matches the “patientNumber”
argument value
• If the record is found, the index position of the matched element should be returned.
• If the record can’t be located (matched) then -1 should be returned.
User Input Functions
// Get user input for a new patient record
void inputPatient(struct Patient* patient);

• This function will receive a pointer to a Patient type that will already have the next patient number
assigned (the user entered data should be stored to the patient argument pointer)
• A title should be displayed: “Patient Data Input” (with dashed characters as an underline, see
sample output)

• The patient number should be displayed to 5 digits with zero’s padding on the left side
• The user should be prompted for the patient (pet) name: “Name :” (Note: there are 2 spaces after
the ‘e’ and before the colon)
• The user should then be prompted to enter the phone information (call function: inputPhoneData)
// Get user input for phone contact information
void inputPhoneData(struct Phone* phone);

• The user should be presented with a menu to choose how the patient would like to be contacted.
There are four options:
1. Cell
2. Home
3. Work
4. TBD Note: “TBD” is short for “To be determined”.

• The phone description should be assigned the UPPERCASE equivalent of the user selection
(example, if the user enters option 3, then “WORK” will be assigned to the phone description.)
• IF option 4 “TBD” is selected, the phone number should be set to a safe empty state
• Options 1 to 3 however, should prompt the user for a 10-digit phone number and assign the
entered value to the phone number member.
A1-MS2: Sample Output
Please review the provided text file for this milestone (on GitHub) “a1ms2_output.txt”

Milestone – 2 Submission

1. Upload (file transfer) your all header and source files including: core.h core.c clinic.h clinic.c a1ms2.c 2. Login to matrix in an SSH terminal and change directory to where you placed your source code. 3. Manually compile and run your program to make sure everything works properly: gcc -Wall a1ms2.c core.c clinic.c -o ms2 If there are no error/warnings are generated, execute it: ms2 4. Run the submission command below (replace profname.proflastname with your professors Seneca userid and replace NAA with your section): ~profName.proflastname/submit 144a1ms2/NAA_ms2 5. Follow the on-screen submission instructions.