Cześć. Mam pewien problem. Napisałem bazę danych działającą na pliku tekstowym na zaliczenie na studia. Lecz stoję na ostatniej funkcji a mianowicie program ma wyświetlić posortowane elementy struktury alfabetycznie i zmienić litery na wielkie. A więc przepisałem moją większa strukturę do drugiej na której będzie wykonywane sortowanie.
zmienna uczniowie zawiera ilość elementów struktury.
Porownanie to napisana funkcja ktora porownuje stringi (uczyłem sie jej pisać z neta, niby zgodna jest)
Uruchamiam na dole funkcje sort (osoba_sort, osoba sort +uczniowie -1, porownianie) i następnie w petli probuje wyświetlić tą strukturę którą posortowałem ale ona w dalej sie nie zmienia , dlaczego ?
w switchu case ('L') to miejsce w którym aktualnie stoję. to już końcówka programu i jak to zrobię to mogę oddać jako zaliczony.
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
struct student
{
string nazwisko;
string imie;
int numer_albumu;
int wiek;
float srednia;
};
struct student_sort
{
string imie_nazwisko;
int wiek;
};
bool porownanie(student_sort a, student_sort b)
{
if (a.imie_nazwisko < b.imie_nazwisko) return 1;
return 0;
}
void czytaj_dane_z_klawiatury(student osoba[],int uczniowie)
{
const string imiona[8] = { "Ola","Marek","Kasia","Arek","Bartek","Jakub","Marcin","Ewa", };
if (uczniowie <= 19)
{
bool warunek = false;
cout << "Wprowadz nazwisko=";
cin >> osoba[uczniowie].nazwisko;
while (warunek == false)
{
cout << "Imiona w bazie: Ola, Marek, Kasia, Arek, Bartek, Jakub, Marcin, Ewa" << endl;
cout << "Przypiminamy ze wielkosc liter ma znaczenie" << endl;
cout << "Wprowadz imie zgodne z lista dozwolonych imion w bazie=";
cin >> osoba[uczniowie].imie;
for (int a = 0; a <= 7; a++)
if (osoba[uczniowie].imie == imiona[a])
{
warunek = true;
cout << "Wpowadzono poprawne imie :)" << endl;
break;
}
else
if (a == 7)
cout << "Wpwowadzono niepoprawne imie :(" << endl;
}
cout << "Wprowadz numer albumu=";
cin >> osoba[uczniowie].numer_albumu;
cout << "Wprowadz wiek=";
cin >> osoba[uczniowie].wiek;
cout << "wprwoadz srednia=";
cin >> osoba[uczniowie].srednia;
}
else
cout << "Osiagnieto maksymalna liczbe studentow w bazie" << endl;
}
void zapisz_dane_do_pliku(student uczen[],int uczniowie)
{
fstream dane;
dane.open("baza_danych.txt", ios::out);
if (dane.is_open())
{
dane << uczniowie << endl;
for (int a=0; a<=uczniowie-1; a++)
{
dane << uczen[a].nazwisko << endl;
dane << uczen[a].imie << endl;
dane << uczen[a].numer_albumu << endl;
dane << uczen[a].wiek << endl;
dane << uczen[a].srednia << endl;
}
}
dane.close();
}
void czytaj_dane_z_pliku(student uczen[],int &uczniowie)
{
fstream dane;
dane.open("baza_danych.txt", ios::in);
if (dane.is_open())
{
string liczba;
getline(dane, liczba);
uczniowie = atoi(liczba.c_str());
cout << "Liczba uczniow w bazie wynosi=" << uczniowie << endl;
for (int a = 0; a <= uczniowie-1; a++)
{
string numer_albumu, wiek, srednia;
cout << "Student: " << a + 1 << endl;
cout << endl;
getline(dane, uczen[a].nazwisko);
cout << "Nazwisko ucznia="<< uczen[a].nazwisko << endl;
getline(dane, uczen[a].imie);
cout << "Imie ucznia=" << uczen[a].imie << endl;
getline(dane, numer_albumu);
uczen[a].numer_albumu = atoi(numer_albumu.c_str());
cout << "Numer albumu="<<uczen[a].numer_albumu << endl;
getline(dane, wiek);
uczen[a].wiek = atoi(wiek.c_str());
cout << "Wiek="<<uczen[a].wiek << endl;
getline(dane, srednia);
uczen[a].srednia = atof(srednia.c_str());
cout << "Srednia="<<uczen[a].srednia << endl;
cout << endl;
}
dane.close();
}
}
int main()
{
bool warunek = true;
char wybor;
int uczniowie = 0;
int liczba_skasowanych = 0;
student osoba[20];
student_sort osoba_sort[20];
if (ifstream("baza_danych.txt", ios::ate).tellg())
czytaj_dane_z_pliku(osoba,uczniowie);
else
cout << "plik jest pusty" << endl;
cout << "Menu wyboru funkcji programu" << endl;
cout << "______________________________" << endl;
while (warunek)
{
cout << "Nacisnij klawisz odpowiadajacy funkcji i wcisnij enter" << endl;
cout << "Dodaj studenta - D" << endl;
cout << "Skasuj studenta - U" << endl;
cout << "Zapisz dane i zamknij program - K" << endl;
cin >> wybor;
switch (wybor)
{
case ('D'):
system("cls");
cout << "Uruchamiam procedure dodania studenta" << endl;
czytaj_dane_z_klawiatury(osoba,uczniowie);
cout << "Aktualna liczba uczniow w bazie wynosi=" << uczniowie+1 << endl;
uczniowie++;
break;
case ('U'):
system("cls");
cout << "Uruchamiam procedure kasowania studenta" << endl;
for (int a = 0; a <= uczniowie - 1; a++)
if (osoba[a].srednia < 2.5)
for (int j=a; j<=uczniowie-1; j++)
{
osoba[j].nazwisko = osoba[j + 1].nazwisko;
osoba[j].imie = osoba[j + 1].imie;
osoba[j].numer_albumu = osoba[j + 1].numer_albumu;
osoba[j].wiek = osoba[j + 1].wiek;
osoba[j].srednia = osoba[j + 1].srednia;
uczniowie--;
cout << "Usunieto studenta o numerze=" << a + 1 << endl;
liczba_skasowanych++;
}
cout << "Usunieto= " << liczba_skasowanych << " uczniow" << endl;
break;
case ('L'):
for (int a = 0; a <= uczniowie - 1; a++)
{
osoba_sort[a].imie_nazwisko = osoba[a].nazwisko + " " + osoba[a].imie;
osoba_sort[a].wiek = osoba[a].wiek;
transform(osoba_sort[a].imie_nazwisko.begin(), osoba_sort[a].imie_nazwisko.end(), osoba_sort[a].imie_nazwisko.begin(), ::toupper);
}
sort(osoba_sort, osoba_sort + uczniowie-1, porownanie);
for (int a = 0; a <= uczniowie - 1; a++)
{
cout << osoba_sort[a].imie_nazwisko << endl;
cout << osoba_sort[a].wiek << endl;
}
break;
case ('K'):
zapisz_dane_do_pliku(osoba,uczniowie);
warunek = false;
break;
}
}
return 0;
}