Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2014, 14:58   #1
MaXgo
Пользователь
 
Аватар для MaXgo
 
Регистрация: 08.12.2012
Сообщений: 21
По умолчанию Структура "Покупатель"

Помогите, пожалуйста, решить задачку.

Нужно создать структуру "Покупатель":
- Фамилия, имя, отчество;
- Домашний адрес;
- Номер телефона;
- Номер кредитной карты.
Удалить 3 элемента из начала файла, добавить 3 элемента в конец файла.

У меня есть набросок первой части задания, не могу понять как реализовать вторую часть задания, а именно: Удалить 3 элемента из начала файла, добавить 3 элемента в конец файла.

Код:
#include "stdafx.h"
#include <locale>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <Windows.h>
using namespace std;
 
typedef struct
{
 
char fam [40];
char adress [40];
char telephone [40];
char creditka [40];
 
} shopper;
 
void form(char sFileName[10],int KolZap)
{
int i;
char* rejim="w";
FILE *f;
shopper s;
if (KolZap==1) {
rejim="a";
}
if ((f=fopen(sFileName,rejim))==NULL) exit(1);
for (i=0;i<KolZap;i++) {
cout <<"Vvedite familiu: ";
scanf ("%s",&s.fam);
cout <<"Vvedite dom adress: ";
scanf ("%s",&s.adress);
cout <<"Vvedite nomer telefona: ";
scanf ("%s",&s.telephone);
cout <<"Vvedite nomer credit cart: ";
scanf ("%s",&s.creditka);
cout <<endl;
fwrite(&s,sizeof(shopper),1,f);
if (ferror(f)!=NULL) exit(2);
}
fclose(f);
}
void vivod(char sFileName[10])
{
FILE *f;
shopper d;
if ((f=fopen(sFileName, "r"))==NULL) exit(3);
cout <<"File - "<<sFileName<<endl;
while (!feof(f)) {
fread (&d,sizeof(shopper),1,f);
if (!feof(f)) {
cout <<"**************************\n";
cout <<"Familia: "<<d.fam<<endl;
cout <<"Adress: "<<d.adress<<endl;
cout <<"Telephone: "<<d.telephone<<endl;
cout <<"Nomer carti:"<<d.creditka<<endl;
cout <<"**************************\n";
}
}
fclose(f);
}
 
int main(int argc, char* argv[])
{char ch;
do{
int n;
cout <<"Struktura <Pokypatel>\n";
cout <<"Vvedute kolichestvo zapisei: ";
cin>>n;
cout <<endl;
form("f11.txt",n);
vivod("f11.txt");
cout<<"Hotite prodolzhit?(Y/N)";
cin>>ch;
}while (ch == 'Y');
getchar();
return 0;
}
Заранее спасибо)

Последний раз редактировалось Stilet; 13.02.2014 в 15:12.
MaXgo вне форума Ответить с цитированием
Старый 13.02.2014, 15:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нужно просто считать файл без первых трех записей в динмассив, а потом записать считанное в тот же файл, переоткрыв его или урезав.
Что-то типа:
Код:
fseek (f, 0, 2);               // получаем количество
int FileLen = ftell(f)-3*sizeof(shopper);            // байт в файле без первых трех
fseek (f, 3*sizeof(shopper), 0);             
char *c=new char[FileLen];
fread (&c,FileLen,1,f);
... тут пересоздаем файл, не помню как, наверное так fopen(sFileName, "w+")
fwrite (&c,FileLen,1,f);
delete[] c;
примерно так короче, если нужно именно урезать файл.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04