COMP122 图形接口

【COMP122 图形接口】COMP122 Assessment 3
Graphical User Interfaces
Due 2019-05-02 at 5pm
COMP122 Assessment 3 Due 2019-05-02 at 5pm
A GUI for a new cryptographic routine
Your employer has patented a brand new and super secure encryption algorithm and you are tasked
with building a flashy UI for end-users to help the marketing department turn it into gold.
You are told that the encryption mechanism uses an integer as secret key when translating plain texts to
crypto texts and back. Both encryption and decryption are done using the same method, called rotate.
To encrypt a plain text string plaintext with key k (an int), you would pass both values as parameters
to this function: cryptotext = rotate(plaintext, k); Conversely, decoding works very much
the same way, but using the inverse key as follows: plaintext = rotate(cryptotext, -k);
To comply with recent governmental regulations, and to make some extra money, your employer
decided to additionally include a back-door – a separate routine that allows to deduce plain texts from
crypto texts without knowing the secret key.
Both crypto-routines are implemented as methods of a class called Caesar, but the implementation
details are proprietary and above your pay grade. So instead of the source code of this class, you are
only given an interface called RotationCipher (see the UML diagram below and also the javadoc
comments in RotationCipher.java) that declares the two routines.
<>
RotationCipher

  • rotate(s : String, n: int) : String
  • decipher(s : String) : String
    Additionally, you are given a file called Caesar.class that contains the compiled bytecode of the
    Caesar class, which implements this interface, and which you can instantiate in your code to access
    the crypto-routines.
    Requirements
    You are tasked to write a graphical user interface based on the Swing toolkit that allows users to encrypt
    and decrypt text using the new method.
    a. Write a Java program called CaesarGUI that allows users to encrypt and decrypt text. You can
    add any JComponent widgets you like but as a minimum there should be
    a JFrame window to hold all other components
    JTextFields (or similar components) for the plain text, the integer key, and crypto text.
    a JButton for the user to click on and trigger the conversion
    appropriate JLabels to identify the above.
    2
    COMP122 Assessment 3 Due 2019-05-02 at 5pm
    When the button is clicked, your program should read the input plain text and integer key o the
    respective components, call the rotate method and update the component for the crypto text.
    b. Document your design. Where in your code do you instantiate the Caesar class? How do
    the dierent component depend on each other (who creates who)? Describe your design in a
    separate report (a PDF). Good documentation would include javadoc and in-line comments at an
    appropriate level (don’t document every line of code). You should also add an UML class diagram
    that displays all component classes and their attributes/methods that you used in your code.
    c. (Bonus) Add some way of validating the input of the integer key. Acceptable solutions would be
    if, in case the input cannot be parsed as an integer, the text field turns red, a warning pop-up or
    some status line displays an error message. You may also use (or write) Component classes that
    make it impossible for users to input non-integers. Document your design choices.
    d. (Bonus) Write another GUI, similar to the one above, that uses Caesar.decipher to decipher
    encrypted text without the secret key.
    Hints
    As mentioned in the lectures, it is good practice (but not required) to define your main window
    as subclass of JFrame and assemble the components in its constructor.
    To react to the user clicking on your button, you will want to write an ActionListener (a class
    that implements this interface) and register an instance of this listener class with the button. This
    is the Controller part of your Model-View-Controller program. Have a look at the code examples
    in lecture 17 to see how to do this.
    To get or set the content of a TextField, use its methods getText() and setText() with
    signatures as below. See the API docs on oracle.com for more.
  • public String getText();
  • public void setText(String s);
    For part c) remember the input validation we discussed as examples for exception handling in
    lectures 11 & 12. You may use java.io.Scanner or java.lang.Integer’s parseInt method,
    which takes a String, returns an int and possibly throws a NumberFormatException.
  • try{
  • int i = Integer.parseInt(text)
  • }
  • catch ( NumberFormatException e ){ ... }
    3
    COMP122 Assessment 3 Due 2019-05-02 at 5pm
    Submission Instructions
    Deadline: Thursday, 2 May 2019, 5:00pm
    Submission server: https://sam.csc.liv.ac.uk/COM...
    Your submission should be a single compressed .zip file called comp122_assessment_3_SID.zip
    where SID should be replaced by your student ID. This file should include:
  • Your implementation. This must include the .java source files. Put everything into a subfolder
    called ‘src’, including the interface and class file you received for the exercise.
  • A report in .pdf format. You can structure this report as you like and do not need to have the
    same formal structure nor pseudo-code as in A1.
    Marking Scheme
    Each part counts towards the final mark of this coursework as follows.
    a b c d
    50% 30% 10% 10%
    To get full marks for parts c) and d) you need to include documentation, not just the implementation
    alone. You do not need to include a full UML class diagram for part d) but it’d make sense to have one
    diagram that covers a) and c).
    If your code does not compile and run on departmental computer systems you will suer a penalty of
    5%. The same applies if your submission does not exactly follow the submission instructions regarding
    file name and type.
    Your submission is an individual piece of work. No collaboration with other students is allowed!
    Expect that plagiarism detection soware will be run on your submission to compare your work to
    that of other students. Late submissions and plagiarism/collusion are subject to the University Code
    of Practice on Assessment, available here1
    . In particular, since these are online submissions, a late
    penalty of 5% applies for every 24h period aer the deadline.
    Notice that I will not grant extensions requested aer the submission deadline!

    推荐阅读