Форум программистов, компьютерный форум CyberForum.ru

Составить функцию (получить информацию о клиентах, которым могут быть предоставлены определенные скидки) - C++

Восстановить пароль Регистрация
 
horridus
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 13
24.12.2012, 19:07     Составить функцию (получить информацию о клиентах, которым могут быть предоставлены определенные скидки) #1
Таки я сделал ввод в файл. Но не в текстовый, а в .dat. Главное было вывести все это дело на экран. Теперь мне нужно двигаться дальше.
Задача состоит в том, что нужно получить информацию о клиентах, которым могут быть предоставлены определенные скидки, если сумма их предыдущих поездок варьируется в определенных значениях. И нужно составить функцию, которая бы могла это выполнять, для этой программы:
Код
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <clocale>
using namespace std;
struct clients 
{ 
	char imya[10];
	char familiya[10]; 
	char otchectvo[10];
	double summa;
	char strana[10];
	char date[8];
};
void outfile(fstream& f, int n)
{
	clients a;
	f.seekg(0);
	cout<<"Фамилия|"<<setw(9)<<"Имя|"<<setw(9)<<"Отчество|"<<setw(7)<<"Стоимость поездки|"<<setw(9)<<"Посещаемая страна|"<<setw(2)<<"Дата|"<<endl;		
	cout<<setw(5)<<"_________________________________________________________________________"<<endl;
		for(int i=0; i<n; i++)
		{
			f.read((char *)&a,sizeof a);	
			cout<<a.imya<<"|"<<setw(8)<<a.familiya<<"|"<<setw(8)<<a.otchectvo<<"|"<<setw(6)<<a.summa<<"|"<<setw(18)<<a.strana<<setw(5)<<"|"<<a.date<<"|";
			cout<<endl;  
		}
}
int vvod(fstream& f, int &n)
{
	clients a;
	int q;
	int i=0;
	cin.get();
	cout<<"Сколько клиентов вы хотите внести?";cin>>q;
	f.seekg((n)*(sizeof a));
	{
		cout<<"Введите имя: "; cin>>a.imya;
		cout<<"Введите фамилию: "; cin>>a.familiya;
		cout<<"Введите отчество: ";cin>>a.otchectvo;
		cout<<"Введите посещаемую страну: ";cin>>a.strana;
		cout<<"Введите дату поездки: ";cin>>a.date;
		cout<<"Введите стоимость поездки: ";cin>>a.summa;
		cout<<endl;
		f.write((char *)&a,sizeof a);
	}
	f.close();
	n++;
	f.open("data.dat", ios::in | ios::out);
	return i;
}
int read_f(fstream &f, fstream &out)
{
	int i=0;
	clients a;
	while(!f.eof())
	{
		f>>a.imya>>a.familiya;f>>a.otchectvo;f>>a.summa>>a.strana>>a.date;
		out.write((char *) &a, sizeof a);
		i++;
	}
	return i;
}
int country(fstream &f1, int n, char coun)
{
	int m=0;
	clients a;
	f1.seekg(0);
	for(int i=0;i<n;i++)
	{
		f1.read((char *)&a, sizeof a); 
		if(a.strana[0] == coun )
		{
			cout<<a.imya<<"|"<<setw(8)<<a.familiya<<"|"<<setw(8)<<a.otchectvo<<"|"<<setw(6)<<a.summa<<"|"<<setw(18)<<a.strana<<setw(5)<<"|"<<a.date<<"|";
			cout<<endl;
			m++;
		}
	}
	return m;
}
int main()
{
	char sym;
	clients a;
 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(!in.is_open())
 {
  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;
 }
 cout<<endl;
 outfile(out_f,size_f);
fstream out_f1 ("data.dat", ios::in |  ios::out | ios::binary);
 if(!out_f1)
 {
  cout<<"Не открыт data1.dat"<<endl;
  return 1;
 }
 do {
	 cout<<endl;
  cout<<"Меню:"<<endl;
  cout<<"1. Добавить клиента"<<endl;
  cout<<"2. Просмотреть список клиентов"<<endl;
  cout<<"3. Показать постоянных клиентов"<<endl;
  cout<<"4. Показать клиентов, посетивших указанную страну"<<endl;
  cout<<"5. Показать клиентов, которым могут быть предоставлены скидки"<<endl;
  cout<<"6. Выход"<<endl;
  cout<<"Введите номер пункта меню> ";cin>>sym; 
  cout<<endl;
  switch(sym)
  {   
case'1': 
	vvod(out_f,size_f);
	break;
 case'2':
	outfile(out_f,size_f);
	break;
	return 0;
 case'4':
	 cout<<"Введите страну> ";
	char coun;
    cin>>coun;
	country(out_f,size_f,coun);
	break;
  }
 }
while (sym!='6');
return 0;
}
Мне не понятно как подсчитывать хранимые в a.summa значения для разных клиентов с учетом того, что клиенты могут повторяться. Помогите пожалуйста с этим!!
Также здесь есть ошибка, которую я не могу исправить.
Вот эта функция
Код
int country(fstream &f1, int n, char coun)
{
	int m=0;
	clients a;
	f1.seekg(0);
	for(int i=0;i<n;i++)
	{
		f1.read((char *)&a, sizeof a); 
		if(a.strana[0] == coun )
		{
			cout<<a.imya<<"|"<<setw(8)<<a.familiya<<"|"<<setw(8)<<a.otchectvo<<"|"<<setw(6)<<a.summa<<"|"<<setw(18)<<a.strana<<setw(5)<<"|"<<a.date<<"|";
			cout<<endl;
			m++;
		}
	}
	return m;
}
выводит строки по введенной в консоль стране. Но помимо строк пять раз выводится меню. В чем здесь ошибка?

Добавлено через 2 часа 29 минут
Если вот тут
Цитата Сообщение от horridus Посмотреть сообщение
case'4':
* * *cout<<"Введите страну> ";
* * char coun;
* * cin>>coun;
* * country(out_f,size_f,coun);
* * break;
после вызова функции добавить return 0, то выводится нормально. Но работа программы прекращается.
p.s Помощь с составлением функции все еще очень нужна!

Добавлено через 13 часов 12 минут
ап...(

Добавлено через 4 часа 30 минут
Ну как сделать, чтобы при равных значениях в a.familiya складывались a.summa? Чтобы если в a.familiya встречался Ivanov, то a.summa записывалась в переменную и при последующей встрече Ivanov, a.summa приплюсовывалась к той переменной. И так для каждых одинаковых a.familiya.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2012, 19:07     Составить функцию (получить информацию о клиентах, которым могут быть предоставлены определенные скидки)
Посмотрите здесь:

Написать функцию,которая вычисляет значение а в степине в.Числа а и в могут быть любыми целыми положительными числами . C++
C++ я учусь на высшке на программиста.. какие могут быть задачи на экзамене 1й курс .2й семестр!!.. должны быть классы!!
C++ Могут ли числа быть сторонами треугольника
Разработать функцию, которая возвращает True, если полученные значения могут быть сторонами треугольника, False – в противном случае C++
C++ Напишите функцию Swap(a, b), аргументами которой могут быть числа любого типа
Где могут быть ошибки? C++
Написать функцию, которая вычисляет значение x*y. Числа x и y могут быть любыми дробными положительными числам C++
Составить программу, в которой можно ввести данные из предметной области и получить определенную информацию C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru