#include"Student.h" #include"Manager.h" #pragma warning(disable:4996) using namespace std; extern Manager mainManager; Student::Student(int year, int selectionNo, int classNo, char name[]) :year(year), selectionNo(selectionNo), classNo(classNo), serialNo(serialNo) { strcpy_s(this->name, name); studentNo = infoToNo(year, selectionNo, classNo); serialNo = studentNo % 100; } Student::Student(long long int studentNo) { this->studentNo = studentNo; strcpy(this->name, "查无此人"); year = 0; selectionNo = 0; classNo = 0; serialNo = 0; } Student::Student(ifstream& csv, int yearColumn, int clsColumn, int slcColumn,int nameColumn) { string line, tmp; vector tmpvector; if (!getline(csv, line)) { studentNo = -1; return; } stringstream linestream(line); while (getline(linestream, tmp, ',')) { tmpvector.push_back(tmp); }; try { year = stoi(tmpvector.at(yearColumn - 1)); } catch (const exception& e) { year = 0; } try { classNo = stoi(tmpvector.at(clsColumn - 1)); } catch (const exception& e) { classNo = 0; } try { selectionNo = stoi(tmpvector.at(slcColumn - 1)); } catch (const exception& e) { selectionNo = 0; } strcpy(this->name, tmpvector.at(nameColumn - 1).c_str()); if (year != 0 && classNo != 0 && selectionNo != 0) { studentNo = infoToNo(year, selectionNo, classNo); serialNo = studentNo % 100; } else { studentNo = 0; serialNo = 0; } } void Student::dspHeader() { cout << setw(10) << "姓名" << setw(12) << "学号" << setw(10) << "入学年份" << setw(5) << "班级" << setw(5) << "选科"; } void Student::dsp() const { cout << setw(10) << name << setw(12) << studentNo << setw(10) << year << setw(5) << classNo << setw(5) << selectionNo; } void Student::toCsvHeader(ofstream& csv) { csv<< "姓名,"<< "学号,"<< "入学年份,"<< "班级," << "选科,"; } void Student::toCsv (ofstream& csv) const { csv << name << ',' << studentNo << ',' << year << ',' << classNo << ',' << selectionNo << ','; } void Student::setInfo(int year, int selectionNo, int classNo, char name[]) { this->year = year; this->selectionNo = selectionNo; this->classNo = classNo; strcpy(this->name, name); } bool Student::stuNoEqual(long long int studentNo) const { if (this->studentNo == studentNo) { return true; } else { return false; } } bool Student::slcNoEqual(int selectionNo) const { if (this->selectionNo == selectionNo) { return true; } else { return false; } } bool Student::clsNoEqual(int classNo) const { if (this->classNo == classNo) { return true; } else { return false; } } bool Student::nameEqual(char name[]) const { if (strcmp(this->name, name) == 0) { return true; } else { return false; } } bool Student::yearEqual(int year) const { if (this->year == year) { return true; } else { return false; } } long long int Student::infoToNo(int year, int selectionNo, int classNo) { long long int initNo = year * 1000000 + selectionNo * 10000 + classNo * 100 + 1; for (auto i = initNo; i < initNo + 99; i++) { if (mainManager.searchByNo(i) == nullptr) { return i; } } return -1; }