Aim
The objectives of this assignment includes:
- Learning about generic programming templates, operator overloading, ST L (containers & algorithms) and writing io manipulators
- Apply the concepts learnt by developing a data processing program
Backqround
In this assignment, you are required to develop a program that reads in and process some messy records from a file that contains data meant for different kinds of classes. These data are jumbled up and unsorted, and to make it worse, for any particular row of record, there may be multiple duplicates scattered over the entire file!
You program should be called csci251_a3.exe, and should posses the following capabilities:
- read in the records from a user-specified filename
- remove all duplicate rows of data
- filter and display the data according to user-specified sorting criteria
- store the records displayed in c), in a user-specified filename
The next section provides information about the requirements for developing this program.
Task Requirements
- Appendix A provides a sample input data from a file called messy.txt. It contains information meant to be stored in 4 classes: Point2D, Point 3D, Line2D and Line3D. Please refer to the table in Appendix A for a description of the format in which the input data for each of the classes is stored.
- Notel: You are to research and determine which kind of ST L containers (e.g. Map, Vector, Set, Lists etc) you should use, to store all the various objects from the 4 classes. For this assignment you are not allowed to use array [ ] to store any of your data!
- Appendix B provides a description of the 4 classes: Point2D, Point 3D, Line2D and Line3D, and the relationships between them. You are to study the diagrams and implement them accordingly.
I
- Appendix C provides the sample output format and a description of the format requirements, for each of the 4 classes. These format are to be applied whether the data from these classes are output to a file or terminal.
- Note2: To output data, you are required to create vour own output manipulator(s) to display/store data in the format described in Appendix C. You are further required to overload the insertion operator <<, for each of the 4 classes, to support the process of inserting data to the terminal, or the relevant file stream. (Hint : Research on the concept of writing output manipulators. E.g. https://en.cppreference.com/w/cpp/io/manip/left )
- Note3: All output data must not contain any duplicates! There are many approaches to solving this problem. Firstly, you could check for, and remove duplicate records at the point of reading in the input. Alternatively, you could temporarily store the data in a ST L container, research and make use of any ST L alqorithm to search for, and remove the duplicates. Another (inefficient) way is to store everything in ST L container, but your program needs to ensure that when user wishes to see / store the records in a file, no duplicate records are shown.
- Appendix D provides a description of a few generic template functions that you are supposed to develop. These utility functions plays a supporting role, and they should be developed in a separate header file called My Templates.h
- Your program should allow user specify the filtering criteria so that user can specify which set of records he wishes to view / store. Your program should allow the following options:
Point2D records <= default selected option
Point3D records
Line2D records iv) Line3D records
- l) Your program should allow user to specify the sorting criteria so that user can specify which attributes (of a set of records) to order the data by. The sorting criteria is based on the current filtering criteria.
For example, if the current filtering criteria is Only Point2D records, your program should restrict user to the options of sorting the data by x, y & scalar value distFrOrigin only!
Please refer to Appendix E for a detailed description of the combinations of filtering criteria, and the respective (allowable) sorting criteria.
- Hint: It is not necessary to develop your own sorting algorithm, or make use of any of the classical algorithms like Quick-Sod, Bubble-Sod to fulfill the sorting requirements.
There is a function defined in ST L algorithm (i.e. #include <algorithm>) called sort. You should research on its usage, code the necessary comparator functions (for each of the 4 classes + sorting criteria). Once you mastered its usage, you will easily achieve the desired sorting effect using less than 3 lines of code!
- To assist you in visualizing the desired program interactions, please refer to Appendix F which provides a sample menu displaying the output data / messages in response to user input.
- Once the program is completed and tested to be vorking successfully, you are highly encouraged to add on new features to the program that you feel are relevant to the problem. Additional marks may be awarded subject to the relevancy and correctness of the new functionalities.
- You are to use only C++ language to develop your program. There is no restriction on the IDE as long as your source files can be compiled by g++ compiler (that comes packaged in Ubuntu linux) and executed in the Ubuntu terminal shell environment.
Deliverables
The deliverables include the following:
- The actual working C++ program (soft copy), with comments on each file function or block of code to help the tutor understand its purpose.
- A softcopy word document that elaborates on:
- (Interpreted) requirements of the program
- Diagram / Illustrations of program design
- Summary of implementation of each module in your program
- Reflections on program development (e.g. assumptions made, difficulties faced, what could have been done better, possible enhancements in future, what have you learnt, etc)
- A program demo/software testing during lab session. You must be prepared to perform certain tasks / answer any questions posed by the tutor.
- IMPT: Please follow closely, to the submission instructions in Appendix G, which contains details about what to submit, file naming conventions, when to submit, where to submit, etc.
- The software demo / testing will be held during lab session where you are supposed to submit your assignment. Some time will be allocated for you to present / demonstrate your programs capabilities during the session.
Gradinq
Students deliverable will be graded according to the following criteria:
Program fulfills all the basic requirements stipulated by the assignment
Successful demonstration of a working program, clarity of explanation / presentation and satisfactory answers provided during Q & A session.
(iii) Additional effort (e.g. enhancing the program with relevant features over and above task requirements, impressive, killer presentation)
After the submission of deliverables, students will be required undergo a software testing process (to determine the correctness and fulfillment of software requirements.) Further instructions will be given by the Tutor during the subsequent respective labs. Please pay attention as failure to adhere to instructions Will result in deduction of marks.
Tutors note:
In the real working world, satisfactory completion of your tasks is no longer enough. The capability, efficiency and robustness of your system to operate under different testing conditions, and the ability to add value communicate and/or demonstrate your ideas with clarity is just as important as correct functioning of your program. The grading criteria is set to imitate such requirements on a smaller scale.
APPENDIX A
(Sample messy data from an input file)
Point2D, [3, 21Line3D, [7, 12, 31, [-9, 13, 681 Point3D, [1, 3, 81Line2D, [5, 71, [3, 81 Point2D, [3, 21Line3D, [7, -12, 31, [9, 13, 681Point3D, [6, 9 51Point2D, [3, 21Line3D, [70, -120, -31, [-29, 1, 2681Line3D, [25, -69, -331, [-2, -41, 581Point3D, [6, 9, -501 |
Note:
- Some data, (e.g. Point2D, [3, 2] can be repeated multiple times (i.e. they are duplicated data), this applies to all other kinds of data as well.
- In each line, the 1 st field WII contain the classs name (e.g. point2D, Point3D,
Line2D and Line3D)
- The delimiter separating the 1 st field from the rest of the data, is a comma, followed by a space char (i.e.
- The delimiter separating each number in the 2D/3D coordinate, is also a comma, followed by a space char (i.e. )
- Each 2D/3D points data, is enclosed by the square brackets [ and ]
- Each Line2D / Line3Ds data consists of buo points, each enclosed by square brackets, and the delimiter separating each point is also a comma, followed by a space char (i.e.
- You may assume that the ranqe of each number in the x, y or z coordinate can be anything from -999 to 999
B
(The 4 classes, and their relationships)
Point2D | Line2D | ||||||||||||||||
# x: int# y: int# distFrOrigin: double | ptl: Point2D pt2: Point2D # length: double | ||||||||||||||||
# setDistFrOrigin ()+ Point2D (x: int, y: int)+ getX () : int+ getY () : int+ getScaIarVaIue () : double+ setX (x: int)+ setY (y: int) | # setLength ()+ Line2D (ptl : Point2D, pt2: Point2D)+ getPt1 : Point2D+ getPt2 : Point2D+ getScaIarVaIue () : double+ setPt1 (ptl: Point2D)+ setPt2 (pt2: Point2D) | ||||||||||||||||
|
|||||||||||||||||
|
|||||||||||||||||
APPENDIX B (cont)
Note:
- I) The above diagrams depict the bare minimum requirements for the 4 classes whose attributes and methods you MUST implement
- In Point2D class, setDistFrOrigin ( ) method computes the distance of the point to the origin (O, O), and initializes the attribute distFrOrigin with this distance value. The formula to compute is as follows:
distFrOrigin = (x O) 2 + (y O) 2 OR distFrOrigin = Al x2 + Y2
Note : means square root
- In Point2D class, getScaIarVaIue ( ) method is merely an accessor method that returns the value of attribute distFrOrigin.
- In Line2D class, setLength ( ) method computes the distance between its own Point2D attributes ptl and pt2, and initializes the attribute Length with this distance value. The formula to compute is as follows:
length = Al (ptl,x pt2.x) 2 + (ptl,y
- In Line2D class, getScaIarVaIue ( ) method is merely an accessor method that returns the value of attribute length.
- In Line3D class, set Length ( ) method computes the distance betoeen its own Point 3D attributes ptl and pt2, and initializes the attribute Length with this distance value. The formula to compute is as follows:
length (ptl . x pt2.x) 2 + (ptl . y pt2.y) 2 + (ptl.z pt2.z) 2
- For all the 4 classes, you are free to declare and implement any additional attributes and methods like:
- Overloading io-stream, arithmetic, comparison or any other operators <<,
- Writing static comparator functions to use in STL algorithms and containers,
- Writing io manipulators specific to a particular class
- Writing any other supporting helper functions necessary to fulfill the requirements of this assignment.
C
(General Output Format for Point2D & Point 3D data)
Point2D | ||
x[999,3,23,123, | Y-9]-99]-999]3]23]123] | Dist. Fr Origin12 . 728140 . 0071412 . 79932 . 527173 . 948 |
Point3D | ||
x[-999,3,23,123, | Y-9,-99,-999,3,23,123, | z Dist. Fr Origin-9] 15 . 589-99] 171 .473-999] 1730 .3203] 5 . 19623] 39 . 837123] 213 . 042 |
Note:
The allocated width to store each x, y and/or z ordinate value is 4 spaces, inclusive of mnus Sign
- All x, y, z values are strictly whole numbers (i.e. integers) and all Dist. Fr Origin values are strictly decimal (i.e. double), with precision set at up to 3 decimal places
- The 1 < 2 lines (representing the header) is compulsory. The alignment of the X, Y or Z column names in the header is vertically aligned to its respective last digits position!
- The should be 3 spaces between the end of each points data values, and its corresponding Dist. Fr Origin values
APPENDIX C (cont)
(General Output Format for Line2D & Line3D data)
Line2D | |||||||
PI-X[999,3,999,[-999, | PI-Y-9]-99]-999]3]999]-999] | P2-X[-999,999 ,[-999,3, | P2-Y-99]-999]-9]999]-999]3] | Length127 . 2791272 . 79214 00 . 07114 08 . 5572825 . 5991417 . 042 | |||
Line3D | |||||||
Pl-x[-999,3,999,-999, | PI-Y Pl-z-9, -9]-99, -99]-999, -999]3, 3]999, 999]-999, -999] | P2-x P2-Y-99, -99,[-999, -999,9, 9,999, 999,[-999, -999,3, 3, | P2-z-99]-999]_9]999]-999]3] | Length155 . 8851558 . 8461714 . 7301275 . 1233460 . 6381735 .515 | |||
Note:
- In Line2D, the formatting for data under PI-X, PIY, p 2-X and P2Y headings is similar to that for Point2D. The corresponding formatting applies for the case of Line3D which is similar to that specified for Point3D.
- The 1 st 2 lines (representing the header) is compulsory. The alignment of the PI-X, PI-Y, PI-Z, P2-x, P2-Y and P2Z column names in the header is vertically aligned to its respective last digits position!
- The should be 3 spaces between the end of each points data values, and its corresponding Length values
IO
D
(Description of Generic Function Template)
Template function | Parameter description | If param(s) is of the followingClass / Type | Meaning of the template function when applied to (params) Class /Type | ||
Name : scalar differenceReturn Type :double | No. of parameters : 2Type of parameter :Type of 2nd parameter : | Point2D | The absolute scalar values and 2.(Hint: make use getScaIarVaIue() Appendix B!) | value difference in the betw. parameters Iof the method mentioned in | |
Point3D | |||||
Line2D | |||||
Line3D | |||||
equalsReturn Type :bool | No. of parameters : 2Type of 1st parameter :Type of 2nd parameter : | Numeric primitives (int, double, etc) | parameter I | parameter 2 | |
Point2D | param I s x param I s y | param 2 s x param 2s y | AND | ||
Point3D | param I s x param I s y param Is z -z | param 2s x param 2s y param 2s z | ANDAND | ||
Line2D | param I s ptl param 2s ptl AND param I s pt2 -z param 2s pt2 | ||||
Line3D | |||||
Note:
- Based on the information provided in the table, you will need to overload the relevant operators in the affected classes, in order to implement the meaning correctly, when the generic functions algo is applied on the 4 classes
- The above generic function templates should be implemented in a header file called My Templates . h.
E
(Combinations of filtering + sorting criteria)
Filtering Criteria | Sorting Criteria (allow sorting by ) | |||
Point2D records | iii) | X ordinate valueY ordinate valueDist. Fr Origin value | (default) | |
Point3D records | iii) iv) | X ordinate valueY ordinate valueZ ordinate valueDist. Fr Origin value | (default) | |
Line2D records | X and Y coordinate values of Pt. 1X and Y coordinate values of Pt. 2Length value | (default) | ||
Line3D records |
Note:
- l) Sorting by X and Y coordinates is done, by first ordering all rows according to x-ordinate value, this will have a sorting and bunching effect that groups rows with the same xordinate values together, if it exists.
Within each group with similar x-ordinate values, the sorting order (assuming it is ascending), is then applied to the y-ordinate, such that rovvs with the same X, but smaller Y value will be above those with same X, but bigger Y values.
- For all sorting criteria, you should allow sorting in both ASCENDING and DESCENDING order! (Assume default is ASC).
- If you are using ST L containers / algorithms to handle the storage of your objects and sorting, you need to implement the relevant function comparators for each of the 4 classes. These function comparators should ideally be implemented as static boolean functions under each of the 4 classes.
F
(Sample Menu Interactions)
Student ID : 1234567Student Name : Tan Ah Meng ElvisWelcome to Assn3 program!1) Read in data2) Specify filtering criteria (current : Point2D)3) Specify sorting crieria (current : x-otdinate)4) Specify sorting order (current : ASC)5) View data6) Store dataPlease enter your choice : IPlease enter filename : messy.txt13 records read in successMIy!Going back to main menu . |
The figure on the left describes a sample interaction for specifying input filename to read in data.
The program should acknowledge by indicating the no. of records read in successfully!
Student ID : 1234567Student Nane : Tan Ah Meng ElvisWelcome to Assn3 program!1) Read in data2) Specify filtering criteria (curren : PoiN2D)3) Specify sorting crteria (curren : x-ordinate)4) Specify sorting order (cument : ASC)5) View data6) Store dataPlease enter your choice : 2[ Specifying fiftering ctiteria (currenta) Point2D recordsb) Point3D recordsc) Line2D recordsd) Line3D recordsAease enter your crtetia (a d) : dFifer crieria successfully set to Line3D!1) Read in data2) Specify filtering criteria (current : Line3D)3) Specify sotting crieria (curren : Pt. 1)4) Specify sotting order (cument : ASC)5) |
The figure on the right describes a sample interaction for specifying filterinq criteria to indicate which type of records user wish to see.
Notel: Observe that the current filtering criteria has changed in option 2) of the man menu, once it has been
Note2: Observe that the current sorting criteria is automatically changed to the default for Line3D records, which is sorting by Pt Is (x, y) coordinates (refer to Appendix E for details)
APPENDIX F (cont)
(Sample Menu Interactions)
1) Read in data2) Specify filtering criteria (current : Line3D)3) Specify sorting crieria (current : Pt. 1)4) Specify sorting order (current : ASC)5) View data6) Store dataPlease enter your choice : 3[ Specffying sating crieria (current : Pt. 1)]a) R. Is (x, y) valuesb) R. 2s (x, y) valuesc) Length valuePlease enter your crietia (a c) : cSorting criteria successfully set to Length!1) Read in data2) Specify filtering criteria (curren : Line3D)3) Specify sorting crteria (curren : Length)4) Specify sorting order (current : ASC) 5) |
The figure on the right describes a sample interaction for specifying sortinq criteria to indicate which attribute, of the selected type of records user wish to see.
Note3: Observe that the sub-menu display options which are relevant to currently selected filter, which is Line3D! (refer to Appendix E for details)
Note4: Observe that the current sorting criteria has changed in option 3) of the main menu, once it has been successfully set to Length.
1) Read in data2) Specify fitering criteria (curren : Line3D)3) Specify sating crieria (cument : Pt. I)4) Specify sating order (current : ASC)5) View data6) Store dataPlease enter your choice : 4[ Specifying sating order (current : ASC) Ja) ASC (Ascending order)b) DSC (Descending order)Please enter yourcrteria (a b) : bSating order successfully set to DSC!1) Read in data2) Specffy fitering criteria (curren : Line3D)3) Specfy sating crteria (cument : Len$h)4) Specfy sating order (current : DSC) 5) |
The figure on the right describes a sample interaction for specifying sortinq order to indicate whether records are to be displayed / output in Ascending or Descending order.
Note5: Observe that the current sorting order has changed in option 4) of the main menu, once it has been successfully set to DSC
APPENDIX F (con t)
(Sample Menu Interactions)
The figure on the right describes a sample interaction to displav data.
Note6: Observe that all the latest criteria specified in main menu options 2) 4) are re-iterated before the rows of Line3D records are displayed.
1) Read in data2) Specify filtering criteria (current : Line3D)3) Specify sorting crieria (current : Len$h)4) Specify sorting order (current : DSC)5) View data6) Store dataPlease enter your choice : 5[ View data J fifering crieria : Line3D sorting criteria : Length sorting order : DSCPI -x PI-Y P2-x P2-Y P2-z Length999, 999, 999] [-999, -999, _ 999] 3460. 638999 -999, _999] 3, 3, 3] 1735 . 5159 99 _999] 9, 1714. 730 [ -99, _ 99, -99] [-999, -999, _ 999] 155B.3, 3, 3] [ 999, 999, 999] 1275 .123 [ -99, 155 . 885Press any key to go back to main menu . | ||
1) Read in data2) Specify filtering crfteria (curren : Line3D)3) Specify sorting crteria (current : Len#)4) Specify sorting order (current : DSC)5) View data6) Store dataPlease emeryour choice : 6Please enerfilename : Line3D.txt13 records output successfully!Going back to main menu | The figure on interaction toNote7: The the data in should be user choose refer to output | |
the right describes a sample write data to an output file.
contents and its formatting of the output file Line3D txt similar to that displayed when main menu option 5! (please of the figure above)
APPENDIX G
Submission Instructions (V. IMP T!!)
- Deliverables
- All submissions should be in softcopy, unless otherwise instructed
- For the actual files to be submitted, you typically need to include the followng:
- word document report (e.g. *.doc), save as MS Word 97-2003 format the source file(s), (e.g. *.h, *.0, or *.cpp files)
- the executable file, (using Ubuntu g++ compiler), compile into an executable filename with *.exe (e.g. csci251_a3.exe)
- How to package
Compress all your assignment files into a sinqle zip file. Please use the following naming format
<FT/PT>_<Your Grp>_Assn3_<Stud. No.>_<Name>.zip
Example .
<FTIPT> Use F T for Full-Time student, P T if you are Part-Time student
<Your Grp> refers to your SIM tutorial group (e.g. TutGrp1 / TutGrp2 / TutGrp / etc.)
Assn3 if you are submitting assignment 3, Assnl if submitting assignment 1 etc.
<Stud. No.> refers to your LJOW student number (e.g. 1234567)
<Name> refers to your IJOW registered name (e.g. JohnDoeAnderson)
- Where to submit
Please submit your assignment via Moodle el-earning site.
IMPORTANT NOTE :
- To minimize the chances of encountering UNFORSEEN SITUATIONS (mentioned below), please do an EARLY SUBMISSION via Moodle.
- Prior to the relevant assignment deadline, you can upload (and replace) your assignment submissions in Moodle as many times as you like
- It is vour responsibilitv to confirm that you have submitted the final (and correct version) of your deliverables to Moodle before deadline
- Any submission uploaded to Moodle after deadline will be considered late
In the event of UNFORSEEN SITUATIONS :
( E.g. 3 hrs prior to deadline, there is proof of unforseen events like Moodle site down, unable to upload assignment, undersea internet cable damaged by sea urchins, etc )
Please email your single zip file to your tutor at
[email protected] for FULL TIME students [email protected] for PART TIME students
In your email subject line, type in the following information
<FTIPT> <Your Grp> <assignment inf0> <student number> and Fname>
Example:
To tutor,s email (s+e above)
SubjectNote 1 :Note 2 : | FT TutGrp3 Assn3 1234567 JohnDoeAndersonThe timestamp shown on tutors email Inbox will be used to determine if the assignment is late or not.After email submission, your mailboxs sent folder would have a copy (record) of your sent email, please do not delete that copy It could be used to prove your timely submission, in case the Tutor did not receive your email! |
- When to submit
- a) Depending on the time-table, a software demo / testinq / presentation for your assignment will be scheduled during the:
- 3rd 5th lab session for the semester (i.e. lab 3 5), for Full Time (F T) students
- 2nd 4t1 lab session for the semester (i.e. lab 2 4), for Part Time (PT) students
Please consult your tutor for further details. Some time will be allocated for students to demo / present / explain your system design or run test cases during the session.
- Please refer to the following table on the different deliverables, submission events & deadlines
Assignment | Submission Deadline (check Moodle forEXACT date-time ) | Software Demo / Testing (Tasks), during | Email Demo I Software Testing result files by : | |
1 | Lab 2 | Lab 3 | Lab 2(PT), Lab 3(FT) | End of Lab 2(PT), Lab 3(FT) |
2 | Lab 3 | Lab 3(PT), Lab 4(FT) | End of Lab 3(PT), Lab 4(FT) | |
3 | Lab 5 | Lab 4(PT), Lab 5(FT) | End of Lab 4(PT), Lab 5(FT) |
- IMPORTANT NOTE : Non-submission of any of the above mentioned deliverables will result in ZERO marks! Please check with your Tutor personally if you are unsure!
- Please help by paying attention to the following
! VERY IMPORTANT !
PLEASE FOLLOW ALL THE GUIDELINES / REQUIREMENTS IN ALL ASSIGNMENT APPENDICES
PLEASE FOLLOW ALL THE SUBMISSION INSTRUCTIONS FROM 1 TO 4 Il
IF YOU ARE NOT SURE,
PLEASE CHECK WITH YOUR TUTOR DURING LABS / LECTURES !
OR
PLEASE EMAIL YOUR ENQUIRIES TO YOUR TUTOR !
MARKS WILL BE DEDUCTED IF YOU FAIL TO FOLLOW INSTRUCTIONS
Examples of marks deduction
- Your deliverables / zip file does not follow naming convention
- You have no email subject/ or do not following naming convention
- Your email address / content does not include your name/identity (i.e. tutor cannot easily identify sender)
- Wrong naming or misleading information given
(e.g. putting Assn2 in email subject, when you are submitting Assnl )
(e.g. naming Assnl in your zip file, but inside contains Assn2 files )
- You email to the WRONG tutor
- Your submission cannot be downloaded and unzipped
- Your program cannot be re-compiled and/or executable file cannot run
- Your report / testing files cannot be opened by Microsoft Word / Excel 2003
- You did not submit / incomplete submission of software demo / testing files etc
6) Re-submission administration
After the deadline, (on case-by-case basis), some students / grp may be granted an opportunity for an un-official resubmission by the tutor. If this is so, please adhere to the following instructions carefully:
<Step 1> Prepare 2 zip files as follows
Zip up for re-submission, proqram files according to the following format
Resubm it <FT/PT>>_<Your Grp>_Assn3_<Stud. No.> _<Name>.zip
Example : Resubmit FT_TutGrp3_ Assn3=1234567_JohnDoeAnderson. zip
Zip up for re-submission, test case results files according to the following format
Resubm it <FT/PT>_<Your Grp>_Assn3_TCResults_<Stud. No.> _<Name>.zip
Example : Resubmit_FT_TutGrp3_Assn3_TCResults_1234567_JohnDoeAnderson. zip
- <FTIPT> Use FT for Full-Time student, PT if you are Part-Time student
- <Your Grp> refers to your SIM tutorial group (e.g. TutGrp1 / TutGrp2 / TutGrp / etc.)
- Assn3 if you are submitting assignment 3, Assn2 if submitting assignment 2 etc.
- <Stud. No.> refers to your I-JOW student number (e.g. 1234567)
<Name> refers to your I-JOW registered name (e.g. JohnDoeAnderson)
- IMPT To prevent Tutors Inbox from blowing up in his face, each student is only allowed to re-submit ONCE, for each assignment only!
<Step 2>
Please email your 2 zip files to your tutors email (refer to section 3) Where to submit)
In your email subject line, type in the following information
Resubm it <FTIPT> <Your Grp> <assignment inf0> <student number> and <name>
Example:
To tutors &Qail befer to s&tion 3) UKere to sugrnit)
Subject Resubmit FT TutGrp3 Assn3 1234567 JohnDoeAnderson
IMPORTANT NOTE
Non-submission of any of the above mentioned files, or failure to adhere to submission instructions will result in ZERO marks!
Please check with your Tutor personally if you are unsure!
Reviews
There are no reviews yet.