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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2010, 23:34   #1
Nostalgy
 
Регистрация: 23.04.2010
Сообщений: 7
Вопрос Комбинированные типы данных

Задача:

Создайте текстовый файл, содержащий сведения об ассортименте обуви в магазине фирмы: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д - для дамской обуви. М - для мужской. П - для детской. Напишите программу, которая формирует двоичный файл, каждый элемент которого является структурой, составленной на основе данных текстового файла. Отсортируйте данные бинарного файла в алфавитном порядке наименований. Выведите на экран информацию об обуви, стоимость которой находится в диапазоне от А до В.

Входящий файл выглядит так:

Д-0001 Босоножки 8 1000
М-0002 Мокасины 6 3200
П-0003 Чешки 12 750
М-0004 Туфли мужские 20 3000
П-0005 Унты 5 2100
П-0006 Плетёнки 4 900
Д-0007 Батильоны 7 1200
М-0008 Кеды 22 500
П-0009 Валенки 3 650
П-0010 Кроссовки 30 1750
Д-0011 Балетки 25 800
Д-0012 Туфли женские 29 2400

Код с 6 непонятными для меня ошибками:

Код:
#include <math.h>
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
// структура обувь
struct Footwear
{
	char article[25];
	char name[25];
	int number[10];
	int price[10];
};
// функция вывода на экран содержимого файла
void outfile(fstream& f, int n)
{
Footwear a;
	f.seekg(0);// установить указатель файла на начало
	cout<<setw(26)<<"Артикул|"<<setw(9)<<"Наименование|"<<setw(9)<<"Количество|"<<setw(7)<<"Цена|"<<endl;			cout<<setw(51)<<"__________________________"<<endl;
		for(int i=0; i<n; i++)
		{
			f.read((char *)&a,sizeof a);// чтение из файла			сout<<setw(25)<< a.name<<"|"<<setw(8)<<a.years<<"|"<<setw(8)<<a.step<<"|"<<setw(6)<<a.stag<<"|";
			cout<<endl;
		}
}
// функция чтения данных из текстового файла и запись данных в бинарный файл
int read_f(fstream &f, fstream &out)
{
	int i=0;Footwear a;
	while(!f.eof())// пока не конец файла
	{
		f>>a.article>>a.name;f>>a.number;f>>a.price;
		out.write((char *) &a, sizeof a);
		i++;
	}
	return i;
}
// функция сортировки компонентов бинарного файла в алфавитном порядке
void sort(fstream &f,int n)
{
	Footwear min,a;
	int n_min;
	for(int i=0;i<n;i++)
	{
		f.seekg(i*(sizeof a));
		f.read((char *)&min,sizeof min);
		n_min=i;
		for(int j=i+1;j<n;j++)
		{
			f.read((char *)&a,sizeof a);
			if(strcmp(a.name,min.name)<0)
			{
				min=a;
				n_min=j;
			}	}		
		f.seekg(i*(sizeof a));
		f.read((char *) &a,sizeof a);
		f.seekp(i*(sizeof a));
		f.write((char *) &min,sizeof min);
		f.seekp(n_min*(sizeof a));
		f.write((char *) &a,sizeof a);
		
	}
}

// функция формирования нового файла из данных попадающих в заданный интервал
int IsPrice(fstream &f,fstream &f_new,int n,int c, int d)
{
	int k=0; 
	Footwear a;
	f.seekg(0);f_new.seekp(0);
	for(int i=0;i<n;i++)
	{
	    f.read((char *) &a,sizeof a); 
		if(a.price>=c && a.price<=d) 
		{
			k++;
			f_new.write((char *) &a, sizeof a);
		}
	}
	return k;
}
int main()
{
	setlocale(LC_CTYPE,"Russian");
	fstream in ("data.txt", ios::in);
	if(!in)
	{
		cout<<"Не открыт data.txt"<<endl;
		return 1;
	}
	fstream out ("data.dat",  ios::out | ios::binary);
	if(!out)
	{
		cout<<"Не открыт data.dat"<<endl;
		return 1;
	}

int size_f=read_f(in,out);
	in.close();out.close();
	fstream out_f ("data.dat", ios::in | ios::out | ios::binary);
	if(!out_f)
	{
		cout<<"Не открыт data.dat"<<endl;
		return 1;
	} 
	
	sort(out_f,size_f);
	outfile(out_f,size_f);
fstream out_f1 ("d.dat", ios::in |  ios::out | ios::binary);
if(!out_f1)
	{
		cout<<"Не открыт data1.dat"<<endl;
		return 1;
	} 
cout<<"Введите через пробел ценовой интервал >";
int c,d;
cin>>c; cin>>d;
outfile(out_f1,IsPrice(out_f,out_f1,size_f,c,d));

	return 0;
}
Что нужно исправить?

Uses Microsoft Visual Studio 2008

Последний раз редактировалось Nostalgy; 23.04.2010 в 23:35. Причина: Подравниваю текст) Ищу спойлер.. Нету...
Nostalgy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комбинированные типы данных в Паскале Максим8111 Помощь студентам 1 05.04.2009 00:55
Комбинированные типы данных в Паскале Максим8111 Помощь студентам 5 30.03.2009 21:44
Pascal комбинированные типы Rus 47 Помощь студентам 7 22.02.2009 17:48
Комбинированные типы melikyan Помощь студентам 5 10.02.2009 21:41
Комбинированные типы данных и массивы mar4elo Общие вопросы Delphi 11 01.12.2008 10:41