Using Java language and following the requirements posted below.
Several GMU students have decided to start their own cloud computing company called GMU Cloud which hosts virtual machines (VM) for customers. They have hired you as an IT Architect to develop a system to track the customers of their cloud and compute the customer bills. GMU Cloud’s marketing department forecasts the maximum number of customers to be less than 1000. A customer is given a 7-character application generated customer ID in the format of “usr” plus a 4-digit number, such as “usr1243”, whereby customer ID numbers start at “usr1000”. Additionally, the system must track the customer’s name, phone number, email address, and if the customer has a corporate discount. Customers with corporate discounts receive 20% off their total bill. The customer phone number is validated as (xxx) xxx-xxxx where each x must be a digit, such as (571) 123-3456. The customer email address is validated as containing only one @ sign and only one period – where the @ sign appears prior to the period and there exists at least one letter or digit: before the @ sign, in between the @ sign and the period, and after the period, such as [email protected]
Each customer will only select a single VM. All VMs have a flat monthly rate of $20 which includes 8 GB of memory and 20 GB of SSD storage. Additionally, the customer must customize the VM based on the customer’s needs. The customer must choose from one of the following choices: web server, file server, or Bitcoin miner.
Those who choose the web server VM customization must choose the additional amount of memory they want at a monthly rate of $10 per 8 GB increments. The can choose up to and addition 120 GB of memory (this would give them a total of 128 GB of memory for their VM).
If the customer chooses the file server VM customization they must select between either block storage or object storage. They must also choose the type of storage media of SSD or magnetic storage. SSD storage is $5 per terabyte per month and magnetic storage is $2 per terabyte per month. The maximum amount of storage is 1024 terabytes (this does not include the 20 GB of standard SSD storage).
If the customer chooses the Bitcoin miner customization the customer must select the number and brand of GPUs. A VM can support up to 8 GPUs and they can either be the brand AMD or Nvidia. The GPUs cost $10 per month, but for Nvidia GPUs there is a flat $15 monthly fee.
Create an efficient, object-oriented solution, using solid design principles, allowing the user to enter all customers (and all associated details), one at a time, until they indicate they are finished entering customers. If more than 1000 customers are attempted to be entered, the user should see an error message. After each customer is entered, print a well-formatted report to the screen (monitor) displaying all customer details, the total amount of monthly fees incurred, and the total amount of monthly fees incurred with the corporate discount, if applicable.
Next, management has asked you to print a summary report on customer statistics to the screen (monitor). This well-formatted summary must include how many customers have VMs, total amount of all monthly fees collected, the average monthly fee collected per customer, how much memory and disk space and GPUs are used, and the number of customers who are Bitcoin miners. Finally, management needs a printable roster that can be emailed to all staff. To create the printable roster, build a text file containing a list of all customers and the total number of customers. For each customer, you must include two attributes: the customer’s name and their associated customer ID number.
· Pay very careful attention to the logic requirements of the scenario including the relationships between objects. Make sure your solution meets each requirement.
· Think about what type of validations might be appropriate for this application. Unless otherwise specified, all user input should contain some type of reasonable validation.
· Your solution must demonstrate use object-oriented techniques. No points earned for a procedural solution.
· Your solution must include appropriate constants, constructors, accessors, mutators, and special purpose methods (including a toString() method) with exception handling, as necessary in support of the problem.
· Your solution may not use parallel arrays anywhere in the solution.
· Your solution must be designed as a modular solution using methods other than main, with each method performing one task.
· Your solution may only import JOptionPane and the libraries listed in the Files module. You may not import any other Java library.