CPT105 Introduction to Programming in Java 2021-2022 S1
Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit
CPT105 Introduction to Programming in Java 2021-2022 S1
Coursework 3 Task Sheet
Overview
Coursework 3 consists of three parts: Part A, B, and C.
The learning outcomes of CPT105 Intro to Programming in Java include equipping you to understand and appreciate the principles of Object-Oriented Programming. We also want you to be competent to design, write, test and debug programs in Java. Part A and Part B are designed to start you in those directions, where you will write your own classes and methods.
In addition, you are also expected to be aware of the design and the good documentation of a finished program. Part C will help you achieve that goal.
Coursework 3 is 70% of your final mark, and it is an individual project.
Timeline and Deliverables
Week 10:
Week 15:
Tuesday 23 November 2021, 00:00
Saturdary 26 December 2021, 23:59
CW3 Task Sheet released
Submission due
In addition, during Reading/Exam Week in December 2021/January 2022, we may ask
you to give a short presentation/Q&A to show the authenticity of your project.
In Part A, you are required to write a GUI program to simulate data encapsulation when we transfer data via the Internet. You should follow the description to produce
the correct output. It is further divided into two parts: Part A.1 and A.2. CW3 Part A will contribute to 35% of the total marks.
Part A.1 DataPacket (15 marks)
We usually transfer data packets via the Internet. Usually, a data packet is composed of several components: the frame head, frame tail, length of data, data, and the CRC code. Table 1 below shows the detailed packet structure used in the question.
Table 1. Packet structure
Header |
Data length |
Data segment |
CRC |
Tail |
1 Byte |
1 Byte |
N Bytes |
2 Bytes |
1 Byte |
In Table 1, we use 2 hexadecimal constants of “AA” and “BB” to represent the head and the tail of a data packet (Header and Tail columns), respectively, one byte to represent the length of the data segment and 2 bytes to represent the CRC code of the data segment. We should encapsulate the data into the data segment and convert the data packet to a hexadecimal string before we send the data via the Internet. CRC code is used to verify whether the data packet is changed during the transmission. The main procedure of the data encapsulation is as follows:
(1) Convert each character in the data string into a hexadecimal value.
(2) Calculate a CRC code for the hexadecimal string.
(3) Combine the header, data length, data segment, CRC code and tail into a data packet.
For example, we want to send a string “123A” to a remote user via the Internet. First, we should convert the string “123A” into a hexadecimal value of “31323341”. “31”, ”32”, ”33” and ”41” are the hexadecimal value of each character in the data string “123A”. Second, we can calculate and get a CRC code “7BD7” based on the hexadecimal string “31323341”. Third, we combine the packet header, tail and the data length with the hexadecimal value and CRC code and get a hexadecimal data packet of “AA04313233417BD7BB” . “AA” and “BB” are the header and tail of the data packet, “04” represents the length of data. “31323341” is the hexadecimal value of string “123A”, “7BD7” is the CRC code.
Please follow the steps below to complete the task:
(1) Create an empty java project. The project name should be “Packet”+ your student ID.
(2) Create a class “CRC16” in your project.
(a) Copy the method “getCRC(byte[] bytes)” into your CRC16 class;
(b) Define an overloading static method “getCRC(String hexData)”, which can invoke the method “getCRC(byte[] bytes)” and return a CRC code based on the string “hexData” . For example, get a CRC code of “7BD7” from the hexadecimal string of “31323341”.
(3) Create a class “DataPacket”.
(a) Define a method “stringToHex(String str)” to convert a common string into a hexadecimal string. For example, convert string “123A” to “31323341”.
(b) Define a method “convertToDataPacket(String data)”, which can encapsulate a string into a data packet and return a hexadecimal string, as Table 1 shows. For example, the method will return “AA04313233417BD7BB” if we invoke it with a parameter of “123A”.
(c) Define a method “getDataFromDataPacket(String hexData)”, which can retrieve string data from a hexadecimal string of a data packet. The method should check the validation of the header and tail of the packet, the length of the data and the CRC code. For example, the method will
return “123A” if we invoke it with a parameter of
“AA04313233417BD7BB”.
(4) Create a class “Q1” and achieve the following functions in its main method . (a) Create a frame window as below;
(b) Create a DataPacket object in the main method;
(c) When users click “Data to packet” button, the string in the raw data field can be encapsulated into a data packet string and show in the data packet field;
(d) When users click “Packet to data” button, it can retrieve the data string from the data packet field and show it in the raw data field.
Part A.2 MultiDataPacket (20 marks)
Sometimes, we need to transfer several data within one data packet to improve data transmission efficiency. For example, if we send two strings of “ABC” and “123A” in one data packet, the hexadecimal value of the data packet is “AA034142435085BB AA04313233417BD7BB”. In addition, we should check the validation of the data packet before we retrieve data from it. If the data packet is not valid, we should throw an exception. Please follow the steps below to complete the task.
(1) Create an exception class “DataPacketException”, which is inherited from “Exception”.
(a) Create a constructor “DataPacketException (int id, String message)” to
create an exception object with an id and a message string. (b) Create 1 method to retrieve the id from the exception.
(c) Override the method “toString()” to return a string with the id and message.
(2) Create a subclass “MultiDataPacket” based on the base class “DataPacket”. (a) Create an overloading method “String[] stringToHex(String[] str)”,
which can convert an array of common strings to an array of hexadecimal strings.
(b) Create an overloading method “String convertToHexDataPacket (String[] data)”, which can convert an array of common strings to a MultiDataPacket with a single hexadecimal string.
(c) Create a new method “String[] getMultiDataFromHexDataPacket (String hexData)” to retrieve and return several data from the MultiDataPacket string “hexData” . The method should validate the header, tail, length and CRC code for each data packet in the string “hexData” and throw a “DataPacketException” exception when any validation is failed.
(3) Create a class “Q2” and achieve the following functions in its main method. (a) Create a frame window as below;
You should list your personal information (name, student Id and gender) and your photo on the top of the window.
(b) Create a MultiDataPacket object in the main method;
(c) Users can input strings into the 3 text fields (raw data 1~raw data 3). When users click the “Data to multi packet” button, strings in 3 text fields can be encapsulated into a hexadecimal string and shown in the “multi data packet” text field.
(d) When users click “Multi packet to data” button, we can retrieve all the separate data from the “multi data packet” text field and show them in the 3 text fields (raw data 1~raw data 3), respectively.
(e) You should use a message dialogue to show any exceptions raised in your program. Below is an example for your reference.
In this part, you will develop a student management system to manage the information of students, courses, grades and teachers.
CW3 Part B will contribute 50% of the total marks.
The system has several classes as follows:
(1) create a class “Course” to represent the course information of the management system. It should have at least 2 member variables of “courseId” and “courseName” .
(2) Create a class “Person”. It has at least 2 member variables of “name” and “gender”. Gender should be an enum type with two values of “MALE” and “FEMALE” .
(3) Create a class “Student” inherited from the base class “Person” to represent student information. It has at least 1 new member variable of “stuId” .
(4) Create a class “Teacher” inherited from the base class “Person” to represent teacher information. It has at least 3 new member variables of “teacherId”, “loginName” and “password” .
(5) Create a class “Grade” to represent the grade of a module for a student. It has at least 3 member variables of “stuId”, “courseId” and “grade” to represent student id, course id and the grade of a course for the student.
(6) Complete the class “Encryption” by fixing compilation errors and including suitable exception handling, for which we have provided most of the codes, to encrypt and decrypt teacher’s password.
(7) Create a class “FileUtils”, which can be used to create plain text files to save objects of students, teachers, courses and grades, respectively. In addition, it should provide methods to retrieve objects from files. To achieve this, classes of Student, Teacher, Course and Grade should implement an interface of Serializable.
(8) Create a class “DataAccess”, which invokes FileUtils class to create and save objects (Student, Course, Grade and Teacher) into 4 different plain text files. The class should use ArrayList to save objects retrieved from files. In addition, it can search and return objects according to the object’s id. For example, the method “Student getStudentById(String stuId)” can search and return a student object by the student Id.
(9) Create a class “Q3” and achieve the following functions in its main method.
a. Create an operation menu as follows:
b. Users can input a number to run a related function.
c. When users input 1, then users can input student’s Id, name and gender to create a student object and append it into a student data file. Users can continuously create several student objects until “-1” is inputted. The following picture shows that the user creates 2 student objects and saves them into the student data file.
Operations to add a course, teacher and grade are similar to that of adding a student.
d. When users input 5, all the student objects should be printed out as follows.
When there is no object, it should print out a message as follows to let users know there is no object.
Operations to list course, teacher and grade objects are similar to that
of listing student objects.
e. When users input 9, then users can input the student Id to search and print out the related student object. If the student object does not exist, then print out a string to show that the student object is not found.
Operations to search a course and teacher object are similar to that of searching a student object. However, users should input both student Id and course Id to search for a grade object.
(10) There are other requirements as follows:
a. The program can be continuously run until users input 0 to exit.
b. You should check and avoid duplicate Ids when you create objects.
c. Exceptions should be caught and handled properly.
d. The secret key in the Encryption class should be changed to your email address.
e. Comments for methods and classes are required.
In Part C, you will complete the design and the documentation of the programs in Part
B and submit one report in PDF format.
Part C will contribute to 15% of the total marks.
Javadoc Comment
Write appropriate Javadoc comments in class “FileUtils”, generate the Javadoc HTML
from that and convert and submit the Javadoc in PDF format. (5 marks)
Class Diagram
Complete the UML class diagrams of class Person, Teacher and DataAccess in one PDF
file (10 marks)
* The javadoc and class diagrams should be put into one
single PDF report for submission.
Submission instructions
You should follow the submission steps below to submit your documents to the Learning Mall.
(1) Zip the Whole NetBeans project folder of Part A into one zipped file and upload to the learning mall using the Part A submission link.
(2) Zip the whole NetBeans project folder of Part B into one zipped file and upload to the learning mall using the Part B submission link.
(3) Upload the single PDF file of Part C to the learning mall using the Part C submission link.
Late submissions: The standard University policy on late submissions will apply: 5% of the total marks available for the component shall be deducted from the assessment mark for each working day after the submission date, up to a maximum of five working days, so long as this does not reduce the mark below the pass mark (40%). Submissions more than five working days late will not be accepted.
On Plagiarism
This coursework is individual work. Plagiarism (e.g. copying materials from other sources without proper acknowledgement) is a serious academic offence. Plagiarism and collusion will not be tolerated and will be dealt with in accordance with the University Code of Practice on Academic Integrity. Individual students may be invited to explain parts of their code in person, and if they fail to demonstrate an understanding of the code, no credit will be given for that part of the code.
This is the end of Coursework 3 Task Sheet.
2021-12-04