Witam, mam do napisania taki o to program:
Dane:
n- liczba studentów
dane n osób zapisane w pliku dane.txt: imię, nazwisko, rok urodzenia, średnia ocen
Wynik:
Program realizujący Menu:
- Wyświetl dane o studentach
- Dodaj osobę
- Wyświetl osobę wg jednego z kryteriów (najmłodsza, najwyższa średnia, o podanym nazwisku)
- Posortuj wg wybranej informacji
- Koniec
Siedzę i się głowię nad kilkoma problemami:
- w punkcie numer 2 dodaje studenta (nie wiem czy dobry sposób obrałem) i nie wiem jak mam zrobić żeby po dodaniu, tablica z punktu pierwszego zwiększyła się o jeden i go wyświetliło. (w pliku się zapisuje).
- w punkcie numer 3 nie mam zielonego pojęcia jak na podstawie typu string policzyć wiek osoby i porównać go z innymi osobami, a także nie wiem jak alfabetycznie rozwiązać problem z nazwiskiem. (w voidzie najml jest przekonwertowany string na inta ale najprawdopodobniej źle.)
- Punkt czwarty ogarnę jeśli tylko ktoś mnie naprowadzi z punktem trzecim.
Mój kod:
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <fstream>
using namespace std;
struct osoba
{
string imie;
string nazwisko;
string data;
float srednia;
};
void zap(osoba *tab)
{
int i=0; fstream plik;
plik.open("studenci.txt");
while(!plik.eof())
{
plik>>tab[i].imie;
plik>>tab[i].nazwisko;
plik>>tab[i].data;
plik>>tab[i].srednia;
i++;
}
}
void srednia(osoba *tab, int n)
{
zap(tab); float max;
max=tab[0].srednia;
for(int i=1; i<n; i++)
{
if (tab[i].srednia>max) max=tab[i].srednia;
}
for (int i=0; i<n; i++)
{
if(max==tab[i].srednia)
{
cout<<tab[i].imie<<" ";
cout<<tab[i].nazwisko<<" "<<endl;
cout<<"Srednia: "<<tab[i].srednia;
}
}
}
/*void najml(osoba *tab, int n)
{
int m=n;
int tabp[m];
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
tabp[i]=atoi(tab[j].data.c_str());
}
}
}
*/
int main()
{
fstream plik;
int n=3;
osoba tab[n];
char wybor, wybor2;
string a, b, c;
float d;
while(true)
{
cout<<"__________________MENU__________________"<<endl;
cout<<"1. Wyswietl informacje o studentach"<<endl;
cout<<"2. Dodaj studenta"<<endl;
cout<<"3. Wyswietl osobê wg jednego z kryteriow (najmlodsza, najwyzsza srednia, o podanym nazwisku)"<<endl;
cout<<"4. Posortuj wedlug wybranej informacji"<<endl;
cout<<"5. Wyjscie z programu"<<endl;
cout<<endl;
wybor=getch();
switch(wybor)
{
case '1':
{
cout<<"NR 1: Informacje: "<<endl;
zap(tab);
for (int i=0; i<n; i++)
{
cout<<"Dane: ";
cout<<tab[i].imie<<" ";
cout<<tab[i].nazwisko<<" ";
cout<<"Rok ur: ";
cout<<tab[i].data<<" ";
cout<<"Srednia ocen: ";
cout<<tab[i].srednia<<endl;
}
cout<<endl; cout<<"Wcisnij ENTER by przejsc dalej"<<endl;
}
break;
case '2':
{
cout<<"NR 2: Dodaj studenta: "<<endl;
plik.open("studenci.txt", ios::out | ios::app);
cout<<"Imie: "<<endl; cin>>a;
plik<<a<<endl;
cout<<"Nazwisko: "<<endl; cin>>b;
plik<<b<<endl;
cout<<"Data ur: [dd.mm.rrrr] "<<endl; cin>>c;
plik<<c<<endl;
cout<<"Srednia: "<<endl; cin>>d;
plik<<d<<endl;
n=n+1;
plik.close(); plik.clear();
cout<<"Wcisnij ENTER by przejsc dalej"<<endl;
}
break;
case '3':
{
cout<<"Wyswietl osobê"<<endl;
cout<<"1. Najmlodsza"<<endl;
cout<<"2. Najwyzsza srednia"<<endl;
cout<<"3. Zgodnie z alfabetem"<<endl; cout<<endl;
wybor2=getch();
switch(wybor2)
{
case '1': //najst(tab, n);
break;
case '2':
{
cout<<"Najwyzsza srednia ma uczen: "<<endl;
srednia(tab, n);
cout<<endl;
}
break;
case '3': break;
default: cout<<"Nie ma takiej opcji w MENU!"<<endl;
}
cout<<"Wcisnij ENTER by przejsc dalej"<<endl;
}
break;
case '4': cout<<"Wcisnij ENTER by przejsc dalej"<<endl; break;
case '5': exit(0);
break;
default:
{
cout<<"Nie ma takiej opcji w MENU!"<<endl; cout<<endl;
cout<<"Wcisnij ENTER by przejsc dalej"<<endl;
}
}
getchar(); system("cls");
}
return 0;
}