#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#define SIZE 100

struct book {
  int index;
  char title[20];
  char autor[20];
  int publdate;
  int number;
  } lib [SIZE];

int menu();
int newf();
int menu2();
void openf();
void init_list();
void enter();
void input (int i);
//void update();
void savef();
void savef();
void display();

int main(void)
{
//  int i;	// счетчик циклов
//  int k;	// текущий индекс элементов массива
//  int f;	// флаг прекращения ввода записей
//  int c;	// количество книг
//  int buf;

  clrscr();
  char choice;

  init_list();
  for(;;) {
    choice = menu();  
    switch (choice) {
      case 'n': newf();
        break;
      case 'o': openf();
        break;       
      case 'q': return 0;
//        break; 
    } 
  }
}
 
int menu()
{
  char ch;
  cout << '\n';
  do {
    cout << "(N)ew\n";
    cout << "(O)pen\n";
    cout << "(Q)uit\n";
    cout << "Выберите команду: ";
    cin >> ch;
  } while (!strchr("noq", tolower(ch)));
  return tolower(ch);
}

int newf()
{
  char choice;

  clrscr();
  for(;;) {
    choice = menu2();  
    switch (choice) {
      case 'e': enter();
        break;
//      case 'u': update();
//        break;       
      case 'd': display();
        break;
      case 's': savef();
        break;
      case 'q': return 0;
//        break;
    } 
  } 

}

int menu2()
{
  char ch;
  cout << '\n';
  do {
    cout << "(E)nter\n";
//    cout << "(U)pdate\n";
    cout << "(D)isplay\n";
    cout << "(S)ave\n";
    cout << "(Q)uit to main menu\n";
    cout << "Выберите команду: ";
    cin >> ch;
  } while (!strchr("edsq", tolower(ch)));
  return tolower(ch);
}

void openf()
{
   cout << "Файл открыт\n";
   newf();
}

void init_list()
{
  int t;

  for (t=0; t<SIZE; t++) lib[t].index = '\0';
}

void enter()
{
  int i;

  for (i=0; i<SIZE; i++)
    if (!lib[i].index) break;

  if (i==SIZE){
    cout << "Список полон\n" ;
    return;
  }
  input(i) ;
}

void input(int i)
{
    cout << "Порядковый номер книги -> ";
    cin >> lib[i].index;

    cout << "Название книги -> ";
    cin >> lib[i].title;

    cout << "Автор книги -> ";
    cin >> lib[i].autor;

    cout << "Год издания книги -> ";
    cin >> lib[i].publdate;

    cout << "Количество -> ";
    cin >> lib[i].number;
}

//void update()
//{
//  int i, ind;
//
//  cout << "Введите номер книги ->";
//  cin >> ind
//  
//  for (i=0; i<SIZE;  i++)
//    if(!strcmp(ind, lib[i].index)) break;
//
//  if (i==SIZE) {
//    cout << "Книга не найдена.\n";
//    return;
// }
//  cout << "Введите новую инфомацию\n";
//  input(i);
//}

void savef()
{
   FILE *out;
   char fname[20];
   printf("Введите имя файла\n");
   scanf("%s", &fname);
   if ((out = fopen (fname, "wb")) == NULL)
   {
     printf("Ошибка открытия файла\n");  
     getch();
     return;   
   }
   fwrite(&lib, sizeof(lib), SIZE, out);
   fclose(out);
   cout << "Список сохранен в файле" << fname;
   printf("\n");
   printf("Для продолжения нажмите любую клавишу...\n");
   getch();

   newf();
}

void display()
{
  int k;

  printf("| № |   Название книги   |    Автор книги     | Год | Кол-во |\n");
  printf("|------------------------------------------------------------|\n");
  for(k=0; k<SIZE; k++)
    if (lib[k].index) 
      printf("|%3i|%20s|%20s|%5i|%8i|\n", lib[k].index,lib[k].title,lib[k].autor,lib[k].publdate, lib[k].number);

}

//  printf("Производится сортировка по полю год издания в убывающем порядке\n");
//  for (i=1; i<=c; i++)
//  {
//   for(k=1; k<=c-i; k++)
//    {
//      if (lib[k].publdate < lib[k+1].publdate)
//      {
//        // обменяем k-й и (k+1)-й эл-ты
//        buf =  lib[k].publdate;
//        lib[k].publdate = lib[k+1].publdate;
//        lib[k+1].publdate = buf;
//      } 
//    }
//  }
//  printf("Массив отсортирован\n\n");
