Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Розраха поп.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
669.32 Кб
Скачать
  1. Контрольні приклади та аналіз їх реалізації

Головне меню програми.

Додавання книги до бібліотеки.

Видалення книги з бібліотеки.

Вивід вмісту бібліотеки.

Пошук по бібліотеці.

Зміна статусу книги.

Висновок

Дану програму можна використовувати для зручного обліку наявності книг в бібліотеці. Завдяки можливості додавання і видалення книг з комп’ютерного каталогу можна зручно керувати бібліотекою. Також передбачена можливість ведення обліку наявності книг в даний момент в бібліотеці. Також присутній зручний вивід вмісту бібліотеки.

Список використаних джерел

  1. http://uk.wikipedia.org/

  2. Програмування мовою С - З.Я. Шпак

  3. Сергей Сабуров - Языки программирования C и C++.

  4. Стефан Р. Дэвис - C++ Для чайников.

Додаток (код програми)

// Biblio.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#include <windows.h>

#define max_s_size 500

FILE *f; // основний файл який відкривається

// список у який переписуються книги із файлу

typedef struct list

{

char c[max_s_size];

struct list *next;

};

// функція додавання елемента в список

list *add_list(list *first){//передаємо вказівник на перший елемент

list *t;

while(1)

{

list *vsp;

vsp = (list *) malloc(sizeof(list));// створюємо новий елемент списку

if(1>fread(&vsp->c,sizeof(vsp->c),1,f))break;// зчитуємо дані із файлу

vsp->next=first;//

first=vsp;// змінюємо перший елемент на новий який створили

}

return first;

}

// виводить усі книги які є в файлі

int print_list(list *first)

{

list *vsp;

int k=0;

vsp=first;

while (vsp)// доки список не пустити

{ k++;

printf("%d ",k);// також виводить порядковий номер

puts(vsp->c);// вивести книгу

vsp=vsp->next;// перейти до наступного елементу

}

return k;

}

//запис у файл із списку список

void print_file(list *first)

{

list *vsp;

vsp=first;

while (vsp) // доки список не порожній

{

fwrite(&vsp->c,sizeof(vsp->c),1,f);// записувати дані із списку у файл

vsp=vsp->next;// наступний елемент

}

}

// видалення книги із бібліотеки

list *delete_elm(list *first,int i,int k_l) // і - номер знайденої книги k_l кількість книг у бібліотеці

{

list *vsp,*t;

vsp=first;

int k=1;

if (i>1 && i<k_l-1){ // якщо книга не перша і не остання

// занходимо елемент і видаляємо

while (vsp)

{

if(k==i-1)

{

t=vsp->next;

vsp->next=vsp->next->next;

free(t);

break;

}

vsp=vsp->next;

k++;

}

}

// якщо остання але запис не єдиний

if (i==k_l && i!=1)

{

//знаходимо видаляємо

while (vsp)

{

if(k==i-1){

t=vsp->next;

vsp->next=NULL;

free(t);

break;

}

vsp=vsp->next;

k++;

}

}

// якщо запис перший але не останній

if(i==1 && i!=k_l)

{

t=vsp;

first=first->next;

free(t);

}

//якщо запис єдиний

if(i==k_l && i==1){free(first); return NULL;}

return first;

}

//пошук даних для видалення книги

int search_d(char *p_c,list *first)

{

list *vsp;

vsp=first;

int k=1;

while (vsp)//якщо список не пустий

{

if (strstr(vsp->c,p_c)!=NULL) // перевіряємо чи існує така книга

{

printf("Книгу успiшно видалено ---> ");

puts(vsp->c);// виводимо

return k;// повертаємо номер книги

}

k++;

vsp=vsp->next;

}

return 0;//якщо такий запис не знайдено

}

// аналогічний пошук тільки виводить усе що знайдено

int search(char *p_c,list *first)

{

list *vsp;

vsp=first;

int k=1;

int t=0;

while (vsp)

{

if (strstr(vsp->c,p_c)!=NULL)

{

puts(vsp->c);

t=k;

}

k++;

vsp=vsp->next;

}

return t;

}

void status(list *first,int i)

{

list *vsp;

vsp=first;

int k=1;

while (vsp)

{

if (k==i)

{

if(vsp->c[strlen(vsp->c)-1]=='+')

vsp->c[strlen(vsp->c)-1]='-';

else

vsp->c[strlen(vsp->c)-1]='+';

}

k++;

vsp=vsp->next;

}

}

//---------------------------головна функція-------------------

int main()

{

SetConsoleCP(1251);// для кирилиці

SetConsoleOutputCP(1251);// для кирилиці

FILE *f1;// для перезапису файла

int B00L=0;//для виходу із меню якщо натиснуто 0

int i=0,k_l;// допоміжні

char c[max_s_size];// вводиться нови книга

char x;//до поміжна для меню

list *first= (list *) malloc(sizeof(list));// створюємо перший елемент списку

first->next=NULL;

f=fopen("library","a+b");//відкриваємо файл

//якщо не вдалося відкрити

if (f==NULL)

{

printf("Помилка вiдкриття файлу.\n");

return 0;

}

//зчитуємо дані для першого

if (1>fread(&first->c,sizeof(first->c),1,f))

{

first=NULL;

}

first=add_list(first);

// виводимо меню

printf("1- Додати книгу в бiблiотеку\n");

printf("2- Видалити книгу в бiблiотецi \n");

printf("3- Показати всi книги в бiблiотецi \n");

printf("4- Шукати книгу\n");

printf("5- Змiнити статус книги\n");

printf("0- Вихiд\n");

puts("---------------Бiблiотека-----------------\n");

// цикл меню

while(1)

{ printf(">");

x=getch();

puts("");

switch(x){// вибір пункту меню

case '1':{

char st[]=" +";

printf("Введiть назву книги,автора i рiк видання:\n");

gets(c);// зчитуємо нову книгу

strcat(c,st);// додаємо статус

list *vsp;

vsp = (list *) malloc(sizeof(list));// створюємо новий елемент

strcpy(vsp->c,c);// заносимо дані в новий елемент

vsp->next=first;

first=vsp;

printf("Книгу успiшно додано!\n");

break;

}

case '2':{

int k;

flushall();

int n;

char p_c[max_s_size];// ключ для пошуку

puts("Для для видалення введiть назву книги,автора i рiк видання :");

gets(p_c);

if((k=search_d(p_c,first))!=0){// якщо найдено

first=delete_elm(first,k,k_l);// видаляємо

}

else// то не найдено

{

puts("Не знайдено!");

}

break;

}

case '3':{

if(first)// якщо бібліотека не порожня

{

k_l=print_list(first);// виводимо дані

}

else// бібліотека порожня

{

puts("Бiблiотека порожня!");

}

break;

}

case '4':{

flushall();

int n;

char p_c[max_s_size];// ключове слово

puts("Для пошуку введiть назву книги,автора або рiк видання :");

gets(p_c);

if(search(p_c,first)==0)puts("Не знайдено!");//якщо не знайдено нічого

break;

}

case '5':{

int k;

flushall();

char p_c[max_s_size];// ключ для пошуку

puts("Для пошуку введiть назву книги,автора або рiк видання :");

gets(p_c);

if((k=search(p_c,first))!=0){// якщо найдено

status(first,k);//змінюємо статус

printf("Статус змiнено!\n");

}

else// то не найдено

{

puts("Не знайдено!");

}

break;

}

case '0':{

B00L=1;// вийти

fclose(f);// закрити файл

}

}

if(B00L)break;// виходимо із циклю

}

remove("library");// видаляємо старий

f1=fopen("library","w+");// перезаписуємо новий файл

if(first)//

print_file(first);//

fclose(f1);// закриваємо новий файл

return 0;

}

2