
- •Огляд літератури
- •2.Формулювання задачі
- •Алгоритм розв’язання задачі
- •Програмні реалізації алгоритму
- •1.Загальна характеристика програми
- •2.Призначення програми
- •3.Вхідна інформація
- •4.Результуюча інформація
- •5.Таблиця ідентифікаторів прогрими
- •6.Структура програми
- •Інструкція користувачеві програми
- •Контрольні приклади та аналіз їх реалізації
- •Висновок
- •Список використаних джерел
- •Додаток (код програми)
Контрольні приклади та аналіз їх реалізації
Головне меню програми.
Додавання книги до бібліотеки.
Видалення книги з бібліотеки.
Вивід вмісту бібліотеки.
Пошук по бібліотеці.
Зміна статусу книги.
Висновок
Дану програму можна використовувати для зручного обліку наявності книг в бібліотеці. Завдяки можливості додавання і видалення книг з комп’ютерного каталогу можна зручно керувати бібліотекою. Також передбачена можливість ведення обліку наявності книг в даний момент в бібліотеці. Також присутній зручний вивід вмісту бібліотеки.
Список використаних джерел
http://uk.wikipedia.org/
Програмування мовою С - З.Я. Шпак
Сергей Сабуров - Языки программирования C и C++.
Стефан Р. Дэвис - 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