Zapis binarny do pliku
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
#include<iostream> #include<conio.h> #include<fstream> #include<windows.h> using namespace std; int opcja=1; struct student{ int nr_a; char imie[15]; char nazwisko[20]; float ocena_PP; float ocena_MP; bool p(float a, float b){ return (a<b)? 1:0; } }zm; void zapis_t(string plik){ system("cls"); do{ cin.clear(); cin.sync(); cout<<"NR: "; cin>>zm.nr_a; if (!cin.good())cerr<<"Podaj poprawną wartość!!!\n"; }while (cin.fail()); cout<<"Imie: "; cin>>zm.imie; cout<<"Nazwisko: "; cin>>zm.nazwisko; do{ cin.clear(); cin.sync(); cout<<"Ocena PP: "; cin>>zm.ocena_PP; if (!cin.good())cerr<<"Podaj poprawną wartość!!!\n"; }while (cin.fail()); do{ cin.clear(); cin.sync(); cout<<"Ocena MP: "; cin>>zm.ocena_MP; if (!cin.good())cerr<<"Podaj poprawną wartość!!!\n"; }while (cin.fail()); ofstream z(plik.c_str(), ios::binary | ios_base::app); z.write((char*)&zm, sizeof(zm)); z.close(); cout<<"Dane zostały zapisane, naciśnij dowolny klawisz aby powrócić."; getch(); } void odczyt(string plik){ system("cls"); ifstream z(plik.c_str(), ios_base::binary ); int i=0; do{ if(i!=0){ cout<<"Odczytane dane:\n\n"; cout<<"Numer: "; cout<<zm.nr_a<<endl; cout<<"Imię: "; cout<<zm.imie<<endl; cout<<"Nazwisko: "; cout<<zm.nazwisko<<endl; cout<<"Ocena PP: "; cout<<zm.ocena_PP<<endl; cout<<"Ocena MP: "; cout<<zm.ocena_MP<<endl; cout<<"Progres: "; cout<<zm.p(zm.ocena_PP,zm.ocena_MP)<<endl; } int a=(i)*sizeof(zm); z.seekg(a, ios::beg); z.read((char*)&zm, sizeof(zm)); i++; }while(!z.fail()); z.close(); cout<<"Dane zostały odczytane, naciśnij dowolny klawisz aby powrócić."; getch(); } void menu(string plik){ system("cls"); cout<<"Wybierz opcje: \t\tPracujesz na pliku: "<<plik<<" \n"; cout<<"1. Zapis/dodanie danych studenta\n"; cout<<"2. Odczyt z pliku danych studenta\n"; cout<<"3. Wyjście\n"; cin>>opcja; if(!cin || !(opcja>=1 && opcja<=3)){ opcja=3; cin.clear(); cin.sync(); menu(plik); } } int main(){ setlocale(LC_ALL,""); string p; cout<<"Podaj nazwę pliku(bez rozszerzenia): "; getline( cin, p ); char * bufor = new char[255]; OemToChar( p.c_str(), bufor ); p = string(bufor); p+=".bin"; do{ menu(p); switch(opcja){ case 1: zapis_t(p); break; case 2: odczyt(p); break; } }while(opcja!=3); return 0; } |