高校教师在线答疑辅导系统
1 系统环境
1.1 软件环境
操作系统Windows 10,工具软件Dev C++, Visual Studio 2019
1.2 硬件环境
个人电脑(配置不低于:CPU为P4,主频1.6G,内存256M,硬盘40GB)
2 原项目基本内容
2.1 功能模块说明
主界面:选择1:输入姓名和密码,进入学生二级界面

1选课功能,可以选择当前有的课程;
2删课功能,可以删除已选的课;
3查看自己的所有选课;
4查看课程是否有老师留言;
5退出登录;
主界面:选择2:输入姓名和密码,进入老师二级界面

1开课;
2删课;
3查看自己所有课;
4添加留言;
5退出登录;
主界面:选择3:可以创建学生账号,教师账号

2.2 系统流程

3 扩充设计内容
3.1 功能模块及详细说明
功能说明:
创建老师账号时增加识别码验证功能
对于老师账号的创建,增加了验证系统,教师需要输入识别码:teacher_12138才能创建,增加安全性。
增加管理员账号功能
主界面:输入3838438进入管理员页面:

可以删除老师,学生的信息
详细说明:
类:
Course 类
变量:
long int id, string coursename, struct info message, int grossnum, int oddnum
函数:
Course( getid, getcoursename, getgrossnum)//创建课程
void set_oddnum(int newoddnum)//设置新的课余量,用于从文件读取时重新确定课余量
virtual void show_course()=0//显示课程
virtual void set_courseinfo()=0//课程信息写入文件
void add_message()//添加课程答疑辅导信息
virtual int get_type()=0//给选修还是必修
long int get_id()//获取id0
string get_coursename()//获取名称
int get_grossnum()//获取总人数
int get_oddnum()//获取剩余人数
BCourse 类//实现Course基类的纯虚函数
XCourse 类//实现Course基类的纯虚函数
Teacher 类
变量:
string name, string password, Course* courseadd[5], int addnow=0
函数:
Teacher( getname, getpassword)//录入账号密码
friend istream & operator >> ( istream &in, Teacher &teachernow)//重载输入运算符
void add_course( gettype, getid, getcoursename, getgrossnum)//添加课程
int delete_course( getid)//删除老师的courseadd中的课程指针
void search_course()//显示老师所有的课
string get_name()//获取名字
friend Void set_teacherinfo(Teacher *teachernow)//写入文件
Student 类//与Teacher类类似
Deal 类
变量:
Teacher **te, Student **st, Course **co
函数:
Void mt()//刷新并输出管理员系统标题
Void t()//刷新并输出课程系统标题
Void dot(int i)//退出过程中输出点来达到“加载中”的效果,i表示输出点的个数
Void rolling(string a)//登录成功后出现的加载进度条,a是进度条上方显示内容
函数:
Course *search_courseplus(long int getid)//通过ID检索课程并返回检索到的Course类对象的地址
void quicksort_array(Course **ccourselist,int low,int high)//快速排序
void show_allcourse()//显示所有课程
int read_courseinfo()//从文件读取课程信息
int read_teacherinfo()//从文件读取教师信息
int read_studentinfo()//从文件读取学生信息
int sortlist(Course *sortnow)//删除课程信息
int sortlist(Teacher *sortnow) //删除教师信息
int sortlist(Student *sortnow) //删除学生信息
void beforeover()//程序结束前保存各个信息到文件
全局变量:
Course *courselist[50]={NULL}//存所有课程类对象的地址
int courselistnow=0//表示当前程序内有多少门课
Teacher *teacherlist[50]={NULL}//存所有教师类对象的地址
int teacherlistnow=0//表示当前程序内有多少教师
Student *studentlist[50]={NULL}//存所有学生类对象的地址
int studentlistnow=0//表示当前程序内有多少学生
bool isreadcourse=false//确定课程文件是否读取
bool isreadteacher=false//确定教师文件是否读取
bool isreadstudent=false//确定学生文件是否读取
3.2 系统流程
4 参考文献
CSDN:C++ 获取当前时间,并转换成string类型
网址:https://blog.csdn.net/g_66_hero/article/details/97487543
CSDN: 图解快速排序(C++实现)
网址:https://blog.csdn.net/qq_28584889/article/details/88136498
5 测试用文件下载
https://files.cnblogs.com/files/blogs/669017/Week1%E6%B5%8B%E8%AF%95%E6%96%87%E4%BB%B6.zip
6 源代码
#include <iostream> #include <cstring> #include <ctime> #include <windows.h> #include<vector> #include<map> #include <fstream> using namespace std; /* 所有类名请首字母大写 所有函数名请小写,函数名结构 动词_名词() 所有变量名请小写 coursetype=1 为必修 coursetype=2 为选修 如果信息显示乱码,请将文件的编码方式改为ANSI */ typedef struct info { string timenow; string inform; } info; //Course类 class Course{ protected: long int id;//课程ID string coursename;//课程名称 info message;//课程辅导信息 int grossnum;//课程总容量 int oddnum;//课程剩余容量 int coursetype; public: Course();//容错构造 Course(long int,string,int);//创建课程 void set_oddnum(int); void add_message();//添加课程消息 long int get_id();//获取课程ID string get_coursename();//获取课程名称 int get_grossnum();//获取总容量 int get_oddnum();//获取剩余容量 virtual int get_type()=0;//获取课程为选修还是必修 virtual void show_course()=0;//显示课程信息 void show_message(); //显示教师留言 virtual void set_courseinfo()=0;//将课程信息写入文件 }; //BCourse类 class BCourse:public Course{ protected: int coursetype; public: BCourse(); BCourse(long int,string,int); friend istream & operator >> ( istream &in, BCourse &coursenow); void show_course(); void set_courseinfo(); int get_type(); }; //XCourse类 class XCourse:public Course{ protected: int coursetype; public: XCourse(); XCourse(long int,string,int); friend istream & operator >> ( istream &in, XCourse &coursenow); void show_course(); void set_courseinfo(); int get_type(); }; //Teacher类 class Teacher{ protected: string name; string password; public: Course *courseadd[5]; int addnow; Teacher(); Teacher( string getname,string getpassword); friend istream & operator >> ( istream &in, Teacher &teachernow); void add_course( int gettype,long int getid,string getcoursename,int getgrossnum); int delete_course(long int getid);//返回1为成功,0为失败 void search_course(); string get_name(); string get_password(); friend void set_teacherinfo(Teacher *); }; //Student类 class Student{ protected: string name; string password; public: Course *courseadd[23]; int addnow; Student(); Student(string getname,string getpassword); friend istream & operator >> ( istream &in, Student &studentnow); void select_course(Course *select); int unselect_course(long int courseid); int unselect_course(); void search_course(); string get_name(); string get_password(); friend void set_studentinfo(Student *studentnow); }; //全局变量 Course *courselist[50]={NULL}; int courselistnow=0; Teacher *teacherlist[50]={NULL}; int teacherlistnow=0; Student *studentlist[50]={NULL}; int studentlistnow=0; bool isreadcourse=false; bool isreadteacher=false; bool isreadstudent=false; void t(); void rolling(string); //函数实现 Course *search_courseplus(long int getid)//通过ID检索课程 { int i; long int nowid=getid; for(i=0;i<courselistnow;i++) { if(courselist[i]->get_id()==nowid) return courselist[i]; } return NULL; } void quicksort_array(Course **ccourselist,int low,int high)//快速排序 { if(low<high) { int i=low,j=high; Course **p=ccourselist; long int key=p[i]->get_id(); Course *keyaddress=p[i]; int still; for(;i<j;) { while(j>low&&i<j&&p[j]->get_id()>=key) {j--;} if(i<j) p[i]=p[j]; while(i<high&&i<j&&p[i]->get_id()<=key) {i++;} if(i<j) p[j]=p[i]; } p[i]=keyaddress; still=i; quicksort_array(ccourselist,low,still-1); quicksort_array(ccourselist,still+1,high); } } void show_allcourse()//显示所有课程 { int i; if(courselistnow==0) cout<<"\n\t\t\t\t 当前尚没有老师添加课程……\n"; else { quicksort_array(courselist,0,courselistnow-1); for(i=0;i<courselistnow;i++) { if(courselist[i]->get_type()==1) cout<<"\n\t\t 课程ID:"<<courselist[i]->get_id()<<" 课程名称:"<<courselist[i]->get_coursename()<<" 课程类型:必修"<<" 课余量:"<<courselist[i]->get_oddnum()<<"\n"; else cout<<"\n\t\t 课程ID:"<<courselist[i]->get_id()<<" 课程名称:"<<courselist[i]->get_coursename()<<" 课程类型:选修"<<" 课余量:"<<courselist[i]->get_oddnum()<<"\n"; } } } int read_courseinfo()//从文件读取 { ifstream fin("courseinfo.dat", ios::in); if (!fin) return 0; isreadcourse = true; //写入模式 int gettype; long int getid; string getcoursename; int getgrossnum; int getoddnum; for (; fin.eof() == 0;) { fin >> gettype; switch (gettype) { case 1: fin>> getid>>getcoursename>>getgrossnum>>getoddnum; courselist[courselistnow++]=new BCourse(getid,getcoursename,getoddnum); courselist[courselistnow-1]->set_oddnum(getoddnum); break; case 2: fin>> getid>>getcoursename>>getgrossnum>>getoddnum; courselist[courselistnow++]=new XCourse(getid,getcoursename,getoddnum); courselist[courselistnow-1]->set_oddnum(getoddnum); break; default: cout<<"\n\t\t\t\t 读取courseinfo.dat文件时出错……\n"; system("pause"); exit(1); } } fin.close(); isreadcourse = false; return 1; } int read_teacherinfo() { int i; ifstream fin("teacherinfo.dat", ios::in); if (!fin) return 0; isreadteacher = true; //写入模式 string getname; string getpassword; long int getid[5]; for (; fin.eof() == 0;) { fin>>getname>>getpassword; for(i=0;i<5;i++) fin>>getid[i]; teacherlist[teacherlistnow++]=new Teacher(getname,getpassword); for(i=0;i<5;i++) { if(getid[i]!=0) teacherlist[teacherlistnow-1]->courseadd[teacherlist[teacherlistnow-1]->addnow++]=search_courseplus(getid[i]); else break; } } fin.close(); isreadteacher = false; return 1; } int read_studentinfo() { int i; ifstream fin("studentinfo.dat", ios::in); if (!fin) return 0; isreadstudent = true; //写入模式 string getname; string getpassword; long int getid[23]; for (; fin.eof() == 0;) { fin>>getname>>getpassword; for(i=0;i<23;i++) fin>>getid[i]; studentlist[studentlistnow++]=new Student(getname,getpassword); for(i=0;i<23;i++) { if(getid[i]!=0) studentlist[studentlistnow-1]->courseadd[studentlist[studentlistnow-1]->addnow++]=search_courseplus(getid[i]); else break; } } fin.close(); isreadstudent = false; return 1; } int sortlist(Course *sortnow)//删除并排序,记得对int进行操作,传入的值是当前要删除的地址 { Course *delnow=sortnow; int i,k,j; long int delid; for(i=0;courselist[i]!=NULL&&i<50;i++) { if(courselist[i]==delnow) { delid=courselist[i]->get_id(); for(j=0;j<studentlistnow;j++) studentlist[j]->unselect_course(delid); if(i==49) { courselist[i]=NULL; courselistnow-=1; } else { for(j=i+1;j<50;j++) courselist[j-1]=courselist[j]; courselistnow-=1; courselist[49]=NULL; } return 1; } } return 0; } int sortlist(Teacher *sortnow)//可能没有用到的地方,用来删除老师的信息 { Teacher *delnow=sortnow; int i,j; for(i=0;teacherlist[i]!=NULL&&i<50;i++) { if(teacherlist[i]==delnow) { for(j=0;j<5;j++) sortlist(teacherlist[i]->courseadd[j]); if(i==49) { teacherlist[i]=NULL; teacherlistnow-=1; } else { for(j=i+1;j<50;j++) teacherlist[j-1]=teacherlist[j]; teacherlistnow-=1; teacherlist[49]=NULL; } return 1; } } return 0; } int sortlist(Student *sortnow)//同上 { Student *delnow=sortnow; int i,j; for(i=0;studentlist[i]!=NULL&&i<50;i++) { if(studentlist[i]==delnow) { for(j=0;j<studentlist[i]->addnow;j++) { studentlist[i]->unselect_course(); } if(i==49) { studentlist[i]=NULL; studentlistnow-=1; } else { for(j=i+1;j<50;j++) studentlist[j-1]=studentlist[j]; studentlistnow-=1; studentlist[49]=NULL; } return 1; } } return 0; } void beforeover() { int i; ofstream fout("courseinfo.dat", ios::trunc | ios::out); if (!fout) { cout << "\n\t\t\t\t Cannot open courseinfo.dat !\n"; system("pause"); exit(1); } fout.close(); ofstream ffout("teacherinfo.dat", ios::trunc | ios::out); if (!ffout) { cout << "\n\t\t\t\t Cannot open teacherinfo.dat !\n"; system("pause"); exit(1); } ffout.close(); ofstream fffout("studentinfo.dat", ios::trunc | ios::out); if (!fffout) { cout << "\n\t\t\t\t Cannot open studentinfo.dat !\n"; system("pause"); exit(1); } fffout.close(); for(i=0;i<courselistnow;i++) courselist[i]->set_courseinfo(); for(i=0;i<teacherlistnow;i++) set_teacherinfo(teacherlist[i]); for(i=0;i<studentlistnow;i++) set_studentinfo(studentlist[i]); } //Course类实现 Course::Course() { id=0; coursename=""; message.inform=""; message.timenow=""; grossnum=0; oddnum=0; } Course::Course(long int getid,string getcoursename,int getgrossnum) { id=getid; coursename=getcoursename; message.inform=""; message.timenow=""; grossnum=getgrossnum; oddnum=getgrossnum; } void Course::set_oddnum(int newoddnum) { oddnum=newoddnum; } void Course::add_message() { t(); message.inform=""; cout<<"\n\t\t\t\t请输入您要发送的留言(不要输入空格):"; cin>>message.inform; if(message.inform.empty()) { cout<<"\n\t\t\t\t\t 发送失败……"; Sleep(600); } else { cout<<"\n\t\t\t\t\t 发送成功!!"; Sleep(600); } time_t t;//时间 time(&t);//获取时间 struct tm*now = localtime(&t);//换算当前时区 message.timenow=asctime(now);//转换成string } void Course::show_message() { if(message.timenow=="") cout<<"\n\t\t 课程ID:"<<get_id()<<" 课程名称:"<<get_coursename()<<" 教师未留言……\n"; else cout<<"\n\t\t 课程ID:"<<get_id()<<" 课程名称:"<<get_coursename()<<" 教师留言时间:"<<message.timenow<<"\t\t 消息:"<<message.inform<<"\n\n"; } long int Course::get_id() { return id; } string Course::get_coursename() { return coursename; } int Course::get_grossnum() { return grossnum; } int Course::get_oddnum() { return oddnum; } //BCourse类实现 BCourse::BCourse(long int getid,string getcoursename,int getgrossnum):Course(getid,getcoursename,getgrossnum) { coursetype=1; if(!isreadcourse) set_courseinfo(); } BCourse::BCourse():Course() { coursetype=1; } istream&operator>>(istream &in,BCourse &coursenow) { coursenow.coursetype=1; in>>coursenow.id>>coursenow.coursename>>coursenow.grossnum; coursenow.message.inform=""; coursenow.message.timenow=""; coursenow.oddnum=coursenow.grossnum; courselist[courselistnow++]=&coursenow; if(!isreadcourse) coursenow.set_courseinfo(); return in; } void BCourse::show_course() { cout<<"\t\t 课程ID:"<<get_id()<<" 课程名称:"<<get_coursename()<<" 课程类型:必修"<<" 课余量:"<<get_oddnum()<<"\n"; } void BCourse::set_courseinfo() { ofstream fout("courseinfo.dat", ios::app | ios::out); if (!fout) { cout << "\n\t\t\t\t Cannot open courseinfo.dat !\n"; system("pause"); exit(1); } fout << '\n' << 1 << ' ' << id << ' ' << coursename << ' ' << grossnum << ' ' << oddnum; fout.close(); } int BCourse::get_type() { return coursetype; } //XCourse类实现 XCourse::XCourse(long int getid,string getcoursename,int getgrossnum):Course(getid,getcoursename,getgrossnum) { coursetype=2; if(!isreadcourse) set_courseinfo(); } XCourse::XCourse():Course() { coursetype=2; } istream&operator>>(istream &in,XCourse &coursenow) { coursenow.coursetype=2; in>>coursenow.id>>coursenow.coursename>>coursenow.grossnum; coursenow.message.inform=""; coursenow.message.timenow=""; coursenow.oddnum=coursenow.grossnum; courselist[courselistnow++]=&coursenow; if(!isreadcourse) coursenow.set_courseinfo(); return in; } void XCourse::show_course() { cout<<"\t\t 课程ID:"<<get_id()<<" 课程名称:"<<get_coursename()<<" 课程类型:选修"<<" 课余量:"<<get_oddnum()<<"\n"; } void XCourse::set_courseinfo() { ofstream fout("courseinfo.dat", ios::app | ios::out); if (!fout) { cout << "\n\t\t\t\t Cannot open courseinfo.dat !\n"; system("pause"); exit(1); } fout << '\n' << 2 << ' ' << id << ' ' << coursename << ' ' << grossnum << ' ' << oddnum; fout.close(); } int XCourse::get_type() { return coursetype; } //Teacher类实现 Teacher::Teacher( string getname,string getpassword) { int i; for(i=0;i<5;i++) courseadd[i]=NULL; addnow=0; name=getname; password=getpassword; } Teacher::Teacher() { int i; for(i=0;i<5;i++) courseadd[i]=NULL; addnow=0; name=""; password=""; } istream & operator >> ( istream &in, Teacher &teachernow) { int i; for(i=0;i<5;i++) teachernow.courseadd[i]=NULL; teachernow.addnow=0; in>>teachernow.name>>teachernow.password; teacherlist[teacherlistnow++]=&teachernow; return in; } void Teacher::add_course( int gettype,long int getid,string getcoursename,int getgrossnum) { int i=gettype; if(addnow>=5) { cout<<"\n\t\t\t 您可添加的课程数量已达上限!无法继续添加课程!\n"; Sleep(600); } else { switch (i) { case 1: courselist[courselistnow++]=new BCourse(getid,getcoursename,getgrossnum); courseadd[addnow++]=courselist[courselistnow-1]; break; case 2: courselist[courselistnow++]=new XCourse(getid,getcoursename,getgrossnum); courseadd[addnow++]=courselist[courselistnow-1]; break; default: cout<<"\n\t\t\t\t 添加课程时出现错误,课程添加失败!\n"; Sleep(600); system("pause"); break; } } } int Teacher::delete_course(long int getid) { int i,j; long int delid=getid; for(i=0;courseadd[i]!=NULL&&i<5;i++) { if(courseadd[i]->get_id()==delid) { sortlist(courseadd[i]); if(i==4) { courseadd[i]=NULL; addnow-=1; } else { for(j=i+1;j<5;j++) courseadd[j-1]=courseadd[j]; addnow-=1; courseadd[4]=NULL; } return 1; } } return 0; } void Teacher::search_course() { int i; if(addnow==0) cout<<"\n\t\t\t\t\t 您还未开设任何课程!\n"; else { quicksort_array(courseadd,0,addnow-1); cout<<"\t\t\t\t\t 您的课程信息:\n\n"; for(i=0;i<addnow;i++) { courseadd[i]->show_course(); cout<<"\n"; } } } string Teacher::get_password() { return password; } string Teacher::get_name() { return name; } void set_teacherinfo(Teacher *teachernow) { int i; ofstream fout("teacherinfo.dat", ios::app | ios::out); if (!fout) { cout << "\n\t\t\t\t Cannot open teacherinfo.dat !\n"; system("pause"); exit(1); } fout << '\n' << teachernow->get_name() << ' ' << teachernow->password ; for(i=0;i<5;i++) { if(teachernow->courseadd[i]!=NULL) fout<<' '<<teachernow->courseadd[i]->get_id(); else fout<<' '<<0; } fout.close(); } //Student类实现 Student::Student(string getname,string getpassword) { int i; for(i=0;i<23;i++) courseadd[i]=NULL; addnow=0; name=getname; password=getpassword; } Student::Student() { int i; for(i=0;i<23;i++) courseadd[i]=NULL; addnow=0; name=""; password=""; } istream & operator >> ( istream &in, Student &studentnow) { int i; for(i=0;i<23;i++) studentnow.courseadd[i]=NULL; studentnow.addnow=0; in>>studentnow.name>>studentnow.password; studentlist[studentlistnow++]=&studentnow; return in; } void Student::select_course(Course *select) { int i,k=0; Course *p=select; for(i=0;i<addnow;i++) { if(p==courseadd[i]) { k=1; break; } } if(p->get_oddnum()==0) cout<<"\n\t\t\t\t\t选择失败,课余量不足!"; else if(addnow>=23) cout<<"\n\t\t\t 您的选课数已达上限,无法继续选择!"; else if(k) cout<<"\n\t\t\t\t您已经选择了此门课程,请不要重复选择!"; else { courseadd[addnow++]=p; p->set_oddnum(p->get_oddnum()-1); cout<<"\n\t\t\t\t\t 选择成功!!"; } Sleep(600); } int Student::unselect_course(long int courseid) { int i,j; long int delid=courseid; for(i=0;courseadd[i]!=NULL&&i<23;i++) { if(courseadd[i]->get_id()==delid) { courseadd[i]->set_oddnum(courseadd[i]->get_oddnum()+1); if(i==22) { courseadd[i]=NULL; addnow-=1; } else { for(j=i+1;j<23;j++) courseadd[j-1]=courseadd[j]; addnow-=1; courseadd[22]=NULL; } return 1; } } return 0; } int Student::unselect_course() { int i; for(i=0;i<addnow;i++) { courseadd[i]->set_oddnum(courseadd[i]->get_oddnum()+1); courseadd[i]=NULL; } return 1; } void Student::search_course() { t(); int i; if(addnow==0) cout<<"\n\t\t\t\t\t 您还未选择任何课程!\n"; else { quicksort_array(courseadd,0,addnow-1); cout<<"\t\t\t\t\t 您选择的课程信息:\n\n"; for(i=0;i<addnow;i++) { courseadd[i]->show_course(); cout<<"\n"; } } } string Student::get_name() { return name; } string Student::get_password() { return password; } void set_studentinfo(Student *studentnow) { int i; ofstream fout("studentinfo.dat", ios::app | ios::out); if (!fout) { cout << "\n\t\t\t\t Cannot open studentinfo.dat !\n"; system("pause"); exit(1); } fout << '\n' << studentnow->get_name() << ' ' << studentnow->password ; for(i=0;i<23;i++) { if(studentnow->courseadd[i]!=NULL) fout<<' '<<studentnow->courseadd[i]->get_id(); else fout<<' '<<0; } fout.close(); } void t()//title func { system("CLS"); cout<<"-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-\n"<<endl; cout<<"\t\t\t\t 欢迎进入高校教师在线答疑辅导系统 \n"<<endl; cout<<"-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-\n"<<endl; } void mt()//title func { system("CLS"); cout<<"-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-\n"<<endl; cout<<"\t\t\t\t 高校教师在线答疑辅导系统管理模式 \n"<<endl; cout<<"-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-\n"<<endl; } void dot(int i)//点型加载 { int dot; for(dot=0;dot<i;dot++) { cout<<"."; Sleep(260); } } void rolling(string a)//进度条式加载 { int dot,i,j; for(dot=0;dot<101;dot+=4) { t(); cout<<a<<endl; i=dot/2.5; cout<<"\t\t\t "<<dot<<"% |"; for(j=0;j<i;j++)cout<<"-"; cout<<">"; for(j=0;j<39-i;j++)cout<<"-"; cout<<"|"; } } /* 记得做老师创建课程的ID查重 老师,学生 的信息在老师退出登录那一步写入文件 课程信息在创建时写入 */ /* te=teacher st=student co=course 判断用flag命名使用fxxxxx方式命名 技术用i,j命名使用xxxxxi,xxxxxj方式命名,xxxxx为所属功能区英文缩写 una=user name nps=user password 为避免编译器对变量作用域的差异,switch的case都加上括号 */ class deal { private: Teacher **te; Student **st; Course **co; public: deal(Teacher **teacherlist,Student **studentlist,Course **courselist) { te=teacherlist;st=studentlist;co=courselist; } void startsystem() { string una,ups; bool steven=true; int flag=0,flagee=0; do { system("color 71"); t(); cout<<"\t\t\t\t\t 请选择用户\n"<<endl; cout<<"\t\t\t\t\t 1 我是学生\n"<<endl; cout<<"\t\t\t\t\t 2 我是老师\n"<<endl; cout<<"\t\t\t\t\t 3 注册新账号\n"<<endl; cout<<"\t\t\t\t\t 4 直接退出系统\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>flag; switch(flag) { case 1://学生系统 { int sti; t(); cout<<"\n\t\t\t\t\t 学生姓名:"; cin>>una; cout<<"\n\t\t\t\t\t 密码:"; cin>>ups; for(sti=0;sti<studentlistnow;sti++) { if(una==(*(st+sti))->get_name()&&ups==(*(st+sti))->get_password()) break; else if(una==(*(st+sti))->get_name()) {flagee=1;continue;} else continue; } if(sti==studentlistnow) { if(flagee) { t(); cout<<"\t\t\t\t 密码错误,请重新输入..."; Sleep(1000); flagee=0; } else { t(); cout<<"\t\t\t\t 未查找到该用户,请重新输入..."; Sleep(1000); } break; } else { t(); rolling("\t\t\t\t\t 登录成功,加载中...\n"); bool steve=true; do { t(); cout<<"\t\t\t\t\t你好,"<<una<<"同学,请选择\n"<<endl; cout<<"\t\t\t\t\t 1 添加选课\n"<<endl; cout<<"\t\t\t\t\t 2 删除选课\n"<<endl; cout<<"\t\t\t\t\t 3 查看已有课程\n"<<endl; cout<<"\t\t\t\t\t 4 查看课程答疑信息\n"<<endl; cout<<"\t\t\t\t\t 5 重新登录\n"<<endl; cout<<"\t\t\t\t\t 6 直接退出系统\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>flag; switch(flag) { case 1://学生添加课程 { bool sac=true; do { t(); cout<<"\t\t\t\t\t 当前所有课程信息:"<<endl; show_allcourse(); Course *select=NULL; cout<<"\n\t\t\t\t请输入你要添加的课程ID,或输入1返回"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"; long int fsac; cin>>fsac; if(fsac==1)sac=false; else { select=search_courseplus(fsac); if(select==NULL) { cout<<"\n\t\t\t\t\t 没有此课程!"; Sleep(1000); } else { (*(st+sti))->select_course(select); } } }while(sac); } break; case 2://学生删除课程 { bool sdc=true; do { (*(st+sti))->search_course(); cout<<"\n\t\t\t\t请输入你要删除的课程ID,或输入1返回"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"; int fsdc; cin>>fsdc; if(fsdc==1)sdc=false; else { if((*(st+sti))->unselect_course(fsdc)==1) { cout<<"\n\t\t\t\t\t 删除成功!!"; } else { cout<<"\n\t\t\t\t\t 删除失败,请重试!"; } Sleep(600); } }while(sdc); } break; case 3://学生查看已有课程 { bool ssc=true; do { (*(st+sti))->search_course(); cout<<"\n\t\t\t\t\t 输入1返回\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; int fssc=0; cin>>fssc; if(fssc==1)ssc=false; else { cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); } }while(ssc); } break; case 4://学生查看辅导信息 { bool sscm=true; do { t(); int sscmi; if((*(st+sti))->addnow==0) cout<<"\n\t\t\t\t\t 您还未选择任何课程!\n"; else { cout<<"\t\t\t\t\t 您选择的课程信息:\n\n"; for(sscmi=0;sscmi<(*(st+sti))->addnow;sscmi++)(*(st+sti))->courseadd[sscmi]->show_message(); } cout<<"\n\t\t\t\t\t 输入1返回\n"; cout<<"\n\t\t\t\t\t 请输入:"; int fsscm=0; cin>>fsscm; if(fsscm==1)sscm=false; else cout<<"\n\t\t\t\t\t 输入有误!"<<endl; Sleep(600); }while(sscm); } break; case 5://返回主界面 { t(); cout<<"\t\t\t\t 退出中,请稍后."; dot(5); steve=false; } break; case 6://直接退出系统 { t(); cout<<"\t\t\t\t 正在保存."; dot(5); t(); cout<<"\t\t\t\t 保存成功"; Sleep(300); t(); steve=false; steven=false; } break; default: cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); break; } }while(steve); } } break; case 2://老师系统 { int tei; t(); cout<<"\n\t\t\t\t\t 教师姓名:"; cin>>una; cout<<"\n\t\t\t\t\t 密码:"; cin>>ups; for(tei=0;tei<teacherlistnow;tei++) { if(una==(*(te+tei))->get_name()&&ups==(*(te+tei))->get_password()) break; else if(una==(*(te+tei))->get_name()) {flagee=1;continue;} else continue; } if(tei==teacherlistnow) { if(flagee) { t(); cout<<"\t\t\t\t 密码错误,请重新输入..."; Sleep(1000); flagee=0; } else { t(); cout<<"\t\t\t\t 未查找到该用户,请重新输入..."; Sleep(1000); } break; } else { t(); rolling("\t\t\t\t\t 登录成功,加载中...\n"); bool steve=true; do { t(); cout<<"\t\t\t\t\t您好,"<<una<<"老师,请选择\n"<<endl; cout<<"\t\t\t\t\t 1 开设新课程\n"<<endl; cout<<"\t\t\t\t\t 2 关闭课程\n"<<endl; cout<<"\t\t\t\t\t 3 查看已开课程\n"<<endl; cout<<"\t\t\t\t\t 4 添加/修改课程答疑信息\n"<<endl; cout<<"\t\t\t\t\t 5 重新登录\n"<<endl; cout<<"\t\t\t\t\t 6 直接退出系统\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>flag; switch(flag) { case 1://老师加课 { int gettype; long int getid; string getcoursename; int getgrossnum; bool tac=true; do { bool tact=true; do { t(); cout<<"\t\t\t\t\t 请选择类型\n"<<endl; cout<<"\t\t\t\t\t 1 必修\n"<<endl; cout<<"\t\t\t\t\t 2 选修\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>gettype; if(gettype==1||gettype==2) { tact=false; } else { cout<<"\t\t\t\t 选择错误,请重新输入..."; Sleep(600); } }while(tact); bool tacid=true; do { t(); cout<<"\t\t\t\t\t 课程类型:"; if(gettype==1)cout<<"必修"<<endl; else cout<<"选修"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"; cin>>getid; int coi; for(coi=0;coi<courselistnow;coi++) { if(getid==(*(co+coi))->get_id())break; } if(coi!=courselistnow) { cout<<"\n\t\t\t\t\t ID已被使用"; Sleep(600); } else { tacid=false; } }while(tacid); t(); cout<<"\t\t\t\t\t 课程类型:"; if(gettype==1)cout<<"必修"<<endl; else cout<<"选修"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"<<getid<<endl; cout<<"\n\t\t\t\t\t 课程名:"; cin>>getcoursename; t(); cout<<"\t\t\t\t\t 课程类型:"; if(gettype==1)cout<<"必修"<<endl; else cout<<"选修"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"<<getid<<endl; cout<<"\n\t\t\t\t\t 课程名:"<<getcoursename<<endl; cout<<"\n\t\t\t\t\t 总课余量:"; cin>>getgrossnum; bool tacc=true; do { t(); cout<<"\t\t\t\t\t 课程类型:"; if(gettype==1)cout<<"必修"<<endl; else cout<<"选修"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"<<getid<<endl; cout<<"\n\t\t\t\t\t 课程名:"<<getcoursename<<endl; cout<<"\n\t\t\t\t\t 总课余量:"<<getgrossnum<<endl; cout<<"\n\t\t\t 请选择: 1 确认 2 重新输入 3 不添加直接退出"<<endl; cout<<"\t\t\t\t\t 请输入:"; int ftacc=0; cin>>ftacc; switch(ftacc) { case 1: (*(te+tei))->add_course(gettype,getid,getcoursename,getgrossnum); tacc=false; tac=false; break; case 2: tacc=false; break; case 3: tacc=false; tac=false; break; default: cout<<"\n\t\t\t\t\t 输入有误!"; break; } }while(tacc); }while(tac); } break; case 2://老师删课 { t(); bool tdc=true; do { (*(te+tei))->search_course(); cout<<"\n\t\t\t\t请输入你要删除的课程ID,或输入1返回"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"; int ftdc; cin>>ftdc; if(ftdc==1)tdc=false; else { if((*(te+tei))->delete_course(ftdc)==1) { cout<<"\n\t\t\t\t\t 删除成功!!"; tdc=false; } else { cout<<"\n\t\t\t\t\t 删除失败,请重试!"; } Sleep(600); } }while(tdc); } break; case 3://老师查看已有课程 { bool tsc=true; do { t(); (*(te+tei))->search_course(); cout<<"\n\t\t\t\t\t 输入1返回\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; int ftsc=0; cin>>ftsc; if(ftsc==1)tsc=false; else cout<<"\n\t\t\t\t\t 输入有误!"; }while(tsc); } break; case 4://老师添加/修改课程答疑信息 { bool tscm=true; do { t(); int tscmi; if((*(te+tei))->addnow==0) cout<<"\n\t\t\t\t\t 您还未开设任何课程!\n"; else { cout<<"\t\t\t\t\t 您选择的课程信息:\n\n"; for(tscmi=0;tscmi<(*(te+tei))->addnow;tscmi++)(*(te+tei))->courseadd[tscmi]->show_message(); } cout<<"\n\t\t\t 请输入你要修改答疑信息的课程ID,或输入1返回"<<endl; cout<<"\n\t\t\t\t\t 课程ID:"; int ftscm=0; cin>>ftscm; int tcoi; for(tcoi=0;tcoi<(*(te+tei))->addnow;tcoi++) { if(ftscm==(*(te+tei))->courseadd[tcoi]->get_id()) { (*(te+tei))->courseadd[tcoi]->add_message(); break; } } if(tcoi=(*(te+tei))->addnow&&ftscm==1)tscm=false; }while(tscm); } break; case 5://返回主界面 { t(); cout<<"\t\t\t\t 退出中,请稍后."; dot(5); steve=false; } break; case 6://直接退出系统 { t(); cout<<"\t\t\t\t 正在保存."; dot(5); t(); cout<<"\t\t\t\t 保存成功"; Sleep(300); t(); steve=false; steven=false; } break; default: cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); break; } }while(steve); } } break; case 3://注册新用户 { bool steve=true; do { int regtype; string reguna,regups,regups1; t(); cout<<"\t\t\t\t\t 您好,请选择\n"<<endl; cout<<"\t\t\t\t\t 1 创建学生账号\n"<<endl; cout<<"\t\t\t\t\t 2 创建老师账号\n"<<endl; cout<<"\t\t\t\t\t 3 返回\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>regtype; switch(regtype) { case 1://学生注册 { bool comfirm=true; do { int fregst; t(); cout<<"\n\t\t\t\t\t 学生姓名:"; cin>>reguna; cout<<"\n\t\t\t\t\t 密码:"; cin>>regups; t(); cout<<"\n\t\t\t\t\t 学生姓名:"<<reguna<<endl; cout<<"\n\t\t\t\t\t 确认密码:"; cin>>regups1; if(regups==regups1) { comfirm=false; bool regst=true; do { t(); cout<<"\n\t\t\t\t\t 学生姓名:"<<reguna<<endl; cout<<"\n\t\t\t\t\t 确认密码:"<<regups<<endl; cout<<"\n\t\t\t 请选择: 1 确认并创建 2 不创建,返回主菜单"<<endl; cout<<"\n\t\t\t\t\t 请输入:"; cin>>fregst; if(fregst==1) { studentlist[studentlistnow++]=new Student(reguna,regups); cout<<"\n\t\t\t\t\t 创建成功!"; Sleep(600); steve=false; regst=false; } else if(fregst==2) { steve=false; regst=false; } else { cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); } }while(regst); } else { cout<<"\n\t\t\t\t\t 两次密码不同!"; Sleep(600); } }while(comfirm); } break; case 2://教师注册 { t(); cout<<"\n\t\t\t\t\t 请输入教师识别码:"; string regte,trregte="teacher_12138"; cin>>regte; if(regte==trregte) { bool comfirm=true; do { int fregte; t(); cout<<"\n\t\t\t\t\t 教师姓名:"; cin>>reguna; cout<<"\n\t\t\t\t\t 密码:"; cin>>regups; t(); cout<<"\n\t\t\t\t\t 教师姓名:"<<reguna<<endl; cout<<"\n\t\t\t\t\t 确认密码:"; cin>>regups1; if(regups==regups1) { comfirm=false; bool regte=true; do { t(); cout<<"\n\t\t\t\t\t 教师姓名:"<<reguna<<endl; cout<<"\n\t\t\t\t\t 确认密码:"<<regups<<endl; cout<<"\n\t\t\t 请选择: 1 确认并创建 2 不创建,返回主菜单"<<endl; cout<<"\n\t\t\t\t\t 请输入:"; cin>>fregte; if(fregte==1) { teacherlist[teacherlistnow++]=new Teacher(reguna,regups); cout<<"\n\t\t\t\t\t 创建成功!"; Sleep(600); steve=false; regte=false; } else if(fregte==2) { steve=false; regte=false; } else { cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); } }while(regte); } else { cout<<"\n\t\t\t\t\t 两次密码不同!"; Sleep(600); } }while(comfirm); steve=false; } else { cout<<"\n\t\t\t\t 教师识别码错误,正在返回..."; Sleep(600); } } break; case 3: steve=false; break; default: cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); break; } }while(steve); } break; case 4://退出 steven=false; break; case 3838438://管理员账号 { system("color 8B"); string superna,supernat="xxxyh",superps,superpst="stevenxyh"; mt(); cout<<"\n\t\t\t\t\t 账号:"; cin>>superna; cout<<"\n\t\t\t\t\t 密码:"; cin>>superps; if(superna==supernat&&superps==superpst) { bool secrect=true; do { int ffsup; mt(); cout<<"\t\t\t\t\t亲爱的管理员xyh,您好\n"<<endl; cout<<"\t\t\t\t\t 1 删除老师账号\n"<<endl; cout<<"\t\t\t\t\t 2 删除学生账号\n"<<endl; cout<<"\t\t\t\t\t 3 返回主界面\n"<<endl; cout<<"\t\t\t\t\t 请输入:"; cin>>ffsup; switch(ffsup) { case 1://删除老师账号 { string deltena; int deltei,fdelte=1; mt(); cout<<"\n\t\t\t\t\t 教师姓名:"; cin>>deltena; for(deltei=0;deltei<teacherlistnow;deltei++) { if(deltena==teacherlist[deltei]->get_name()) { if(sortlist(teacherlist[deltei])); { cout<<"\n\t\t\t\t\t 删除成功!!"; Sleep(600); } fdelte=0; } } if(deltei==teacherlistnow&&fdelte) { cout<<"\n\t\t\t\t\t 无此老师!"; Sleep(600); } } break; case 2://删除学生账号 { string delstna; int delsti,fdelst=1; mt(); cout<<"\n\t\t\t\t\t 学生姓名:"; cin>>delstna; for(delsti=0;delsti<studentlistnow;delsti++) { if(delstna==studentlist[delsti]->get_name()) { if(sortlist(studentlist[delsti])); { cout<<"\n\t\t\t\t\t 删除成功!!"; Sleep(600); } fdelst=0; } } if(delsti==studentlistnow&&fdelst) { cout<<"\n\t\t\t\t\t 无此学生!"; Sleep(600); } } break; case 3: mt(); cout<<"\t\t\t\t 退出中,请稍后."; dot(4); secrect=false; break; default: cout<<"\n\t\t\t\t\t 输入错误!"; break; } }while(secrect); } else cout<<"\n\t\t\t\t\t 错误,正在返回."; dot(3); } break; default: cout<<"\n\t\t\t\t\t 输入有误!"; Sleep(600); break; } }while(steven); } }; int main() { read_courseinfo(); read_teacherinfo(); read_studentinfo(); deal start(teacherlist,studentlist,courselist); start.startsystem(); beforeover(); return 0; }
https://blog.csdn.net/qq_28584889/article/details/88136498
浙公网安备 33010602011771号