Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.55 KB | None | 0 0
  1. /* Книги: автор, наименование, количество страниц, цена. Дополнить вывод рекомендацией
  2. книг, которые можно прочитать за один вечер (количество страниц меньше 100).*/
  3.  
  4. /*Программа должна уметь:
  5. а) сохранять все данные (массив структур) в бинарный файл;
  6. б) загружать данные из бинарного файла;
  7. в) сохранять данные в текстовом файле в формате, удобном для последующей загрузки???00;
  8. г) загружать данные из текстового файла;
  9. д) сохранять данные в текстовом файле, удобном для работы человека (отчет).
  10. */
  11.  
  12.  
  13. #include <conio.h>
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include <Windows.h>
  17. #include <iostream>
  18. #include <time.h>
  19.  
  20. using namespace std;
  21. struct tovar
  22. {
  23.     char name[60];
  24.     char model[40];
  25.     float cost;
  26.     int page;
  27. };
  28.  
  29. bool WriteString (FILE* fp, const char* str);
  30.  
  31. void printvseprodukt(int a,tovar *Tov);
  32. void printproduktponame(int a,tovar *Tov);
  33. void printproduktnovinka(int a,tovar *Tov);
  34. tovar* dobavlenie(tovar *Tov,int &a);
  35. void sortpocene(int a,tovar *Tov);
  36. void sortpoavtoru(int a,tovar *Tov);
  37. void sortpopage(int a,tovar *Tov);
  38. void sortponame(int a,tovar *Tov);
  39. tovar* delStruct(tovar* Tov, int* a);
  40. void printMenu ();
  41.  
  42. int main ()
  43. {
  44.     SetConsoleCP(1251);
  45.     SetConsoleOutputCP(1251);
  46.     setlocale(LC_ALL, "Russian");
  47.     setlocale(LC_ALL, "rus");
  48.     setlocale(0, "");
  49.  
  50.     tovar *Tov=NULL;
  51.     int a = 0, flag = 0;
  52.     int menu=0, Pmenu =0;
  53.     int god;
  54.     FILE *fp = NULL;
  55.  
  56.     while(menu!=11)
  57.     {
  58.         printMenu();
  59.         printf("Колличество записей в базе %d\n",a);
  60.         scanf("%d", &menu);
  61.         switch(menu)
  62.         {
  63.         case 1:
  64.             Tov=dobavlenie(Tov, a);
  65.             flag=1;
  66.             break;
  67.         case 2:
  68.             if (a==0)
  69.             {
  70.                 printf("В базе данных нет записей\n");
  71.                 getch();
  72.                 break;
  73.             }
  74.             printvseprodukt(a, Tov);
  75.             break;
  76.         case 3:
  77.             if (a==0)
  78.             {
  79.                 printf("В базе данных нет записей\n");
  80.                 getch();
  81.                 break;
  82.             }
  83.             printproduktponame(a, Tov);
  84.             break;
  85.         case 4:
  86.             if (a==0)
  87.             {
  88.                 printf("В базе данных нет записей\n");
  89.                 getch();
  90.                 break;
  91.             }
  92.             printproduktnovinka(a, Tov);
  93.             break;
  94.         case 5:
  95.             if (a==0)
  96.             {
  97.                 printf("В базе данных нет записей\n");
  98.                 getch();
  99.                 break;
  100.             }
  101.             {
  102.                     system("cls");
  103.                     printf("1: Сортировать по цене\n");
  104.                     printf("2: Сортировать по автору\n"); !!!
  105.                     printf("3: Сортировать по количеству страниц\n"); !!!
  106.                     printf("4: Сортировать по названию\n");
  107.                     printf("---------------------------------------------------\n");
  108.                     scanf("%d", &Pmenu);
  109.                     switch(Pmenu)
  110.                     {
  111.                                 case 1:
  112.                                     sortpocene(a, Tov);
  113.                                     break;
  114.                                 case 2:
  115.                                     sortpoavtoru(a, Tov);
  116.                                     break;
  117.                                 case 3:
  118.                                     sortpopage(a, Tov);
  119.                                     break;
  120.                                 case 4:
  121.                                     sortponame(a, Tov);
  122.                                     break;
  123.  
  124.                     }
  125.                                     break;
  126.                 }
  127.         case 6:
  128.             if (a==0)
  129.             {
  130.                 printf("В базе данных нет записей\n");
  131.                 getch();
  132.                 break;
  133.             }
  134.             Tov = delStruct(Tov, &a);
  135.             break;
  136.         case 7:
  137.             if (a==0)
  138.             {
  139.                 printf("В базе данных нет записей\n");
  140.                 getch();
  141.                 break;
  142.             }
  143.             {
  144.                 fp = fopen("text.txt", "w");
  145.                 if(fp==NULL)
  146.                 {
  147.                     printf(" Ошибка открытия файла");
  148.                     break;
  149.                 }
  150.                 fprintf(fp, "%d\n", a);
  151.                 for (int i=0; i<a; i++)
  152.                 {
  153.                     fprintf(fp,"%s\n", Tov[i].name);
  154.                     fprintf(fp,"%s\n", Tov[i].model);
  155.                     fprintf(fp,"%f\n", Tov[i].cost);
  156.                     fprintf(fp,"%d\n", Tov[i].page);
  157.                 }
  158.                 fclose(fp);
  159.                 printf("Файл сохранен\n");
  160.                 getch();
  161.             }
  162.             break;
  163.         case 8:
  164.             {
  165.                 fp = fopen("text.txt", "r");
  166.                 if(fp==NULL)
  167.                 {
  168.                     printf(" Ошибка чтения");
  169.                     break;
  170.                 }
  171.                 fscanf(fp, "%d\n", &a);
  172.                 if (a>0)
  173.                 {
  174.                     delete [] Tov;
  175.                 }
  176.                 Tov=new tovar[a];
  177.                 for (int i=0; i<a; i++)
  178.                 {
  179.                     fgets(Tov[i].name,50,fp);
  180.                     Tov[i].name[strlen(Tov[i].name)-1]='\0';
  181.                     fgets(Tov[i].model,40,fp);
  182.                     Tov[i].model[strlen(Tov[i].model)-1]='\0';
  183.                     fscanf(fp,"%f\n",&Tov[i].cost);
  184.                     fscanf(fp,"%d\n",&Tov[i].page);
  185.                 }
  186.                 fclose(fp);
  187.                 printf("Файл загружен\n");
  188.                 flag=1;
  189.                 getch();
  190.             }
  191.             break;
  192.  
  193.  
  194.  
  195.  
  196.             case 9:
  197.             if (a==0)
  198.             {
  199.                 printf("В базе данных нет записей\n");
  200.                 getch();
  201.                 break;
  202.             }
  203.             {
  204.                 fp = fopen("text_b.txt", "wb");
  205.                 if(fp==NULL)
  206.                 {
  207.                     printf(" Ошибка открытия файла");
  208.                     break;
  209.                 }
  210.                 fwrite(&a, sizeof(int), 1, fp);
  211.                 for (int i=0; i<a; i++)
  212.                 {
  213.                     int Y=strlen (Tov[i].name)+1;
  214.                     fwrite(&Y, sizeof(int), 1, fp);
  215.                     fwrite(&Tov[i].name, sizeof(char), Y, fp);
  216.                     Y=strlen (Tov[i].model)+1;
  217.                     fwrite(&Y, sizeof(int), 1, fp);
  218.                     fwrite(&Tov[i].model, sizeof(char), Y, fp);
  219.                     fwrite(&Tov[i].cost, sizeof(float), 1, fp);
  220.                     fwrite(&Tov[i].page, sizeof(int), 1, fp);
  221.  
  222.                 }
  223.                 fclose(fp);
  224.                 printf("Файл сохранен\n");
  225.                 getch();
  226.             }
  227.             break;
  228.         case 10:
  229.             {
  230.                 fp = fopen("text_b.txt", "rb");
  231.                 if(fp==NULL)
  232.                 {
  233.                     printf(" Ошибка чтения");
  234.                     break;
  235.                 }
  236.                 fread(&a, sizeof(int), 1, fp);
  237.                 if (a>0)
  238.                 {
  239.                     delete [] Tov;
  240.                 }
  241.                 Tov=new tovar[a];
  242.                 for (int i=0; i<a; i++)
  243.                     {
  244.                         int Y;
  245.                         fread(&Y, sizeof(int), 1, fp);
  246.                         fread(&Tov[i].name, sizeof(char), Y, fp);
  247.                     fread(&Y, sizeof(int), 1, fp);
  248.                     fread(&Tov[i].model, sizeof(char), Y, fp);
  249.                     fread(&Tov[i].cost, sizeof(float), 1, fp);
  250.                     fread(&Tov[i].page, sizeof(int), 1, fp);
  251.                 }
  252.                 fclose(fp);
  253.                 printf("Файл загружен\n");
  254.                 flag=1;
  255.                 getch();
  256.             }
  257.             break;
  258.  
  259.  
  260.  
  261.  
  262.         case 11:
  263.             {
  264.                 if(flag!=0)
  265.                 {
  266.                     delete [] Tov;
  267.                 }
  268.                
  269.                 return 0;
  270.             }
  271.         }
  272.     }
  273. }
  274.  
  275.  
  276. void printvseprodukt(int a, tovar *Tov)
  277. {
  278.     for(int i=0; i<a; i++)
  279.         {
  280.             printf("Название книги: %s\n", Tov[i].name);
  281.             printf("Автор книги: %s\n", Tov[i].model);
  282.             printf("Стимость книги: %.2f\n", Tov[i].cost);
  283.             printf("Количество страниц: %d\n\n", Tov[i].page);
  284.         }
  285.     getch();
  286. }
  287.  
  288. void printproduktponame(int a,tovar *Tov)
  289. {
  290.     char name[60];
  291.     printf("Введите название книги: \n");
  292.     scanf("%s", &name);
  293.     for(int i=0; i<a; i++)
  294.     {
  295.         if(!stricmp(name, Tov[i].name))
  296.         {
  297.             printf("Название книги: %s\n", Tov[i].name);
  298.             printf("Автор книги: %s\n", Tov[i].model);
  299.             printf("Стоимость книги: %.2f\n", Tov[i].cost);
  300.             printf("Количество страниц: %d\n\n", Tov[i].page);
  301.             break;
  302.         }
  303.     }
  304.     getch();
  305. }
  306.  
  307. void printproduktnovinka(int a,tovar *Tov)
  308. {
  309.     printf("Книги на один вечер:\n");
  310.     int flag;
  311.         flag=0;
  312.     for(int i=0; i<a; i++)
  313.     {
  314.         if(Tov[i].page <= 100)
  315.         {
  316.             printf("Название книги: %s\n", Tov[i].name);
  317.             printf("Автор книги: %s\n", Tov[i].model);
  318.             printf("Стоимость книги: %.2f\n", Tov[i].cost);
  319.             flag=1;
  320.         }
  321.     }
  322.     if(flag==0)
  323.         printf("К сожалению, книг которые можно прочитать за один вечер, нет в наличии. \n");
  324.    
  325.     getch();
  326. }
  327.  
  328.  
  329. void sortpocene(int a,tovar *Tov)
  330. {
  331.     tovar tmp;
  332.     for (int i=0;i<a-1;i++)
  333.     {
  334.         for (int j=0;j<a-1-i;j++)
  335.         {
  336.             if (Tov[j].cost < Tov[j+1].cost)
  337.             {
  338.                 tmp = Tov[j];
  339.                 Tov[j] = Tov[j+1];
  340.                 Tov[j+1] = tmp;
  341.             }
  342.         }
  343.     }
  344.  
  345.     for(int i=0; i<a; i++)
  346.     {
  347.         printf("Название книги: %s\n", Tov[i].name);
  348.         printf("Автор книги: %s\n", Tov[i].model);
  349.         printf("Стоимость книги: %.2f\n", Tov[i].cost);
  350.         printf("Количество страниц: %d\n\n", Tov[i].page);
  351.     }
  352.         getch();
  353. }
  354.  
  355. void sortpoavtoru(int a,tovar *Tov)
  356. {
  357.     tovar tmp;
  358.     int sortOk;
  359.     do
  360.     {
  361.         sortOk=1;
  362.         for(int j = 0; j < a-1; j++)
  363.         {
  364.             if(strcmp(Tov[j].model, Tov[j+1].model) > 0)
  365.             {
  366.                 tmp = Tov[j];
  367.                 Tov[j] = Tov[j+1];
  368.                 Tov[j+1] = tmp;
  369.                 sortOk=0;
  370.             }
  371.         }
  372.     }while(sortOk == 0);
  373.          for(int i=0; i<a; i++)
  374.         {
  375.             printf("Название книги: %s\n", Tov[i].name);
  376.             printf("Автор книги: %s\n", Tov[i].model);
  377.             printf("Стоимость книги: %.2f\n", Tov[i].cost);
  378.             printf("Количество страниц: %d\n\n", Tov[i].page);
  379.         }
  380.     getch();
  381. }
  382.  
  383. void sortpopage(int a,tovar *Tov)
  384. {
  385.                 tovar tmp;
  386.                 for (int i=0;i<a-1;i++)
  387.                 {
  388.                     for (int j=0;j<a-1-i;j++)
  389.                     {
  390.                         if (Tov[j].page < Tov[j+1].page)
  391.                         {
  392.                             tmp = Tov[j];
  393.                             Tov[j] = Tov[j+1];
  394.                             Tov[j+1] = tmp;
  395.                         }
  396.                     }
  397.                 }
  398.  
  399.                 for(int i=0; i<a; i++)
  400.                 {
  401.                     printf("Название книги: %s\n", Tov[i].name);
  402.                     printf("Автор книги: %s\n", Tov[i].model);
  403.                     printf("Стоимость книги: %.2f\n", Tov[i].cost);
  404.                     printf("Количество страниц: %d\n\n", Tov[i].page);
  405.                 }
  406.             getch();
  407. }
  408.  
  409. void sortponame(int a,tovar *Tov)
  410. {
  411.     tovar tmp;
  412.     int sortOk;
  413.     do
  414.     {
  415.         sortOk=1;
  416.         for(int j = 0; j < a-1; j++)
  417.         {
  418.             if(strcmp(Tov[j].name, Tov[j+1].name) > 0)
  419.             {
  420.                 tmp = Tov[j];
  421.                 Tov[j] = Tov[j+1];
  422.                 Tov[j+1] = tmp;
  423.                 sortOk=0;
  424.             }
  425.         }
  426.     }while(sortOk == 0);
  427.          for(int i=0; i<a; i++)
  428.         {
  429.             printf("Название книги: %s\n", Tov[i].name);
  430.             printf("Автор книги: %s\n", Tov[i].model);
  431.             printf("Стоимость книги: %.2f\n", Tov[i].cost);
  432.             printf("Количество страниц: %d\n\n", Tov[i].page);
  433.         }
  434.     getch();
  435. }
  436.  
  437. tovar* delStruct(tovar* Tov, int* a)
  438. {
  439.     int l = 0;
  440.     printf("\nВведите номер элемента: ");
  441.     scanf("%d", &l);
  442.     if ((l <= 0) || (l > *a)) do
  443.     {
  444.         printf("\nВведите существующий номер элемеента: ");
  445.         scanf("%d", &l);
  446.     } while ((l <= 0) || (l > *a));
  447.     tovar *t = new tovar[*a-1];
  448.     for (int i = 0; i < l-1; ++i)
  449.         t[i] = Tov[i];
  450.     for (int i = l; i < *a; ++i)
  451.     {
  452.         t[i-1] = Tov[i];
  453.     }
  454.     *a = *a - 1;
  455.     return t;
  456. }
  457.  
  458. tovar* dobavlenie(tovar *Tov,int &a)
  459. {
  460.     tovar *Tov2=new tovar[a+1];
  461.     for(int k=0; k<a;++k)
  462.     {
  463.         Tov2[k]=Tov[k];
  464.     }
  465.         delete []Tov;
  466.         Tov=Tov2;
  467.         flushall();
  468.         printf("Название книги: ");
  469.         gets(Tov[a].name);
  470.         printf("Автор книги: ");
  471.         gets(Tov[a].model);
  472.         printf("Стоимость книги: ");
  473.         scanf("%f",&Tov[a].cost);
  474.         printf("Количество страниц: ");
  475.         scanf("%d",&Tov[a].page);
  476.         ++a;
  477.         return Tov;
  478. }
  479.  
  480. void printMenu ()
  481. {
  482.         system("cls");
  483.         printf("1: Добавление записи\n");
  484.         printf("2: Вывести все книги\n");
  485.         printf("3: Вывести книги по названию\n");
  486.         printf("4: Вывести книги на один вечер\n");
  487.         printf("5: Сортировать\n");
  488.         printf("6: Удаление записи\n");
  489.         printf("7: Запись в файл\n");
  490.         printf("8: Чтение из файла\n");
  491.  
  492.         printf("9: Запись в бинарный файл\n");
  493.         printf("10: Чтение из бинарного файла\n");
  494.  
  495.         printf("11: Выход\n");
  496.  
  497.         printf("---------------------------------------------------\n");
  498. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement