Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Не хватает что-то, чтобы заработала программа при указателе структуры

Ответить
Настройки темы
C/C++ - [решено] Не хватает что-то, чтобы заработала программа при указателе структуры

Аватара для alert30

Ветеран


Сообщения: 1088
Благодарности: 162


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: alert30
Дата: 30-03-2016
Входные данные не выдает ошибок, только сама программа не понимает, что ему еще нужно. Есть причина, что я в структуре shop приписал product* z[10];, но как тогда приписать в main что-то вроде "x.z=...", чтобы вместо ... написать функцию, которая возвращает значение структуры с размером массива и сделать так, чтобы программа поняла, что готова к использованию на консоле.
Код
Код: Выделить весь код
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <windows.h>
#include <fstream>
#include <algorithm>
#include <sys/stat.h>
using namespace std;
ofstream fWrite;
ifstream fRead;
struct product{
	string seller;
	string name;
	float amount;
	int price;
	int dateofsale;
};
struct shop{
	int m;
	product* z[10]; //!
	shop():m(4){};
};
void write(product *);
void show(product *);
void del_last(shop &);
void add_new(shop &, product &);
void readFile(shop &, product &y, ifstream&, const string&);
void writeFile(shop, ofstream&, const string&);
bool fileExist(const string&);
bool isEmpty(ifstream&);

int main(){
	system("color 0f");
	setlocale(0,"");
	shop x;
	product y;
	string n;
	//
	x.z[0]->seller="Golev";
	x.z[0]->name="Coca-Cola";
	x.z[0]->amount=1;
	x.z[0]->price=200;
	x.z[0]->dateofsale=2612016;
	x.z[1]->seller="Isaev";
	x.z[1]->name="Fanta";
	x.z[1]->amount=1;
	x.z[1]->price=220;
	x.z[1]->dateofsale=2012016;
	x.z[2]->seller="Belenova";
	x.z[2]->name="7UP";
	x.z[2]->amount=1;
	x.z[2]->price=230;
	x.z[2]->dateofsale=2112016;
	x.z[3]->seller="Nurova";
	x.z[3]->name="Sprite";
	x.z[3]->amount=1;
	x.z[3]->price=250;
	x.z[3]->dateofsale=1722016;
	while (n!="exit"){
		cout<<"Введите команду"<<endl;
		getline(cin, n);
		transform(n.begin(), n.end(), n.begin(), ::tolower);
		if (n=="help"){
			cout<<endl;
			cout<<"SHOW\t= Показ вывода"<<endl;
			cout<<"READ\t= Считывать из файла"<<endl;
			cout<<"SAVE\t= Сохранить данные в файл"<<endl;
			cout<<"ADD\t= Добавить товар"<<endl;
			cout<<"DELL\t= Удалить последнего товара из корзины"<<endl;
			cout<<"EXIT\t= Выход"<<endl;
			cout<<endl;
		}
		else if (n=="show"){
			for(int i=0; i<x.m; i++){
				show(x.z[i]);
				cout<<endl;
			}
		}
		else if (n=="read"){
			fRead.close();
			string name;
			cout<<"Введите имя файла: ";
			getline(cin, name);
			readFile(x, y, fRead, name);
		}
		else if (n=="save"){
			fRead.close();
			string name;
			cout<<"Сохранить как: ";
			getline(cin, name);
			writeFile(x, fWrite, name);
		}
		else if (n=="add"){
			add_new(x,y);
		}
		else if (n=="dell"){
			del_last(x);
		}
		else{
			cout<<"Список команд = help"<<endl;
		}		
	}
	cout<<"Программа закрыта"<<endl;
	for(int i=0; i<x.m; i++){
		delete x.z[i];
	}
	system("pause");
	return 0;
}

void write(product *x){
	cout<<"Продавец\n-----> ";
	cin>>x->seller;
	cout<<"Наименование\n-----> ";
	cin>>x->name;
	cout<<"Количество\n-----> ";
	cin>>x->amount;
	cout<<"Цена\n-----> ";
	cin>>x->price;
	cout<<"Дата продажи\n-----> ";
	cin>>x->dateofsale;
}
void show(product *x){
	cout<<"Продавец: \t"<<x->seller<<endl;
	cout<<"Наименование: \t"<<x->name<<endl;
	cout<<"Количество: \t"<<x->amount<<endl;
	cout<<"Цена: \t"<<x->price<<" руб"<<endl;
	cout<<"Дата продажи: \t"<<x->dateofsale<<endl;
}
void del_last(shop &x){
	if (x.m>0){
		cout<<"Идет удаление..."<<endl;
		x.m=x.m-1;
	}
	else{
		cout<<"К удалению список пуст"<<endl;	
	}
}
void add_new(shop &x, product &y){
	write(&y);
	x.z[x.m]=new product (y);
	x.m=x.m+1;
}
void readFile(shop &x, product &y, ifstream& read, const string& n){
	if (fileExist(n)==false){
		cerr<<"Файл  '"<<n<<"' не существует"<<endl;
		return;
	}
	read.open(n.c_str(), ios::out|ios::app);
	while(true){
		read>>x.m;
		x.z[x.m]=new product[x.m];
		if (read.eof()){
			break;
		}
		for(int i=0; i<x.m; i++){
			read>>y.seller>>y.name>>y.amount>>y.price>>y.dateofsale;
			x.z[i]=new product (y);
		}
	}
}
void writeFile(shop x, ofstream& write, const string& n ){
	write.open(n.c_str());
	if (!(write.is_open())){
		cerr<<"Невозможно сохранить файл '"<<n<<"'"<<endl;
		return;
	}
	write<<x.m<<endl;
	for (int i=0; i<x.m; i++){
		write<<x.z[i]->seller<<"\t"<<x.z[i]->name<<"\t"<<x.z[i]->amount<<"\t"<<x.z[i]->price<<"\t"<<x.z[i]->dateofsale<<endl;
	}
	cout<<"Файл сохранен как '"<<n<<"'"<<endl;
	write.close();
}
bool fileExist(const string& name){
	struct stat buf;
	if (stat(name.c_str(), &buf) != -1){
		return true;
	}
	return false;
}

Отправлено: 02:57, 30-03-2016

 

Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата alert30:
product* z[10]; //! »
Где вы выделяете память под "продукты"? Почему именно 10?
Цитата alert30:
Входные данные не выдает ошибок, только сама программа не понимает, что ему еще нужно. Есть причина, что я в структуре shop приписал product* z[10];, но как тогда приписать в main что-то вроде "x.z=...", чтобы вместо ... написать функцию, которая возвращает значение структуры с размером массива и сделать так, чтобы программа поняла, что готова к использованию на консоле. »
Структурируйте поток сознания, читать тяжело.

Отправлено: 18:44, 30-03-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для alert30

Ветеран


Сообщения: 1088
Благодарности: 162

Профиль | Отправить PM | Цитировать


Цитата User001:
Где вы выделяете память под "продукты"? Почему именно 10? »
Место, где собираюсь выделить память, это головная программа.
Цитата User001:
Структурируйте поток сознания, читать тяжело. »
Сознание проскакивает через призму и отражает под другим текстом...
Что-то у меня не поперло, напишите функцию выделения памяти при product* z[10];.

Последний раз редактировалось alert30, 02-04-2016 в 06:03.


Отправлено: 20:18, 30-03-2016 | #3


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата alert30:
product* z[10]; »
Цитата alert30:
чтобы разместил свободное место для массива структур »
Это не массив структур, это массив указателей на структуры.
Цитата alert30:
Звездочка намекает при »
Продолжение следует?

Цитата alert30:
Что-то у меня не поперло, напишите функцию выделения памяти при product* z[10]; »
Также как вы и удаляете в конце программы.
for (int i = 0; i < 10; i++)
{
z[i] = new product;
}

Отправлено: 06:57, 31-03-2016 | #4


Аватара для alert30

Ветеран


Сообщения: 1088
Благодарности: 162

Профиль | Отправить PM | Цитировать


Цитата User001:
Продолжение следует? »
Скорее to be ended up, чем to be continued.

Отправлено: 19:46, 31-03-2016 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Не хватает что-то, чтобы заработала программа при указателе структуры

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
можно ли что-то сделать с компом, чтобы муж не запускал эти игры anticlonegk Флейм 10 24-10-2014 09:35
Любой язык - [решено] как сделать чтоб программа думала что системное время не то что на часах? mitiya Скриптовые языки администрирования Windows 2 13-01-2010 17:29
Разное - При попытке что-то скачать почему-то выкидывает на страницу westbyte Электрон Microsoft Windows 2000/XP 1 11-09-2009 09:02
Драйвер - XP как установить вручную msdos usb драйвер чтобы прога с ним заработала ? nono1 Microsoft Windows 2000/XP 1 11-08-2009 07:40
MAC адреса <разделение MAC адресов (или что то в этом роде) чтобы не было конфликтов> gunter85 Хочу все знать 2 19-07-2007 15:02




 
Переход