Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string>
- #include <iostream>
- #include <fstream>
- #include <stdio.h>
- #include <conio.h>
- #include <clocale>
- #include <Windows.h>
- using namespace std;
- bool WriteString(FILE* fp, const char* str);
- bool ReadString(FILE* fp, char* str);
- struct Reki
- {
- char nazv[10];
- char shir[10];
- int glubin;
- };
- int printMenu();
- int _tmain(int argc, _TCHAR* argv[])
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "Russian");
- setlocale(LC_ALL, "rus");
- FILE *fp = NULL;
- FILE * fp1 = NULL;
- int kolvo = 0;
- int o = 0;
- Reki au[100];
- Reki tmp;
- char naz[10];
- char sh[10];
- int *len1=new int[10];
- int k=0;
- int i = 0;
- int x = 1;
- int z = 0;
- int menu = 0;
- int menu2 = 0;
- do
- { menu = printMenu();
- switch(menu)
- {
- case 1:
- fp = fopen("C:\\уот\\язь.txt", "r");
- if (fp==NULL)
- {
- cout<<"Ошибка чтения файла"<<endl;
- break;
- }
- fscanf(fp, "%d\n", &kolvo);
- for (int i=0; i<kolvo; i++)
- {
- fscanf(fp, "%s\n", &au[i].nazv);
- fscanf(fp, "%s\n", &au[i].shir);
- fscanf(fp, "%d\n", &au[i].glubin);
- }
- fclose(fp);
- printf("Файл загружен\n");
- z = 1;
- break;
- case 2:
- cout<<"Введите кол-во рек"<<endl;
- do
- {
- cin>>kolvo;
- if (kolvo < 0)
- cout<<"Кол-во рек не может быть отрицательным"<<endl;
- }while(kolvo<0);
- for (int i = 0; i < kolvo; i++)
- {
- cout<<"Введите название "<<i+1<<"-й реки (не больше 10 символов)"<<endl;
- cin>>naz;
- strcpy(au[i].nazv, naz);
- cout<<"Введите протяженность (не больше 10 символов)"<<endl;
- cin>>sh;
- strcpy(au[i].shir, sh);
- cout<<"Введите глубину реки"<<endl;
- cin>>au[i].glubin;
- }
- cout<<"Выберите следующий пункт меню"<<endl;
- z = 1;
- break;
- case 3:
- if (z == 0)
- {
- cout<<"В памяти нет рек, введите их или прочитайте файл"<<endl;
- }
- else
- {
- fp = fopen("C:\\уот\\язь.txt", "w");
- if(fp==NULL)
- {
- printf(" Ошибка открытия файла");
- break;
- }
- fprintf(fp, "%d\n", kolvo);
- for (int i=0; i<kolvo; i++)
- {
- fprintf(fp,"%s\n", au[i].nazv);
- fprintf(fp,"%s\n", au[i].shir);
- fprintf(fp,"%d\n", au[i].glubin);
- }
- fclose(fp);
- printf("Файл сохранен\n");
- }
- break;
- case 4:
- if (kolvo==0)
- {
- cout<<"Реки отстуствуют"<<endl;
- }
- else
- {
- for (int j = 0; j < kolvo; j++)
- {
- printf("%d Название: %s Протяженность %d реки: %s Глубина реки: %d\n", j+1, au[j].nazv, j+1, au[j].shir, au[j].glubin);
- }
- cout<<"Номера рек подходящих для судоходства"<<endl;
- for (int j = 0; j <= kolvo-1; j++)
- {
- if (au[j].glubin > 4)
- cout<<j+1<<" ";
- }
- cout<<endl;
- }
- break;
- case 5:
- if (kolvo == 0)
- {
- cout<<"Нечего сортировать. Введите реки или прочитайте их из файла."<<endl;
- }
- else
- {
- do
- {
- cout<<"1.Сортировка по названию реки"<<endl;
- cout<<"2.Сортировка по протяженности"<<endl;
- cout<<"3.Сортировка по глубине"<<endl;
- cout << "-------------------\n";
- cout << "0.Выход\n\n";
- cin >> menu2;
- switch(menu2)
- {
- case 1:
- for (int i = 0; i < kolvo; i++)
- {
- for (int j = 0; j < kolvo-1; j++)
- {
- if (strcmp(au[j].nazv, au[j+1].nazv) > 0)
- {
- tmp = au[j];
- au[j]=au[j+1];
- au[j+1]=tmp;
- }
- }
- menu2=0;
- }
- break;
- case 2:
- for (int i = 0; i < kolvo; i++)
- {
- for (int j = 0; j < kolvo-1; j++)
- {
- if (strcmp(au[j].shir, au[j+1].shir) > 0)
- {
- tmp = au[j];
- au[j]=au[j+1];
- au[j+1]=tmp;
- }
- }
- menu2=0;
- }
- break;
- case 3:
- for (int i = 0; i < kolvo; i++)
- {
- for (int j = 0; j < kolvo-1; j++)
- {
- if (au[j].glubin<au[j+1].glubin)
- {
- tmp = au[j];
- au[j]=au[j+1];
- au[j+1]=tmp;
- }
- }
- menu2=0;
- }
- break;
- case 0:
- menu2=0;
- break;
- default:
- cout<<"Неверный пункт меню"<<endl;
- break;
- }
- } while (menu2!=0);
- }
- break;
- case 6:
- if (kolvo == 0)
- cout<<"Нечего удалять.Введите реки или прочитайте их из файла."<<endl;
- else
- {
- cout<<"Введите номер строки, которую нужно удалить"<<endl;
- do
- {
- do
- {
- cin>>k;
- if (k<=0)
- cout<<"Номер строки не может быть отрицателен либо равен нулю."<<endl;
- }while(k<=0);
- if (k > kolvo || k < 0)
- cout <<"Такой строки не существует, введите существующую строку"<<endl;
- else
- {
- if (k == kolvo)
- {
- kolvo = kolvo -1;
- cout<<"Удаление строки выполнено успешно"<<endl;
- }
- else
- {
- for(int i = k -1; i< kolvo; i++)
- {
- au[i]=au[i+1];
- }
- kolvo = kolvo -1;
- }
- x = 0;
- }
- }while(x!=0);
- }
- break;
- case 7:
- kolvo = kolvo + 1;
- cout<<"Введите название "<<kolvo<<"-й реки"<<endl;
- cin>>naz;
- strcpy(au[kolvo-1].nazv, naz);
- cout<<"Введите протяженность реки"<<endl;
- cin>>sh;
- strcpy(au[kolvo-1].shir, sh);
- cout<<"Введите глубину реки"<<endl;
- cin>>au[kolvo-1].glubin;
- break;
- case 8:
- fp1 =fopen("C:\\уот\\Binar.dat", "wb");
- fwrite(&kolvo, sizeof(int), 1, fp1);
- for (int i = 0; i < kolvo; i++)
- {
- WriteString(fp1, au[i].nazv);
- WriteString(fp1, au[i].shir);
- fwrite(&au[i].glubin, sizeof(int), 1, fp1);
- }
- fclose(fp1);
- break;
- case 9:
- fp1 = fopen("C:\\уот\\Binar.dat", "r");
- fread(&kolvo, sizeof(int), 1, fp1);
- for (int i = 0; i < kolvo; i++)
- {
- ReadString(fp1, au[i].nazv);
- ReadString(fp1, au[i].shir);
- fread(&au[i].glubin, sizeof(int),1, fp1);
- }
- cout<<endl;
- cout<<"Количество рек "<<kolvo<<endl;
- fclose(fp1);
- break;
- case 10:
- cout<<"Введите номер редактируемой строки"<<endl;
- cin>>o;
- if (o>kolvo && o<=kolvo)
- cout<<"Вы ввели не существующиую или отрицательную строку"<<endl;
- else
- {
- cout<<"Введите название реки"<<endl;
- cin>>au[o-1].nazv;
- cout<<"Введите протяженность реки"<<endl;
- cin>>au[o-1].shir;
- cout<<"Введите глубину реки"<<endl;
- cin>>au[o-1].glubin;
- }
- break;
- case 0:
- break;
- default:
- cout<<"Неверный пункт меню"<<endl;
- break;
- }
- } while (menu!=0);
- delete[] au;
- system("pause");
- return 0;
- }
- int printMenu()
- {
- cout << "1.Загрузить данные из текстового файла\n";
- cout << "2.Ввести данные вручную\n";
- cout << "3.Записать данные в текстовый файл\n";
- cout << "4.Вывести данные на экран\n";
- cout << "5.Отсортировать данные\n";
- cout << "6.Удалить строку данных\n";
- cout << "7.Добавить строку\n";
- cout << "8.Сохранить в бинарный файл\n";
- cout << "9.Загрузить из бинарнного файла\n";
- cout << "10.Редактирование записи массива\n";
- cout << "-------------------\n";
- cout << "Для выхода из программы:\nНажмите крестик\n\n";
- int m;
- scanf("%d", &m);
- getchar();
- return m;
- }
- bool WriteString(FILE* fp1, const char* str)
- {
- int len = strlen(str);
- if (fwrite(&len, sizeof(int),1,fp1) != 1)
- return false;
- if (fwrite(str, sizeof(char), len, fp1) != len)
- return false;
- return true;
- }
- bool ReadString(FILE* fp1, char* str)
- {
- int len = strlen(str);
- if (fread(&len, sizeof(int),1,fp1) != 1)
- return false;
- if (fread(str, sizeof(char), len, fp1) != len)
- return false;
- str[len]='\0';
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement