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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2012, 06:53   #1
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию (С++) как добавить в файл запись

Здравствуйте, пишу программу, остановился на моменте добавления записи в файл желательно в конец, вроде все правильно записал,программа вся работает, не работает только добавление
вот код
Код:
using namespace std;
struct BD {char fam[30];
int x,y,z,c,n;};

int _tmain(int argc, _TCHAR* argv[])
{   SetConsoleCP(1251); 
	SetConsoleOutputCP(1251);
	struct BD bd[100];
	char y=0, kor[30];
	int x=0,i=0,a=0,w=0,q=0;

	
	do{ system ("cls");
	cout << "      ******Меню*******"<< endl<< "1.Заполнить базу данных" <<endl<< "2.Показать баззу данных"<< endl<<
		"3.Корректировка базы данных"<<endl<<"4.Вывод ведомости продаж"<<endl<<"6.Конец"<<endl;
			 cin >> x;
	    
			 
			 if (x==1)
		{FILE *file = fopen( "file.txt", "w" );
		cout  <<"Введите колличесво покупателей"<< endl;
        cin >> a;
		for(i=0;i<a;i++)
		{cout  <<"Введите фамилию "<<i+1<<" покупателя"<< endl;
		cin>>bd[i].fam;
		fprintf(file, "%s\n", bd[i].fam);
		cout<<"Введите число"<<endl;
		cin>>bd[i].x;
		fprintf(file, "%d\n", bd[i].x);
	    cout<<"Введите месяц"<<endl;
		cin>>bd[i].y;
		fprintf(file, "%d\n", bd[i].y);
		cout<<"Введите год"<<endl;
		cin>>bd[i].z;
		fprintf(file, "%d\n", bd[i].z);
		cout<<"Введите цену"<<endl;
		if(i==a-1)
		{
		cin>>bd[i].c;
		fprintf(file, "%d", bd[i].c);
		}
		else
		{cin>>bd[i].c;
		fprintf(file, "%d\n", bd[i].c);}
		}
		fclose(file);
			cout << "База данных сохранена в файле: file.txt" << endl;
	    }
		
		
		if (x==2)
		{cout << "******Базза данных******"<< endl;
		FILE *file = fopen( "file.txt", "r" );
		i=0;
		cout<<" _____________________________________________________________________________"<<endl;
		cout<<"|______________________ФАМИЛИЯ|_______ДАТА|ИДЕНТИФИКАЦИОННЫЙ НОМЕР|_______ЦЕНА|"<<endl;
		while(!feof(file))
		{
	
		fscanf(file, "%s", bd[i].fam);
		cout<<"|";
		 cout.width(29);
         cout.fill('_');
		 cout << bd[i].fam<<"|";
		fscanf(file, "%d", &(bd[i].x));
		fscanf(file, "%d", &(bd[i].y));
		fscanf(file, "%d", &(bd[i].z));
		cout.fill('_');
		cout.width(3);
        cout<<bd[i].x<<".";
		cout.fill('0');
		cout.width(2);
		cout<<bd[i].y<<".";
		cout.fill(' ');
		cout.width(4);
		cout<<bd[i].z<<"|";
        bd[i].n=i+1;
		cout.width(23);
        cout.fill('_');
		cout<<bd[i].n<<"|";
		fscanf(file, "%d", &(bd[i].c));
	    cout.width(11);
        cout.fill('_');
		cout<<bd[i].c<<"|"<<endl; 
	    i++;}
        fclose(file);}


		else if (x==3){
			cout <<"Корректировка базы данных"<<endl;
			cout<<"Добавить нового покупателя или исправить информацию о старом?"<<endl;
		cout<<"Нажмите 1 для добавления и 2 для корректировки"<<endl;
		x=0;
		cin>>x;
		
		// вот тут сам цикл добавления в файл
		if(x==1)
		{FILE *file = fopen( "file.txt", "a+" );
		cout <<"Введите колличество добовляемых покупателей"<< endl;
		cin >> a;
		 for (i=0;i<a;i++)
		{cout  <<"Введите фамилию "<<i+1<<" покупателя"<< endl;
		cin>>bd[i].fam;
		fprintf(file, "%s\n", bd[i].fam);
		cout<<"Введите число"<<endl;
		cin>>bd[i].x;
		fprintf(file, "%d\n", bd[i].x);
	    cout<<"Введите месяц"<<endl;
		cin>>bd[i].y;
		fprintf(file, "%d\n", bd[i].y);
		cout<<"Введите год"<<endl;
		cin>>bd[i].z;
		fprintf(file, "%d\n", bd[i].z);
		cout<<"Введите цену"<<endl;
		cin>>bd[i].c;
		fprintf(file, "%d\n", bd[i].c);
		}
		 fclose(file);
		}
		
		else if (x==2)
		{FILE *file = fopen( "file.txt", "r" );
		i=0; 
		while(!feof(file))
		{fscanf(file, "%s",&bd[i].fam);
		fscanf(file, "%d", &bd[i].x);
		fscanf(file, "%d", &bd[i].y);
		fscanf(file, "%d", &bd[i].z);
		fscanf(file, "%d", &bd[i].c);
		i++;
		}
		q=i;
		cout<<"Введите фамилию того, кого желаете исправить"<<endl;
		cin>>kor;
	    int k=0;
		for(i=0;i<q;i++) if(strcmp(bd[i].fam, kor) == 0) k++, w=i;
           if (k==0) cout<<"Нечего не найдено"<<endl;
		    else {cout<<"Найдено " << k<<" совпадение:";
			i=w;
			cout<<bd[i].fam<<" "<<bd[i].x<<"."<<bd[i].y<<"."<<bd[i].z<<" "<<bd[i].c<<endl;
		  cout<<"Корректируем информацию"<<endl;
		  cout<<"Измените фамилию"<<endl;
		  cin>>bd[i].fam;
		   cout<<"Измените число"<<endl;
		  cin>>bd[i].x;
		   cout<<"Измените месяц"<<endl;
		  cin>>bd[i].y;
		   cout<<"Измените год"<<endl;
		  cin>>bd[i].z;
		   cout<<"Измените цену квартиры"<<endl;
		  cin>>bd[i].c;
		   cout<<"Информация изменена"<<endl;
			}
			fclose(file);}
		FILE *file = fopen( "file.txt", "w" );
		for(i=0;i<q;i++)
		{fprintf(file, "%s\n", bd[i].fam);
		fprintf(file, "%d\n", bd[i].x);
		fprintf(file, "%d\n", bd[i].y);
		fprintf(file, "%d\n", bd[i].z);
		if(i==q-1)
		{fprintf(file, "%d", bd[i].c);
		}
		else
		{fprintf(file, "%d\n", bd[i].c);}
		}
		fclose(file);
		}
	cout <<"Если хотите продолжить нажм ите y"<< endl;
		cin >> y;}
	while (y=='y');


		system("pause");

	
	return 0;
}
при добавлении программа нечего не записывает в файл а только его очищает, не пойму в чем проблема вроде все правильно записал
PotatoCaptain вне форума Ответить с цитированием
Старый 03.02.2012, 08:43   #2
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

FILE *file = fopen( "file.txt", "a+" );
так же нужно писать для добавления в конец?
PotatoCaptain вне форума Ответить с цитированием
Старый 03.02.2012, 13:26   #3
Master Piknishok
Новичок
Джуниор
 
Регистрация: 03.02.2012
Сообщений: 1
По умолчанию

Семейсво функций FILE рассматривать не будет в связи с её архаичносью, и начнём сразу с варианта, который не входит в стандарт, но присутствует во многих компиляторах.

#include <sys/stat.h>
#include <memory.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>

struct mystruct "za polarnoi lupoi" {
int i;
char buf[5];
double d;
};

int main(int argc, char* argv[])
{
// открываем файл
int fh = _open("file.dat",_O_RDWR | _O_BINARY);
if (fh == -1)
{
// или при необходимости создаём новый
fh = _creat("file.dat",_S_IREAD | _S_IWRITE);
if (fh == -1)
// не шмагла :xz:
return 1;
}

// готовим структуру для записи
mystruct ms;
memset(&ms,0,sizeof ms);
ms.i = 1;
ms.d = 2;

// позиционируемся в конец файла
_lseek(fh,0,SEEK_END);

// добавляем новую структуру
_write(fh,&ms,sizeof ms);

// позиционируемся в начало
_lseek(fh,0,SEEK_END);

// читаем первую записанную структуру
_read(fh,&ms,sizeof ms);

return 0;
}
Эта программа открывает файл (либо создаёт его при необходимости) и добавляет в него новую структуру, затем читает первый экземпляр.

А вообще у тебя быдлокод так делают только ламеры! как тебя ещё не отчислили!

Последний раз редактировалось Master Piknishok; 03.02.2012 в 13:32.
Master Piknishok вне форума Ответить с цитированием
Старый 03.02.2012, 13:47   #4
MegaZedrot
Новичок
Джуниор
 
Регистрация: 03.02.2012
Сообщений: 2
По умолчанию

полностью согласен с предыдущим комментарием. книжки нужно читать, ну ладно сам таким был неопытным, не знал как бэйсик от си ++ отличить, поможем бедняге, старается всё-таки. Вот мой совет:
Нет никакой разницы в плане удобочитаемости следующих фрагментов:
void using_k_and_r_style() {
// ...
}
void putting_each_brace_on_its_own_line( )
{
// ...
}
void or_putting_each_brace_on_its_own_li ne_indented()
{
// ...
}
вот и вся проблема.
MegaZedrot вне форума Ответить с цитированием
Старый 03.02.2012, 13:49   #5
MegaZedrot
Новичок
Джуниор
 
Регистрация: 03.02.2012
Сообщений: 2
По умолчанию

FILE *file = fopen( "file.txt", "a+" );
так же нужно писать для добавления в конец-ты прав капитан картофель
MegaZedrot вне форума Ответить с цитированием
Старый 03.02.2012, 14:02   #6
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

Я не понял не слова что вы оба написали там
вы помоему сами не понимаете чего понаписали
люди кто понимает ответьте на мой вопрос пожалуйста
PotatoCaptain вне форума Ответить с цитированием
Старый 06.06.2014, 23:12   #7
sergio_aguero
Новичок
Джуниор
 
Регистрация: 04.06.2014
Сообщений: 1
По умолчанию Помощь по программе

Вот часть от программы где осуществляется добавление новых записей

Выдается ошибка. подскажите как ее исправить?


void add(){
int bytes=28*(count+1);
gr=(Worker*)realloc(gr,bytes);
Worker st;
printf("Add Worker number %d", count, " :\n");

printf("Input name:\n");
scanf("%s", &st.name);

printf("Input group:\n");
scanf("%d", &st.group);

printf("Input year:\n");
scanf("%d", &st.year);


gr[count]=st;
count++;
printf("Worker added success.\n");

}
sergio_aguero вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить exe файл..?! Manhunt714 Общие вопросы Delphi 15 01.09.2011 10:31
Как при вводе данных на одной форме - добавить запись на двух связанных таблицах? маврик Microsoft Office Access 13 05.11.2009 10:40
Как добавить запись в файл через StringGrid Oooooleg Помощь студентам 5 17.05.2009 14:47