Recent Question/Assignment

Read this document carefully! Any clarification should be sought at the earliest opportunity. Information about the assignment and assistance, where necessary, will be presented during lectures and practicals.
This is an individual investigation assignment. You will work on this in your own time and complete the work ready for submission by the advertised deadline.
Construction Quotation Assistant
You have been approached by a local small business that specializes in the construction of concrete retaining walls to create an application to enhance part of the core functionality of the business. The application you are to create should automate the quotation process for pricing the construction of retaining walls.
Each square metre of retaining wall costs a base amount of $514.72. This cost covers the price for site preparation, supply of material and construction of wall. Issues impacting the construction and therefore price of retaining walls include the following: difficulty of the land where the wall is to be built (normal, sandy, limestone, bluestone), the ease of access to the site, and the address of the walling project.
The user of the application will be able to specify the length of the wall and the height of the start and end of the wall. Concrete sleepers are 2m in length and 200mm in height. For this application it can be assumed that all walls are to be built from this basic size.
For this task you are asked to create a program that demonstrates the core algorithms that will prototype the general operation of the application. It should be a text based application that will accept user input and display the price and number of sleepers required for a retaining wall. The output should not only provide the two values mentioned previous but should also provide an itemized representation of each bay of sleepers. Finally you should capture all inputs for a session and write these values out to a CSV file that could potentially be opened in a spreadsheet application.
The following is a typical interaction session (user input is in bold):
Welcome to the Quotation Assistant
Use this application to generate the required number of sleepers for your job and the initial quotation.
===================================================================
Would you like to generate a (N)ew quote or (R)ead in an existing file (N/R)?N
This is job number 1
What is the length of the wall (in metres)? 10
What is the start height of the wall (in metres)? 1.0
What is the end height of the wall (in metres)? 2.0
Is the wall to be built locally (Y/N)? Y
Is there adequate access to the site (Y/N)? Y
What is the difficulty of the site (N)ormal, (S)andy, (L)imestone, or ( B)luestone (N/S/L/B)? N
The wall will require 37 sleepers, will be 14.8m2 and cost $7617.86.
There will be 5 bays with the following sleeper totals:
| 5 | 6 | 7 | 9 | 10 |
Would you like to begin a new quotation (Y/N)? Y
This is job number 2
What is the length of the wall (in metres)? 15 What is the start height of the wall (in metres)? 0.4 ...
Would you like to begin a new quotation (Y/N)? N Thank you. Goodbye.
Walls should be built with a set angle to the slope from the top of the wall to the base of the wall. Using this fixed angle value you will be able to calculate the number of sleepers required for each bay and the wall total.
By using trigonometry calculations you can calculate the height of individual bays. The algorithm required is as follows:
a. Calculate the angle of the entire wall from the lowest height to the start of the highest bay height, ie:

b. Using this angle and the known length of each bay, the number of sleepers for each bay can be calculated. If the calculated height of a bay exceeds half the height of a sleeper than a full sleeper is required. For example a height of 249mm for a bay will require one sleeper; a height of 499mm will require 2 sleepers; a height of 750mm will require 4 sleepers.
c. The total number of sleepers can then be used to calculate the total metres squared required to construct the wall, which can then be used to calculate the total cost.
You will need to ensure that the user supplies the correct input values. If incorrect values are supplied then you should ask for them to be re-entered.
The following criteria need to be addressed when calculating the overall cost of the wall:
i. If the wall is not to be built locally then an additional 5% is added to the cost.
ii. If the site has poor access then an additional 30% is added to the cost.
iii. If the site has sandy conditions then an additional 10% is added to the cost. iv. If the site has limestone then an additional 15% is added to the cost.
v. If the site has bluestone then an additional 30% is added to the cost.
These costs should be compounded as necessary. The user can only specify one type of site condition however (normal OR sandy OR limestone OR bluestone). Therefore the largest additional percentage that could be applied to a job is an additional 65% (5% for remote + 30% for poor access + 30% for bluestone).
Finally you should also implement a capacity to read existing CSV files and display the job details to the user. This will mean that your initial prompt to the user should look like the following:
Welcome to the Quotation Assistant
Use this application to generate the required number of sleepers for your job and the initial quotation.
===================================================================
Would you like to generate a (N)ew quote or (R)ead in an existing file (N/R)? R
Reading in file retainingWalls.csv
ID | Length | Sqr Face | Cost | Num Slpr | Slpr Breakdown
1 | 10 | 14.8 | 7617.86 | 37 | 5 ,6,7,9, 10 2 | 26 | 26 | 13382.72 | 65 | 5 ,5,5,5,5,5,5,5,5,5,5,5, 5
...
While you are only displaying some of the details the CSV file should include the following fields for each job:
Job ID
Length
Start Height
End Height
Local Site
Adequate Access
Site Condition
Number of Sleepers
Square Face
Cost
Sleeper Breakdown
Deliverables
This application will assess your knowledge of the C++ programming language by testing your ability to develop:
Sequence,
Selection, Iteration.
Functions,
Arrays,
File IO.
You will not have an opportunity to work on this assignment during practicals throughout the semester. You may ask you lecturer for some general direction but they will not be assisting in the development of the program. You will receive more information about the assignment as needed through lectures and on FLO.
You are free to implement the solution in any fashion that you like. Remember to analyse the problem as necessary and design a solution that suits the deliverables. Treat this as a professional activity, so inline comments, documentation and application output should be presented appropriately for the target audience. You need to determine the structures you will use. This is an application that may reuse elements significantly and so your development should consider this.
You code should contain appropriate inline comments to assist future developers. You will need to prepare suitable documentation describing your product and the development process. This document should include rationale for decisions made and describe the structures utilized and the purpose of each. It should document each function describing its purpose and necessary input and output. A brief user guide should also be prepared describing what the application is and the use of the program. Screenshots or sample output should be included. The two documents should be no more than 4 pages each including images.
You will be awarded marks for the level of completion of your program. This assignment will be marked out of a total of 100 marks as follows:
70 marks for the funcationality of the program (0 marks if the progam does not compile)
10 marks for design adn structures used (functions, selections, loops, inline comments)
10 marks for documentation (user guide and development documentation)
10 marks for style (coding conventions and whitespace)
Submission
The work you submit should adhere to the guidelines presented in this document. If your code does not compile you will be awarded 0 marks. Code that does not compile will not be investigated further. You will not be given an opportunity to resubmit working code. This is a programming assignment and the responsibility for submitting a working product is yours.
Requests for extension need to be presented in writing (using the appropriate form) as early as possible.
The additional documentation files should be placed in the project directory. This directory should be zipped and submitted through the appropriate link on FLO.
The due date for this assignment is 10:00am Monday, June 1, 2015.