整合后的部分源码:
#include <iostream>
#include <list>
#include <string.h>
#include <string>
#include <fstream>
using namespace std;
class Course{
public:
Course(size_t id,char name[]);
~Course();
size_t getId();
char* getName();
void setId(size_t id);
void setName(char name[]);
string toString();
private :
size_t id; //course id
char name[20]; //course name
};
class Grand{
public:
Grand();
Grand(size_t id,char* name);
~Grand();
size_t getId();
size_t getSize();
char* getName();
void getCompulsoryCourse(size_t ccId[]);
void getOptionalCourse(size_t ocId[]);
void setCompulsoryCourse(size_t ccId);
void setOptionalCourse(size_t ocId);
void setName(char name[]);
private:
size_t id;
char name[20];
size_t ccId[20]; //CompulsoryCourse id
size_t ocId[20]; //OptionalCourse id
};
class Student{
public:
Student(size_t id ,char passwd[], char name[], char sex, size_t age, size_t gId);
~Student();
string toString();
size_t getId();
char* getPasswd();
char* getName();
char getSex();
size_t getAge();
size_t getGId();
void getCourses(size_t courseId[2][20]);
void setId(size_t id);
void setPasswd(char passwd[]);
void setName(char name[]);
void setSex(char sex);
void setAge(size_t age);
void setGId(size_t gId);
void setCourses(size_t cid);
void setGrade(size_t cid,size_t grade);
private:
size_t id; //student id
char passwd[20]; //password
char name[20]; //name
char sex; //sex
size_t age; //age
size_t gId; //grand id
size_t courseId[2][20]; //A maximum of 20 courses can be selected, with 0 lines for course id and 1 line for course score
};
class Teacher{
public:
Teacher(size_t id, char name[], char sex, size_t age);
~Teacher();
size_t getId();
char* getName();
char getSex();
size_t getAge();
void setId(size_t id);
void setName(char name[]);
void setSex(char sex);
void setAge(size_t age);
string toString();
private:
size_t id; //teacher id
char name[20]; //teacher name
char sex; //teacher sex
size_t age; //teacher age
};
class Admin{
public:
Admin();
//Grand Manager Block
void showGrandAll();
Grand* selectGrand(size_t id);
void addGrand();
void modifyGrand(size_t id);
void deleteGrand(size_t id);
//Teacher Manager Block
void showTeacherAll();
Teacher* selectTeacher(size_t id);
void addTeacher();
void modifyTeacher(size_t id);
void deleteTeacher(size_t id);
//Course Manager Block
void showCourseAll();
Course* selectCourse(size_t id);
void addCourse();
void modifyCourse(size_t id);
void deleteCourse(size_t id);
//Students choose course , directly according to the class id
void chooseCourse(size_t id);
//Student Manager Block
void showStudentOfGrand(size_t id);
Student* selectStudent(size_t id);
void addStudent();
void modifyStudent(size_t id);
void deleteStudent(size_t id);
//Grade Manager Block Modify student grades according to student id
void modifyGrade(size_t id);
//load
void load1();
void load2();
void load3();
void load4();
//save
void save1();
void save2();
void save3();
void save4();
private:
list<Student> students; //student list
list<Teacher> teachers; //teacher list
list<Grand> grands; //grand list
list<Course> courses; //course list
};
class User{
public:
User();
~User();
int login();
Student* selectStudent(size_t id);
void modifyPasswd();//modify passwd
void showCourse();//Show current course
void scanCourse();//Elective browsing
void chooseCourse(size_t cid);//Personal course selection, parameters: course id
void showGrade();//Show personal grades
void personMessage();//Show Personal information
Course* selectCourse(size_t id);
Grand* selectGrand(size_t id);
Student* getStudent();
void setStudent(Student* student);
void load1();
void load2();
void load3();
void load4();
void save1();
void save2();
void save3();
void save4();
private:
list<Student> students;
list<Teacher> teachers;
list<Grand> grands;
list<Course> courses;
Student* student;
};
Admin :: Admin(){
}
void Admin:: showGrandAll(){
list<Grand> :: iterator it = grands.begin();
while(it!=grands.end()){
size_t cc[20];
it->getCompulsoryCourse(cc);
cout<<"id: "<<it->getId()<<", "<<it->getName()<<endl;
cout<<"CompulsoryCourse:";
for(int i=0;i<20;i++){
if(cc[i]!=0&&selectCourse(cc[i])){
cout<<cc[i]<<" : "<<selectCourse(cc[i])->getName()<<", ";
}
}
cout<<endl;
it++;
}
}
Grand* Admin:: selectGrand(size_t id){
list<Grand> :: iterator it = grands.begin();;
while(it!=grands.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
void Admin:: addGrand(){
size_t id=1501;
char name[20];
size_t size=0;
if(!grands.empty()){
id=grands.back().getId()+1;
}
cout<<"Input grand name: ";
cin>>name;
Grand* grand = new Grand( id,name);
grands.push_back(*grand);
return;
}
void Admin:: modifyGrand(size_t id){
list<Grand> :: iterator it = grands.begin();
char name[20];
while(it!=grands.end()){
if(it->getId()==id){
cout<<"Input new name: ";
cin>>name;
it->setName(name);
cout<<"success"<<endl;
return;
}
it++;
}
cout<<"Not find this grand. "<<endl;
return;
}
void Admin:: deleteGrand(size_t id){
list<Grand> :: iterator it = grands.begin();
string name;
while(it!=grands.end()){
if(it->getId()==id){
grands.erase(it++);
cout<<"Delete success";
getchar();
return;
}
it++;
}
cout<<"Not find this grand";
getchar();
return;
}
//teacher manager
void Admin:: showTeacherAll(){
list<Teacher> :: iterator it = teachers.begin();
while(it!=teachers.end()){
cout<<it++->toString()<<endl;
}
}
Teacher* Admin:: selectTeacher(size_t id){
list<Teacher> :: iterator it = teachers.begin();;
while(it!=teachers.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
void Admin:: addTeacher(){
size_t id=10150101;
char name[20];
char sex;
size_t age;
if(!teachers.empty()){
id=teachers.back().getId()+1;
}
cout<<"input teacher message:( name, sex, age )";
cin>>name>>sex>>age;
Teacher* teacher = new Teacher(id,name,sex,age);
teachers.push_back(*teacher);
cout<<"success"<<endl;
}
void Admin:: modifyTeacher(size_t id){
list<Teacher> :: iterator it = teachers.begin();
char name[20];
char sex;
size_t age;
while(it!=teachers.end()){
if(it->getId()==id){
cout<<"input new massage: (name, sex, age)";
cin>>name;
cin>>sex;
cin>>age;
it->setName(name);
it->setSex(sex);
it->setAge(age);
cout<<"modify success"<<endl;
return;
}
it++;
}
cout<<"Not find"<<endl;
return;
}
void Admin:: deleteTeacher(size_t id){
list<Teacher> :: iterator it=teachers.begin();
string name;
while(it!=teachers.end()){
if(it->getId()==id){
teachers.erase(it++);
cout<<"delete success"<<endl;
return;
}
it++;
}
cout<<"Not find"<<endl;
return;
}
//course manager
void Admin:: showCourseAll(){
list<Course> :: iterator it = courses.begin();
while(it!=courses.end()){
cout<<"id: "+to_string(it->getId())+" name: "+it->getName()<<endl;
it++;
}
}
Course* Admin:: selectCourse(size_t id){
list<Course> :: iterator it = courses.begin();
while(it!=courses.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
void Admin:: addCourse(){
size_t id = 8001;
char name[20];
if(!courses.empty()){
id=courses.back().getId()+1;
}
cout<<"Input course message name:";
cin>>name;
Course* course = new Course(id,name);
cout<<course->getName()<<endl;
courses.push_back(*course);
cout<<"Add success"<<endl;
}
void Admin:: modifyCourse(size_t id){
list<Course> :: iterator it = courses.begin();
char name[20];
while(it!=courses.end()){
if(it->getId()==id){
cout<<"Input new name: ";
cin>>name;
it->setName(name);
cout<<"Modify success"<<endl;
return;
}
it++;
}
cout<<"Not find"<<endl;
return;
}
void Admin:: deleteCourse(size_t id){
list<Course> :: iterator it=courses.begin();
string name;
while(it!=courses.end()){
if(it->getId()==id){
courses.erase(it++);
cout<<"delete success"<<endl;
return;
}
it++;
}
cout<<"Not find"<<endl;
return;
}
//Choose course by id
void Admin:: chooseCourse(size_t id){
Grand* grand = selectGrand(id);
if(!grand){
return;
}
size_t cid;
cout<<"course list : ";
showCourseAll();
cout<<"Choose Course:";
cin>>cid;
grand->setCompulsoryCourse(cid);
}
//Student Manager
//Displays all students in the class by the class id
void Admin:: showStudentOfGrand(size_t id){
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
if(it->getGId()==id){
cout<<it->toString()<<endl;
}
it++;
}
}
//Returns the student by the student id
Student* Admin:: selectStudent(size_t id){
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
void Admin:: addStudent(){
size_t id = 150101;
char passwd[20];
char name[20];
char sex;
size_t age;
size_t gId=0;
if(!students.empty()){
id=students.back().getId()+1;
}
cout<<"Input student message:(name,passwd,sex,age,grandId) "<<endl;
cin>>name>>passwd>>sex>>age>>gId;
if(!selectGrand(gId)){
cout<<"Not find grand"<<endl;
return;
}
Student* stud = new Student(id,passwd,name,sex,age,gId);
//Add Compulsory Course to the class
size_t ccid[20];
selectGrand(gId)->getCompulsoryCourse(ccid);
for(int i=0;i<20;i++){
if(ccid[i]!=0){
stud->setCourses(ccid[i]);
cout<<ccid[i]<<endl;
}
}
//Student push list
students.push_back(*stud);
cout<<"add success"<<endl;
}
//Modify the student information according to the student id
void Admin:: modifyStudent(size_t id){
char passwd[20];
char name[20];
char sex;
size_t age;
size_t gId=0;
cout<<"input student message:(name,passwd,sex,age,grandId) "<<endl;
cin>>name>>passwd>>sex>>age>>gId;
Student* stud = selectStudent(id);
if(!stud||!selectGrand(gId)){
cout<<"not find Student or Grand"<<endl;
return;
}
stud->setName(name);
stud->setPasswd(passwd);
stud->setSex(sex);
stud->setAge(age);
stud->setGId(gId);
return;
}
void Admin :: deleteStudent(size_t id){
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
if(it->getId()==id){
students.erase(it++);
cout<<"delete success";
return;
}
it++;
}
return;
}
//load
void Admin:: load1(){
//load in file
//Grand
int i,size;
ifstream infile,infile1;
Grand* grand = (Grand*)malloc(sizeof(Grand));
infile1.open("GrandSize.dat",ios::in);
infile1>>size; //read size
cout<<"grand siez: "<<size<<endl;
infile.open("Grand_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char*)grand,sizeof(Grand));
grands.push_back(*grand);
}
infile.close();
cout<<"Grand read success!"<<endl;
}
void Admin:: load2(){
//Student
int i,size;
ifstream infile,infile1;
Student* student = (Student*)malloc(sizeof(Student));
infile1.open("StudentSize.dat",ios::in);
infile1>>size; //read size
infile.open("Student_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char*)student,sizeof(Student));
students.push_back(*student);
}
infile.close();
cout<<"Student read success!"<<endl;
}
void Admin:: load3(){
//Teacher
int i,size;
ifstream infile,infile1;
Teacher* teacher = (Teacher*)malloc(sizeof(Teacher));
infile1.open("TeacherSize.dat",ios::in);
infile1>>size;
infile.open("Teacher_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char*)teacher,sizeof(Teacher));
teachers.push_back(*teacher);
}
infile.close();
cout<<"Teacher read success!"<<endl;
}
void Admin:: load4(){
//Course
int i,size;
ifstream infile,infile1;
Course* course = (Course*)malloc(sizeof(Course));
infile1.open("CourseSize.dat",ios::in);
infile1>>size;
infile.open("Course_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char *)course,sizeof(Course));
courses.push_back(*course);
}
infile.close();
cout<<"Course read success!"<<endl;
}
//save
void Admin::save1(){
//Grand
char* buffer;
ofstream outfile,outfile1;
outfile1.open("GrandSize.dat",ios::out);
outfile1<<grands.size();
outfile.open("Grand_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
buffer = new char [sizeof(Grand)];
list<Grand> :: iterator it = grands.begin();
while(it!=grands.end()){
buffer = (char *)&*it;
outfile.write(buffer,sizeof(Grand));
it++;
}
outfile.close();
cout<<"Grand save success!"<<endl;
}
void Admin::save2(){
//Student
ofstream outfile,outfile1;
outfile1.open("StudentSize.dat",ios::out);
outfile1<<students.size();
outfile.open("Student_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
outfile.write((char *)&*it,sizeof(Student));
it++;
}
outfile.close();
cout<<"Student save success!"<<endl;
}
void Admin::save3(){
//Teacher
ofstream outfile,outfile1;
outfile1.open("TeacherSize.dat",ios::out);
outfile1<<teachers.size();
outfile.open("Teacher_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Teacher> :: iterator it = teachers.begin();
while(it!=teachers.end()){
outfile.write((char *)&*it,sizeof(Teacher));
it++;
}
outfile.close();
cout<<"Teacher save success!"<<endl;
}
void Admin::save4(){
//Course
ofstream outfile,outfile1;
outfile1.open("CourseSize.dat",ios::out);
outfile1<<courses.size();
outfile.open("Course_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Course> :: iterator it = courses.begin();
while(it!=courses.end()){
outfile.write((char *)&*it,sizeof(Course));
it++;
}
outfile.close();
cout<<"Course save success!"<<endl;
}
Course::Course(size_t id,char name[]){
this->id=id;
for(int i=0;i<20;i++){
this->name[i]=name[i];
}
}
Course::~Course(){
}
size_t Course:: getId(){
return this->id;
}
char* Course:: getName(){
return this->name;
}
void Course:: setId(size_t id){
this->id=id;
}
void Course:: setName(char name[]){
for(int i=0;i<20;i++)
this->name[i]=name[i];
}
string Course:: toString(){
return "id: "+to_string(this->id)
+"name: "+this->name;
}
Grand :: Grand(){
for(int i=0;i<20;i++){
this->ccId[i]=0;
this->ocId[i]=0;
}
}
Grand::Grand(size_t id,char name[]){
this->id=id;
for(int i=0;i<20;i++){
this->ccId[i]=0;
this->ocId[i]=0;
this->name[i]=name[i];
}
}
Grand::~Grand(){
}
size_t Grand:: getId(){
return this->id;
}
char* Grand:: getName(){
return this->name;
}
void Grand:: getCompulsoryCourse(size_t ccId[]){
for(int i=0;i<20;i++){
ccId[i]=this->ccId[i];
}
}
void Grand:: getOptionalCourse(size_t ocId[]){
for(int i=0;i<20;i++){
ocId[i]=this->ocId[i];
}
}
void Grand:: setCompulsoryCourse(size_t ccId){
for(int i=0;i<20;i++){
if(this->ccId[i]==0){
this->ccId[i]=ccId;
return;
}
}
}
void Grand:: setOptionalCourse(size_t ocId){
for(int i=0;i<20;i++){
if(this->ocId[i]==0){
this->ocId[i]=ocId;
return;
}
}
}
void Grand:: setName(char name[]){
for(int i=0;i<20;i++)
this->name[i]=name[i];
}
Student::Student(size_t id,char passwd[], char name[], char sex, size_t age, size_t gId){
this->id=id;
for(int i=0;i<20;i++){
this->passwd[i]=passwd[i];
this->name[i]=name[i];
}
this->sex=sex;
this->age=age;
this->gId=gId;
for(int i=0;i<2;i++){
for(int j=0;j<20;j++){
this->courseId[i][j]=0;
}
}
}
Student::~Student(){
}
string Student::toString(){
return "Studnet id:"+to_string(this->id)
+", Passwd:"+this->passwd
+", Name:"+this->name
+", Sex:"+this->sex
+", Age:"+to_string(this->age)
+", Grand Id:"+to_string(this->gId);
}
size_t Student:: getId(){
return this->id;
}
char* Student:: getPasswd(){
return this->passwd;
}
char* Student:: getName(){
return this->name;
}
char Student:: getSex(){
return this->sex;
}
size_t Student:: getAge(){
return this->age;
}
size_t Student:: getGId(){
return this->gId;
}
void Student:: getCourses(size_t courseId[2][20]){
for(int i=0;i<2;i++){
for(int j=0;j<20;j++){
courseId[i][j]=this->courseId[i][j];
}
}
}
void Student:: setId(size_t id){
this->id=id;
}
void Student:: setPasswd(char passwd[]){
for(int i=0;i<20;i++)
this->passwd[i]=passwd[i];
}
void Student:: setName(char name[]){
for(int i=0;i<20;i++)
this->name[i]=name[i];
}
void Student:: setSex(char sex){
this->sex=sex;
}
void Student:: setAge(size_t age){
this->age=age;
}
void Student:: setGId(size_t gId){
this->gId=gId;
}
void Student:: setCourses(size_t cid){
for(int i=0;i<20;i++){
if(this->courseId[0][i]==0){
this->courseId[0][i]=cid;
return;
}
}
}
void Student:: setGrade(size_t cid,size_t grade){
this->courseId[1][cid]=grade;
}
Teacher::Teacher(size_t id, char name[], char sex, size_t age){
this->id=id;
for(int i=0;i<20;i++)
this->name[i]=name[i];
this->sex=sex;
this->age=age;
}
Teacher::~Teacher(){
}
size_t Teacher:: getId(){
return this->id;
}
char* Teacher:: getName(){
return this->name;
}
char Teacher:: getSex(){
return this->sex;
}
size_t Teacher:: getAge(){
return this->age;
}
void Teacher:: setId(size_t id){
this->id=id;
}
void Teacher:: setName(char name[]){
for(int i=0;i<20;i++)
this->name[i]=name[i];
}
void Teacher:: setSex(char sex){
this->sex=sex;
}
void Teacher:: setAge(size_t age){
this->age=age;
}
string Teacher:: toString(){
return "id: "+to_string(this->id)
+", name: "+this->name
+", sex: "+this->sex
+", age: "+to_string(this->age);
}
User :: User(){
}
User :: ~User(){
}
Student* User :: getStudent(){
return this->student;
}
void User :: setStudent(Student* student){
this->student=student;
}
//Returns the student by student id
Student* User:: selectStudent(size_t id){
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
//User Login
int User :: login(){
size_t id;
char passwd[20];
cout<<"Input id: ";
cin>>id;
cout<<"Input password:";
cin>>passwd;
Student* student = this->selectStudent(id);
if(!student){
cout<<"Not find student"<<endl;
return 0;
}else if(strcmp(student->getPasswd(),passwd)!=0){
cout<<"Password error"<<endl;
return 0;
}else{
this->student = student;
return 1;
}
}
//Modify Password
void User :: modifyPasswd(){
char oldPasswd[20];
char newPasswd[20];
char secondPasswd[20];
cout<<"Input old password:";
cin>>oldPasswd;
if(strcmp(oldPasswd,this->student->getPasswd())!=0){
cout<<"Old Password input error!"<<endl;
return;
}
cout<<"Input new Password:";
cin>>newPasswd;
cout<<"Input second Password:";
cin>>secondPasswd;
if(strcmp(newPasswd,secondPasswd)!=0){
cout<<"tow passwd not same"<<endl;
return;
}
this->student->setPasswd(newPasswd);
}
//show crrent Course
void User :: showCourse(){
size_t coursesId[2][20];
this->student->getCourses(coursesId);
cout<<"now courses: ";
for(int i=0;i<20;i++){
Course* course = this->selectCourse(coursesId[0][i]);
if(course){
cout<<course->getName()<<", ";
}
}
cout<<endl;
}
Course* User:: selectCourse(size_t id){
list<Course> :: iterator it = courses.begin();
while(it!=courses.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
Grand* User:: selectGrand(size_t id){
list<Grand> :: iterator it = grands.begin();;
while(it!=grands.end()){
if(it->getId()==id){
return &*it;
}
it++;
}
return NULL;
}
//Show choose courses
void User :: scanCourse(){
Grand* grand = this->selectGrand(this->student->getGId());
if(!grand){
cout<<"not find error!"<<endl;
return;
}
size_t ocId[20];
grand->getOptionalCourse(ocId);
cout<<"OptionalCourse List: ";
for(int i=0;i<20;i++){
Course* course = this->selectCourse(ocId[i]);
if(course){
cout<<course->getName()<<", ";
}
}
cout<<endl;
}
//Choose Course by course id
void User :: chooseCourse(size_t cid){
size_t coursesId[2][20];
this->student->getCourses(coursesId);
//Check if you have already taken a course
for(int i=0;i<20;i++){
if(cid==coursesId[0][i]){
cout<<"the course has selected!"<<endl;
return;
}
}
for(int i=0;i<20;i++){
if(0==coursesId[0][i]){ //The first place to set the course is 0
this->student->setCourses(cid);
cout<<"Choose Course seccess!"<<endl;
return;
}
}
//Course Full
cout<<"courses is full!"<<endl;
return;
}
//Show person grade
void User :: showGrade(){
size_t coursesId[2][20];
this->student->getCourses(coursesId);
for(int i=0;i<20;i++){
Course* course = this->selectCourse(coursesId[0][i]);
if(course){
cout<<course->getName()<<" grade: "<<coursesId[1][i]<<endl;
}
}
}
//Person Message
void User :: personMessage(){
cout<<"Person Message:"<<endl;
cout<<"Id: "<<this->student->getId()<<endl;
cout<<"Name: "<<this->student->getName()<<endl;
cout<<"Sex: "<<this->student->getSex()<<endl;
cout<<"Age: "<<this->student->getAge()<<endl;
cout<<"Grand: "<<this->selectGrand(this->student->getGId())->getName()<<endl;
cout<<"Course List: ";
showCourse();
cout<<"Grade List: "<<endl;
showGrade();
}
//load
void User:: load1(){
//Grand
int i,size;
ifstream infile,infile1;
Grand* grand = (Grand*)malloc(sizeof(Grand));
infile1.open("GrandSize.dat",ios::in);
infile1>>size;
infile.open("Grand_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char *)grand,sizeof(Grand));
grands.push_back(*grand);
}
infile.close();
cout<<"Grand read success!"<<endl;
}
void User:: load2(){
//Student
int i,size;
ifstream infile,infile1;
Student* student = (Student*)malloc(sizeof(Student));
infile1.open("StudentSize.dat",ios::in);
infile1>>size;
infile.open("Student_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char *)student,sizeof(Student));
students.push_back(*student);
}
infile.close();
cout<<"Student read success!"<<endl;
}
void User:: load3(){
//Teacher
int i,size;
ifstream infile,infile1;
Teacher* teacher = (Teacher*)malloc(sizeof(Teacher));
infile1.open("TeacherSize.dat",ios::in);
infile1>>size;
infile.open("Teacher_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char *)teacher,sizeof(Teacher));
teachers.push_back(*teacher);
}
infile.close();
cout<<"Teacher read success!"<<endl;
}
void User:: load4(){
//Course
int i,size;
ifstream infile,infile1;
Course* course = (Course*)malloc(sizeof(Course));
infile1.open("CourseSize.dat",ios::in);
infile1>>size;
infile.open("Course_data.dat",ios::binary);
if(!infile){
cerr<<"open error!"<<endl;
return;
}
for(i=0;i<size;i++){
infile.read((char *)course,sizeof(Course));
courses.push_back(*course);
}
infile.close();
cout<<"Course read success!"<<endl;
}
//save
void User::save1(){
//Grand
ofstream outfile,outfile1;
outfile1.open("GrandSize.dat",ios::out);
outfile1<<grands.size();
outfile.open("Grand_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Grand> :: iterator it = grands.begin();
while(it!=grands.end()){
outfile.write((char *)&*it,sizeof(Grand));
it++;
}
outfile.close();
cout<<"Grand save success!"<<endl;
}
void User::save2(){
//Student
ofstream outfile,outfile1;
outfile1.open("StudentSize.dat",ios::out);
outfile1<<students.size();
outfile.open("Student_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Student> :: iterator it = students.begin();
while(it!=students.end()){
outfile.write((char *)&*it,sizeof(Student));
it++;
}
outfile.close();
cout<<"Student save success!"<<endl;
}
void User::save3(){
//Teacher
ofstream outfile,outfile1;
outfile1.open("TeacherSize.dat",ios::out);
outfile1<<teachers.size();
outfile.open("Teacher_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Teacher> :: iterator it = teachers.begin();
while(it!=teachers.end()){
outfile.write((char *)&*it,sizeof(Teacher));
it++;
}
outfile.close();
cout<<"Teacher save success!"<<endl;
}
void User::save4(){
//Course
ofstream outfile,outfile1;
outfile1.open("CourseSize.dat",ios::out);
outfile1<<courses.size();
outfile.open("Course_data.dat",ios::binary);
if(!outfile){
cerr<<"open error!"<<endl;
return;
}
list<Course> :: iterator it = courses.begin();
while(it!=courses.end()){
outfile.write((char *)&*it,sizeof(Course));
it++;
}
outfile.close();
cout<<"Course save success!"<<endl;
}
void login_menu();
void admin_menu();
void menuGrand();
void menuTeacher();
void menuCourse();
void menuSelect();
void menuStudnet();
void user_menu();
Admin* admin = new Admin();
User* user = new User();
int main(){
login_menu();
getchar();
return 0;
}
void login_menu(){
int a;
cout<<"***************"<<endl;
cout<<"1.Admin login:"<<endl;
cout<<"2.Student login:"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
admin_menu();
break;
case 2:
user_menu();
break;
default:
break;
}
}
void admin_menu(){
int a;
string id, passwd;
cout<<"Input Admin Id:";
cin>>id;
if(id.compare("admin")!=0){
cout<<"Admin Id input error!"<<endl;
getchar();
return;
}
cout<<"Input Admin Password:";
cin>>passwd;
if(passwd.compare("123456")!=0){
cout<<"Admin password input error!"<<endl;
getchar();
return;
}
admin->load1();
admin->load2();
admin->load3();
admin->load4();
while (true){
system("clear");
cout<<"***************"<<endl;
cout<<"1.Grand Management"<<endl;
cout<<"2.Teacher Management"<<endl;
cout<<"3.Course Management"<<endl;
cout<<"4.Student Choose Course"<<endl;
cout<<"5.Studnet Management"<<endl;
cout<<"6.Exit"<<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
menuGrand();
break;
case 2:
menuTeacher();
break;
case 3:
menuCourse();
break;
case 4:
menuSelect();
break;
case 5:
menuStudnet();
break;
case 6:
admin->save1();
admin->save2();
admin->save3();
admin->save4();
return;
default:
break;
}
}
}
void menuGrand(){
int a;
while (true){
getchar();
getchar();
system("clear");
cout<<"***************"<<endl;
cout<<"1.Show Grand"<<endl;
cout<<"2.Select Grand"<<endl;
cout<<"3.Add Grand"<<endl;
cout<<"4.Modify Grand"<<endl;
cout<<"5.Delete Grand"<<endl;
cout<<"6.Exit"<<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
admin->showGrandAll();
break;
case 2:
cout<<"Input Grand Id:";
int gid;
cin>>gid;
if(admin->selectGrand(gid)){
cout<<admin->selectGrand(gid)->getName()<<endl;
}
break;
case 3:
admin->addGrand();
break;
case 4:
cout<<"Input Geand Id:";
cin>>gid;
admin->modifyGrand(gid);
break;
case 5:
cout<<"Input Geand Id:";
cin>>gid;
admin->deleteGrand(gid);
break;
case 6:
return;
default:
break;
}
}
}
void menuTeacher(){
int a;
while (true){
getchar();
getchar();
system("clear");
cout<<"***************"<<endl;
cout<<"1.Show Teacher"<<endl;
cout<<"2.Select Teacher"<<endl;
cout<<"3.Add Teacher"<<endl;
cout<<"4.Modify Teacher"<<endl;
cout<<"5.Delete Teacher"<<endl;
cout<<"6.Exit " <<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
admin->showTeacherAll();
break;
case 2:
cout<<"Input Teacher Id:";
int tid;
cin>>tid;
if(admin->selectTeacher(tid)){
cout<<admin->selectTeacher(tid)->toString()<<endl;
}
break;
case 3:
admin->addTeacher();
break;
case 4:
cout<<"Input Teacher Id:";
cin>>tid;
admin->modifyTeacher(tid);
break;
case 5:
cout<<"Input Teacher Id:";
cin>>tid;
admin->deleteTeacher(tid);
break;
case 6:
return;
default:
break;
}
}
}
void menuCourse(){
int a;
while (true){
getchar();
getchar();
system("clear");
cout<<"***************"<<endl;
cout<<"1.Show Course"<<endl;
cout<<"2.Select Course"<<endl;
cout<<"3.Add Course"<<endl;
cout<<"4.Modify Course"<<endl;
cout<<"5.Delete Course"<<endl;
cout<<"6.Exit "<<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
admin->showCourseAll();
break;
case 2:
cout<<"Input Course Id:";
int cid;
cin>>cid;
if(admin->selectCourse(cid)){
cout<<admin->selectCourse(cid)->toString()<<endl;
}
break;
case 3:
admin->addCourse();
break;
case 4:
cout<<"Input Course Id:";
cin>>cid;
admin->modifyCourse(cid);
break;
case 5:
cout<<"Input Course Id:";
cin>>cid;
admin->deleteCourse(cid);
break;
case 6:
return;
default:
break;
}
}
}
void menuSelect(){
int gid;
cout<<"Input Grand Id:";
cin>>gid;
admin->chooseCourse(gid);
}
void menuStudnet(){
int a;
while (true){
getchar();
getchar();
system("clear");
cout<<"***************"<<endl;
cout<<"1.Show Student"<<endl;
cout<<"2.Select Student"<<endl;
cout<<"3.Add Student"<<endl;
cout<<"4.Modify Student"<<endl;
cout<<"5.Delete Student"<<endl;
cout<<"6.Exit"<<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
int gid;
cout<<"Input Grand Id:";
cin>>gid;
admin->showStudentOfGrand(gid);
break;
case 2:
cout<<"Input Student Id:";
size_t sid;
cin>>sid;
if(admin->selectStudent(sid)){
cout<<admin->selectStudent(sid)->toString()<<endl;
}
break;
case 3:
admin->addStudent();
break;
case 4:
cout<<"Input Studnet Id:";
cin>>sid;
admin->modifyStudent(sid);
break;
case 5:
cout<<"Input Studnet Id:";
cin>>sid;
admin->deleteStudent(sid);
break;
case 6:
return;
default:
break;
}
}
}
void user_menu(){
int a;
user->load1();
user->load2();
user->load3();
user->load4();
if(!user->login()){
cout<<"Login failure"<<endl;
getchar();
return;
}
while (true){
getchar();
getchar();
system("clear");
cout<<"***************"<<endl;
cout<<"1.Modify Password"<<endl;
cout<<"2.Course Meassage"<<endl;
cout<<"3.Show Choose Course List"<<endl;
cout<<"4.Choose Course"<<endl;
cout<<"5.Select Grade"<<endl;
cout<<"6.Personal Information"<<endl;
cout<<"7.Exit"<<endl;
cout<<"***************"<<endl;
cout<<"Input: ";
cin>>a;
switch (a){
case 1:
user->modifyPasswd();
break;
case 2:
user->showCourse();
break;
case 3:
user->scanCourse();
break;
case 4:
size_t cid;
cout<<"Input Course Id:";
cin>>cid;
user->chooseCourse(cid);
break;
case 5:
user->showGrade();
break;
case 6:
user->personMessage();
break;
case 7:
user->save1();
user->save2();
user->save3();
user->save4();
return;
default:
break;
}
}
}
使用方式:首先管理员登陆,账户:admin 密码:123456
登陆成功进行操作,添加学生,默认开始学号为150101,设置密码后可在登陆界面进行学生登陆。
学生登陆,账户:【学号】 密码:【管理员时设置的密码】
以上是将多文件整合在一起的代码,建议使用多文件的完整源码。
完整源码:https://download.csdn.net/download/qq_35402412/10914066
Linux下使用make执行