Assignment title: Information
COMP 2401 -- Assignment #7 Fall 2016 1/3
COMP 2401 -- Assignment #7
Due: Thursday, November 17, 2016 at 9:00 PM
Goal
Using the VM provided for the course, you will implement a C program to collect cat information from the user and
print this information to the screen. You will practice problem solving and procedural design. You will write code that
uses functions and dynamically allocated memory. You will also continue deepen your knowledge of collection
structures by implementing a linked list. The data structures that you must use are contained in a file posted in
cuLearn.
Instructions
1. Design your program
You will begin with the header file posted in cuLearn, under the link a7Defs.h
Your program must use the provided data structures and function prototypes, without making any changes to the
existing prototypes and data structures in that file. You will, however, create your own source files that use that
header file.
Your program will prompt the user for information to populate a cat collection. This collection structure contains a
dynamically allocated doubly linked list of dynamically allocated cat structures. Once the cat linked list is populated,
your program will then print out the content of the cat linked list, both forward and backward, and it will clean up the
dynamically allocated memory.
The first step of this assignment is to break down your program into modular and reusable functions. You must
examine the data structures provided, and determine which functions you need to implement. You are also required to
divide your code into separate source files. Do not put all the code in the main function, and do not put it all in the
same file!
2. Read data from the user
Your program must:
• declare a CatListType pointer as a local variable in main
• initialize the cat linked list by dynamically allocating the linked list structure and initializing its fields, using the
initAllCats function defined in the given header file
• prompt the user to enter data to populate the cat linked list; there can be any number of cats, with no maximum
• for each cat entered by the user:
o prompt the user to enter the cat data
o dynamically allocate an instance of a cat structure, using the initCat function defined in the given header file
o add the new cat to the cat linked list in alphabetical order by name; do not add to the end and then sort! you
must add each cat in its correct place in the list
Notes:
• the cat linked list pointer must be declared as a local variable in main
• you must implement and call the initAllCats and the initCat functions as defined in the given header file; do
not change the prototypes!
• adding to the linked list must cover all cases, and it must correctly set all list pointers
• your program must perform all basic error checking
• all compound data types, including structures, must be passed by referenceCOMP 2401 -- Assignment #7 Fall 2016 2/3
3. Print data to the screen
Once the cat linked list has been populated with user-entered data, your program must print out the content of the
linked list to the screen, first in the forward direction (first node to last) then in the backward direction (last node to
first). You must use the linked list pointers for this. The information printed out must include all the fields of all
structures.
4. Cleanup
When your program is done with the cat linked list, you must deallocate all the dynamically allocated memory.
Constraints
• you must use the given code, data structures and function prototypes exactly as stated
• do not use any global variables
• your program must be correctly designed and separated into functions
• your program must reuse functions everywhere possible
• your program must be thoroughly commented
• your program must perform all basic error checking
• do not leave any memory leaks!
Submission
You will submit in cuLearn, before the due date and time, one tar file that includes all the following:
• all source code, including the code provided, if applicable
• a Makefile
• a readme file that includes:
o a preamble (program author, purpose, list of source/header/data files)
o the exact compilation command
o launching and operating instructions
Grading [out of 10 marks]
Marking components:
• 2 marks: program design
• 1 mark: correctly initializing the linked list
• 1 mark: correctly prompting the user for cat data
• 1 mark: correctly allocating and initializing each cat structure with user-entered data
• 2 marks: correctly adding each cat structure to the linked list
• 2 marks: correctly printing out the linked list (backward and forward)
• 1 mark: correctly deallocating all dynamically allocated memory
Deductions:
• Packaging errors:
o 10% for missing readme
o 20% for missing Makefile
o 10% for not dividing code into separate filesCOMP 2401 -- Assignment #7 Fall 2016 3/3
• Major programming and design errors:
o 50% of a marking component that uses global variables
o 50% of a marking component that consistently fails to use correct design principles, including separate functions
o 50% of a marking component that consistently fails to pass compound data types by reference
o 50% of a marking component where unauthorized changes have been made to provided code, data structures,
or prototypes
• Minor programming errors:
o 10% for consistently missing comments or other bad style
o 10% for consistently failing to perform basic error checking
o 10% for memory leaks
• Execution errors:
o 100% of a marking component that cannot be tested because the code does not compile or execute in the VM
o 100% of a marking component that cannot be tested because the feature is not used in the code
o 100% of a marking component that cannot be proven to run successfully because data is not printed out