The purpose of this assignment is to demonstrate how to design a class when given a diagram of the specification and implementation details, how to split the specification and implementation into different files, and how to use objects as array elements and pass the array to a function. Along with these assignment instructions you should find a UML diagram outlining the class members, and a presentation outlining the steps needed to add the implementation and specification (.h and .cpp) files where the class will be declared and defined.

Objectives to be met:

  • Demonstrate how to write a class according to UML Diagram specifications.
  • Demonstrate the separation of class specification and implementation into separate files.
  • Demonstrate how to declare, define, and use an array with objects as array elements.
  • Demonstrate how to declare, call, and define a function with an array parameter type.

For this assignment, you will need to define a class that encapsulates a single days weather information based on the UML diagram I have provided. The diagram specifies data members, constructors, and function members. Included is a list of implementation details for defining the constructors and function members. Once you have written, compiled, and tested your class, you begin writing the main program (client code) that will define and use an array of these objects.

I recommend starting with new empty project to focus first on completing the WeatherInfo class requirements along with a temporary test program to make sure the constructors and function members all work correctly. For example, create one object using the constructor with no arguments and use it to test all the transformer (setXXX) member functions and print it with the toString() member function. Then create another object using the constructor with arguments and use that one to print its values by calling all the observer (getXXX) member functions. Once you are satisfied the class is implemented properly, exclude the test program from Solution Explorer keeping only the WeatherInfo.h and WeatherInfo.cpp files, and then add a new .cpp file to the project for completing the assignment (Add | New).

Also

  • Follow the UML diagram specifications and implementation details.
  • The specifications for the WeatherInfo class should be placed in a header (WeatherInfo.h) file and include data and function member declarations only.
  • The constructor and function member definitions for the WeatherInfo class should be placed in an implementation (WeatherInfo.cpp) file.
  • In the programs main() function, define a single 1-dimensional array of size 7 defined using type WeatherInfo to hold data for at most 7 days of weather information.
  • Use a DO-WHILE loop to input data for creating objects and storing them in the array.
  • Demonstrate how to declare, call, and define a function where you pass the array and day counter to that function, and that uses a FOR loop to print the list of weather information.Considerations:
    • You may need to include string and using namespace std; in your WeatherInfo.h file.
    • You will need to include sstream and possibly iomanip in your WeatherInfo.cpp file. Because the string header and namespace are already included in WeatherInfo.h, you should not need to add them in this file, but you can if you want to.
    • You will need to add include WeatherInfo.h in any file that uses the WeatherInfo class declarations, for example in the source code (.cpp) file where you define the main() function.
    • You can use a temporary WeatherInfo object in the input loop while storing objects in the array. For example, define and use variables to read the week day, high temperature, low temperature and rain fall from the user, you then use those variables to declare a temporary WeatherInfo object and assign it to the next array element: WeatherInfo temp(weekDay, highTemp, lowTemp, rainFall); week[dayCount] = temp; Or you can simply use the constructor by itself to assign an object directly to the array elements: week[dayCount] = WeatherInfo(weekDay, highTemp, lowTemp, rainFall);
    • When defining the toString() function member, refer to the Employee.cpp example (lab exercise) demonstrating how to do this with numeric types using an ostringstream output object, which is an output string stream that formats an output string in memory. You will need to include the sstream library header in order to declare one of these objects in a function, and include iomanip if you want to use setw() and precision() manipulators. Then you can use basically the same formatting including setw(), precision(), fixed, and showpoint that weve used elsewhere to format a line of output for the weather information list. You even can insert endl manipulators into the string but always should use one last ends manipulator (meaning end string) to mark the end of the string that is being formatted in memory; otherwise your output could print garbage at the end of the string. Defining a function like this will allow you to simplify the code in the rest of the program by just calling the toString() function for each array element, and if the formatted string prints on one line (no endl inserted into the string by the function) then you can adjust the overall width as necessary: cout << setw(56) << weed[i].toString() << endl;

Improvements:

  • Declare, call, and define 3 value-returning functions in your main program named indexOfHightestTemp, indexOfLowestTemp, and totalRainFall. The first one should find and return the array location (index) of the highest temperature, and the second one should find and return the array location for the lowest temperature. The last one should find and return the total rainfall. The main program calls these functions to get those values and then print the reading and day for the highest and lowest temperatures, and the total rain fall.
  • Declare, call, and define 2 more value returning functions in your main program named averageHigh and averageLow. The first one should find and return the average high temperature, and the second one should find and return the average low temperature. The main program calls these functions to get those values and then print them at the bottom of the list under those columns of output. Also, calculate and print the average rain fall since you already should have that total handy.
  • Declare, call, and define a function named userInput. Modify the program as necessary to move the input DO-WHILE loop into that function. This will need to be a value-returning function and should return the day count incremented by the loop back to main since other functions (and loops) will need to know that counter value. This function also will need the array and size passed in as parameters since it will be getting filled with objects created from user input. Additional Requirements: Include your name, course, section (CSC240) at the top of the main program file as a comment. Compress and submit your project folder as 1 .zip file. If you need help with making a .zip file, review the presentation about How to Submit Assignments at the top of the Assignments folder or use the Discussion Board for assistance. (All source, header, and data files must be inside the project folder.). Before you compress (zip) your completed project, you can open the Build menu and execute the Clean Solution command to remove some unnecessary files, and then close Visual Studio and compress the project folder. Be sure you submit the 1 compressed (zip) file containing the project folder and files.

Sample program output with Recommended Improvements:

Week Day Hi Low Rain
-------- ---- ---- ----
Sunday 38 26 1.0
Monday 35 20 0.0
Tuesday 34 19 0.0
Wednesday 36 25 0.0
Thursday 38 27 0.5
Friday 38 32 1.2
Saturday 40 35 1.8
-------- ---- ---- ----
Averages 37.0 26.3 0.6
Highest reading: 40 [Saturday]
Lowest reading: 19 [Tuesday]
Total rainfall: 4.5"
Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.