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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано трехзначное число. Получить 6 различных чисел, образованных перестановкой цифр заданного числа http://www.cyberforum.ru/cpp-beginners/thread743845.html
Дано трехзначное число. Получить 6 различных чисел, образованных перестановкой цифр заданного числа.
C++ Не работает удаление в списке Извините за очень заеженную тему, но не хватает ума понять как элементы удаляются из списка. Вот код, тут все функции работают кроме удаления. Если не трудно можете объяснить как их удалять правильно и сразу показать. #include <iostream> using namespace std; struct List { int value; http://www.cyberforum.ru/cpp-beginners/thread743844.html
C++ Составить программу, которая запрашивает у пользователя количество дней в текущем месяце и сегодняшнее число
Составить программу, которая запрашивает у пользователя количество дней в текущем месяце и сегодняшнее число. Программа выводит сообщение о том,сколько дней осталось до конца текущего месяца. Пример работы программы: Сколько дней в текущем месяце? 30 Какое сегодня число? 26 До конца текущего месяца осталось 4 дня Помогите написать!)
Алгоритм Кнута, Морриса и Пратта C++
Я написал программу поиска образа в строке по методу Кнута, Морриса и Пратта.. И программа должна ввети чувствительности / нечувствительности к регистру. помогите пожалуйста как это сделать?? #include <iostream> #include <string.h> #include <time.h> #include <stdlib.h>
C++ Вычислить суммы элементов массива до первого нуля (доработать) http://www.cyberforum.ru/cpp-beginners/thread743823.html
1) В массиве i,j, =1,…,8 есть хотя бы один нуль. Вычислить суммы элементов массива до первого нуля. Исходные данные: 1,17,2,4,-5,0,7,8. Это задание, я в принципе разбираюсь в массивах (запись и суммирование, простейшие задачи), а вот что то не догоняю как можно сложить int числа массива до 1-го нуля , ещё передним стоит -5. Так что Разъесните пожалуйста, КТО - это уже прошол))). Спасибо ! ...
C++ алгоритм для проверки условия. Палиндромы рассмотрим некоторое натуральное число. Если это не палиндром, то изменим порядок его цифр на обратный и сложим исходное число с получившимся. Если сумма не палиндром, то над ней повторяется то же действие и т.д., пока не получится палиндром. Даны натуральные числа k,m,l(k<1). Проверить, верно ли, что для любого натурального числа из диапазона от k до 1 процесс завершается не позднее, чем после m... подробнее

Показать сообщение отдельно
horridus
1 / 1 / 0
Регистрация: 22.11.2012
Сообщений: 13
24.12.2012, 19:07     Составить функцию (получить информацию о клиентах, которым могут быть предоставлены определенные скидки)
Таки я сделал ввод в файл. Но не в текстовый, а в .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.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru