Заковыристое задание

  • Автор темы Serafim
  • Дата начала
S

Serafim

#1
Дана таблица типа имя, пол, доход, доход в долларах.
Итак, задание - изменить таблицу так, чтобы сохранялся и курс UE. :)

Код:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>

struct rab
{
char name [45], pol;
int doxod;
};

rab  tabl [5];
double  kursUE = 1;

void enter (rab & x)
{
cout << "Name:";
cin >> x.name;
cout << "Pol:";
cin >> x.pol;
cout << "Doxod" << ":";
cin >> x.doxod;
}

void enterUEkurs (double & x)
{
cout << "KursDollara:";
cin >> x;
}

void print (rab x)
{
cout << setw (20) << x.name << setw (10) << x.pol
<< setw (3)<<' '<< x.doxod << ' ' << (x.doxod / kursUE);
}

void enter (rab y [], int & n)
{
cout << "size:"; cin >> n;
for (int i = 0; i < n; i ++) enter (y [i]);
}

void print (rab y [], int n)
{
for (int i = 0; i < n; i++)
{
 print (y [i]); cout << endl;
}
}

char *fname ()
{
char *S = new char [40];
cout << "Enter File name:"; 
cin >> S; 

return S;
}

void save (fstream & f, rab y)
{
f << y.name << ' ' << y.pol << ' ' << y.doxod;
}

void save (char fn [], rab x [], int n)
{
fstream f;

f.open (fn, ios::out);
f << n << ' ';

for (int i = 0; i < n; i++)
save (f, x [i]);

f.close ();
}

void load (fstream & f, rab y)
{
f >> y.name >> y.pol >> y.doxod;
}

void load (char fn [], rab x [], int & n)
{
fstream f;

f.open (fn, ios::in);
f >> n;

for (int i = 0; i < n; i ++)
load (f, x [i]);
}

void main ()
{
rab tabl [5]; int n;
do
{
textcolor (4);
clrscr ();
cout << "1 - Enter, 2 - Kurs, 3 - Vivod, 5 - Save, 6 - Load, Esc - Quit" << endl;

switch (getch ())
{
case '1': enter (tabl, n); break;
case '2': enterUEkurs(kursUE); break;
case '3': print (tabl, n); break;
case '5': save (fname (), tabl, n); cout << "SaveOk"; break;
case '6': load (fname (), tabl, n); print (tabl, n); break;
case 27 : exit (0);
}

getch ();
}

while (1);
}
 
?

????

#2
Для: Serafim

Купи/скачай книгу! Если не сможешь/захочешь сам понять - никто не помомжет.

Код:
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
#include <fstream.h>

struct rab
{
char name [45], pol;
static double kursUE;
int doxod;
};

//rab  tabl [5];
double rab::kursUE = 1;

void enter (rab & x)
{
cout << "Name:";
cin >> x.name;
cout << "Pol:";
cin >> x.pol;
cout << "Doxod" << ":";
cin >> x.doxod;
}

void enterUEkurs (double &x)
{
cout << "KursDollara:";
cin >> x;
}

void print (rab x)
{
cout << setw (20) << x.name << setw (10) << x.pol
<< setw (3) <<' '<< x.doxod << ' ' << (x.doxod / x.kursUE)
<< setw (20) << x.kursUE;
}

void enter (rab y [], int & n)
{
cout << "size:"; cin >> n;
for (int i = 0; i < n; i ++) enter (y [i]);
}

void print (rab y [], int n)
{
for (int i = 0; i < n; i++)
{
print (y [i]); cout << endl;
}
}

char *fname ()
{
char *S = new char [40];
cout << "Enter File name:";
cin >> S;

return S;
}

void save (fstream & f, rab y)
{
f << y.name << ' ' << y.pol << ' ' << y.doxod << ' ' << y.kursUE << ' ';
}

void save (char fn [], rab x [], int n)
{
fstream f;

f.open (fn, ios::out);
f << n << ' ';

for (int i = 0; i < n; i++)
save (f, x [i]);

f.close ();
}

void load (fstream & f, rab y)
{
f >> y.name >> y.pol >> y.doxod >> y.kursUE;
}

void load (char fn [], rab x [], int & n)
{
fstream f;

f.open (fn, ios::in);
f >> n;

for (int i = 0; i < n; i ++)
load (f, x [i]);
}

void main ()
{
rab tabl [5]; int n;
do
{
textcolor (4);
clrscr ();
cout << "1 - Enter, 2 - Kurs, 3 - Vivod, 5 - Save, 6 - Load, Esc - Quit" << endl;

switch (getch ())
{
case '1': enter (tabl, n); break;
case '2': enterUEkurs(rab::kursUE); break;
case '3': print (tabl, n); break;
case '5': save (fname (), tabl, n); cout << "SaveOk"; break;
case '6': load (fname (), tabl, n); print (tabl, n); break;
case 27 : exit (0);
}

getch ();
}

while (1);
}
Вообще, весь код кривоват, но это моё ИМХО.
 
S

Serafim

#3
Для: ????

Спасибо тебе огромное (и за советы тоже)! :)