const char* PLEC[] = { "mezczyzna","kobieta" };
const char* STOPIEN[] = { "I","II","III"};
enum class Plec{
mezczyzna, kobieta
};
enum class Stopien {
I,II,III
};
struct Student {
char imie[40];
char nazwisko[60];
Plec plec;
Stopien stopien;
int semestr;
};
void wypelnij(Student& s,const char* imie, const char* nazwisko,Plec plec,Stopien stopien,int semestr) {
strcpy(s.imie, imie);
strcpy(s.nazwisko, nazwisko);
s.plec = plec;
s.stopien = stopien;
s.semestr = semestr;
}
void zapiszDoP(Student& s, const char* nameF) {
uint8_t tsem, tstopien, tplec, maska3 = 7, kombinat;
tsem = s.semestr & maska3;
cout << bitset<8>(tsem) << "\tsem\n";
tstopien = (int(s.stopien) + 1) << 3;
cout << bitset<8>(tstopien) << "\tstopien\n";
tplec = int(s.plec) << 5;
cout << bitset<8>(tplec) << "\tplec\n";
kombinat = tsem | tstopien | tplec;
cout << bitset<8>(kombinat) << "\tplec\n";
char tab[9];
for (size_t i = 0; i < 8; i++)
{
tab[7 - i] = (kombinat & (1 << i)) ? '1' : '0';
}
tab[8] = '\0';
cout << tab << endl;
FILE* desp = fopen(nameF, "w");
fprintf(desp, "%s; %s; %s;", s.nazwisko, s.imie,tab);
fclose(desp);
}
void OdczytZP(Student& s,const char* nameP) {
char tab[9];
FILE* desp = fopen(nameP, "r");
rewind(desp);
fscanf(desp, "%s; %s; %s;", s.nazwisko, s.imie, tab);
/* fscanf(desp, " %s; ",s.imie);
fscanf(desp, " %s; ",s.nazwisko);
fscanf(desp, " %s; ",tab);*/
/* if (fscanf(desp, " %[^;]; %[^;]; %[^;]; ", s.imie, s.nazwisko, tab) != 3) {
printf("Blad odczytu danych z pliku\n");
exit(1);
}*/
//tab[8] = '\0';
fclose(desp);
uint8_t kombinat=0;
for (size_t i = 0; i < 8; i++)
{
if (tab[i] == '1') {
kombinat |= (1 << (7 - i));
}
}
uint8_t tsem, tstopien, tplec;
tsem = kombinat & 7;
tstopien = (kombinat & 0x18)>>3;
tplec = (kombinat & 0x20) >> 5;
s.stopien=static_cast<Stopien>(tstopien);
s.plec = static_cast<Plec>(tplec);
s.semestr = tsem;
}
ostream& operator<< (ostream& ekr,Student s) {
ekr << s.imie << s.nazwisko << PLEC[int(s.plec)] << s.semestr << STOPIEN[int(s.stopien)];
return ekr;
}
int main() {
Student s;
wypelnij(s, "marekl", "howski", Plec::kobieta, Stopien::I, 3);
zapiszDoP(s,"b.txt");
Student s2;
OdczytZP(s2, "b.txt");
uint8_t maska = 0x20;
cout << bitset<8>(maska);
cout <<"\n\n" << s2;
}