Member 13141830 Ответов: 1

Как мне организовать свой код?


Здравствуйте, мне сказали, что я должен это сделать.:
Проект 7

Измените программу, чтобы использовать структуры для измерения температуры, ветра и погоды.

Рефакторинг вашей программы так, чтобы код для

- температура находится в двух файлах (.h – объявления) и (.cpp – реализации)

- wind находится в двух файлах (.h – объявления) и (.cpp – реализации)

-WeatherMeasurement находится в двух файлах (.h – объявления) и (.cpp – реализации)

- А ваш главный находится в одном файле

Я не знаю, чего он от меня хочет. Мне нужно было изменить свою последнюю программу, используя структуры, которые я сделал, но я понятия не имею, как это сделать. Если кто-то может помочь, я буду очень признателен.

Что я уже пробовал:

Я новичок в программировании, поэтому я действительно не уверен, чего он хочет. Спасибо

++ код:
#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;

}

Richard MacCutchan

Сначала вам нужно привыкнуть использовать правильный отступ вашего кода. И не используйте двойные интервалы везде, это делает его гораздо труднее читать.

1 Ответов

Рейтинг:
0

GKP1992

Они хотят сделать код "объектно-ориентированным".
Думайте о заголовках как о файле, который сообщает, что должны делать реализации этого класса. Это хорошая идея использовать заголовки и реализации, чтобы сохранить поведение этого конкретного класса однородным по всему приложению. Для получения дополнительной информации вам необходимо прочитать об объектно-ориентированном программировании.

Что касается вашей проблемы, то объявления идут в файлы .h. Например, в ветре.h файл "сигнатура" методов

string getWindDirection();
и
double getWindSpeed();
.
В ветре.CPP-файл вы используете заголовочный файл, который только что создали с помощью директивы #include.Затем напишите полный текст методов getWindSpeed и getWindDirection и то же самое нужно делать с температурой и погодой.

Для получения более подробного примера, пожалуйста, посетите сайт здесь.

Есть много преимуществ объектно-ориентированного программирования, которые вы узнаете, когда прочитаете о нем.

Удачи.


CPallini

5.

GKP1992

Спасибо :)

KarstenK

Разделение декларации и реализации не является "объектно-ориентированным". Он более "ориентирован на интерфейс". потому что вы видите объявления функций, но не реализацию.

GKP1992

Я понял это, я использовал это просто ради использования более известного термина, полагая, что они узнают, когда прочитают об этом.

Member 13141830

Что я тогда буду делать для измерения погоды?

GKP1992

На самом деле нелегко объяснить, что вы должны делать. Как только вы начнете это делать, вы узнаете. Идея состоит в том, чтобы сохранить общие функциональные возможности в одном файле, как для ветра и температуры. Я бы добавил еще один класс для метеостанции, который содержит информацию о метеостанции, а затем класс, который использует все это для измерения и отображения информации о погоде. Вызовите эти функции из основной функции. Я понимаю, что это может показаться запутанным, поэтому единственный способ-погрузиться в него.