Advertisement
Guest User

Untitled

a guest
May 26th, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.45 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <string>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <stdio.h>
  6. #include <conio.h>
  7. #include <clocale>
  8. #include <Windows.h>
  9.  
  10. using namespace std;   
  11. bool WriteString(FILE* fp, const char* str);
  12. bool ReadString(FILE* fp, char* str);
  13.  
  14. struct Reki
  15. {
  16.     char nazv[10];
  17.     char shir[10];
  18.     int glubin;
  19. };
  20. int printMenu();
  21. int _tmain(int argc, _TCHAR* argv[])
  22. {
  23.     SetConsoleCP(1251);
  24.     SetConsoleOutputCP(1251);
  25.     setlocale(LC_ALL, "Russian");
  26.     setlocale(LC_ALL, "rus");
  27.     FILE *fp = NULL;
  28.     FILE * fp1 = NULL; 
  29.     int kolvo = 0;
  30.     int o = 0; 
  31.     Reki au[100];
  32.     Reki tmp;
  33.     char naz[10];
  34.     char sh[10];
  35.     int *len1=new int[10];
  36.     int k=0;
  37.     int i = 0;
  38.     int x = 1;
  39.     int z = 0;  
  40.     int menu = 0;
  41.     int menu2 = 0;
  42.     do
  43.     {   menu = printMenu();
  44.     switch(menu)
  45.     {
  46.     case 1:
  47.         fp = fopen("C:\\уот\\язь.txt", "r");
  48.         if (fp==NULL)
  49.         {
  50.             cout<<"Ошибка чтения файла"<<endl;
  51.             break;
  52.         }
  53.         fscanf(fp, "%d\n", &kolvo);
  54.         for (int i=0; i<kolvo; i++)
  55.         {
  56.             fscanf(fp, "%s\n", &au[i].nazv);
  57.             fscanf(fp, "%s\n", &au[i].shir);
  58.             fscanf(fp, "%d\n", &au[i].glubin);
  59.         }
  60.         fclose(fp);
  61.         printf("Файл загружен\n");
  62.         z = 1;
  63.         break;
  64.     case 2:
  65.         cout<<"Введите кол-во рек"<<endl;
  66.         do
  67.         {          
  68.             cin>>kolvo;
  69.             if (kolvo < 0)
  70.                 cout<<"Кол-во рек не может быть отрицательным"<<endl;
  71.         }while(kolvo<0);
  72.         for (int i = 0; i < kolvo; i++)
  73.         {
  74.             cout<<"Введите название "<<i+1<<"-й реки (не больше 10 символов)"<<endl;
  75.             cin>>naz;
  76.             strcpy(au[i].nazv, naz);
  77.             cout<<"Введите протяженность (не больше 10 символов)"<<endl;
  78.             cin>>sh;
  79.             strcpy(au[i].shir, sh);
  80.             cout<<"Введите глубину реки"<<endl;
  81.             cin>>au[i].glubin;
  82.         }
  83.         cout<<"Выберите следующий пункт меню"<<endl;     
  84.         z = 1;
  85.         break;
  86.     case 3:
  87.         if (z == 0)
  88.         {
  89.             cout<<"В памяти нет рек, введите их или прочитайте файл"<<endl;
  90.         }
  91.         else
  92.         {
  93.             fp = fopen("C:\\уот\\язь.txt", "w");
  94.             if(fp==NULL)
  95.             {
  96.                 printf(" Ошибка открытия файла");
  97.                 break;
  98.             }
  99.             fprintf(fp, "%d\n", kolvo);
  100.             for (int i=0; i<kolvo; i++)
  101.             {
  102.                 fprintf(fp,"%s\n", au[i].nazv);
  103.                 fprintf(fp,"%s\n", au[i].shir);
  104.                 fprintf(fp,"%d\n", au[i].glubin);                  
  105.             }
  106.             fclose(fp);
  107.             printf("Файл сохранен\n");
  108.         }  
  109.         break;
  110.     case 4:
  111.         if (kolvo==0)
  112.         {
  113.             cout<<"Реки отстуствуют"<<endl;
  114.         }
  115.         else
  116.         {
  117.             for (int j = 0; j < kolvo; j++)
  118.             {
  119.                 printf("%d Название: %s    Протяженность %d реки:  %s     Глубина реки:  %d\n", j+1, au[j].nazv, j+1, au[j].shir, au[j].glubin);           
  120.             }
  121.             cout<<"Номера рек подходящих для судоходства"<<endl;
  122.             for (int j = 0; j <= kolvo-1; j++)
  123.             {
  124.                 if (au[j].glubin > 4)
  125.                     cout<<j+1<<"  ";
  126.             }
  127.             cout<<endl;
  128.         }
  129.         break;
  130.     case 5:
  131.         if (kolvo == 0)
  132.         {
  133.             cout<<"Нечего сортировать. Введите реки или прочитайте их из файла."<<endl;
  134.         }
  135.         else
  136.         {
  137.             do
  138.             {
  139.                 cout<<"1.Сортировка по названию реки"<<endl;
  140.                 cout<<"2.Сортировка по протяженности"<<endl;
  141.                 cout<<"3.Сортировка по глубине"<<endl;
  142.                 cout << "-------------------\n";
  143.                 cout << "0.Выход\n\n";
  144.                 cin >> menu2;
  145.                 switch(menu2)
  146.                 {
  147.                 case 1:
  148.                     for (int i = 0; i < kolvo; i++)
  149.                     {
  150.                         for (int j = 0; j < kolvo-1; j++)
  151.                         {
  152.                             if (strcmp(au[j].nazv, au[j+1].nazv) > 0)
  153.                             {
  154.                                 tmp = au[j];
  155.                                 au[j]=au[j+1];
  156.                                 au[j+1]=tmp;
  157.                             }
  158.                         }
  159.                         menu2=0;
  160.                     }
  161.                     break;
  162.                 case 2:
  163.                     for (int i = 0; i < kolvo; i++)
  164.                     {
  165.                         for (int j = 0; j < kolvo-1; j++)
  166.                         {
  167.                             if (strcmp(au[j].shir, au[j+1].shir) > 0)
  168.                             {
  169.                                 tmp = au[j];
  170.                                 au[j]=au[j+1];
  171.                                 au[j+1]=tmp;
  172.                             }
  173.                         }
  174.                         menu2=0;
  175.                     }
  176.                     break;
  177.                 case 3:
  178.                     for (int i = 0; i < kolvo; i++)
  179.                     {
  180.                         for (int j = 0; j < kolvo-1; j++)
  181.                         {
  182.                             if (au[j].glubin<au[j+1].glubin)
  183.                             {
  184.                                 tmp = au[j];
  185.                                 au[j]=au[j+1];
  186.                                 au[j+1]=tmp;
  187.                             }
  188.                         }
  189.                         menu2=0;
  190.                     }
  191.                     break;
  192.                 case 0:
  193.                     menu2=0;
  194.                     break;
  195.                 default:
  196.                     cout<<"Неверный пункт меню"<<endl;
  197.                     break;
  198.                 }
  199.             } while (menu2!=0);
  200.         }
  201.         break;
  202.     case 6:
  203.         if (kolvo == 0)
  204.             cout<<"Нечего удалять.Введите реки или прочитайте их из файла."<<endl;   
  205.         else
  206.         {
  207.             cout<<"Введите номер строки, которую нужно удалить"<<endl;
  208.             do 
  209.             {
  210.                 do
  211.                 {
  212.                     cin>>k;
  213.                     if (k<=0)
  214.                         cout<<"Номер строки не может быть отрицателен либо равен нулю."<<endl;
  215.                 }while(k<=0);
  216.  
  217.                 if (k > kolvo || k < 0)
  218.                     cout <<"Такой строки не существует, введите существующую строку"<<endl;
  219.                 else
  220.                 {
  221.                     if (k == kolvo)
  222.                     {
  223.                         kolvo = kolvo -1;
  224.                         cout<<"Удаление строки выполнено успешно"<<endl;
  225.                     }
  226.                     else
  227.                     {
  228.                         for(int i = k -1; i< kolvo; i++)
  229.                         {
  230.                             au[i]=au[i+1];
  231.                         }
  232.                         kolvo = kolvo -1;
  233.                     }
  234.                     x = 0;
  235.                 }
  236.             }while(x!=0);
  237.         }
  238.         break;
  239.     case 7:
  240.         kolvo = kolvo + 1;
  241.         cout<<"Введите название "<<kolvo<<"-й реки"<<endl;
  242.         cin>>naz;
  243.         strcpy(au[kolvo-1].nazv, naz);
  244.         cout<<"Введите протяженность реки"<<endl;
  245.         cin>>sh;
  246.         strcpy(au[kolvo-1].shir, sh);
  247.         cout<<"Введите глубину реки"<<endl;
  248.         cin>>au[kolvo-1].glubin;
  249.         break;
  250.     case 8:
  251.         fp1 =fopen("C:\\уот\\Binar.dat", "wb");     
  252.         fwrite(&kolvo, sizeof(int), 1, fp1);
  253.         for (int i = 0; i < kolvo; i++)
  254.         {
  255.             WriteString(fp1, au[i].nazv);
  256.             WriteString(fp1, au[i].shir);                      
  257.             fwrite(&au[i].glubin, sizeof(int), 1, fp1);        
  258.         }
  259.         fclose(fp1);       
  260.         break;
  261.     case 9:
  262.         fp1 = fopen("C:\\уот\\Binar.dat", "r");     
  263.         fread(&kolvo, sizeof(int), 1, fp1);
  264.         for (int i = 0; i < kolvo; i++)
  265.         {      
  266.             ReadString(fp1, au[i].nazv);
  267.             ReadString(fp1, au[i].shir);
  268.             fread(&au[i].glubin, sizeof(int),1, fp1);
  269.         }
  270.         cout<<endl;
  271.         cout<<"Количество рек "<<kolvo<<endl;
  272.         fclose(fp1);
  273.         break;
  274.     case 10:
  275.         cout<<"Введите номер редактируемой строки"<<endl;
  276.         cin>>o;
  277.         if (o>kolvo && o<=kolvo)
  278.             cout<<"Вы ввели не существующиую или отрицательную строку"<<endl;
  279.         else
  280.         {
  281.             cout<<"Введите название реки"<<endl;
  282.             cin>>au[o-1].nazv;
  283.             cout<<"Введите протяженность реки"<<endl;
  284.             cin>>au[o-1].shir;
  285.             cout<<"Введите глубину реки"<<endl;
  286.             cin>>au[o-1].glubin;
  287.         }
  288.         break;
  289.     case 0:
  290.         break;
  291.     default:
  292.         cout<<"Неверный пункт меню"<<endl;
  293.         break;
  294.     }
  295.     } while (menu!=0);
  296.     delete[] au;
  297.     system("pause");
  298.     return 0;
  299. }
  300. int printMenu()
  301. {
  302.     cout << "1.Загрузить данные из текстового файла\n";
  303.     cout << "2.Ввести данные вручную\n";
  304.     cout << "3.Записать данные в текстовый файл\n";
  305.     cout << "4.Вывести данные на экран\n";
  306.     cout << "5.Отсортировать данные\n";
  307.     cout << "6.Удалить строку данных\n";
  308.     cout << "7.Добавить строку\n";
  309.     cout << "8.Сохранить в бинарный файл\n";
  310.     cout << "9.Загрузить из бинарнного файла\n";
  311.     cout << "10.Редактирование записи массива\n";
  312.     cout << "-------------------\n";
  313.     cout << "Для выхода из программы:\nНажмите крестик\n\n";
  314.     int m;
  315.     scanf("%d", &m);
  316.     getchar();
  317.     return m;
  318. }
  319. bool WriteString(FILE* fp1, const char* str)
  320. {
  321.     int len = strlen(str);
  322.  
  323.     if (fwrite(&len, sizeof(int),1,fp1) != 1)
  324.         return false;
  325.     if (fwrite(str, sizeof(char), len, fp1) != len)
  326.         return false;
  327.     return true;
  328. }
  329. bool ReadString(FILE* fp1, char* str)
  330. {
  331.     int len = strlen(str); 
  332.     if (fread(&len, sizeof(int),1,fp1) != 1)
  333.         return false;
  334.     if (fread(str, sizeof(char), len, fp1) != len)
  335.         return false;
  336.     str[len]='\0'; 
  337.     return true;
  338. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement