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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2013, 23:29   #1
Социалист-хиппи
 
Регистрация: 17.04.2013
Сообщений: 3
Вопрос С++,типизированные файлы.Чтение и запись.

Ребята помогите разобраться . Надо написать код программы , которая бы записывала данные в типизированные фаилы , могла считывать их. Я в процессе написания данной программы столкнулся с проблемой. Проблема заключается в том , что при выполнении данного кода когда происходит считывание с фаила структур , у меня при запросе вывести B[i].code , выводит постоянно B[i].codekat ( ТО ЕСТЬ все работает вроде бы нормально кроме того ,программа не может вывести код товара , выводит вместо него другое значение ( а именно код категории товара ))
Код:
# include <iostream>
# include <cstdlib>

using namespace std;
int const koltav=1; //kol-vo tovara
int const kolcat=1;//kol-vo category
int const kolprod=2;
int const kolpost=4;
struct category
{
	int codekat; //kod category
	char name [50]; //naimenovanie kategorii
} A[kolcat];
struct tovari
{
	int code; //kod tovara
	int codekat; //kod kategory
	char name [50]; // naimenovanie tovara
	float cost; //stoimost tovara
	int ostatok; //ostatok
}B[koltav];
struct postuplenie
{
	tm q1;
	int code; // kod tovara
	int kol; // kol-vo tovara
};//C[kolpost];

struct prodagi
{
	 tm q2;
	int code; //kod tovara
	int kol; //kol-vo tovara
}/*D[kolprod]*/;
void vvod1 ()
{
	//заполняем структуру 1 , количество категории изменяется в начале
for (int i=0;i<kolcat;i++){
	cout<<"vvedite kod kategorii nomer "<<i+1<<": ";
	cin>>A[i].codekat;
	cout<<"vvedite nazvanie categorii nomer "<<i+1<<": ";
	cin>>A[i].name;
}
int q;
for (int j=0; j<koltav ; j++)
{
	cout<<"vvedite code tovara: ";
	cin>>B[j].code;
	cout<<"vvedite ima tovara: ";
	cin>>B[j].name;
	cout<<"vvedite stoimostb tovara: ";
	cin>>B[j].cost;
	cout<<"vvedite ostatok tovara na sklade: ";
	cin>>B[j].ostatok;
	cout<<"vvedite kod kategorii tovara: ";
	q=0;
	do { cin>>B[j].codekat;
	 //   for (int ii=0;ii<kolcat;ii++)
		
		for (int m=0;m<kolcat;m++)
		{
            if(B[j].codekat==A[m].codekat)
			    {
				  q++;
				  break;
				}
        }
	}
	while (q!=1);
  
	
}
FILE *pFile;
fopen_s(&pFile, "Ser", "w");
fwrite (&A,sizeof(category),kolcat,pFile);
//fwrite (&B,sizeof(tovari),koltav,pFile);
fclose(pFile);
FILE *tovari;
fopen_s(&tovari, "tovari", "w");
fwrite (&B,sizeof(tovari),koltav,tovari);
fclose(tovari);
}
void read1 ()
{
	FILE *pFile;
fopen_s(&pFile, "Ser", "r+");
fread (&A,sizeof(category),kolcat,pFile);
fclose(pFile);
	
}
void read2 ()
{
	FILE *tovari;
fopen_s(&tovari, "Ser", "r+");
fread (&B,sizeof(tovari),kolcat,tovari);
fclose(tovari);
	
}
void postuplenie1 (int postupl)
{
postuplenie *C = new postuplenie[postupl];
cout<<"kod postupivshego tovara: ";
int q;
for (int i=0;i<postupl;i++){
	q=0;
	do { 
		cin>>C[i].code;
		for(int m=0;m<koltav;m++)
			if(C[i].code==B[m].code)
			{
				q++;
				break;
				}
	}
			while (q!=1);
			
	
}
}
void prodagi1 (int prod)
{
	prodagi *D = new prodagi[prod];
	cout<<"kod prodanogo tovara: ";
	int m=0,n=0,q=0;
	for(int i=0;i<prod;i++)
{
	q=0;
	do
      {
		cin>>D[i].code;
	for(m=0;m<koltav;m++)
	
			if(D[i].code==B[m].code)
			{
				q++;
				break;
			}
   
       }
			while (q!=1);
}
}
int main () 
{
	//ввод общий , на начало
	vvod1 ();
	read1 ();
	read2 ();
	for (int i=0;i<kolcat;i++)
	cout<<A[i].codekat<<" "<<A[i].name<<"\n";
	for (int i=0;i<koltav;i++)
	cout<<"Kod tovara: "<<B[i].code<<"Kod categorii: "<<B[i].codekat<<"Cena: "<<B[i].cost<<"naimenovanie: "<<B[i].name<<"ostatok: "<<B[i].ostatok<<"\n";
    //Блок запрашивабщий кол-во проданого товара и вызываемый пограмму по продажам
	int prod;
	cout<<"kol-vo prodanogo tovara: ";
	cin>> prod;
	prodagi1(prod);
	//Блок запрашивабщий кол-во поступившего товара и вызываемый пограмму по поступлениям
	int postupl;
	cout<<"kol-vo postupaemogo tovara: ";
	cin>>postupl;
	postuplenie1(postupl);
	return 0;
}
Социалист-хиппи вне форума Ответить с цитированием
Старый 18.04.2013, 08:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какой-то беспощадный код...
А зачем тут вот такие проверки?:
Цитата:
if(B[j].codekat==A[m].codekat)
{
q++;
break;
}
Смысл в нем? Что задумывалось?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2013, 11:26   #3
Социалист-хиппи
 
Регистрация: 17.04.2013
Сообщений: 3
По умолчанию

Ну здесь же у нас 4 структуры , которые описывают деятельность магазина . В первой структуре у нас записанны все существующие категории ( их код и название ) . во второй структуре у нас "все о товаре " ( а у каждого товара помимо своего кода есть код категории ) и вот эти проверки делают так , что если мы товару присваеваем код несуществующий категории , то он его не принимает и просит ввести еще раз .

Вот на этой картинке видно в чем проблема . Он выводит все введенные данные с клавиатуры правильно , кроме кода товара .
Изображения
Тип файла: jpg компил.jpg (25.3 Кб, 125 просмотров)

Последний раз редактировалось Stilet; 18.04.2013 в 12:29.
Социалист-хиппи вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java.Файлы и потоки.Чтение и запись. PointBreak Помощь студентам 0 18.10.2012 18:33
Типизированные файлы запись\ чтение\ меню Naposaram Паскаль, Turbo Pascal, PascalABC.NET 21 27.03.2012 18:42
Типизированные файлы. Чтение sz строки. Человек_Борща Общие вопросы Delphi 2 09.03.2012 21:26
Файлы: запись/чтение Proger_1 БД в Delphi 0 30.04.2010 00:36
VC++ файлы(чтение\запись) ("")(Э_Є)("") Общие вопросы C/C++ 3 16.06.2009 14:05