Jak w temacie.Zamiast imienia,nazwiska,plci i PESELu wyrzuca mi głupoty na ekran
#include "database.h"
int main()
{
data::Statistics statistics;
std::vector<data::Student>students;
for(;;)
{
system("cls");
data::loadDatabase(statistics,students);
console::selectOption(students,statistics);
}
return 0;
}
#ifndef DATABASE_H
#define DATABASE_H
#include <iostream>
#include <fstream>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <vector>
#include <ctime>
namespace data
{
enum SEX{MALE=1,FEMALE=2};
const size_t sizePESEL = 11;
struct Statistics{
int numberStudents=0;
int numberMens=0;
int numberWomans=0;
float averageClass=0.0;
void loadStatistics();
void saveStatisticsToFile();
};
struct Student{
std::string name;
std::string surname;
char PESEL[11];
int age;
SEX sex;
std::vector<float>ratings;
void addStudent(Statistics &statistic);
void saveStudentToFile();
};
void loadDatabase(data::Statistics &statistics,std::vector<data::Student> &_student);
void viewStudents(std::vector<data::Student>&student);
}
namespace console
{
void selectOption(std::vector<data::Student>&students,data::Statistics &statistic);
void mainMenu(data::Statistics &stat);
}
namespace calculations
{
int calculateAge(data::Student student);
void checkSex(data::Student &student,data::Statistics &statistics);
}
#endif // DATABASE_H
#include "database.h"
void console::mainMenu(data::Statistics &statistics)
{
system("cls");
std::cout<<"DZIENNIK KLASY"<<std::endl;
std::cout<<"====================="<<std::endl;
std::cout<<"Liczba uczniow: "<<statistics.numberStudents<<std::endl;
std::cout<<"Liczba mezczyzn: "<<statistics.numberMens<<std::endl;
std::cout<<"Liczba kobiet: "<<statistics.numberWomans<<std::endl;
std::cout<<"Srednia klasy: "<<statistics.averageClass<<std::endl;
std::cout<<"====================="<<std::endl;
std::cout<<"Dostepne operacje:"<<std::endl;
std::cout<<"1.Dodaj ucznia"<<std::endl;
std::cout<<"2.Dodaj ocene"<<std::endl;
std::cout<<"3.Wyswietl dane uczniow"<<std::endl;
std::cout<<"4.Usun ucznia"<<std::endl;
std::cout<<"5.Czyszczenie ocen"<<std::endl;
std::cout<<"6.WYJSCIE"<<std::endl;
std::cout<<"=====================";
}
void data::loadDatabase(data::Statistics &statistics,std::vector<data::Student> &_student)
{
_student.clear();
std::ifstream loadSatisticFile("stat.bin",std::ios::binary);
if(!loadSatisticFile.is_open())
{
std::cout<<"Brak bazy danych! Ladowanie programu..."<<std::endl;
Sleep(1000);
system("cls");
console::mainMenu(statistics);
} else {
loadSatisticFile.read((char*)&statistics.numberStudents,sizeof(int));
loadSatisticFile.read((char*)&statistics.numberMens,sizeof(int));
loadSatisticFile.read((char*)&statistics.numberWomans,sizeof(int));
loadSatisticFile.read((char*)&statistics.averageClass,sizeof(float));
loadSatisticFile.close();
data::Student student;
for(int i=0; i<statistics.numberStudents;i++)
{
std::ifstream loadStudentListFile("listStudent.bin",std::ios::binary);
std::string nameStudent,surnameStudent;
getline(loadSatisticFile,nameStudent,'\0');
getline(loadSatisticFile,surnameStudent,'\0');
loadSatisticFile.close();
std::string nameFileStudent = nameStudent+surnameStudent+".bin";
std::ifstream loadStudentFile(nameFileStudent.c_str(),std::ios::binary);
getline(loadSatisticFile,student.name,'\0');
getline(loadSatisticFile,student.surname,'\0');
for(size_t i=0;i<data::sizePESEL;i++) {loadSatisticFile.read((char*)&student.PESEL[i],sizeof(char));}
loadSatisticFile.read((char*)&student.age,sizeof(int));
loadSatisticFile.read((char*)&student.sex,sizeof(int));
loadSatisticFile.close();
_student.push_back(student);
console::mainMenu(statistics);
}
}
}
void console::selectOption(std::vector<data::Student>&students,data::Statistics &statistic)
{
char choice = getch();
data::Student student;
switch(choice){
case '1':
student.addStudent(statistic);
break;
case '2':
std::cout<<"Nieprawidlowy znak!"<<std::endl;
break;
case '3':
data::viewStudents(students);
break;
case '4':
std::cout<<"Nieprawidlowy znak!"<<std::endl;
break;
case '5':
std::cout<<"Nieprawidlowy znak!"<<std::endl;
break;
case '6':
exit(0);
break;
default:
std::cout<<"Nieprawidlowy znak!"<<std::endl;
break;
}
}
void calculations::checkSex(data::Student &student,data::Statistics &statistics)
{
int numberSex = student.PESEL[data::sizePESEL-1]-'0';
if(numberSex%2==0)
{
student.sex = data::FEMALE;
statistics.numberWomans++;
}else{
student.sex = data::MALE;
statistics.numberMens++;
}
}
int calculations::calculateAge(data::Student student)
{
//POBRANIE DATY URODZENIA Z NUMERU PESEL
int *birthDate = new int[6];
for(int i=0;i<2;i++)birthDate[i] = student.PESEL[i]-'0'; //rok
for(int i=2;i<4;i++)birthDate[i] = student.PESEL[i]-'0'; //miesiac
for(int i=4;i<6;i++)birthDate[i] = student.PESEL[i]-'0'; //dzien
int birthYear;
if(birthDate[0]==9)
{
birthYear = 1900+(birthDate[0]*10)+birthDate[1];
}else if(birthDate[0]==0){
birthYear = 2000+(birthDate[0]*10)+birthDate[1];
}
int birthMonth = birthDate[2]*10+birthDate[3];
int birthDay = birthDate[4]*10+birthDate[5];
delete[]birthDate;
//POBRANIE AKTUALNEJ DATY
time_t _time;
struct tm * ptr;
time( & _time );
ptr = localtime( & _time );
int currentDay = ptr->tm_mday;
int currentMonth = 1+(ptr->tm_mon);
int currentYear = (ptr->tm_year)+1900;
//OBLICZENIE WIEKU
if(currentMonth<birthMonth || (currentMonth==birthMonth && currentDay<birthDay))
{
return currentYear-birthYear-1;
} else return currentYear-birthYear;
}
void data::Student::addStudent(Statistics &statistic)
{
Student student;
system("cls");
std::cout<<"DODAWANIE UCZNIA"<<std::endl;
std::cout<<"================"<<std::endl;
std::cout<<"Imie: ";
std::cin >> student.name;
std::cout<<"Nazwisko: ";
std::cin >> student.surname;
std::cout<<"PESEL: ";
for(size_t i=0; i<sizePESEL; i++)
{
student.PESEL[i] = getch();
std::cout<<student.PESEL[i];
}
calculations::checkSex(student,statistic);
student.age=calculations::calculateAge(student);
statistic.numberStudents++;
std::string nameAndSurname = student.name+student.surname+".bin";
std::ofstream studentFileSave(nameAndSurname.c_str(),std::ios::binary);
studentFileSave.write(student.name.c_str(),name.size()+1);
studentFileSave.write(student.surname.c_str(),surname.size()+1);
studentFileSave.write((const char*)&student.age,sizeof(int));
for(size_t i=0; i<data::sizePESEL;i++)studentFileSave.write((const char*)&student.PESEL[i],sizeof(char));
studentFileSave.write((const char*)&student.sex,sizeof(int));
for(size_t i=0;i<ratings.size();i++)studentFileSave.write((const char*)&student.ratings[i],sizeof(float));
studentFileSave.close();
std::ofstream studentListFile("listStudent.bin",std::ios::binary | std::ios::app);
studentListFile.write(student.name.c_str(),student.name.size()+1);
studentListFile.write(student.surname.c_str(),student.surname.size()+1);
studentListFile.close();
std::ofstream statFileSave("stat.bin",std::ios::binary);
statFileSave.write((const char*)&statistic.numberStudents,sizeof(int));
statFileSave.write((const char*)&statistic.numberMens,sizeof(int));
statFileSave.write((const char*)&statistic.numberWomans,sizeof(int));
statFileSave.write((const char*)&statistic.averageClass,sizeof(float));
statFileSave.close();
}
void data::viewStudents(std::vector<data::Student>&student)
{
system("cls");
for(size_t i=0; i<student.size();i++)
{
std::cout<<i+1<<". "<<student[i].name<<" "<<student[i].surname<<" | Plec: ";
if(student[i].sex==1) std::cout<<"Mezczyzna | PESEL: "; else std::cout<<"Kobieta | PESEL: ";
std::cout<<student[i].PESEL;
std::cout<<" | Wiek: "<<student[i].age<<std::endl;
}
std::cout<<std::endl;
std::cout<<"Aby wrocic nacisnij dowolny klawisz..."<<std::endl;
getch();
}