Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Копирование в файл и из файла

50K
19 ноября 2009 года
Maxik54
7 / / 23.08.2009
Написал такое подобие базы данных со структурами.
Как можно реализовать копирование из файла и в файл? Помогите пожалуйста.

// book.cpp
#include "book.h"
#include <iostream>

///////////////////////////////////////////////////
struct KART_t k = {new BOOK_t*[RESERVE],0,RESERVE};


void PrintBOOK(BOOK_t * book) // Печать формы карточки
{
printf("\n%-12s %s\n","Автор",book->author);
// wprintf(L"\n%-12s\n",L"Автор");
printf("%-12s %s\n","Заглавие",book->name);
printf("%-12s %d\n","Год издания",book->year);
printf("%-12s %.2f\n","Цена",book->cost);
printf("%-12s %d\n\n","Категория", book->category);
}
void ScanfBOOK(BOOK_t * book) // Введение данных в форму
{
printf("\n%-12s","Автор");
scanf("%9s",book->author);
fflush(stdin);
printf("%-12s","Заглавие");
scanf("%9s",book->name);
fflush(stdin);
printf("%-12s","Год издания");
scanf("%d",&book->year);
fflush(stdin);
printf("%-12s ","Цена");
scanf("%f",&book->cost);
fflush(stdin);
printf("%-12s ","Категория");
scanf("\n%d",&book->category);
fflush(stdin);
}
int AddBOOK(KART_t * k) //Добавление новой карточки
{
if (!k->cap) //
{
BOOK_t ** tmp_kart = new BOOK_t * [ k->n + RESERVE]; // Динамически выделяем память для новой книги, размер: уже имеющееся кол-во книг + резерв
for (int i =0; i < k->n; i++)
tmp_kart = k->kart;
k->cap = RESERVE;
delete[] k->kart;
k->kart =tmp_kart;
tmp_kart=0;
}
k->kart[k->n] = new BOOK_t;
ScanfBOOK(k->kart[k->n]);
k->n++;
k->cap--;

return 1;
}

int DelBOOK(KART_t * k, int N) //Удаление новой(самой последней) карточки
{
if (N<=k->n)

{
delete k->kart[N];
for (int i = N; i < k->n; i++)
{
k->kart = k->kart[i+1];
}
k->kart[k->n]=0;
k->n--;
k->cap++;
}
else {
std::cout<<"Ошибка!";

return false;
}
return true;
}


void printAll(KART_t * k) //Распечатка картотеки
{
for(int i = 0;i<k->n;i++)
{
PrintBOOK(k->kart);

}



}
int Menu() //Вывод Меню
{
int a;
printf("Печать KART (1)\n");
printf("Ввести новую книгу (2)\n");
printf("Удалить текущую (3)\n");
printf("Копировать в файл (4)\n");
printf("Копировать из файла (5)\n");
scanf("%d",&a);
return a;


//book.h


#define RESERVE 2
struct BOOK_t
{
int year; // год издания
float cost; // цена
int category; // категория
char author[10]; // автор
char name[10]; // заглавие
};
struct KART_t
{
BOOK_t ** kart; // Указатель на массив указателей
int n; // количество книг
int cap; // резерв
};
//Прототипы используемых в данном задании функций:


void PrintBOOK(BOOK_t * );
void ScanfBOOK(BOOK_t * );
int AddBOOK(KART_t * k);
int Menu();
void printAll(KART_t * k);
int DelBOOK(KART_t * k, int N);


//main.cpp

#include <clocale>
#include <tchar.h>
#include <iostream>
#include <cstdio>
#include "book.h"


#define stop __asm nop




void main()
{
setlocale(LC_ALL ,".1251");

KART_t kart={new BOOK_t*[2], 0,2};
int a;
while(true)
{
int n = Menu();
switch(n)
{
case 1 : printAll(&kart);
break;
case 2 : AddBOOK(&kart);
break;
case 3 : {
scanf("Введите номер книги: %d",&a);
DelBOOK(&kart,a);
}
break;

}
}
}
288
19 ноября 2009 года
nikitozz
1.2K / / 09.03.2007
Записать данные об одной книге можно так
 
Код:
BOOK_t book;
std::ofstream x(..........);
...................................
x.write( (char *)&book, sizeof(BOOK_t) );


Считать из файла данные по одной книге можно так:
 
Код:
BOOK_t book;
std::ifstream x(..........);
...................................
x.read( (char *)&book, sizeof(BOOK_t) );
297
19 ноября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: Maxik54
Написал такое подобие базы данных со структурами.
Как можно реализовать копирование из файла и в файл? Помогите пожалуйста.


Вначале замечания.
Код нужно заключать в теги [noparse]

 
Код:
 
[/noparse].
К тому же приводить его без ошибок, а то закрывающей скобочки не хватает...
Если используете в основном printf, то cout не к месту.

Сохранение в файл делаем примерно так:
Код:
void saveBook(BOOK_t *book, FILE *name)
{
    fprintf(name, "%-12s %s\n", "Автор", book->author);
    fprintf(name, "%-12s %s\n", "Заглавие", book->name);
    fprintf(name, "%-12s %d\n", "Год издания", book->year);
    fprintf(name, "%-12s %.2f\n", "Цена", book->cost);
    fprintf(name, "%-12s %d\n\n", "Категория", book->category);
}

int saveToFile(KART_t * k)
{
    FILE * name;
    if ((name = fopen("test.txt", "w")) == NULL)
    {
        fprintf(stderr, "Error!");
        return 1; // error
    }
    for (int i = 0; i < k->n; i++)
        saveBook(k->kart, name);
    fclose(name);
    return 0; // ok
}

В функции main
 
Код:
...
case 4 : saveToFile(&kart);
break;
...

Т. е. всё практически также, как при выводе на экран.
Чтение из файла делается практически также, как при вводе с клавиатуры, только функция fscanf.
50K
20 ноября 2009 года
Maxik54
7 / / 23.08.2009
Цитата: koodeer
Вначале замечания.
Код нужно заключать в теги [noparse]
 
Код:
 
[/noparse].
К тому же приводить его без ошибок, а то закрывающей скобочки не хватает...
Если используете в основном printf, то cout не к месту.

Сохранение в файл делаем примерно так:
Код:
void saveBook(BOOK_t *book, FILE *name)
{
    fprintf(name, "%-12s %s\n", "Автор", book->author);
    fprintf(name, "%-12s %s\n", "Заглавие", book->name);
    fprintf(name, "%-12s %d\n", "Год издания", book->year);
    fprintf(name, "%-12s %.2f\n", "Цена", book->cost);
    fprintf(name, "%-12s %d\n\n", "Категория", book->category);
}

int saveToFile(KART_t * k)
{
    FILE * name;
    if ((name = fopen("test.txt", "w")) == NULL)
    {
        fprintf(stderr, "Error!");
        return 1; // error
    }
    for (int i = 0; i < k->n; i++)
        saveBook(k->kart, name);
    fclose(name);
    return 0; // ok
}

В функции main
 
Код:
...
case 4 : saveToFile(&kart);
break;
...

Т. е. всё практически также, как при выводе на экран.
Чтение из файла делается практически также, как при вводе с клавиатуры, только функция fscanf.




Спасибо! Создаваемый файл должен быть в папке проекта так?

297
20 ноября 2009 года
koodeer
1.2K / / 02.05.2009
Цитата: Maxik54
Создаваемый файл должен быть в папке проекта так?


Да где угодно. Достаточно задать путь: вместо "test.txt" (как в примере выше), например, "subdir\\test.txt".

55K
21 ноября 2009 года
fraptuplift
2 / / 11.11.2009
Как сделать что бы при копировании имени каталога в буфер и последующей его вставке, например в текстовый документ, не добавлялся слэш в конце?
7
21 ноября 2009 года
@pixo $oft
3.4K / / 20.09.2006
Есть какая-то проблема в том,чтобы этот завершающий слэш удалить?Или хотя бы на его место записать \0?

Ну,если вы такой ленивый,то PathRemoveBackslash вам в помощь
12K
21 ноября 2009 года
Ghox
297 / / 26.07.2009
Цитата: @pixo $oft
Есть какая-то проблема в том,чтобы этот завершающий слэш удалить?Или хотя бы на его место записать \0?

Ну,если вы такой ленивый,то PathRemoveBackslash вам в помощь


Боюсь, что ему ни PathRemoveBackslash, ни что-либо другое не поможет, потому что это, скорее всего, бот. :D

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог