- //用于打印边框
- void PrintEgde(){puts("**********************************************");}
-
- //课程类
- class Course
- {
- public:
- ?? ?int CourseId;//编号
- ?? ?string cousreName;//名称
- ?? ?int credit;//学分
- ?? ?bool HaveSet=0;//判断该门课是否被老师设置,没有设置(0)则不能被学生选择
-
- ?? ?Course(){}//默认构造函数,要记得写
- ?? ?//自定义的含参构造函数
- ?? ?void SetCourse(int a,string b,int c){CourseId=a;cousreName=b;credit=c;}
- };
- //AllList 存储所有课程的信息
- Course AllList[200];
- int C_totalnum;//代表课程的总数
-
- class Person
- {
- public:
- ?? ?string name;//姓名
- ?? ?int age;//年龄
- ?? ?//构造
- ?? ?Person(){}
- ?? ?void SetPerson(string a,int b){name=a;age=b;}
- };
-
- class teacher:public Person
- {
- public:
- ?? ?int teacherId;//老师的编号
- ?? ?int Len;//需要教授的课程数量
- ?? ?int TeachCourse[10];//所授课程ID编号
- ?? ?int now_have=0;//已设置课程数量
- ?? ?teacher(){}//默认构造函数
-
- ?? ?void Set_Teacher(string Name,int Age,int ID,int n)//构造
- ?? ?{
- ?? ??? ?name=Name;
- ?? ??? ?age=Age;
- ?? ??? ?teacherId=ID;
- ?? ??? ?Len=n;
- ?? ?}
-
- ?? ?void teach(){cout<<"I am a teacher,I teach my student\n";}
-
- ?? ?//删除已经设置的课程
- ?? ?void DeleteC(int CID)
- ?? ?{
- ?? ??? ?system("cls");//用于清空cmd窗口
-
- ?? ??? ?//如果当前没有课程可以删除就直接返回
- ?? ??? ?if(now_have==0)?
- ?? ??? ?{
- ?? ??? ??? ?puts("You have set no course!");
- ?? ??? ??? ?_sleep(500);//用于暂停0.5s
- ?? ??? ??? ?return;
- ?? ??? ?}
-
- ?? ??? ?//CAN用于判断是否能取消设置某一门课(即要取消的课是否已被设置)
- ?? ??? ?int CAN=0;
- ?? ??? ?for(int i=1;i<=now_have;i++)
- ?? ??? ?{
- ?? ??? ??? ?if(TeachCourse[i]==CID)
- ?? ??? ??? ?{
- ?? ??? ??? ??? ?//可以取消,那么把原本设置好的最后一门课放到要取消的课的位置上
- ?? ??? ??? ??? ?TeachCourse[i]=TeachCourse[now_have];
- ?? ??? ??? ??? ?now_have--;
- ?? ??? ??? ??? ?CAN=1;
- ?? ??? ??? ??? ?break;
- ?? ??? ??? ?}
- ?? ??? ?}
- ?? ??? ?if(CAN==1) puts("You successfully deleted the course!");
- ?? ??? ?else puts("There is no such course!");//不能取消设置的情况
- ?? ??? ?_sleep(800);
- ?? ?}
-
- ?? ?void PrintNowteach()//输出已设置课程
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?puts(" ? ? ? ? ? ? <M y C o u r s e> ? ? ? ? ? ? ?\n");
- ?? ??? ?PrintEgde();
-
- ?? ??? ?//如果没有课
- ?? ??? ?if(now_have==0) puts("You have no course now!");
- ?? ??? ?//如果有课
- ?? ??? ?for(int i=1;i<=now_have;i++)
- ?? ??? ?{
- ?? ??? ??? ?int x=TeachCourse[i];//取出课程编号方便下一行书写
- ?? ??? ??? ?printf("*%5d ? ?%-29s %4d *\n",AllList[x].CourseId,AllList[x].cousreName.c_str(),AllList[x].credit);
- ?? ??? ?}
- ?? ??? ?PrintEgde();putchar('\n');
- ?? ??? ?printf({"You can input The CourseID to delete:(or -1 to return)"});
-
- ?? ??? ?int flag=0;scanf("%d",&flag);
- ?? ??? ?if(flag==-1) return;//返回上一级系统
- ?? ??? ?else if(flag>0 && flag<=C_totalnum)//如果输入的数字在限定范围之内
- ?? ??? ?{
- ?? ??? ??? ?DeleteC(flag);//取消设置
- ?? ??? ??? ?PrintNowteach();//并重置该页面
- ?? ??? ?}
- ?? ??? ?else//如果输入的数字不在预设范围内,进行报错提示
- ?? ??? ?{
- ?? ??? ??? ?WrongW();
- ?? ??? ??? ?PrintNowteach();
- ?? ??? ?}
- ?? ?}
- ?? ?void setCourse(int CourseID)
- ?? ?//在已有课程中选择属于自己Teach的课程编号
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?//如果已经选满了
- ?? ??? ?if(Len-now_have<=0)?
- ?? ??? ?{
- ?? ??? ??? ?puts("You have already set all of your courses!");
- ?? ??? ??? ?_sleep(800);return;
- ?? ??? ?}
- ?? ??? ?if(AllList[CourseID].HaveSet!=0)//如果已经被别人设置了
- ?? ??? ??? ?puts("This course has been set!");
- ?? ??? ?else
- ?? ??? ?{
- ?? ??? ??? ?puts("You successfully set the course!");
- ?? ??? ??? ?TeachCourse[++now_have]=CourseID;
- ?? ??? ??? ?AllList[CourseID].HaveSet=1;
- ?? ??? ?}
- ?? ??? ?_sleep(800);
- ?? ?}
- };
- teacher A_T[200];//所有老师的信息
- int T_totalnum;
-
- class student:public Person
- {
- public:
- ?? ?long long number;//学号
- ?? ?int courseCount=0;//已选课程数目
- ?? ?int mycourse[20];//已选课程的课程编号
- ?? ?int LeastNum;//至少选择课程数目
- ?? ?string key;//密码
-
- ?? ?student(){}
- ?? ?//此处age表示入学年份,如2021,2020
- ?? ?void Set_student(string Name,int Age,long long Num,int n,string Key)
- ?? ?{
- ?? ??? ?name=Name;
- ?? ??? ?age=Age;
- ?? ??? ?number=Num;//学号
- ?? ??? ?LeastNum=n;
- ?? ??? ?key=Key;
- ?? ??? ?memset(mycourse,0,sizeof(mycourse));//初始化已选课程数组
- ?? ?}
-
- ?? ?void selectCourse(int CourseID)
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?//用于判断自己是否已经选过这门课程
- ?? ??? ?bool HaveChoose = 0;
- ?? ??? ?for(int i=1;i<=courseCount;i++)
- ?? ??? ??? ?if(CourseID==mycourse[i])?
- ?? ??? ??? ??? ?HaveChoose=1;
-
- ?? ??? ?//如果该门课已经被老师设置并且自己没有选过
- ?? ??? ?if(AllList[CourseID].HaveSet && HaveChoose==0)
- ?? ??? ?{
- ?? ??? ??? ?puts("You successfully stlect the course!");
- ?? ??? ??? ?mycourse[++courseCount]=CourseID;
- ?? ??? ?}
- ?? ??? ?//老师没有设置课程
- ?? ??? ?else if(AllList[CourseID].HaveSet==0) puts("There is no such course!");
- ?? ??? ?//自己已经选过
- ?? ??? ?else if(HaveChoose==1) puts("This course you have chosen!");
- ?? ??? ?_sleep(800);
- ?? ?}
-
- ?? ?void Delete(int CID)
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?if(courseCount==0) return;
- ?? ??? ?int CAN;
- ?? ??? ?for(int i=1;i<=courseCount;i++)
- ?? ??? ?{
- ?? ??? ??? ?if(mycourse[i]==CID)
- ?? ??? ??? ?{
- ?? ??? ??? ??? ?mycourse[i]=mycourse[courseCount];
- ?? ??? ??? ??? ?courseCount--;
- ?? ??? ??? ??? ?CAN=1;
- ?? ??? ??? ??? ?break;
- ?? ??? ??? ?}
- ?? ??? ?}
- ?? ??? ?if(CAN==1) puts("You successfully deleted the course!");
- ?? ??? ?else puts("There is no such course!");
- ?? ??? ?_sleep(800);
- ?? ?}
-
- ?? ?//判断是否满足学校要求
- ?? ?void judge()
- ?? ?{
- ?? ??? ?if(courseCount>=LeastNum) //比较已选课程和要求课程数量
- ?? ??? ??? ?puts("You can complete the credits of this semester");
- ?? ??? ?else?
- ?? ??? ??? ?printf("You need to choose %d more courses\n",LeastNum-courseCount);
- ?? ?}
- };
- student A_S[2000];//所有学生的信息
- int S_totalnum;//学生的总数
-
- class TeachingAssistant:public teacher,public student
- {
- public:
- ?? ?void teach(){puts("I am a teaching assistant,I help my teacher teach his students");}
- ?? ?TeachingAssistant(){}
-
- ?? ?void selectCourse(int CourseID)
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?if(AllList[CourseID].HaveSet)
- ?? ??? ?{
- ?? ??? ??? ?puts("You successfully stlect the course!");
- ?? ??? ??? ?mycourse[++courseCount]=CourseID;
- ?? ??? ?}
- ?? ??? ?else puts("There is no such course!");
- ?? ??? ?_sleep(800);
- ?? ?}
-
- ?? ?void Delete(int CID)
- ?? ?{
- ?? ??? ?system("cls");
- ?? ??? ?if(courseCount==0) return;
- ?? ??? ?int CAN;
- ?? ??? ?for(int i=1;i<=courseCount;i++)
- ?? ??? ?{
- ?? ??? ??? ?if(mycourse[i]==CID)
- ?? ??? ??? ?{
- ?? ??? ??? ??? ?mycourse[i]=mycourse[courseCount];
- ?? ??? ??? ??? ?courseCount--;
- ?? ??? ??? ??? ?CAN=1;
- ?? ??? ??? ??? ?break;
- ?? ??? ??? ?}
- ?? ??? ?}
- ?? ??? ?if(CAN==1) puts("You successfully deleted the course!");
- ?? ??? ?else puts("There is no such course!");
- ?? ??? ?_sleep(800);
- ?? ?}
- };
- TeachingAssistant A_TA[2500];
-
- void Pre_course()
- {
- ?? ?//导入所有课程数据
- ?? ?int a,b;string c;
- ?? ?freopen("date.txt","r",stdin);
- ?? ?scanf("%d",&C_totalnum);
- ?? ?for(int i=1;i<=C_totalnum;i++)
- ?? ?{
- ?? ??? ?cin>>a>>c>>b;
- ?? ??? ?//输入编号,名称,学分
- ?? ??? ?AllList[i].SetCourse(a,c,b);
- ?? ?}
- }
-
- void Pre_teacher()
- {
- ?? ?//导入所有老师数据
- ?? ?int a,b,c;string d;
- ?? ?scanf("%d",&T_totalnum);
- ?? ?for(int i=1;i<=T_totalnum;i++)
- ?? ?{
- ?? ??? ?cin>>d>>a>>b>>c;
- ?? ??? ?//输入姓名,年龄,编号,应设置课程数量
- ?? ??? ?A_T[i].Set_Teacher(d,a,b,c);
- ?? ?}
- }
-
- void Pre_student()
- {
- ?? ?//导入所有学生数据
- ?? ?int a;long long b;string d,e;
- ?? ?scanf("%d",&S_totalnum);
- ?? ?for(int i=1;i<=S_totalnum;i++)
- ?? ?{
- ?? ??? ?//姓名 入学年份 学号 至少选课数统一为2
- ?? ??? ?cin>>d>>a>>b>>e;
- ?? ??? ?A_S[i].Set_student(d,a,b,2,e);
- ?? ??? ?A_TA[i].Set_student(d,a,b,2,e);
- ?? ?}
- }
-
- void Pre()
- //选课系统前置准备工作
- {
- ?? ?Pre_course();//导入课程数据
- ?? ?Pre_teacher();//导入老师数据
- ?? ?Pre_student();//导入学生数据
- }
-
- void WrongW()//报错提示
- {
- ?? ?system("cls");
- ?? ?puts("You entered the wrong one!");
- ?? ?_sleep(500);
- }
-
- void MyCourse(int AID,int who)
- {
- ?? ?system("cls");
- ?? ?puts(" ? ? ? ? ? ? <M y C o u r s e> ? ? ? ? ? ? ?\n");
- ?? ?PrintEgde();
- ?? ?if(who==0)//学生
- ?? ?{
- ?? ??? ?//没课的情况
- ?? ??? ?if(A_S[AID].courseCount==0) puts("You have no course now!");
- ?? ??? ?//有课的情况
- ?? ??? ?for(int i=1;i<=A_S[AID].courseCount;i++)
- ?? ??? ?{
- ?? ??? ??? ?int x=A_S[AID].mycourse[i];
- ?? ??? ??? ?printf("*%5d ? ?%-29s %4d *\n",AllList[x].CourseId,AllList[x].cousreName.c_str(),AllList[x].credit);
- ?? ??? ?}
- ?? ??? ?PrintEgde();putchar('\n');
- ?? ??? ?A_S[AID].judge();
- ?? ?}
- ?? ?else
- ?? ?{
- ?? ??? ?if(A_TA[AID].courseCount==0) puts("You have no course now!");
- ?? ??? ?for(int i=1;i<=A_TA[AID].courseCount;i++)
- ?? ??? ?{
- ?? ??? ??? ?int x=A_TA[AID].mycourse[i];
- ?? ??? ??? ?printf("*%5d ? ?%-29s %4d *\n",AllList[x].CourseId,AllList[x].cousreName.c_str(),AllList[x].credit);
- ?? ??? ?}
- ?? ??? ?PrintEgde();putchar('\n');
- ?? ?}
- ?? ?//是否进行退课操作
- ?? ?printf({"You can input The CourseID to delete:(or -1 to return)"});
- ?? ?int flag=0;scanf("%d",&flag);
- ?? ?if(flag==-1) SelectSytem(AID,who);
- ?? ?else if(flag>0 && flag<=C_totalnum)
- ?? ?{
- ?? ??? ?if(who==0) A_S[AID].Delete(flag);
- ?? ??? ?else A_TA[AID].Delete(flag);
- ?? ??? ?MyCourse(AID,who);
- ?? ?}
- ?? ?else {WrongW();MyCourse(AID,who);}
- }
-
- void PrintC(int who)
- //打印所有课程信息
- {
- ?? ?puts(" ? ? ? ? ? <Course Information> ? ? ? ? ? ? \n");
- ?? ?PrintEgde();
- ?? ?puts("*Course Id ? ? ? Name ? ? ? ? ? ? ? Credit ? *");
- ? ? PrintEgde();
- ?? ?if(who==1)//老师和助教
- ? ? ?? ?for(int i=1;i<=C_totalnum;i++)
- ?? ??? ??? ?printf("*%5d ? ?%-29s %4d *\n",AllList[i].CourseId,AllList[i].cousreName.c_str(),AllList[i].credit);
- ?? ?else//学生
- ?? ? ? ?for(int i=1;i<=C_totalnum;i++)
- ?? ??? ??? ?if(AllList[i].HaveSet)
- ?? ??? ??? ??? ?printf("*%5d ? ?%-29s %4d *\n",AllList[i].CourseId,AllList[i].cousreName.c_str(),AllList[i].credit);
- ?? ?PrintEgde();putchar('\n');
- }
-
- void SelectSytem(int AID,int who)
- //who 0 代表学生 1 代表助教
- {
- ?? ?system("cls");
- ?? ?//打印所有课程信息
- ?? ?PrintC(0);
- ?? ?//输出学生姓名 .c_str()的作用是将string类型的数据转成char类型,使得它可以用printf输出
- ?? ?printf("Student: %s .",A_S[AID].name.c_str());
- ?? ?if(who==0)?
- ?? ??? ?A_S[AID].judge();//学生
- ?? ?printf("Please enter the Course Id to select\nYou can input -1 to exit\nYou can input -2 to check Mycourse and delete course\nNow enter a number:");
- ?? ?int flag=0;scanf("%d",&flag);
- ?? ?if(flag==-1) BuildMainMenu();//返回上一级菜单
- ?? ?else if(flag==-2) MyCourse(AID,who);//查看已选课表
- ?? ?else if(flag>0 && flag<=C_totalnum)//数据在预设范围内,则选课
- ?? ?{
- ?? ??? ?if(who==0)//学生
- ?? ??? ??? ?A_S[AID].selectCourse(flag),SelectSytem(AID,who);
- ?? ??? ?else A_TA[AID].selectCourse(flag),SelectSytem(AID,who);//助教
- ?? ?}
- ?? ?else {WrongW();SelectSytem(AID,who);}//报错
- }
-
- void StudentSystem(int who)
- {
- ?? ?system("cls");
- ?? ?//切换到从控制台输入数据
- ?? ?freopen("CON","r",stdin);?
- ?? ?//接下来为登陆页面
-
- ?? ?puts("Please enter your student number and ?password\n");
- ?? ?PrintEgde();putchar('\n');
- ?? ?printf("Student number:");long long SN;//输入学号
- ?? ?scanf("%lld",&SN);
- ?? ?printf("Password: ? ? ?");
- ?? ?char Pas[20],Acs[20];scanf("%s",Pas);//输入密码
- ?? ?int AID;//在数据库中的序号
- ?? ?//在数据库中找到学号对应的正确密码
- ?? ?for(int i=1;i<=S_totalnum;i++)
- ?? ??? ?if(A_S[i].number==SN){strcpy(Acs,A_S[i].key.c_str());AID=i;break;}
- ?? ?int times=2;//输入密码的机会
- ?? ?while(strcmp(Acs,Pas)!=0 && times>0)
- ?? ?//看输入的密码与正确密码是否匹配,以及次数是否耗尽
- ?? ?{
- ?? ??? ?puts("Wrong Password!!!");
- ?? ??? ?printf("you have %d times to enter the correct password\n",times);
- ?? ??? ?times--;scanf("%s",Pas);
- ?? ?}
- ?? ?//次数耗尽推出系统
- ?? ?if(times==0)
- ?? ?{
- ?? ??? ?puts("I am sorry you can't enter our system!");
- ?? ??? ?_sleep(800);exit(0);
- ?? ?}
- ?? ?if(who==0) SelectSytem(AID,who);//学生
- ?? ?else SelectSytem(AID,1);//助教
- }
-
- //老师设置课程
- void Setcourse(int TID)
- {
- ?? ?system("cls");
- ?? ?printf("Welcome : %s\n",A_T[TID].name.c_str());
- ?? ?printf("You need to set %d courses\n\n",A_T[TID].Len-A_T[TID].now_have);
- ?? ?PrintC(1);
- ?? ?printf("Please enter the Course Id to set\nYou can input -1 to exit\nYou can input -2 to check Mycourse\nNow enter a number:");
- ?? ?int flag=0;scanf("%d",&flag);
- ?? ?if(flag==-1) BuildMainMenu();
- ?? ?else if(flag==-2) A_T[TID].PrintNowteach(),Setcourse(TID);//查看已设置的课程
- ?? ?else if(flag>0 && flag<=C_totalnum)//设置课程
- ?? ??? ?A_T[TID].setCourse(flag),Setcourse(TID);
- ?? ?else {WrongW();Setcourse(TID);}
- }
-
- void TeacherSystem()
- {
- ?? ?system("cls");
- ?? ?freopen("CON","r",stdin); //切换到从控制台输入数据
- ?? ?puts(" ? ? ? ? Welcome ?to ?Teacher ?system! ? ? ? ?");
- ?? ?PrintEgde();putchar('\n');
- ?? ?//输入教师编号以进入系统
- ?? ?printf("Please enter your Teacher Id:");
- ?? ?int TID;scanf("%d",&TID);
- ?? ?if(TID>0 && TID<=T_totalnum)
- ?? ??? ?Setcourse(TID);
- ?? ?else{
- ?? ??? ?WrongW();TeacherSystem();
- ?? ?}
- }
-
- void TASystem()
- {
- ?? ?//实际上助教系统可以看错和学生是一个系统的
- ?? ?StudentSystem(1);
- }
-
- //构建主菜单
- void BuildMainMenu()
- {
- ?? ?system("cls");
- ?? ?freopen("CON","r",stdin); //切换到从控制台输入数据
- ?? ?puts(" ? ? ?Welcome to course selection system! ? ? ");
- ?? ?PrintEgde();
- ?? ?puts("* ? ? ? ? 1.Student entrance ? ? ? ? ? ? ? ? *");
- ?? ?puts("* ? ? ? ? 2.Teacher entrance ? ? ? ? ? ? ? ? *");
- ?? ?puts("* ? ? ? ? 3.TeachingAssistant ? ? ? ? ? ? ? ?*");
- ?? ?puts("* ? ? ? ?-1.Exit this system ? ? ? ? ? ? ? ? *");
- ?? ?PrintEgde();putchar('\n');
- ?? ?printf("Please input 1,2,3 or -1 to enter this system:");
- ?? ?int flag=-1;scanf("%d",&flag);//进入子系统
- ?? ?if(flag==1) StudentSystem(0);
- ?? ?else if(flag==2) TeacherSystem();
- ?? ?else if(flag==3) TASystem();
- ?? ?else if(flag==-1) exit(0);
- ?? ?else
- ?? ?{
- ?? ??? ?WrongW();
- ?? ??? ?BuildMainMenu();
- ?? ?}
- }
-
- int main()//主函数
- {
- ? ? Pre();//前置数据导入
- ?? ?BuildMainMenu();//构建主菜单
- ?? ?return 0;
- }
到此这篇关于C++实现简易选课系统代码分享的文章就介绍到这了,更多相关C++实现选课系统内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!