Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.7 kB
3
Indexable
Never
enum class Plec {kobieta,mezczyzna};
enum class StopienStudiow{I,II,III};

struct Student
{
	char imie[40];
	char nazwisko[40];
	Plec plec;
	StopienStudiow stopien;
	int semestr;
};

void wypelnijDane(Student* st, const char* imie, const char* nazwisko, int s, Plec p, StopienStudiow stop)
{
	strcpy_s(st->imie, imie);
	strcpy_s(st->nazwisko, nazwisko);
	st->plec = p;
	st->semestr = s;
	st->stopien = stop;
}

int kodowanie(Student st)
{
	int kod = 0;

	kod = kod << 2;

	kod = (kod << 1);
	kod += (int)st.plec;

	kod = (kod << 2);
	kod += (int)st.stopien;

	kod = (kod << 3);
	kod += (int)st.semestr;

	return kod;

}

void ZapisDoPliku(Student st, FILE* plik)
{
	if (plik != nullptr)
	{
		int kod = kodowanie(st);
		fprintf(plik, "%s %s %d\n", st.imie, st.nazwisko,kod);

	}
}



void dekodowanie(Student* st,int kod)
{
	st->semestr = (int)(kod % 8);
	kod = kod >> 3;

	st->stopien = (StopienStudiow)(kod % 4);
	kod = kod >> 2;

	st->plec = (Plec)(kod % 2);
	kod = kod >> 1;

}

void odczytZpliku(Student* st, FILE* plik)
{
	if (plik != nullptr)
	{
		fscanf(plik, "%s", st->imie);
		fscanf(plik, "%s", st->nazwisko);

		int kod;
		fscanf(plik, "%d\n", &kod);
		dekodowanie(st, kod);

	}
}

int main()
{
	Student mw, sd;

	wypelnijDane(&mw, "Michal", "Wilkosz", 5, Plec::mezczyzna, StopienStudiow::I);

	FILE* plik = nullptr;
	plik = fopen("student.txt", "a");

	ZapisDoPliku(mw, plik);

	fclose(plik);

	plik = fopen("student.txt", "r");
	odczytZpliku(&sd, plik);
	std::cout << sd.imie<<std::endl;
	std::cout << sd.nazwisko<<std::endl;

	std::cout << sd.semestr << std::endl << (int)sd.plec << std::endl << (int)sd.stopien;

}
#endif