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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 18:45   #1
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию Проблема с структурами...

Доброго времени суток...
1)Подскадите как правильно заполнять структуру и выводить из неё елементы...
2) вроде ввожу но выводит оч странные символы...
P.S.Если быть кратким задача на базу данных с опреденными манипуляциями...Програма не дописана
Код:
# include <iostream.h>
# include <stdlib.h>
# include <conio.h>
# include <fstream.h>
using namespace std;
struct struktura
{
	struct personalne{
		char prizv[20];
		char batko[20];
		char imya[20];
		struct datanarodj {
int rik;
int mis;
int den;
		}datanarodj;
		char nacion[20];
	}personalne;
	struct contacty {
		struct adresa {
			char oblast[20];
			char misto[20];
			char vulycia[20];
			int bud;
			int kvart;
		}adresa;
		struct telefon{
		     long int mobilnyi;
             long int domashniy;
		}telefon;
	}contacty;
	struct navchalne {
		int grupa;
		char status[20];
		double serbal;
		char formanavch[20];
		struct proguly{
int bezprych;
int zprychynamy;
		}proguly;
		int kilborg;
	}navchalne;
};
int i=1;
void Vvod()
{
	    struktura dani[i];
		cout << "\t *** Zapus v bazu dannyh # " << i << " ***\t\n";
		cout << "1. Vvedit imya studenta: \n";
		cin.get();
		cin.getline(dani[i].personalne.imya,20);
		cout << "2. VVedit prizvyshce: \n";
		cin.get();
		cin.getline(dani[i].personalne.prizv,20);
		cin.get();
		cout << "3. Vvedit po-batkovi studenta : \n";
		cin.get();
		cin.getline(dani[i].personalne.batko,20);
		cout << "4. Vvedit datu narodjennia: \n";
		cout << "4.1 Den: ";
		cin.get();
		cin >> dani[i].personalne.datanarodj.den;
		cout << "\n4.2 Misyac: ";
		cin.get();
		cin >> dani[i].personalne.datanarodj.mis;
		cout << "\n4.3 Rik:";
		cin.get();
		cin >> dani[i].personalne.datanarodj.rik;
		cout << "\n5. Vvedit nacionalnist: ";
		cin.get();
		cin.getline(dani[i].personalne.nacion,20);
		cout << "\n6. Vvedit oblast: ";
		cin.get();
		cin.getline(dani[i].contacty.adresa.oblast,20);
		cout << "\n7. Vvedit misto: ";
		cin.get();
		cin.getline(dani[i].contacty.adresa.misto,20);
		cout << "\n8. Vvedit vulyciu: ";
		cin.get();
		cin.getline(dani[i].contacty.adresa.vulycia,20);
		cout << "\n9. Vvedit budynok: ";
		cin.get();
		cin >> dani[i].contacty.adresa.bud;
		cout << "\n10. Vvedit nomer kvartyry: ";
		cin.get();
		cin >> dani[i].contacty.adresa.kvart;
		cout << "\n11. Vvedit nomer mobilnogo: ";
		cin.get();
		cin >> dani[i].contacty.telefon.mobilnyi;
		cout << "\nVvedit nomer domashniy: ";
		cin.get();
cin >> dani[i].contacty.telefon.domashniy;
cout << "\n12. Vvedit nomer grupy: ";
cin.get();
cin >>dani[i].navchalne.grupa;
cout << "\n13. Vvedit status v grupi grupy: ";
cin.get();
cin.getline(dani[i].navchalne.status,20);
cout << "\n14. Vvedit seredniy bal: ";
cin.get();					
cin >> dani[i].navchalne.serbal;
cout << "\n15. Vvedit formu navchannya: ";
cin.get();
cin.getline(dani[i].navchalne.formanavch,20);
cout << "\n16.1 Vvedit proguly: ";
cout << "\n16.2 Bez prychyny: ";
cin.get();
cin >> dani[i].navchalne.proguly.bezprych;
cout << "\nZ 16.3 prychynou: ";
cin.get();
cin >> dani[i].navchalne.proguly.zprychynamy;
cout << "\n17 Vvedit kilkist borgiv: ";
cin.get();
cin >> dani[i].navchalne.kilborg;
}
int main()
{  int ans1,nom,ans3,b=1,j,k,f;
	char ans2,ans;
	char pb[20];
	char pr[20];
	char im[20];
	struktura dani[i];
	MENU:
	do
	{cout << " Menu: \t| 1.Stvorennya novoi bazy\n";
		cout << "\t| 2.Robota z gotovou bazou\n";
		cout << "\t| 3.Vyhid\n";
		cout << "Vidpovid: ";
		cin >> ans1;
		system("cls");
	}
	while (ans1!=1&&ans1!=2&&ans1!=3);
	if (ans1==1) 
	{
		Vvod();
		do 
		{
		cout << "\nZapovnyty sche odnu anketu?";
		cin >> ans;
		}

		while (ans!='y'&&ans!='n');
		if (ans=='y')
		{
			i++;
			Vvod();
			goto L;
		}
		if (ans=='n')
		{
			cout << "Menu 'robota z bazamu' : ";
			cout << "Vvedit nomer zapysu:  ";
		cin >> nom;
	cout<<dani[nom].personalne.imya;

	}
	 }
	 L:cout<<"\nMenu 2:\t| 1.Vudalennya zapusu pro studenta\n\t| 2.Doodanya do bazu \n\t| 3.redaguvanya \n\t| 4.vuvid bazu\n";
	 cout<<"\t| 5.zberejenya bazu \n\t| 6.zavdanya mogo variantu\n";
	 cin>>ans3;
	 if(ans3==1)
	 {
 	cout<<"Vvedit` imya : "; 
 	cin>>im;
	cout<<"studenta prizvushe : "; 
	cin>>pr;
	cout<<"po bat`kovi : ";
	cin>>pb;
	for(b;b<=i;b++){
		 if (im!=dani[b].personalne.imya&&pr!=dani[b].personalne.prizv&&pb!=dani[b].personalne.batko)
	 	{
	 	for(int k=1;k<=20;k++)	
    dani[i].personalne.imya[b]= ' ';
    dani[i].personalne.prizv[b]=' ';
    dani[i].personalne.batko[b]=' ';
   	cout<<dani[i].contacty.telefon.domashniy;
   	cout<<dani[i].personalne.imya;
   	cout<<dani[i].personalne.batko;
	cout<<dani[i].contacty.adresa.misto;
  	
    goto L;
	 	}
 	 }
 	}
 	if(ans3==2){
 		i++;
	 	Vvod();
	 	goto L;
	 }
	 if(ans3==3){
	cout<<"Vvedit` imya :"; 
 	cin>>im;
	cout<<"studenta prizvushe : "; 
	cin>>pr;
	i++;
	Vvod();
	goto L;
 	}
	cin.get();
	return 0;
}
Dregatar вне форума Ответить с цитированием
Старый 21.04.2012, 20:07   #2
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Во-первых, нумерация элементов массива начинаестя с нуля, а вы выводите с единицы.
Во вторых, в строке
Код:
cout << "Menu 'robota z bazamu' : ";
нужно писать
Код:
cout << "Menu \'robota z bazamu\' : ";
,
если я не ошибаюсь.
Дальше читать не могу, оформлено так, что читать невозможно - где какой goto и что он делает - разобрать невозможно.
rmv240899 вне форума Ответить с цитированием
Старый 22.04.2012, 14:19   #3
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Оформлено так по тому что не власили все символы в сообщение....
Dregatar вне форума Ответить с цитированием
Старый 22.04.2012, 14:29   #4
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

вот есче один вопрос которого немогу понять:
почему если мы пишем функцию на ввод в структуры то при помощи обычной строчки в теле програмы мы не можем нормально вывести её?
И есче одно, разве функция записи елемента работает только для одного раза (тоесть в функции можно поставить несколько записей елементов)?
(при таком наборе выводит только одну запись если розкоментировать, ничего не получаеться...)
Код:
# include <iostream.h>
# include <conio.h>
# include <fstream.h>
# include <stdlib.h>
struct struktura
{
	struct personalne{
		char prizv[20];
		char batko[20];
		char imya[20];
		struct datanarodj {
			int rik;
			int mis;
			int den;
		}datanarodj;
		char nacion[20];
	}personalne;
	struct contacty {
		struct adresa {
			char oblast[20];
			char misto[20];
			char vulycia[20];
			int bud;
			int kvart;
		}adresa;
		struct telefon{
		     long int mobilnyi;
             long int domashniy;
		}telefon;
	}contacty;
	struct navchalne {
		int grupa;
		char status[20];
		double serbal;
		char formanavch[20];
		struct proguly{
			int bezprych;
			int zprychynamy;
		}proguly;
		int kilborg;
	}navchalne;
};
int Vvod()
	{   int i=0;
		struktura dani[i];
		cin.getline(dani[i].personalne.imya,20);
	//	cin.getline(dani[i].personalne.prizv,20);
			return 0;
}
void Vuvod () {
	int i=0;
		struktura dani[i];
	cout<<dani[i].personalne.imya,20;
//	cout<<dani[i].personalne.prizv,20;
}

int main()
{       int i=0;
		struktura dani[i];
		cout << "\t *** Zapus v bazu dannyh # " << i << " ***\t\n";
		cout << "1. Vvedit imya studenta: \n";
		Vvod();
		Vuvod ();
//cout<<dani[i].personalne.imya,20;
		
}
Dregatar вне форума Ответить с цитированием
Старый 22.04.2012, 14:51   #5
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Ну а как вы хотите выводить больше записей если у Вас нету цикла...
Во первых, сделайте объект структуры глобальным потому что в Вашем случае при вводе, создается один объект, который заполняется данными а на выводе создается уже совсем другой объект, вот поэтому "ничего и не получается". Советую почитать про указатели.
Совет Вам на будущее, уделяйте внимание красоте вашего кода, так как форматирование вашего кода отстой, ничего нигде не видно и не слышно, мало кто захочет Вам помогать с таким ужасом!

Код:
const int MAX_REC = 5;

struktura dani[MAX_REC]

void Vvod()
{   
 for (int i = 0; i < MAX_REC; i++)
 {
  cin.getline(dani[i].personalne.imya,20);
  cin.getline(dani[i].personalne.prizv,20);
 }
}
void Vuvod () 
{
 for (int i = 0; i < MAX_REC; i++)
 {
  cout<<dani[i].personalne.imya,20;
  cout<<dani[i].personalne.prizv,20;
 }
}

int main()
{       int i=0;
		
		cout << "\t *** Zapus v bazu dannyh # " << i << " ***\t\n";
		cout << "1. Vvedit imya studenta: \n";
		Vvod();
		Vuvod();
//cout<<dani[i].personalne.imya,20;

 for (int i = 0; i < MAX_REC; i++)
 {
  cout<<dani[i].personalne.imya,20;
  cout<<dani[i].personalne.prizv,20;
 }		
}

Последний раз редактировалось coNsept; 22.04.2012 в 15:06.
coNsept вне форума Ответить с цитированием
Старый 03.05.2012, 22:16   #6
Dregatar
Пользователь
 
Регистрация: 02.04.2012
Сообщений: 11
По умолчанию

Спасибо буду учиться...
Если возникнут вопросы, обращюсь...
Dregatar вне форума Ответить с цитированием
Старый 03.05.2012, 23:59   #7
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Я Ваш код не разбирал, прочел, что проблема с заполнением..
вот тут есть как я заполнял структуру данными из файла..
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <fstream.h>
#include <conio.h>
#include <string.h>

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main()
{
        struct student{
                int id;
                char p[30];  //--familiya
                char i[30];  //--imya
                int m;  //-- matan
                int f;  //-fizika
                int k; //-informatika
        };

        student massiv[10];
        
        int c,i,j, id=0, idr=0, idp=1, n=0;
        char temp[100];
        char *t;

        ifstream input("input_data.txt");

        c=0;
        while(!input.eof()){
                input.getline(temp, 100);
                cout<<id++<<" "<<temp<<endl;
                i=0;
                t=strtok(temp, " ");
                while(t!=NULL ){
                        if(i==0){strcpy(massiv[c].p,t);}
                        if(i==1){strcpy(massiv[c].i,t);}
                        if(i==2){massiv[c].m=atoi(t);}
                        if(i==3){massiv[c].f=atoi(t);}
                        if(i==4){massiv[c].k=atoi(t);}
                        t=strtok(NULL, " ");
                        i++;
                }c++;
        }

        getch();
        return 0;
}
//---------------------------------------------------------------------------
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема в работе со структурами в си gylayko Помощь студентам 1 16.04.2012 14:28
C++ Работа со структурами Ekatharina Помощь студентам 0 18.01.2010 19:25
Программа с структурами Olya90 Помощь студентам 10 25.04.2009 17:18
Проблема с модулями и дин.структурами данных velgelmina Помощь студентам 1 16.05.2007 06:43