103 lines
3.4 KiB
C++
103 lines
3.4 KiB
C++
#pragma once
|
|
#include "Date.hpp"
|
|
#include <ctime>
|
|
|
|
/*
|
|
The file should be in this stucture:
|
|
int totalRecordNum
|
|
unsigned nextRecordID
|
|
|
|
SaveRecord
|
|
courseName char[]
|
|
stduentName char[]
|
|
|
|
SaveRecord
|
|
courseName char[]
|
|
*/
|
|
|
|
enum RecordType { Late, Absent, PersonalLeave };
|
|
|
|
class BaseRecord {
|
|
private:
|
|
unsigned recordID;
|
|
Date date;
|
|
std::string courseName;
|
|
int studentNumber;
|
|
std::string studentName;
|
|
// If the string is shorter than length, returns the string; if the string
|
|
// is longer than length, takes the first lenght - 1 letters and add a "+".
|
|
std::string cutToLength(std::string str, int length) const;
|
|
|
|
public:
|
|
static unsigned nextRecordID;
|
|
BaseRecord() = delete;
|
|
// Create new record
|
|
BaseRecord(const time_t _date, const std::string _courseName,
|
|
const int _studentNumber, const std::string _studentName);
|
|
// Read from file
|
|
BaseRecord(const unsigned _recordID, const time_t _date,
|
|
const std::string _courseName, const int _studentNumber,
|
|
const std::string _studentName);
|
|
const unsigned getRecordID() const;
|
|
const Date &getDate() const;
|
|
const std::string getCourseName() const;
|
|
const int getStudentNumber() const;
|
|
const std::string getStudentName() const;
|
|
void promptForNewDate(bool showOriginal = true);
|
|
void promptForNewCourseName(bool showOriginal = true);
|
|
void promptForNewStudentInfo(bool showOriginal = true);
|
|
void display() const;
|
|
void displayComplete() const;
|
|
const char *getCourseNameChar() const;
|
|
const char *getStudentNameChar() const;
|
|
virtual std::string getRecordType() const = 0;
|
|
};
|
|
|
|
class LateRecord : public BaseRecord {
|
|
public:
|
|
LateRecord(const time_t _date, const std::string _courseName,
|
|
const int _studentNumber, const std::string _studentName);
|
|
LateRecord(const unsigned _recordID, const time_t _date,
|
|
const std::string _courseName, const int _studentNumber,
|
|
const std::string _studentName);
|
|
virtual std::string getRecordType() const;
|
|
};
|
|
|
|
class AbsentRecord : public BaseRecord {
|
|
public:
|
|
AbsentRecord(const time_t _date, const std::string _courseName,
|
|
const int _studentNumber, const std::string _studentName);
|
|
AbsentRecord(const unsigned _recordID, const time_t _date,
|
|
const std::string _courseName, const int _studentNumber,
|
|
const std::string _studentName);
|
|
virtual std::string getRecordType() const;
|
|
};
|
|
|
|
class PersonalLeaveRecord : public BaseRecord {
|
|
public:
|
|
PersonalLeaveRecord(const time_t _date, const std::string _courseName,
|
|
const int _studentNumber,
|
|
const std::string _studentName);
|
|
PersonalLeaveRecord(const unsigned _recordID, const time_t _date,
|
|
const std::string _courseName, const int _studentNumber,
|
|
const std::string _studentName);
|
|
virtual std::string getRecordType() const;
|
|
};
|
|
|
|
class SaveRecord {
|
|
private:
|
|
unsigned recordID;
|
|
time_t date;
|
|
int courseNameLength;
|
|
int studentNumber;
|
|
int studentNameLength;
|
|
RecordType recordType;
|
|
|
|
public:
|
|
SaveRecord() = delete;
|
|
SaveRecord(const unsigned _recordID, const time_t _date,
|
|
const std::string &courseName, const int _studentNumber,
|
|
const std::string &studentName, RecordType _recordType);
|
|
BaseRecord *convertToRecord(const char *_courseName,
|
|
const char *_name) const;
|
|
}; |