Bazy danych
Ostatnio zmodyfikowano 2020-12-06 20:38
Student_2020 Temat założony przez niniejszego użytkownika |
Bazy danych » 2020-12-06 20:06:27 Dzień dobry. Mam napisaną bazę danych lecz nie potrafię dodać opcji usuwania studenta na zasadzie: podaj indeks studenta, którego chcesz usunąć. #include <iostream> #include <windows.h> #include <conio.h> #include <vector> #include <algorithm> #include <fstream> #include <string>
#define N 100 #define OB 5 int n = 0; using namespace std;
struct student { string imie; string nazwisko; string indeks; string obecnosci; string wydzial; string kierunek; float spr_01; float spr_02; };
vector < student > tab; vector < student > tab2; vector < student > tab3; vector < student > tab4; vector < student > tab5; string pobierz_tekst( string pytanie ) { string napis; do { cout << pytanie; cin >> napis; } while( napis == "" ); return napis; }
string pobierz_indeks( string pytanie, vector < student > t ) { string napis; int ret; do { cout << pytanie; cin >> napis; ret = 1; for( int i = 0; i < tab.size(); i++ ) if( t[ i ].indeks == napis ) { ret = 0; cout << "Podany indeks jest w bazie. Podaj jeszcze raz!!!" << endl; break; } } while( napis == "" || ret == 0 ); return napis; }
string pobierz_obecnosci( string pytanie ) { string napis, tmp; int ret; do { ret = 1; napis = pobierz_tekst( pytanie ); if( napis.length() != OB ) { cout << "Podaj poprawna ilosc obecnosci!!!" << endl; ret = 0; continue; } for( int i = 0; i < napis.length(); i++ ) { tmp = napis.substr( i, 1 ); if( !( tmp == "+" || tmp == "-" ) ) { cout << "Zanleziono niepoprawny znak. Wpisz jeszcze raz!!!" << endl; ret = 0; break; } } } while( ret == 0 ); return napis; }
float pobierz_punkty( string pytanie ) { string napis; float liczba = 0.0; while( 1 ) { cout << pytanie; cin >> napis; if( napis.compare( "0" ) == 0 ) return 0.0; liczba = atof( napis.c_str() ); if( liczba == 0 ) continue; if( liczba <= 12 ) return liczba; } return liczba; }
student dodaj( void ) { student st; st.imie = pobierz_tekst( "Imie: " ); st.nazwisko = pobierz_tekst( "Nazwisko: " ); st.wydzial = pobierz_tekst( "Wydzial: " ); st.kierunek = pobierz_tekst( "Kierunek: " ); st.indeks = pobierz_indeks( "Indeks: ", tab ); st.obecnosci = pobierz_obecnosci( "Obecnosci: " ); st.spr_01 = pobierz_punkty( "Punkty spr1: " ); st.spr_02 = pobierz_punkty( "Punkty spr2: " ); return st; }
void wyswietl( student st ) { cout << "Imie: " << st.imie << " Nazwisko: " << st.nazwisko << "Wydzial: " << st.wydzial << "Kierunek: " << st.kierunek << " Indeks: " << st.indeks << " Obecnosci: " << st.obecnosci << " Spr1: " << st.spr_01 << " Spr2: " << st.spr_02 << endl; }
bool porownaj_nazwiska( student s1, student s2 ) { if( s1.nazwisko < s2.nazwisko ) return true; if( s1.nazwisko > s2.nazwisko ) return false; if( s1.imie < s2.imie ) return true; if( s1.imie > s2.imie ) return false; if( s1.indeks < s2.indeks ) return true; if( s1.indeks > s2.indeks ) return false; }
int wyszukaj( vector < student > t, string indeks, int & ret ) { ret = 0; for( int i = 0; i < tab.size(); i++ ) if( t[ i ].indeks == indeks ) { ret = 1; return i; } return NULL; }
vector < string > split( string linia, string sep ) { vector < string > result; string wyraz = ""; string znak; linia = linia + sep; for( int i = 0; i < linia.length(); i++ ) { znak = linia[ i ]; if( znak == sep ) { result.push_back( wyraz ); wyraz = ""; continue; } wyraz = wyraz + znak; } return result; }
vector < student > odczyt_pliku( string nazwa ) { fstream plik; vector < student > tab; student st; string linia, imie, nazwisko, indeks, obecnosci, spr1, spr2, tmp1, tmp2; vector < string > v1, v2; plik.open( nazwa.c_str(), ios::in ); if( plik.good() == true ) { while( getline( plik, linia ) ) { v1 = split( linia, ")" ); linia = v1[ 0 ]; v1 = split( linia, "(" ); if( v1.size() != 2 ) continue; tmp1 = v1[ 0 ]; tmp2 = v1[ 1 ]; v1 = split( tmp2, "," ); if( v1.size() != 2 ) continue; spr1 = v1[ 0 ]; spr2 = v1[ 1 ]; v1 = split( tmp1, " " ); int dl = v1.size(); if( dl < 4 ) continue; obecnosci = v1[ dl - 2 ]; indeks = v1[ dl - 3 ]; nazwisko = v1[ dl - 4 ]; imie = ""; for( int i = 0; i < dl - 4; i++ ) { if( i == 0 ) imie = v1[ i ]; else imie = imie + " " + v1[ i ]; } st.imie = imie; st.nazwisko = nazwisko; st.indeks = indeks; st.obecnosci = obecnosci; st.spr_01 = atof( spr1.c_str() ); st.spr_02 = atof( spr2.c_str() ); tab.push_back( st ); } plik.close(); } else cout << "Brak dostepu do pliku!!!" << endl; return tab; }
void zapis_pliku( vector < student > tab, string nazwa ) { fstream plik; plik.open( nazwa.c_str(), ios::out ); if( plik.good() == true ) { for( int i = 0; i < tab.size(); i++ ) { plik << tab[ i ].imie << " " << tab[ i ].nazwisko << " " << tab[ i ].indeks << " " << tab[ i ].obecnosci << " (" << tab[ i ].spr_01 << ", " << tab[ i ].spr_02 << ")" << endl; } plik.close(); } else cout << "Brak dostepu do pliku!!!" << endl; }
float statystyka_obecnosci( student st, char symbol ) { int suma = 0; for( int i = 0; i < st.obecnosci.length(); i++ ) { if( st.obecnosci[ i ] == symbol ) suma += 1; } return( 1.0 * suma / st.obecnosci.length() ); }
vector < student > niekwalifikowani_obecnosci( vector < student > t ) { float nb; vector < student > niekwalifikowani; for( int i = 0; i < t.size(); i++ ) { nb = statystyka_obecnosci( t[ i ], '+' ); if( nb < 0.2 ) niekwalifikowani.push_back( t[ i ] ); } return niekwalifikowani; }
vector < student > kwalifikowani_oceny( vector < student > t ) { float suma; vector < student > kwalifikowani; for( int i = 0; i < t.size(); i++ ) { suma = t[ i ].spr_01 + t[ i ].spr_02; if( suma > 12 && statystyka_obecnosci( t[ i ], '+' ) >= 0.8 ) kwalifikowani.push_back( t[ i ] ); } return kwalifikowani; }
vector < student > stypendium_oceny( vector < student > t ) { float suma; vector < student > stypendium; for( int i = 0; i < t.size(); i++ ) { suma = t[ i ].spr_01 + t[ i ].spr_02; if( suma > 20 && statystyka_obecnosci( t[ i ], '+' ) >= 0.8 ) stypendium.push_back( t[ i ] ); } return stypendium; }
void menu( void ) { int klawisz, ind, ret = 0; student st; string indeks; do { system( "cls" ); cout << "!!!!!MENU!!!!!" << endl; cout << "*****************************" << endl; cout << "Wybierz klawisz: " << endl; cout << "1. Dodaj studenta: " << endl; cout << "2. Wyswietl studenta: " << endl; cout << "3. Wyszukaj studenta: " << endl; cout << "4. Usun studenta: " << endl; cout << "5. Studenci niekwalifikowani/absencja: " << endl; cout << "6. Studenci, ktorzy zaliczyli: " << endl; cout << "7. Studencji posiadajacy stypendium: " << endl; cout << "9. Wyjscie: " << endl; cout << "Wybrales: "; cin >> klawisz; switch( klawisz ) { case 1: cout << "Dodawanie studenta" << endl; st = dodaj(); tab.push_back( st ); cout << "Dodano studenta do bazy. Nacisnij dowolny klawisz!!!" << endl; getch(); break; case 2: tab2 = tab; cout << "Lista studentow" << endl; sort( tab2.begin(), tab2.end(), porownaj_nazwiska ); for( int i = 0; i < tab2.size(); i++ ) wyswietl( tab2[ i ] ); getch(); break; case 3: cout << "Wyszukanie studenta" << endl; cout << "Podaj indeks do wyszukania studenta: "; cin >> indeks; ind = wyszukaj( tab, indeks, ret ); if( ret == 0 ) cout << "Brak studenta o danym indeksie w bazie." << endl; else wyswietl( tab[ ind ] ); cout << "Nacisnij dowolny klawisz!!!" << endl; getch(); break; case 4: cout << "Usun studenta" << endl; break; case 5: cout << "Studenci niekwalifikowani z powodu absencji." << endl; tab3 = niekwalifikowani_obecnosci( tab ); if( tab3.size() == 0 ) cout << "Wszyscy studenci kwalifikowani." << endl; else for( int i = 0; i < tab3.size(); i++ ) wyswietl( tab3[ i ] ); cout << "Wcisnij dowolny klawisz!!!" << endl; getch(); break; case 6: cout << "Studenci, ktorzy zaliczyli: " << endl; tab4 = kwalifikowani_oceny( tab ); if( tab4.size() == 0 ) cout << "Wszyscy studenci powtorka." << endl; else for( int i = 0; i < tab4.size(); i++ ) wyswietl( tab4[ i ] ); cout << "Wcisnij dowolny klawisz!!!" << endl; getch(); break; case 7: cout << "Studenci posiadajacy stypendium" << endl; tab5 = stypendium_oceny( tab ); if( tab5.size() == 0 ) cout << "Nikt nie posiada stypendium." << endl; else for( int i = 0; i < tab5.size(); i++ ) wyswietl( tab5[ i ] ); getch(); break; case 9: zapis_pliku( tab, "d2000z_n.txt" ); break; default: break; } } while( klawisz != 5 ); }
int main() { tab = odczyt_pliku( "d2000z.txt" ); menu(); return 0; }
|
|
pekfos |
» 2020-12-06 20:38:55 |
|
« 1 » |