代做Project Requirements代做R编程

Project Requirements

question 1

In this project you need to write software for UIC's finance office. The finance office deals with the finances of different kinds of people at UIC: students who pay money for their tuitions, employees who receive money for their salaries, etc. All these people pay or receive a certain amount of money, expressed in yuans.

Write a Payer interface for people who pay money to the finance office, with the following UML specification:

and a Person class that implements Payer and has the following UML specification:

The name instance variable indicates the name of the Person. The debt instance variable indicates the amount of money that the person must pay to UIC (to simplify the assignment we will assume that money is always expressed as an integer number of yuans).

The setDebt method changes the amount of debt that a person has. The setDebt method is protected, not public. This means that only subclasses of the Person class can use the setDebt method. All the other classes in the software cannot use the setDebt method, so they cannot change the amount of debt a person has, which is good for security.

The purpose of the pay method is to decrease or increase the amount of debt a person has (depending on what kind of person it is) by the amount given as argument to the method. The pay method of the Person class is abstract, since we do not know what kind of person the person is (a person paying money or a person receiving money).

Add a class Student that extends Person. The constructor of the Student class takes as arguments a name and the amount of UIC debt that the student has (because the student needs to pay tuition or pay for the dormitory, for example). The Student class does not have any instance variable.

The pay method of the Student class makes the student pay money to UIC, which decreases the amount of debt that the student has by the amount of money given as argument to the method. A student can have a negative debt (meaning that the student paid too much to UIC, which always makes UIC happy).

question 3

Add a class Employee that extends Person. The constructor of the Employee class takes as arguments the name of the employee and the salary that UIC must pay to the employee. If the salary given as argument is strictly less than zero then the constructor must throw a NegativeSalaryException with the message "An employee cannot have a negative salary!" The Employee class does not have any instance variable.

Warning: the constructor of the Employee class takes as argument the salary of the employee (the amount of money that UIC must pay to the employee) but the debt instance variable of the Person class indicates how much money the person must pay to UIC. Therefore a positive salary is the same as a negative debt.

The pay method of the Employee class makes UIC pay money to the employee, which decreases the current salary of the employee by the amount of money given as argument to the method (so the debt of the employee becomes less negative!) For example, if an employee currently has a salary of 10000 yuans (-10000 yuans of debt) and pay(2000) is called then the employee's salary becomes 8000 yuans (-8000 yuans of debt, meaning that UIC still needs to pay an extra 8000 yuans to the employee after paying the 2000 yuans). It is fine for the pay method to be given a negative value as argument, which means the employee then just receives a salary increase. For example, if an employee currently has a salary of 10000 yuans and pay(-2000) is called then the employee's salary becomes 12000 yuans. An employee cannot be overpaid money by UIC though, so the current salary of the employee must always be positive or zero, never negative (the debt of the employee cannot be positive). If the argument given to the pay method is too positive and would change the employee's salary to become negative, then instead the current salary of the employee must not change and the pay method must throw a NegativeSalaryException with the message "An employee cannot be overpaid by XXX yuans!", where XXX is replaced with the amount of the overpayment. For example, if an employee currently has a salary of 10000 yuans and pay(12000) is called then the employee still  has a salary of  10000 yuans and the method throws a NegativeSalaryException with the message "An employee cannot be overpaid by 2000 yuans!"

Note: to simplify the project, do not worry about the setDebt method.

Change other classes and interfaces as necessary.

question 4

Add a class FacultyMember that  extends Employee.  The  constructor  of  the FacultyMember class takes as arguments  the   name  of  the  faculty  member  and  the  salary  that   UIC   must   pay  to  the  faculty  member.  The FacultyMember class does not have any instance variable.

The pay method of the FacultyMember class  makes  UIC pay money to the faculty member, which decreases the current salary of the faculty member by the amount of money given as argument to the method (so the debt of the faculty member becomes less negative!) In addition to the normal salary, a faculty member might also temporarily borrow extra money from UIC that the faculty member will need to reimburse later, so the salary of a faculty member might then become negative (the debt becomes positive) without throwing any exception: a negative salary (positive debt) then just means that the faculty member has temporarily borrowed some money.

Change other classes and interfaces as necessary.

question 5

Add a FinanceOffice class with the following UML specification:

When a finance office is created, it has an arraylist of payers but the arraylist is empty (the arraylist does not contain any payer).

The addPayer method takes a payer as argument and adds the payer to the arraylist of payers for the finance office.

The totalDebt method returns as result the total amount of debt of all the payers of the finance office (if the result is positive then it means that the finance office will receive more money from all the students (and the faculty members with debts) than it needs money to pay all the salaries of the employees and UIC will then make a profit; if the  result is negative then it means that the finance office will not get enough money from the students and will need to borrow extra money from a bank to be able to pay all the employees, otherwise UIC will go bankrupt; if the result is zero then it means that the money paid by all the students will exactly cover the salaries of the employees).

The getDebt method takes as argument the name of a payer and returns as result the current amount of debt for this payer. If the finance office does not have a payer with the correct name then the getDebt method  must throw  an UnknownPayerException with the message "Payer XXX unknown", where XXX is replaced with the name of the payer. Do not worry about multiple payers having the same name.

The pay method takes as argument the name of a payer and an amount of money and uses the pay method of that payer to pay that amount of money to that payer. If the finance office does not have a payer with the correct name then the pay method must throw an UnknownPayerException with the message "Payer XXX unknown", where XXX is replaced with the name of the payer. Do not worry about multiple payers having the same name.

Note: the pay method does not catch any exception, it only throws exceptions.

question 6

In this question and the next one we want to create a command line interface (CLI) for our finance office software.

Add aCLI class with amain method. Your code then has two classes with amain method: the Test class that you can use to run all your tests for all your classes, and the CLI class that you will now use to run the interactive text-based interface of your program.

The CLI class does not have any testCLI method because this class is only used to allow users to use the software interactively.

Add to the CLI class a private static input instance variable which is a Scanner object that reads  input from the standard input stream System.in:

private static Scanner input = new Scanner(System.in);

Always use this input scanner object when you need to read input. (Never close this scanner object, because this would also close the standard input stream System.in, and then the next time you tried to read something from the standard input stream you would get a NoSuchElementException!)

In addition to the main method and the input instance variable, the CLI class has two methods called readLine and readPosInt.

The readLine method is static and private, it takes a string as argument, and returns another string as result. The readPosInt method is static and private, it takes a string as argument, and returns a positive integer as result.

The readLine method uses System.out.print (not println) to print its string argument on the screen (later when we use the readLine method, the string argument of the method will be a message telling the user to type some text). Then the readLine method  uses the input scanner object to  read a whole line of text from the user of the program and returns the text as result.

The readPosInt method uses System.out.print (not println)to print its string argument on the screen (later when we use the readPosInt method, the string argument of the method will be a message telling the user to type some integer). Then the readPosInt method uses the input scanner object to read an integer from the user of the program.

After reading the integer, the readPosInt method must also use the scanner's nextLine method to read the single newline character that comes from the user pressing the Enter key on the keyboard after typing the integer (if you do not  read this  newline character using the nextLine method inside the readPosInt method, then the newline character will remain in the input stream, and, the next time you use the readLine method described above, the readLine method will just immediately read only the newline character from the input stream and return an empty string as result, without waiting for the user to type anything!)

If  the  user  types  something  which  is  not  an  integer,  then  the nextInt method  of  the  scanner  will  throw  an InputMismatchException. In that case the code of your readPosInt method  must  catch the exception, use System.out.println to  print  the  error  message "You must type an integer!" to  the  user  (use System.out.println for this, not System.err.println, otherwise you might hit a bug in Eclipse...), use the scanner's nextLine method to read (and ignore) the wrong input typed by the user of the program (if you do  not do this, the wrong input typed by the user will remain in the input stream, and the next time you call the nextInt method again, you will get an InputMismatchException again!), and then do the whole thing again (including printing again the string argument of the readPosInt method) to try to read an integer again (hint: put the whole code of the method inside a while loop).

After reading the integer and the newline character (which is just ignored), the readPosInt method tests the integer. If the integer is bigger than or equal to zero, then the readPosInt method returns the integer as result. If the integer is strictly less than zero, then the readPosInt method  uses System.out.println to  print the  error message "Positive integers only!" to the user (use System.out.println for this, not System.err.println, otherwise you might hit a bug in Eclipse...), and then does the whole thing again (including printing again the string argument of the readPosInt method) to try to read an integer again (hint: just print the error message, and then the while loop you already have around the whole code will automatically do the whole thing again...)

For example, if you want to check that your two methods readLine and readPosInt work correctly, put the following code in the main method of your CLI class:

public static void main(String[] args) {

String str1 = readLine("Type some text: ");

System.out.println("Text read is: " + str1);

int i = readPosInt("Type an integer: ");

System.out.println("Integer read is: " + i);

String str2 = readLine("Type some text again: ");

System.out.println("Text read is: " + str2);

}

then running the main method of the CLI class should look like this (where aaaa bbbb, cccc, dddd eeee, -100, -200, 1234, and ffff gggg are inputs typed by the user on the keyboard):

Type some text: aaaa bbbb

Text read is: aaaa bbbb

Type an integer: cccc

You must type an integer!

Type an integer: dddd eeee

You must type an integer!

Type an integer: -100

Positive integers only!

Type an integer: -200

Positive integers only!

Type an integer: 1234

Integer read is: 1234

Type some text again: ffff gggg

Text read is: ffff gggg

question 7

Once you have checked that your methods readLine and readPosInt work correctly, remove all the code inside the main method of the CLI class so that the main method is empty again.

In the rest of this question, use the readLine and readPosInt methods every time your program needs to read a string or an integer from the user.

In the empty main method of the CLI class, create a single FinanceOffice object with the name "UIC FO". The main method of the CLI class must then print a menu that allows the user of your software to do six different actions that involve the finance office object, and your program must then read an integer from the user that indicates which action must be performed by the program (see below for the details of each action). Use the readPosInt method to print the menu (give the string for the menu as the argument of readPosInt) and to read the integer typed by the user.

For example, the menu should look like this:

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6):

The user then types an integer between 1 and 6 to select the action.

For example (where 3 is an input from the user):

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6): 3

and your program then performs the selected action.

After an action has been performed by your program, your program must again print the menu and ask again the user of the program for the next action to perform (hint: put the whole code of the main method inside a while loop, except for the one line of code that creates the single finance office object).

If the user types an integer which is not between 1 and 6, then your program must print an error message "Unknown action!" to the user (hint: when testing the integer for the action, use the default case of a switch statement) and then print the menu again (by just going back to the beginning of the while loop).

For example (where 7 is an input from the user):

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6): 7

Unknown action!

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6):

If the user types something which is not an integer, the readPosInt method that you implemented in the previous question will automatically repeat the menu and ask the user to type an integer again until the user actually types an integer, so you do not have to worry about this in the code of the main method of your CLI class.

For example (where aaaa and bbbb cccc are inputs from the user):

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6): aaaa

You must type an integer!

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6): bbbb cccc

You must type an integer!

Type an action (total:1 add:2 get:3 give:4 take:5 quit:6):

Here are the detailed explanations for each action.



热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图