Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Книги: автор, наименование, количество страниц, цена. Дополнить вывод рекомендацией
- книг, которые можно прочитать за один вечер (количество страниц меньше 100).*/
- /*Программа должна уметь:
- а) сохранять все данные (массив структур) в бинарный файл;
- б) загружать данные из бинарного файла;
- в) сохранять данные в текстовом файле в формате, удобном для последующей загрузки???00;
- г) загружать данные из текстового файла;
- д) сохранять данные в текстовом файле, удобном для работы человека (отчет).
- */
- #include <conio.h>
- #include <stdio.h>
- #include <string.h>
- #include <Windows.h>
- #include <iostream>
- #include <time.h>
- using namespace std;
- struct tovar
- {
- char name[60];
- char model[40];
- float cost;
- int page;
- };
- bool WriteString (FILE* fp, const char* str);
- void printvseprodukt(int a,tovar *Tov);
- void printproduktponame(int a,tovar *Tov);
- void printproduktnovinka(int a,tovar *Tov);
- tovar* dobavlenie(tovar *Tov,int &a);
- void sortpocene(int a,tovar *Tov);
- void sortpoavtoru(int a,tovar *Tov);
- void sortpopage(int a,tovar *Tov);
- void sortponame(int a,tovar *Tov);
- tovar* delStruct(tovar* Tov, int* a);
- void printMenu ();
- int main ()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- setlocale(LC_ALL, "Russian");
- setlocale(LC_ALL, "rus");
- setlocale(0, "");
- tovar *Tov=NULL;
- int a = 0, flag = 0;
- int menu=0, Pmenu =0;
- int god;
- FILE *fp = NULL;
- while(menu!=11)
- {
- printMenu();
- printf("Колличество записей в базе %d\n",a);
- scanf("%d", &menu);
- switch(menu)
- {
- case 1:
- Tov=dobavlenie(Tov, a);
- flag=1;
- break;
- case 2:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- printvseprodukt(a, Tov);
- break;
- case 3:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- printproduktponame(a, Tov);
- break;
- case 4:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- printproduktnovinka(a, Tov);
- break;
- case 5:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- {
- system("cls");
- printf("1: Сортировать по цене\n");
- printf("2: Сортировать по автору\n"); !!!
- printf("3: Сортировать по количеству страниц\n"); !!!
- printf("4: Сортировать по названию\n");
- printf("---------------------------------------------------\n");
- scanf("%d", &Pmenu);
- switch(Pmenu)
- {
- case 1:
- sortpocene(a, Tov);
- break;
- case 2:
- sortpoavtoru(a, Tov);
- break;
- case 3:
- sortpopage(a, Tov);
- break;
- case 4:
- sortponame(a, Tov);
- break;
- }
- break;
- }
- case 6:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- Tov = delStruct(Tov, &a);
- break;
- case 7:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- {
- fp = fopen("text.txt", "w");
- if(fp==NULL)
- {
- printf(" Ошибка открытия файла");
- break;
- }
- fprintf(fp, "%d\n", a);
- for (int i=0; i<a; i++)
- {
- fprintf(fp,"%s\n", Tov[i].name);
- fprintf(fp,"%s\n", Tov[i].model);
- fprintf(fp,"%f\n", Tov[i].cost);
- fprintf(fp,"%d\n", Tov[i].page);
- }
- fclose(fp);
- printf("Файл сохранен\n");
- getch();
- }
- break;
- case 8:
- {
- fp = fopen("text.txt", "r");
- if(fp==NULL)
- {
- printf(" Ошибка чтения");
- break;
- }
- fscanf(fp, "%d\n", &a);
- if (a>0)
- {
- delete [] Tov;
- }
- Tov=new tovar[a];
- for (int i=0; i<a; i++)
- {
- fgets(Tov[i].name,50,fp);
- Tov[i].name[strlen(Tov[i].name)-1]='\0';
- fgets(Tov[i].model,40,fp);
- Tov[i].model[strlen(Tov[i].model)-1]='\0';
- fscanf(fp,"%f\n",&Tov[i].cost);
- fscanf(fp,"%d\n",&Tov[i].page);
- }
- fclose(fp);
- printf("Файл загружен\n");
- flag=1;
- getch();
- }
- break;
- case 9:
- if (a==0)
- {
- printf("В базе данных нет записей\n");
- getch();
- break;
- }
- {
- fp = fopen("text_b.txt", "wb");
- if(fp==NULL)
- {
- printf(" Ошибка открытия файла");
- break;
- }
- fwrite(&a, sizeof(int), 1, fp);
- for (int i=0; i<a; i++)
- {
- int Y=strlen (Tov[i].name)+1;
- fwrite(&Y, sizeof(int), 1, fp);
- fwrite(&Tov[i].name, sizeof(char), Y, fp);
- Y=strlen (Tov[i].model)+1;
- fwrite(&Y, sizeof(int), 1, fp);
- fwrite(&Tov[i].model, sizeof(char), Y, fp);
- fwrite(&Tov[i].cost, sizeof(float), 1, fp);
- fwrite(&Tov[i].page, sizeof(int), 1, fp);
- }
- fclose(fp);
- printf("Файл сохранен\n");
- getch();
- }
- break;
- case 10:
- {
- fp = fopen("text_b.txt", "rb");
- if(fp==NULL)
- {
- printf(" Ошибка чтения");
- break;
- }
- fread(&a, sizeof(int), 1, fp);
- if (a>0)
- {
- delete [] Tov;
- }
- Tov=new tovar[a];
- for (int i=0; i<a; i++)
- {
- int Y;
- fread(&Y, sizeof(int), 1, fp);
- fread(&Tov[i].name, sizeof(char), Y, fp);
- fread(&Y, sizeof(int), 1, fp);
- fread(&Tov[i].model, sizeof(char), Y, fp);
- fread(&Tov[i].cost, sizeof(float), 1, fp);
- fread(&Tov[i].page, sizeof(int), 1, fp);
- }
- fclose(fp);
- printf("Файл загружен\n");
- flag=1;
- getch();
- }
- break;
- case 11:
- {
- if(flag!=0)
- {
- delete [] Tov;
- }
- return 0;
- }
- }
- }
- }
- void printvseprodukt(int a, tovar *Tov)
- {
- for(int i=0; i<a; i++)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- }
- getch();
- }
- void printproduktponame(int a,tovar *Tov)
- {
- char name[60];
- printf("Введите название книги: \n");
- scanf("%s", &name);
- for(int i=0; i<a; i++)
- {
- if(!stricmp(name, Tov[i].name))
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- break;
- }
- }
- getch();
- }
- void printproduktnovinka(int a,tovar *Tov)
- {
- printf("Книги на один вечер:\n");
- int flag;
- flag=0;
- for(int i=0; i<a; i++)
- {
- if(Tov[i].page <= 100)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- flag=1;
- }
- }
- if(flag==0)
- printf("К сожалению, книг которые можно прочитать за один вечер, нет в наличии. \n");
- getch();
- }
- void sortpocene(int a,tovar *Tov)
- {
- tovar tmp;
- for (int i=0;i<a-1;i++)
- {
- for (int j=0;j<a-1-i;j++)
- {
- if (Tov[j].cost < Tov[j+1].cost)
- {
- tmp = Tov[j];
- Tov[j] = Tov[j+1];
- Tov[j+1] = tmp;
- }
- }
- }
- for(int i=0; i<a; i++)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- }
- getch();
- }
- void sortpoavtoru(int a,tovar *Tov)
- {
- tovar tmp;
- int sortOk;
- do
- {
- sortOk=1;
- for(int j = 0; j < a-1; j++)
- {
- if(strcmp(Tov[j].model, Tov[j+1].model) > 0)
- {
- tmp = Tov[j];
- Tov[j] = Tov[j+1];
- Tov[j+1] = tmp;
- sortOk=0;
- }
- }
- }while(sortOk == 0);
- for(int i=0; i<a; i++)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- }
- getch();
- }
- void sortpopage(int a,tovar *Tov)
- {
- tovar tmp;
- for (int i=0;i<a-1;i++)
- {
- for (int j=0;j<a-1-i;j++)
- {
- if (Tov[j].page < Tov[j+1].page)
- {
- tmp = Tov[j];
- Tov[j] = Tov[j+1];
- Tov[j+1] = tmp;
- }
- }
- }
- for(int i=0; i<a; i++)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- }
- getch();
- }
- void sortponame(int a,tovar *Tov)
- {
- tovar tmp;
- int sortOk;
- do
- {
- sortOk=1;
- for(int j = 0; j < a-1; j++)
- {
- if(strcmp(Tov[j].name, Tov[j+1].name) > 0)
- {
- tmp = Tov[j];
- Tov[j] = Tov[j+1];
- Tov[j+1] = tmp;
- sortOk=0;
- }
- }
- }while(sortOk == 0);
- for(int i=0; i<a; i++)
- {
- printf("Название книги: %s\n", Tov[i].name);
- printf("Автор книги: %s\n", Tov[i].model);
- printf("Стоимость книги: %.2f\n", Tov[i].cost);
- printf("Количество страниц: %d\n\n", Tov[i].page);
- }
- getch();
- }
- tovar* delStruct(tovar* Tov, int* a)
- {
- int l = 0;
- printf("\nВведите номер элемента: ");
- scanf("%d", &l);
- if ((l <= 0) || (l > *a)) do
- {
- printf("\nВведите существующий номер элемеента: ");
- scanf("%d", &l);
- } while ((l <= 0) || (l > *a));
- tovar *t = new tovar[*a-1];
- for (int i = 0; i < l-1; ++i)
- t[i] = Tov[i];
- for (int i = l; i < *a; ++i)
- {
- t[i-1] = Tov[i];
- }
- *a = *a - 1;
- return t;
- }
- tovar* dobavlenie(tovar *Tov,int &a)
- {
- tovar *Tov2=new tovar[a+1];
- for(int k=0; k<a;++k)
- {
- Tov2[k]=Tov[k];
- }
- delete []Tov;
- Tov=Tov2;
- flushall();
- printf("Название книги: ");
- gets(Tov[a].name);
- printf("Автор книги: ");
- gets(Tov[a].model);
- printf("Стоимость книги: ");
- scanf("%f",&Tov[a].cost);
- printf("Количество страниц: ");
- scanf("%d",&Tov[a].page);
- ++a;
- return Tov;
- }
- void printMenu ()
- {
- system("cls");
- printf("1: Добавление записи\n");
- printf("2: Вывести все книги\n");
- printf("3: Вывести книги по названию\n");
- printf("4: Вывести книги на один вечер\n");
- printf("5: Сортировать\n");
- printf("6: Удаление записи\n");
- printf("7: Запись в файл\n");
- printf("8: Чтение из файла\n");
- printf("9: Запись в бинарный файл\n");
- printf("10: Чтение из бинарного файла\n");
- printf("11: Выход\n");
- printf("---------------------------------------------------\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement