Advertisement
Guest User

DataBaseValue

a guest
Sep 26th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.69 KB | None | 0 0
  1. package InternationalDatabase;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Scanner;
  8. import java.util.concurrent.TimeUnit;
  9.  
  10. /**
  11.  *
  12.  * @author Mason Cudlitz
  13.  */
  14. public class DataBaseValue {
  15.  
  16.     Calendar calendar;
  17.     Date createdDate;
  18.     private final String name;
  19.  
  20.     public DataBaseValue(String name) {
  21.         this.name = name;
  22.         calendar = Calendar.getInstance();
  23.         createdDate = calendar.getTime();
  24.     }
  25.  
  26.     public String getName() {
  27.         return name;
  28.     }
  29.  
  30.     //overridden
  31.     public String getInfo() {
  32.         return "I AM ERROR";
  33.     }
  34.  
  35.     public Date getCreatedDate() {
  36.         return createdDate;
  37.     }
  38. }
  39.  
  40. class International extends DataBaseValue {
  41.  
  42.     //Fields
  43.     private final int id;
  44.     private final Date dateOfBirth;
  45.     private final String homeAddress;
  46.     private final String localAddress;
  47.     private final String phoneNumber;
  48.     private int age;
  49.     private Visa visa;
  50.  
  51.     //input
  52.     Scanner input = new Scanner(System.in);
  53.  
  54.     International(String name, Date dateOfBirth, String homeAddress,
  55.             String localAddress, String phoneNumber, Visa visa) {
  56.         super(name);
  57.         this.id = name.hashCode();
  58.         this.dateOfBirth = dateOfBirth;
  59.         setAge(dateOfBirth);
  60.         this.homeAddress = homeAddress;
  61.         this.localAddress = localAddress;
  62.         this.phoneNumber = phoneNumber;
  63.         this.visa = visa;
  64.  
  65.     }
  66.  
  67.     void setAge(Date dateOfBirth) {
  68.         age = (int) (TimeUnit.DAYS.convert(StaticDataFunctions.deltaTime(dateOfBirth, getCreatedDate()), TimeUnit.MILLISECONDS) / 365);
  69.     }
  70.  
  71.     //Accessors
  72.     public Visa getVisa() {
  73.         return visa;
  74.     }
  75.  
  76.     public int getAge() {
  77.         return age;
  78.     }
  79.  
  80.     //Builds a return card for the person when retrieved from the Database
  81.     String formatInfo(String[] extraParameters) {
  82.         String[] infoLines = new String[]{
  83.             "Name: " + this.getName(),
  84.             "Date of Birth: " + dateOfBirth.getMonth() + "/" + dateOfBirth.getDay() + "/" + dateOfBirth.getYear(),
  85.             "Age: " + age + " years",
  86.             "Home Address: " + homeAddress,
  87.             "Local Address: " + localAddress,
  88.             "Visa class: " + visa.getVisaType(),
  89.             "Visa permissions: " + visa.getVisaPermissions()};
  90.  
  91.         if (extraParameters != null) {
  92.             infoLines = (String[]) StaticDataFunctions.concatenateArrays(infoLines, extraParameters);
  93.         }
  94.  
  95.         int longestLine = 0;
  96.         for (String l : infoLines) {
  97.             if (l.length() > longestLine) {
  98.                 longestLine = l.length() + 2;
  99.             }
  100.         }
  101.  
  102.         StringBuilder formatBuilder = new StringBuilder();
  103.         for (int y = 0; y < infoLines.length + 2; y++) {
  104.             formatBuilder.append('\n');
  105.             for (int x = 0; x < longestLine; x++) {
  106.                 //Draws box
  107.                 if (y == 0 || y == infoLines.length + 1 || x == longestLine - 1) {
  108.                     formatBuilder.append('/');
  109.                 } else if (x == 0) {
  110.                     if (y > 0 && y < infoLines.length + 1) {
  111.                         formatBuilder.append('/').append(infoLines[y - 1]);
  112.                         x += infoLines[y - 1].length();
  113.                         //x -= infoLines[y - 1].length();
  114.                     }
  115.                 } else {
  116.                     formatBuilder.append(" ");
  117.                 }
  118.  
  119.             }
  120.  
  121.         }
  122.         return formatBuilder.toString();
  123.     }
  124.  
  125.     //This will be overriden
  126. }
  127.  
  128. class Intellectual extends International {
  129.  
  130.     public Intellectual(String name, Date dateOfBirth, String homeAddress, String localAddress,
  131.             String phoneNumber, Visa visa) {
  132.         super(name, dateOfBirth, homeAddress, localAddress, phoneNumber, visa);
  133.     }
  134.  
  135.     public String addClass(Class newClass) {
  136.         //Overridden
  137.         return "Err";
  138.     }
  139.  
  140.     public String removeClass(Class removedClass) {
  141.         //Overridden
  142.         return "Err";
  143.     }
  144. }
  145.  
  146. class Student extends Intellectual {
  147.  
  148.     float balance = 0f;
  149.     List<Class> classes = new ArrayList();
  150.     int id;
  151.  
  152.     public Student(String name, Date dateOfBirth, String homeAddress, String localAddress,
  153.             String phoneNumber, Visa visa, Float balance) {
  154.         super(name, dateOfBirth, homeAddress, localAddress, phoneNumber, visa);
  155.         id = name.hashCode();
  156.         this.balance = balance;
  157.     }
  158.  
  159.     @Override
  160.     public String addClass(Class newClass) {
  161.         if ((balance - newClass.getPrice()) > 0 && getCreatedDate().after(getVisa().getExpiryDate())) {
  162.             classes.add(newClass);
  163.             balance -= newClass.getPrice();
  164.             return "Added " + newClass.getName();
  165.         } else if ((balance - newClass.getPrice()) > 0) {
  166.             return "Unable to add class, Visa expires before class date";
  167.         } else {
  168.             return "Unable to add class, negative balance";
  169.         }
  170.     }
  171.  
  172.     @Override
  173.     public String removeClass(Class removedClass) {
  174.         if (classes.contains(removedClass)) {
  175.             balance += removedClass.getPrice();
  176.             classes.remove(removedClass);
  177.             return "Removed " + removedClass.getName();
  178.         } else {
  179.             return "Unable to remove class, check spelling";
  180.         }
  181.     }
  182.  
  183.     public void setBalance(float balance) {
  184.         this.balance = balance;
  185.     }
  186.  
  187.     @Override
  188.     public String getInfo() {
  189.         String[] extraParameters = new String[]{
  190.             "Position: Student", "ID: " + id, "Balance: " + balance,
  191.             "Classes: ",};
  192.  
  193.         String[] classesStrings = new String[classes.size()];
  194.  
  195.         for (int i = 0; i < classes.size(); i++) {
  196.             classesStrings[i] = classes.get(i).getName();
  197.         }
  198.         extraParameters = (String[]) StaticDataFunctions.concatenateArrays(extraParameters, classesStrings);
  199.  
  200.         return formatInfo(extraParameters);
  201.     }
  202. }
  203.  
  204. class Professor extends Intellectual {
  205.  
  206.     static final int MAXUNITS = 15;
  207.     List<Class> classes = new ArrayList();
  208.  
  209.     public Professor(String name, Date dateOfBirth, String homeAddress, String localAddress,
  210.             String phoneNumber, Visa visa) {
  211.         super(name, dateOfBirth, homeAddress, localAddress, phoneNumber, visa);
  212.     }
  213.  
  214.     @Override
  215.     public String addClass(Class newClass) {
  216.         if (getUnits() + newClass.getUnits() < MAXUNITS && getCreatedDate().after(getVisa().getExpiryDate())) {
  217.             classes.add(newClass);
  218.             return "Added " + newClass.getName();
  219.         } else if (getUnits() + newClass.getUnits() < MAXUNITS) {
  220.             return "Unable to add class, Visa expires before class date";
  221.         } else{
  222.             return "Unable to add class: Not enough Units";
  223.         }
  224.     }
  225.  
  226.     @Override
  227.     public String removeClass(Class removedClass) {
  228.         if (classes.contains(removedClass)) {
  229.             classes.remove(removedClass);
  230.             return "Removed " + removedClass.getName();
  231.         } else {
  232.             return "Unable to remove class: Check spelling.";
  233.         }
  234.     }
  235.  
  236.     public int getUnits() {
  237.         int totalUnits = 0;
  238.         for (Class c : classes) {
  239.             totalUnits += c.getUnits();
  240.         }
  241.         return totalUnits;
  242.     }
  243.  
  244.     @Override
  245.     public String getInfo() {
  246.         String[] extraParameters = new String[]{
  247.             "Position: Professor", "Units left: " + (MAXUNITS - getUnits()), "Classes: "};
  248.  
  249.         String[] classesStrings = new String[classes.size()];
  250.  
  251.         for (int i = 0; i < classes.size(); i++) {
  252.             classesStrings[i] = classes.get(i).getName();
  253.         }
  254.         extraParameters = (String[]) StaticDataFunctions.concatenateArrays(extraParameters, classesStrings);
  255.  
  256.         return formatInfo(extraParameters);
  257.     }
  258. }
  259.  
  260. class Professional extends International {
  261.  
  262.     private float wage;
  263.     private String job;
  264.  
  265.     public Professional(String name, Date dateOfBirth, String homeAddress, String localAddress,
  266.             String phoneNumber, Visa visa, String job, float wage) {
  267.         super(name, dateOfBirth, homeAddress, localAddress, phoneNumber, visa);
  268.         this.job = job;
  269.         this.wage = wage;
  270.     }
  271.  
  272.     public void setJob(String job) {
  273.         this.job = job;
  274.     }
  275.  
  276.     public void setWage(float wage) {
  277.         this.wage = wage;
  278.     }
  279.  
  280.     public String getJob() {
  281.         return job;
  282.     }
  283.  
  284.     public float getWage() {
  285.         return wage;
  286.     }
  287.  
  288.     @Override
  289.     public String getInfo() {
  290.         String[] extraParameters = new String[]{
  291.             "Position: " + job, "Slary: " + wage + " Per Hour"};
  292.         return formatInfo(extraParameters);
  293.     }
  294. }
  295. //Class.... class. Class for classes.
  296.  
  297. class Class extends DataBaseValue {
  298.  
  299.     private final int units;
  300.     private final float price;
  301.     private final Date startDate;
  302.     private final Date endDate;
  303.  
  304.     public Class(String name, int units, Date startDate, Date endDate, float price) {
  305.         super(name);
  306.         this.units = units;
  307.         this.price = price;
  308.         this.startDate = startDate;
  309.         this.endDate = endDate;
  310.     }
  311.  
  312.     public int getUnits() {
  313.         return units;
  314.     }
  315.  
  316.     public float getPrice() {
  317.         return price;
  318.     }
  319.  
  320.     public Date getStartDate() {
  321.         return startDate;
  322.     }
  323.  
  324.     public Date getEndDate() {
  325.         return endDate;
  326.     }
  327.  
  328.     @Override
  329.     public String getInfo() {
  330.         return getName() + " " + units + " Units, starts " + startDate;
  331.     }
  332. }
  333.  
  334. class InvalidInfoException extends Exception {
  335.  
  336.     public InvalidInfoException(String message) {
  337.         super("Invalid Personal Data: " + message);
  338.     }
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement