Witam wszystkich.
Oto kod programu:
//biblioteki--------------------------------------------------------------------
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
//struktura---------------------------------------------------------------------
struct semestr {
int przedmiot[8];
};
struct osoba {
char imie[30];
char nazwisko[30];
int numeralbumu;
semestr A[7];
void wczytaj(void);
};
void osoba::wczytaj(void) {
cout << "Podaj nazwisko:\n";
cin >> nazwisko;
cout << "Podaj imie:\n";
cin >> imie;
cout << "Podaj nr albumu:\n";
cin >> numeralbumu;
for (int I = 0; I < 7; I++) {
for (int J = 0; J < 8; J++) {
int a;
cout << "Podaj ocene z semestru ";
cout << I + 1;
cout << " z ";
switch (J + 1) {
case 1:cout << "Analiza matematyczna(od 2 do 5) ";
break;
case 2:cout << "Fizyka dla informatykow(od 2 do 5) ";
break;
case 3:cout << "Jezyk angielski(od 2 do 5) ";
break;
case 4:cout << "Matematyka dyskretna(od 2 do 5) ";
break;
case 5:cout << "Podstawy elektroniki(od 2 do 5) ";
break;
case 6:cout << "Podstawy programowania(2 lub 5) ";
break;
case 7:cout << "Wf (0 lub 1) ";
break;
case 8:cout << "Podstawy zarzadzania(0 lub 1) ";
break;
};
"[ :\n";
cin >> A[I].przedmiot[J];
int warunek;
warunek = 0;
do{
if (((J == 7) || (J == 6)) && (!((A[I].przedmiot[J] == 1) || (A[I].przedmiot[J] == 0)))) {
cout << "Podales nie dopuszczalna wartosc. Prosze o podanie jej poprawnie ";
cin >> A[I].przedmiot[J];
warunek = 1;
} else warunek = 0;
}while(warunek);
do{
if (((J < 6) && (J>-1)) && ((A[I].przedmiot[J] > 5) || (A[I].przedmiot[J] < 2))) {
cout << "Podales nie dopuszczalna wartosc. Prosze o podanie jej poprawnie ";
cin >> A[I].przedmiot[J];
warunek = 1;
} else warunek = 0;
}while(warunek);
int i = 6;
int t[7];
t[0] = A[I].przedmiot[0]; //analiza
t[1] = A[I].przedmiot[1]; //fizyka
t[2] = A[I].przedmiot[2]; //angielski
t[3] = A[I].przedmiot[3]; //dyskretna
t[4] = A[I].przedmiot[4]; //elektronika
t[5] = A[I].przedmiot[5]; //programowanie
t[6] = A[I].przedmiot[6]; //zarzadzanie
t[7] = A[I].przedmiot[7]; //wf
int h = 0;
for (int j = 0; j < i; j++) {
if (t[j] > 2) h++;
if (t[6] == 1) h++;
if (t[7] == 1) h++;
if (h < 8) A[I].przedmiot[8] = 0;
else A[I].przedmiot[8] = 1;
}
}
}
}
//wartosc globalne
int X = 100;
osoba baza[100];
//funkcje-----------------------------------------------------------------------
void wyswietl(void);
void sortimie(void);
void sortNazwiska(void);
void sortnumerualbumu(void);
void dodaj(void);
void sortowanie(int h);
void menu(void);
//cialo glowne-------------------------------------------------------------------
int main() {
for (int q = 0; q < X; q++) {
baza[q].numeralbumu = -1;
}
ifstream odczyt("dane.dat", ios::binary); // otwieramy plik do odczytu binarnego
odczyt.read((char*) baza, sizeof (baza));
odczyt.close();
menu();
system("pause");
}
//ciala funkcji-----------------------------------------------------------------
///dodaj
void dodaj(void) {
int a = 1, w = 0;
do {
ofstream plik1("dane.dat", ios::binary );
for (int q = 0; q < X; q++) {
if (baza[q].numeralbumu != -1) w++;
}
baza[w].wczytaj();
plik1.write(reinterpret_cast<char*> (&baza), sizeof (baza));
plik1.close();
cout << "Czy chcesz dodac kolejna osobe?(zero jesli nie) ";
cin >> a;
} while (a);
}
////sortowanie------------------------------------------------------------------
//sortownaie po imieniu---------------------------------------------------------
void sortimie(void) {
osoba temp;
int I;
for (int h = 0; h < X - 1; h++)
for (int i = h + 1; i < X; i++)
{for(I=0;I<30;I++)
if (baza[h].imie[I] == baza[i].imie[I]) ;
else if (baza[h].imie[I] < baza[i].imie[I]) {
temp = baza[h];
baza[h] = baza[i];
baza[i] = temp;
break;
}
}
ofstream plik1("dane.dat", ios::binary );
plik1.write(reinterpret_cast<char*> (&baza), sizeof (baza));
plik1.close();
}
//sortownaie po nazwisku--------------------------------------------------------
void sortNazwiska(void) {
osoba temp;
int I;
for (int h = 0; h < X - 1; h++)
for (int i = h + 1; i < X; i++)
{for(I=0;I<30;I++)
if (baza[h].nazwisko[I] == baza[i].nazwisko[I]);
else if (baza[h].nazwisko[I] > baza[i].nazwisko[I]) {
temp = baza[h];
baza[h] = baza[i];
baza[i] = temp;
break;
}
}
ofstream plik1("dane.dat", ios::binary );
plik1.write(reinterpret_cast<char*> (&baza), sizeof (baza));
plik1.close();
}
//sortownaie po numerze albumu---------------------------------------------------
void sortnumeralbumu(void) {
osoba temp;
for (int h = 0; h < X - 1; h++) {
for (int i = h + 1; i < X; i++) {
if ((baza[h].numeralbumu > baza[i].numeralbumu) || (baza[h].numeralbumu == -1)) {
temp = baza[h];
baza[h] = baza[i];
baza[i] = temp;
}
}
}
ofstream plik1("dane.dat", ios::binary );
plik1.write(reinterpret_cast<char*> (&baza), sizeof (baza));
plik1.close();
}
//sortownaie--------------------------------------------------------
void sortowanie(int h) {
h--;
int a = 0;
cout << "Podaj po ktorym semestrze ma sortowac: ";
cin >> a;
a--;
osoba temp;
for (int I = 1; I < X - 1; I++)
for (int i = I + 1; i < X ; i++) {
if ((baza[I].A[a].przedmiot[h] > baza[i].A[a].przedmiot[h]) || (baza[h].numeralbumu == -1))
temp = baza[I];
baza[I] = baza[i];
baza[i] = temp;
}
ofstream plik1("dane.dat", ios::binary );
plik1.write(reinterpret_cast<char*> (&baza), sizeof (baza));
plik1.close();
}
//wyswietlenie
void wyswietl(void) {
osoba baza[100];
fstream plik1("dane.dat", ios::binary | ios::in);
plik1.read(reinterpret_cast<char*> (&baza), sizeof (baza));
int a;
cout << "Ktory semestr wyswietlic? ";
cin >> a;
for (int i = 0; i < 20; i++) {
if ((baza[i].numeralbumu != -1)) {
cout << (baza[i].imie) << " " << (baza[i].nazwisko) << " " << (baza[i].numeralbumu) << " ";
for (int k = 0; k < 8; k++) cout << baza[i].A[a].przedmiot[k] << " ";
cout << endl;
}
}
plik1.close();
}
///menu
void menu(void) {
int a, A, AA, AAAA, K, k;
while (true) {
cout << "Wybierz opcje:" << endl << "1.dodaj" << endl <<
"2.Sortowanie" << endl << "3.Wyswietl" << endl << "0.Wyjscie" << endl;
cin >> a;
if ((a != 1) && (a != 2) && (a != 3) && (a != 0)) {
cout << "Podales nie dopuszczalna wartosc. Porsze o podanie jej poprawnie";
cin >> a;
}
switch (a) {
case 1:
dodaj();
break;
case 2:do {
cout << "Wybierz opcje:" << endl << "1.Po imieniu" <<
endl << "2.Po nazwisku" << endl << "3.Po numerze albumu" << endl <<
"4.Po przedmiocie" << endl;
cin >> k;
switch (k) {
case 1:sortimie();
break;
case 2:sortNazwiska();
break;
case 3:sortnumeralbumu();
break;
case 4:do {
cout << "Wybierz opcje:" << endl << "1.Po Analizie"
<< endl << "2.Po Fizyce" << endl << "3.Po Angielskim"
<< endl << "4.Po Dyskretna" << endl
<< "5.Po Elektronice " << endl << "6.Po Programowaniu"
<< endl << "7.Po WF" << endl << "8.Po Zarzadzaniu"
<< endl << "9.Po zaliczeniu" << endl;
cin >> K;
switch (K) {
case 1:sortowanie(K); //analiza
break;
break;
case 2:sortowanie(K); //fiza
break;
case 3:sortowanie(K); //angielski
break;
case 4:sortowanie(K); //dyskretna
break;
case 5:sortowanie(K); //elektronika
break;
case 6:sortowanie(K); //programowanie
break;
case 7:sortowanie(K); //wf
break;
case 8:sortowanie(K); //pz
break;
case 9:sortowanie(K); //zal
break;
};
cout << "Zero by zakonczyc ";
cin >> AAAA;
} while (AAAA);
break;
};
cout << "Zero by zakonczyc ";
cin >> AA;
} while (AA);
break;
case 3:wyswietl();
break;
case 0:
{
return;
}
break;
}
}
}
sortuje każde ale wychodzą krzaczki
dodaje w losowym miejscu i moze rozwalic baze danych przy próbie dodania 2naraz wywala z bledem z windowsa
PS:mam nadzieje ze tym razem jest lepiej sformatowany kod niż jak poprzednio wrzuciłem