Files
BasicsOfComputerSoftwareEng…/大作业/Record.hpp
2023-06-17 00:56:41 +08:00

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;
};