Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  ррр
Language: C/C++
Code:
/*
 Ввести с клавіатуры та зберегти  в файле book.dat. Якщо файл вже існує, 
програма відображає його поточний вміст, а потім дозволяє добавити до нього
нові записи.
*/
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

using namespace std;

#define max_nazva 50
#define max_avtor 30
#define max_bibl 10

struct book{
     char nazva[max_nazva];
     char avtor[max_avtor];
     float cena;
};

int main(){
     SetConsoleCP(CP_UTF8);
     SetConsoleOutputCP(CP_UTF8);

     struct book bibl[max_bibl];
     int c_book = 0;
     //int c;  //не используется
     int i;
     int file_c_book;
     FILE *fp;
     int size = sizeof(struct book);

     if ((fp = fopen("book.dat", "a+b")) == NULL){
          fputs("Неможливо відкрити файл book.dat\n", stderr);
          exit(1);
     }
     rewind(fp);

     while ((c_book < max_bibl) && (fread(&bibl[c_book], size, 1, fp)) == 1){
          if (c_book == 0)
               puts("Поточний вміст  файлу  book.dat:");
          printf("%s,%s:%.2f грн.\n", bibl[c_book].nazva, bibl[c_book].avtor, bibl[c_book].cena);
          c_book++;
     }
     file_c_book = c_book;
     if (c_book == max_bibl){
          fputs("Файл book.dat Переповнений. Додавання неможливе. \n ", stderr);
          exit(2);
     }

     puts("Введіть назвц наступної книги. \n (Для зупинки нажміть [Enter] на початку рядка)\n");
     while((c_book<max_bibl)
          &&(gets(bibl[c_book].nazva)!=NULL)
          &&(bibl[c_book].nazva[0]!='\0'))
     {
          puts("Введіть автора :");
          gets(bibl[c_book].avtor);
          puts("Укажіть ціну в гривнях:");
          // как-то заработало...
          // scanf("%f",&bibl[c_book].cena);
          cin >> bibl[c_book].cena;

          while (getchar()!='\n')
          continue;
          if(c_book<max_bibl)
               puts("Укажіть назву наступної книги:");
          //в оригинале след строки не было. Колво книг не увеличивалось:
          c_book++;
     }

     puts("Повний перелік книг:");
     for(i=0;i<c_book;i++)
          printf("%s,%s:%.2f грн.\n",bibl[i].nazva, bibl[i].avtor,bibl[i].cena);

     fwrite(&bibl[file_c_book],size,c_book-file_c_book,fp);
     fclose(fp);

     getch();
     return 0;
}

Comments: