Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct books{
- int number;
- char* bookname;
- char* surname;
- int year;
- int quanity;//количество книг в библиотеке
- int availability;//наличие
- }BOOKINFO;
- typedef struct list_elem //структура элемента списка
- {
- BOOKINFO books;
- struct list_elem *next;
- }LEL;
- int num=1;//счетчик элементов
- int bookscount;
- void AddElem();
- void sort_by_year(void);
- void book_available(void);
- void edit_book_info(void);
- void DeleteAllOdd(void);
- void FreeList(void);
- void show_year(void);
- void find_year(void);
- void show_book_data(void);
- void BubbleSortArray(books arr[], int count);
- void SaveToFile();//бинарный
- void LoadFromFile();
- void saveIntoFile();//текстовый
- LEL *list; //глобальный указатель на начало списка
- LEL *end=NULL;
- const int strLength = 50;
- int main()
- { setlocale(LC_ALL,"Russian");//подключение русского языка
- int vibor;//переменная для выбора действия в меню
- printf("Курсовя работа по дисциплине «Алгоритмизация и программирование»\nСтудента 1го курса\nГруппы АИ152\nПасибаевой Ольги\n");
- printf("Задание: Реализовать динамическую структуру в которой содержится информация о \nкнигах в библиотеке\n");
- int menuNeeded=1;
- while (menuNeeded==1){
- puts("\nВыбирите дейтсвие , которое хотите выполнить 0-6.(число соответсвует номеру\nв списке возможностей программы)\n(^ ^)/\n\n ");
- puts("1 - Добавить новую книгу");
- puts("2 - Отобразить иноформацию обо всех книгах");
- puts("3 - Отобразить книги выпущенные после заданного года");
- puts("4 - Отобразить данные о наличии книги в библиотеке");
- puts("5 - Редактировать информацию о наличии книги в библиотеке");
- puts("6 - Cортировка книг по году выдачи(от меньшего к большему)");
- puts("7 - Cохранить данные в файл");
- puts("8 - Загрузить данные из файла");
- puts("0 - Очистить список");
- scanf("%d", &vibor);
- switch(vibor) {
- case 1:
- AddElem();
- break;
- case 2:
- show_book_data();
- break;
- case 3:
- show_year();
- break;
- case 4:
- book_available();
- break;
- case 5:
- edit_book_info();
- break;
- case 6:
- sort_by_year();
- break;
- case 7:
- SaveToFile();
- break;
- case 8:
- LoadFromFile();
- break;
- case 0:
- FreeList();
- menuNeeded=0;
- }
- }
- return 0;
- }
- void AddElem() //функция присоединения нового элемента
- {
- LEL *pel; //указатель на новый элемент
- do{pel=(LEL*)malloc(sizeof(LEL)); //выделение ДП
- printf("\n\t %d-ая книга: Номер книги -", num);
- scanf("%d", &pel->books.number);
- if(pel->books.number==0) //признак конца ввода
- { puts("Ввод завершен");
- free(pel);
- return;
- }
- fflush(stdin); //очищение буфера ввода
- pel->books.bookname = new char[strLength+1];
- pel->books.surname = new char[strLength+1];
- printf("\n\t Название книги ");
- gets(pel->books.bookname);
- fflush(stdin); //очищение буфера ввода
- printf("\n\t Фамилия и инициалы автора ");
- gets(pel->books.surname);
- fflush(stdin);
- printf("\n\t Год выпуска ");
- scanf("%d", &pel->books.year);
- fflush(stdin);
- printf("\n\t Количество книг в библиотеке ");
- scanf("%d", &pel->books.quanity);
- do{printf("\n\t Книга есть на складе, нажмите - 1\n\t Книга отсутсвует, нажмите - 0 ");
- scanf("%d", &pel->books.availability);
- }while(pel->books.availability!=1&&pel->books.availability!=0);
- pel->next=NULL; //новый элемент становится последним в списке
- if(list==NULL) //если список пустой
- {
- list=pel;
- end=pel;
- }
- else
- {
- end->next=pel;//присоединение к последнему элементу в списке
- end=pel;
- }
- num++;
- bookscount++;
- }while(pel->books.number!=NULL);
- }
- /*
- void write_information(void)
- { int i;
- struct characteristic {
- int number;
- int year;
- int quanity;//количество книг в библиотеке
- };
- struct auther{
- char surname[AUTHER_SURNAME];
- char bookname[BOOK_NAME];
- };
- struct bookinfo{
- struct characteristic
- aboutbook;
- struct auther
- writer;
- };
- printf("Пожалуйста, введите данные о книгах в библиотеке. Для прекращения ввода нажмите - 404\n");
- struct bookinfo
- books[k];
- for (i = 0; i < k; i++ ){
- puts("1. Введите фамилию и инициалы автора книги через точку.");
- scanf("%s",&books[i].writer.surname);
- puts("2. Введите название книги(используйте нижнее подчеркивание для разделения слов)");
- scanf("%s",&books[i].writer.bookname);
- puts("3. Введите номер книги.Нельзя использовать число 404");
- scanf("%d",
- &books[pel->next=NULL; //новый элемент становится последним в списке
- if(list==NULL) //если список пустой
- list=pel;
- else
- last->next=pel; //присоединение к последнему элементу в списке
- num++;
- return pel;
- }i].aboutbook.number);
- puts("4. Введите год выпуска");
- scanf("%d",
- &books[i].aboutbook.year);
- puts("5. Введите кол-во книг в библиотеке");
- scanf("%d",
- &books[i].aboutbook.quanity);
- }
- */
- void show_book_data(void)
- { int nomer=1;
- int choice;//выбор
- printf("Информация о книгах\n");
- LEL *pel=list;
- printf("--------------------------------------------------------------------------------");
- printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
- printf("--------------------------------------------------------------------------------");
- while(pel!=NULL)
- {
- printf("%d| %-6d|\t%-15s|",nomer,pel->books.number, pel->books.bookname);
- printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
- printf("\t%-30d",pel->books.quanity);
- printf("\n--------------------------------------------------------------------------------");
- pel=pel->next;
- nomer++;
- }
- if(list==NULL) //если список пустой
- {
- puts("\t\t\t\tCписок пустой!");
- }
- puts("\t\tХотите сохранить данные в файл?\n");
- puts("\t\t\t\tДа - нажмите 1 (чтобы сохранить в бинаром файле)\t\t\t\t\t 2 (в текстовом) ");
- puts("\t\t\t\tНет - нажмите 0 ");
- scanf("%d",&choice);
- switch(choice)
- {
- case 1: SaveToFile();
- break;
- case 2: saveIntoFile();
- case 0: return;
- }
- system("pause");
- system("CLS");
- }
- void show_year(void)
- {
- LEL *pel=list;
- int choice1;
- printf("Отобразить книги выпущенные после X года\n");
- int search_year;
- printf("Введите год издания ");
- scanf("%d",&search_year);
- printf("--------------------------------------------------------------------------------");
- printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
- printf("--------------------------------------------------------------------------------");
- while(pel!=NULL){
- if(pel->books.year>search_year)
- {
- printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
- printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
- printf("\t%-30d",pel->books.quanity);
- printf("\n--------------------------------------------------------------------------------");
- pel=pel->next;
- }
- else {
- pel=pel->next;
- }
- }
- if(list==NULL) //если список пустой
- {
- printf("Книги выпущенные после %d года не найдены!",search_year);
- }
- printf("\n\t\t\tНажмите 1 - если хотите ввести другой год.\n\t\t\tНажмите 0 - чтобы вернуться в предыдущее меню");
- scanf("%d",&choice1);
- switch(choice1){
- case 1:show_year();
- break;
- case 0:return;}
- }
- void book_available(void)
- {
- printf("Наличие книги в библиотеке\n");
- int choice;//выбор
- LEL *pel=list;
- printf("--------------------------------------------------------------------------------");
- printf(" | № книги | Название | Автор | Год | Кол-во экземпляров|\n");
- printf("--------------------------------------------------------------------------------");
- while(pel!=NULL)
- {
- printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
- printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
- printf(" %d ",pel->books.quanity);
- if(pel->books.availability==1)
- {
- printf("|ЕСТЬ в наличии\n");
- }
- if(pel->books.availability==0)
- {
- printf("|НЕТ в наличии\n");
- }
- pel=pel->next;
- }
- if(list==NULL) //если список пустой
- {
- printf("\n\t\t\tCписок пустой!");
- }
- puts("\n\tНажмите - 1, если хотите отредактировать информацию о наличии книги\n\tНажмите - 0, чтобы вернуться в предыдущее меню.");
- do{ scanf("%d",&choice);
- if(choice!=1&&choice!=0)
- {
- puts("Ошибка, вы ввели неверное число\nПопробуйте снова\n");
- puts("\n\tНажмите - 1, если хотите отредактировать информацию о наличии книги\n\tНажмите - 0, чтобы вернуться в предыдущее меню.");
- }
- }while(choice!=1&&choice!=0);
- switch(choice) {
- case 1: edit_book_info();
- break;
- case 0: return;
- }
- }
- void edit_book_info(void)
- {LEL *pel=list;
- int choice1;
- int number_edit;//номер книги
- int edit;
- puts("Введите регистрационный номер книги, которую хотите отредактировать");
- scanf("%d",&number_edit);
- printf("--------------------------------------------------------------------------------");
- printf(" | № книги | Название | Автор | Год | Кол-во экземпляров|\n");
- printf("--------------------------------------------------------------------------------");
- while(pel!=NULL){
- if(pel->books.number==number_edit)
- { printf(" | %-6d|\t%-15s|",pel->books.number, pel->books.bookname);
- printf(" %-10s | %-7d|",pel ->books.surname, pel->books.year);
- printf(" %d ",pel->books.quanity);
- do{printf("\n\t\t\tНажмите 1 - если книга снова доступна\n\t\t\tНажмите 0 - если книга в данный момент отсутсвует ");
- scanf("%d",&edit);}while(edit!=0&&edit!=1);
- if(edit==1)
- { puts("Изменения приняты!");
- pel->books.availability=1;
- }
- if(edit==0)
- { puts("Изменения приняты!");
- pel->books.availability=0;
- }
- }
- pel = pel->next;
- }
- if(list==NULL) //если список пустой
- {
- printf("\n\t\t\tCписок пустой!");
- }
- printf("\n\t\t\tНажмите 1 - если хотите продолжить редактирование.\n\t\t\tНажмите 2 - чтобы посмотреть обновленную информацию.");
- printf("\n\t\t\tНажмите 0 - чтобы вернуться в предыдущее меню");
- scanf("%d",&choice1);
- switch(choice1){
- case 1:edit_book_info();
- break;
- case 2:book_available();
- break;
- case 0:return;}
- }
- void sort_by_year(void)
- {
- if (bookscount==0)
- {
- puts("\t\t\t\tCписок пустой!");
- return;
- }
- else
- {
- printf("--------------------------------------------------------------------------------");
- printf(" | № книги | Название | Автор | Год | Кол-во экземпляров |\n");
- printf("--------------------------------------------------------------------------------\n");
- if (bookscount== 1)
- {
- printf(" | %-6d|\t%-15s|",list->books.number, list->books.bookname);
- printf(" %-10s | %-7d|",list ->books.surname,list->books.year);
- printf("\t%-30d\n",list->books.quanity);
- }
- else
- {
- LEL *pel=list;
- BOOKINFO *arr = new BOOKINFO[bookscount];
- for (int i = 0; i <bookscount; i++)
- {
- arr[i] =pel->books;
- pel =pel->next;
- }
- BubbleSortArray(arr, bookscount);
- for (int i = 0; i < bookscount; i++)
- {
- printf(" | %-6d|\t%-15s|",arr[i].number,arr[i].bookname);
- printf(" %-10s | %-7d|",arr[i].surname, arr[i].year);
- printf("\t%-30d\n",arr[i].quanity);}
- }
- }
- }
- void FreeList(void) //функция стираний всего списка
- {
- LEL *pel=list;
- while(pel!=NULL)
- {
- list=list->next;
- free(pel); //удаление текущего элемента
- pel=list;
- }
- system("pause");
- system("CLS");
- }
- void SaveToFile()
- {
- int choice;
- FILE* file = fopen("F:\data_read.txt", "wb");
- LEL* pel = list;
- fwrite(&bookscount, sizeof(int), 1, file);
- while (pel!=NULL)
- {
- fwrite(&pel->books.number, sizeof(long int), 1, file);
- int size = strlen(pel->books.bookname) + 1;
- fwrite(&size, sizeof(size), 1, file);
- fwrite(pel->books.bookname, size, 1, file);
- size = strlen(pel->books.surname) + 1;
- fwrite(&size, sizeof(size), 1, file);
- fwrite(pel->books.surname, size, 1, file);
- fwrite(&pel->books.year, sizeof(int), 1, file);
- fwrite(&pel->books.quanity, sizeof(int), 1, file);
- fwrite(&pel->books.availability, sizeof(int), 1, file);
- pel = pel->next;
- }
- fclose(file);
- puts("Каталог успешно сохранен в файл F:\data_read.txt.");
- }
- void LoadFromFile()
- {LEL *pel=list;
- FILE* file = fopen("F:\data_read.txt", "rb");
- int count;
- int size;
- fread(&count, sizeof(int), 1, file);
- for (int i = 0; i <count; i++)
- {
- BOOKINFO books;
- fread(&books.number, sizeof(long int), 1, file);
- fread(&size, sizeof(size), 1, file);
- books.bookname = (char*)malloc(sizeof(char)*strLength);
- fread(books.bookname, 1, size, file);
- books.surname = (char*)malloc(sizeof(char)*strLength);
- fread(books.surname, 1, size, file);
- fread(&size, sizeof(size), 1, file);
- fread(&books.year, sizeof(int), 1, file);
- fread(&size, sizeof(size), 1, file);
- fread(&books.quanity, sizeof(int), 1, file);
- fread(&books.availability, sizeof(int), 1, file);
- while(pel!=NULL){
- //новый элемент становится последним в списке
- if(list==NULL) //если список пустой
- {
- list=pel;
- end=pel;
- }
- else
- {
- end->next=pel;//присоединение к последнему элементу в списке
- end=pel;
- }
- }}
- fclose(file);
- puts("Каталог успешно загружен из файла data_read.txt.");
- }
- void saveIntoFile() // запись данных в файл
- {
- printf( "Данные сохранены в файл.");
- LEL *pel = list;
- FILE *f;
- f = fopen("F:\data.txt", "w+");
- if (f == NULL)
- {
- printf("Невозможно открыть файл!\n");
- return;
- }
- while (pel != NULL)
- {
- fprintf(f, "%d ", pel->books.number);
- fprintf(f, "%s ", pel->books.bookname);
- fprintf(f, "%s ", pel->books.surname);
- fprintf(f, "%d ", pel->books.year);
- fprintf(f, "%d ", pel->books.quanity);
- fprintf(f, "%d ", pel->books.availability);
- fprintf(f, "\n");
- pel = pel->next;
- }
- fclose(f);
- }
- void BubbleSortArray(BOOKINFO arr[], int count)
- {int i;
- int j;
- for (i = 0; i < count; i++)
- {
- for ( j = 0; j < count - 1; j++)
- {
- if (arr[j].year < arr[j + 1].year)
- {
- BOOKINFO pel= arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = pel;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement