Дали задание в университете:
Практически всё доделал, однако не пойму, как выполнить условие, при котором выводиться будут только семена, которые можно высаживать с марта по май. Решил сделать для этого отдельный пункт в меню (чтобы при его выборе выводились как раз именно эти семена), пытался написать для него отдельную функцию Seasonality(), но ничего не получилось. Вот мой код:
#include <iostream>
#include <fstream>
#include <string>
#include <Windows.h>
using namespace std;
bool WorkFile = true;
void InputFile(string* output_file)
{
fstream file("C:\\Это папка\\4 задание.bin");
string input;
while (getline(file, input))
{
*output_file += input;
if ('\n')
* output_file += '\n';
}
file.close();
}
void View()
{
string* str = new string();
InputFile(str);
cout << *str << endl;
}
void Adding()
{
string* str = new string();
string AddStr, EditStr, NewPar, NewFile;
InputFile(str);
AddStr = *str;
AddStr += '\0';
int lengthStr = AddStr.length();
cout << "Введите новый пункт : " << endl << endl;
for (int i = 0; i < lengthStr; i++)
{
if (AddStr[i] != '*')
EditStr += AddStr[i];
if (AddStr[i] == '*')
{
cout << EditStr << " ";
getline(cin, NewPar);
EditStr += " ";
EditStr += NewPar;
int len = NewPar.length();
if (len <= 5)
{
EditStr += '\t';
EditStr += '\t';
EditStr += '\t';
}
else
{
EditStr += '\t';
EditStr += '\t';
}
EditStr += '|';
EditStr += '*';
EditStr += '\0';
int length_editStr = EditStr.length();
for (int k = 0; k < length_editStr; k++)
{
NewFile += EditStr[k];
}
EditStr.clear();
}
}
ofstream file1("C:\\Это папка\\4 задание.bin");
file1 << NewFile;
file1.close();
}
void Delete()
{
string* str = new string();
string Delete, EditStr, NewFile;
int DeletePar, DeleteColumn = 0;
InputFile(str);
Delete = *str;
Delete += '\0';
int length_editStr = Delete.length();
cout << "Введите номер пункта, который необходимо удалить : ";
cin >> DeletePar;
for (int i = 0; i < length_editStr; i++)
{
if (Delete[i] != '|')
EditStr += Delete[i];
if (Delete[i] == '|')
{
DeleteColumn++;
if (DeleteColumn == DeletePar)
EditStr = "";
else
{
NewFile += EditStr;
NewFile += '|';
EditStr.clear();
}
}
if (Delete[i] == '\n')
DeleteColumn = 0;
if (i == length_editStr - 1)
NewFile += '*';
}
ofstream File("C:\\Это папка\\4 задание.bin");
File << NewFile;
File.close();
}
void Edit()
{
string* str = new string();
string Str, EditPunct, EdStr, NewFile;
InputFile(str);
Str = *str;
Str += '\0';
int LenStr = Str.length();
int EdPunct, EdColumn = 1;
cout << "Введите номер пункта, который необходимо изменить(Если словочетание, слова отделять знаком '.' ) : ";
cin >> EdPunct;
for (int i = 0; i < LenStr; i++)
{
if (Str[i] != '|')
{
if (Str[i] == '\n')
{
EdColumn = 1;
NewFile += EdStr;
NewFile += '*';
EdStr.clear();
}
EdStr += Str[i];
}
if (Str[i] == '|')
{
EdColumn++;
EdStr += '|';
EdStr += " ";
i++;
if (EdColumn == EdPunct)
{
cout << EdStr << " ";
cin >> EditPunct;
EdStr += EditPunct;
int len = EditPunct.length();
if (len <= 8)
{
EdStr += '\t';
EdStr += '\t';
}
else
EdStr += '\t';
EdStr += '|';
while (Str[i] != '|') i++;
}
}
}
ofstream File("C:\\Это папка\\4 задание.bin");
File << NewFile;
File.close();
}
void AddString()
{
string* str = new string();
string Str, EdStr;
InputFile(str);
Str = *str;
int NumPunct = 0;
for (int i = 0; Str[i] != '*'; i++)
{
if (Str[i] == '|')
NumPunct++;
else
continue;
}
for (int k = 1; k <= NumPunct; k++)
{
cout << "Введите пункт " << k << " : ";
cin >> EdStr;
Str += EdStr;
Str += '\t';
Str += '|';
if (k == NumPunct)
Str += '*';
Str += " ";
}
ofstream File("C:\\Это папка\\4 задание.bin");
File << Str;
File.close();
}
void DeleteString()
{
string* str = new string();
string Str, EdStr, NewFile;
InputFile(str);
Str = *str;
Str += '\0';
int len = Str.length();
int DelPunct, NumPunct = 1;
cout << "Введите номер строки, которую необходимо удалить: " << endl;
cin >> DelPunct;
for (int i = 0; i < len; i++)
{
EdStr += Str[i];
if (Str[i] == '*')
{
if (NumPunct == DelPunct)
DelPunct = 0;
else if (NumPunct != DelPunct)
{
NewFile += EdStr;
}
EdStr.clear();
NumPunct++;
}
}
ofstream File("C:\\Это папка\\4 задание.bin");
File << NewFile;
File.close();
}
void Seasonality()
{
ifstream file("C:\\Это папка\\4 задание.bin");
string* str = new string();
string Str, Mart, April, May, EditStr;
Mart = "Март", April = "Апрель", May = "Май";
int lMart, lApril, lMay;
lMart = Mart.length();
lApril = April.length();
lMay = May.length();
InputFile(str);
Str = *str;
Str += '\0';
int len = Str.length();
int Cout = 1, NumStr = 0;
if (len = lMart)
{
InputFile(str);
cout << *str << endl;
}
else if (len = lApril)
{
InputFile(str);
cout << *str << endl;
}
else if (len = lMay)
{
InputFile(str);
cout << *str << endl;
}
}
void Menu()
{
fstream Menu("C:\\Это папка\\Меню.txt");
string output, OMenu, menu;
while (getline(Menu, output))
{
OMenu += output;
if ('\n')
OMenu += '\n';
}
Menu.close();
cout << OMenu << endl;
cout << "Введите пункт меню : ";
getline(cin, menu);
cout << endl << endl;
if (menu == "Выход")
WorkFile = false;
else if (menu == "Просмотр")
View();
else if (menu == "Добавление пункта")
Adding();
else if (menu == "Удаление пункта")
Delete();
else if (menu == "Добавление строки")
AddString();
else if (menu == "Удаление строки")
DeleteString();
else if (menu == "Корректировка данных")
Edit();
else if (menu == "Сезон Март-Май")
Seasonality();
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
while (WorkFile)
{
Menu();
}
}
Результат работы программы:
Вы не думали реорганизовать код? на данный момент у вас все действия ведутся на уровне работы с файлом. Но можно перейти к простейшей схеме данные-представление.
Т.е. вы считываете информацию из файла в массив/вектор структур (каждая структура содержит в себе название, месяц высадки, количество семян и т.п.). А в дальнейшем вы работаете уже не напрямую с файлом, а с этим вектором, а по окончании работы вы сохраняете свой вектор в файл, чтобы все сделанные изменения сохранились на жестком диске. Такой подход значительно упростит многие рутинные операции, типа добавления, удаления, поиска по полю и т.п.
Теперь по теме.
у вас ошибка в операции сравнения if (len = lMart)
и далее в блоке условий, вместо сравнения вы делаете присваивание
void Seasonality()
{
...
if (len == lMart)
{
InputFile(str);
cout << *str << endl;
}
...
}
Однако это не решит проблему вывода, т.к. (насколько я понимаю код) вы сравниваете длину месяца с длиной строки, которая считывается из файла, а надо искать нужные вам месяцы...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите есть возможность после перезагрузки страницы повторно использовать значение поля input? те
Я новичокПисал программу пару недель, сейчас обнаружил, что основной файл проекта это Program