Click here to Skip to main content
15,880,651 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
Hello, I am told that I am needed to:
Project 7

Change the program to use structs for temperature, wind, and weather measurement.

Refactor your program so that the code for

- temperature is in two files (.h – declarations) and (.cpp – implementations)

- wind is in two files (.h – declarations) and (.cpp – implementations)

-WeatherMeasurement is in two files (.h – declarations) and (.cpp – implementations)

- And your main is in one file

I am not sure what it wants me to do. I needed to change my last program using structs which I did, but I have no idea how to do this. If someone could help I will really appreciate it.

What I have tried:

I am new to programming so I am really not sure what it wants. Thank you

++ code:
C++
#include "stdafx.h"

#include <stdio.h>

#include <iostream>

#include<string>

#include <stdlib.h>

#include<vector>

#include<sstream>

using namespace std;

struct Weather_Station

{

string name;

double temperature;

double windspeed;

string windDirection;

};

string DisplayMenu(string station_name)

{

string str, temp;

do

{

cout << "*******************WEATHER STATION: " << station_name\

<< " *******************" << endl << endl;

cout << "I. Input a complete weather reading." << endl;

cout << "P. Print the current weather." << "\n";

cout << "H. Print the weather history (from most recent to oldest)." << endl;

cout << "E. Exit the program." << "\n";

cout << "Enter your choice: " << endl;

cin >> str;

temp = str;

for (std::string::size_type i = 0; i < str.length(); ++i)

temp[i] = toupper(str[i]);

str = temp;

} while (!(str == "I" || str == "P" || str == "H" || str == "E"));

return str;

}

double getTemperature()

{

double temp;

string temp_string;

stringstream converter;

cout << "Enter the temperature: ";

cin >> temp_string;

converter << temp_string;

converter >> temp;

return temp;

}

double getWindSpeed()

{

double temp;

string temp_string;

stringstream converter;

//this loop will be iterated continuously untill user enters windspeed which is greater than zero

cout << "Enter Wind speed: ";

cin >> temp_string;

converter << temp_string;

converter >> temp;

if (temp <= 0)

cout << "Wind speed should be always greater than 0(zero)";

}

do {

} while (temp <= 0);

return temp;

}

string getWindDirection()

{

string temp_string, temp;

do {

cout << "Enter the Wind Direction (North,South,East,West): ";

cin >> temp_string;

temp = temp_string;

for (std::string::size_type i = 0; i < temp_string.length(); ++i)

temp[i] = toupper(temp_string[i]);

} while (!(temp == "NORTH" || temp == "SOUTH" || temp == "EAST" || temp == "WEST" || temp == "N" || temp == "S" || temp == "E") || temp == "W");

temp_string = temp;

if (temp_string == "N")

temp_string = "NORTH";

if (temp_string == "S")

temp_string = "SOUTH";

if (temp_string == "W")

temp_string = "WEST";

if (temp_string == "E")

temp_string = "EAST";

return temp_string;

};

void printWeather(Weather_Station ws)

{

cout << "Station Name " << ws.name << endl;

cout << "Temperature " << ws.temperature << endl;

cout << "Wind Direction " << ws.windDirection << endl;

cout << "Wind Speed " << ws.windspeed << endl;

cout << endl;

}

int main()

{

//Have the user provide a name for the weather station upon entry.

vector<Weather_Station> myStation;

Weather_Station myWeather_Details;

string station_name, input_choice;

int histCount = 0;

cout << "Enter the name of Weather Station: ";

getline(cin, station_name);

myWeather_Details.name = station_name;

while (1)

{

//Control loop to perform various actions

input_choice = DisplayMenu(station_name);

if (input_choice == "I")

{

// get the details

myWeather_Details.temperature = getTemperature(); // get temperature

myWeather_Details.windDirection = getWindDirection(); //get wind direction

myWeather_Details.windspeed = getWindSpeed(); //get wind direction

//store the details

myStation.push_back(myWeather_Details);

}

else if (input_choice == "P")

{

cout << "*************Printing Current Weather*************" << endl;

printWeather(myStation.back());

}

else if (input_choice == "H")

{

//this loop will be iterated continuously untill user gives the input count more than 0 and it is not greater than available record count in vector

do {

cout << "Please enter how many records you want" << "\n";

cin >> histCount;

if (histCount <= 0)

cout << "Input record count should always be greater than 0(zero)"<<"\n";

else if (histCount>>myStation.size())

cout << "Input record count shouldn't be more than available record count"<<"\n";

} while (histCount <= 0 || histCount>>myStation.size());

cout << "*************Printing Weather History*************" << endl;

vector<Weather_Station>::reverse_iterator rit;

for (rit = myStation.rbegin(); rit != myStation.rend(); rit++)

printWeather(*rit);

}

else if (input_choice == "E")

{

exit(0);

}

}

return 0;

}
Posted
Updated 6-Nov-17 17:03pm
v2
Comments
Richard MacCutchan 7-Nov-17 3:57am    
You first need to get used to using proper indentation of your code. And do not use double spacing everywhere, it makes it much harder to read.

1 solution

They want to make the code "Object-oriented" like.
Think of the headers as a file that tells what the implementations of that class are supposed to do. It is a good idea use headers and implementations to keep the behavior of that particular class homogeneous across the application. For more information, you need to read about object-oriented programming.

As for your problem, the declarations go into the .h files. For instance, in wind.h file the "signature" of the methods
string getWindDirection();
and
double getWindSpeed();
.
In the wind.CPP file you use the the header file you just created using the #include directive.Then write the full body of the methods getWindSpeed and getWindDirection and the same thing you need to do with temperature and weather.

For a more detailed example please visit here.

There are a lot of advantages of object-oriented programming which you get to know when you read about it.

Good luck.
 
Share this answer
 
v3
Comments
CPallini 7-Nov-17 3:14am    
5.
GKP1992 7-Nov-17 5:41am    
Thanks :)
KarstenK 7-Nov-17 6:40am    
Separating declaration and implementation is NOT "Object-oriented". It is more "interface-oriented". because you see the function declarations, but not the implementation.
GKP1992 7-Nov-17 22:27pm    
I get that, I used it just for the sake of using a better-known term, figured that they'll get to know when they read about it.
Member 13141830 7-Nov-17 11:31am    
What would I do for WeatherMeasurement then?

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900