基于Linux的教务选课系统

Tenderne

发布日期: 2018-11-05 21:54:23 浏览量: 254
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

1 目的

  • 实现教务选课系统(包括学生端,教师端以及教务端)

2 实验环境

  • Linux下(g++编译)

3 需求分析

根据自己的选课体验,选课系统应该有如下功能:

4 实现思路

4.1 功能结构图

4.2 数据与函数设计:

表示选课系统的system类

这个类的数据包含:

  • 全部课程信息(Class类的vector)

  • 全部学生的信息(student的vector)

  • 全部老师的信息(teacher类的vector)

  • 全部教务员信息(education administer类的vector)

这个类的接口(功能函数):

  • 打印系统功能(包括登陆、注册)print_func( )

  • 登陆功能 login()

  • 注册功能 register()

  • 添加成员(如果是注册就需要添加成员)add_member( )

  • 登陆/注册以后载入函数信息 load()

  • 把文档中成员信息写入程序write_in()

  • 推出程序之前把信息保存到文档place_in_file()

课程类class

数据内容包括课程名字,上课时间、地点,老师名字,每学期学分,最大容量,现有人数,课程状态(已通过批准或者还未通过教务员批准)

成员类person

作为学生,老师,教务员的父类。

数据成员

用户id,用户名(相当于每个人的名字,可以更改),用户密码,用户身份(分为学生,老师,教务员三种)

函数成员(也即所有成员都可以执行的操作)

  • 虚函数(这个两个函数会根据具体身份调用其子类的函数)

    1. virtual void print_func(); virtual int select_func();
  • 更改密码或者用户名

    1. void change_password(string s); void change_username(string s);
  • 列出所有课程

    1. void list_all();
  • 根据名称或者老师查找课程:

    1. void find_by_classname(string name); void find_by_tchname(string name);

Person的子类student、teacher、education administer

学生类,相比于父类,多出来的数据成员有

  • 装载该学生拥有的所有课程的vector —— myclass

虚函数:

  1. void print_func ();
  2. int select_func();

多出来的操作即学生的操作:

  1. void list_myclass(); // 列出自己的课程
  2. void shield_conflict(); // 隐藏冲突课程
  3. void shield_full(); // 隐藏满员课程
  4. void select_class(string name); // 选择课程
  5. void delete_class(string name); // 退课

老师类,相比父类,多出来的数据成员有

  • 装载该老师已开放并通过审核的课程的vector —— have_opened

  • 以及正在申请对学生开放的课程的vector —— to_be_review

虚函数:

  1. void print_func ();
  2. int select_func();

多出来的函数成员:

  1. void list_myclass(); // 列出课程
  2. void open_class(Class a); // 开课
  3. void delete_class(Class a); // 删除课程

教务员,相比父类

  • 多出来的数据成员有待审核的所以课程to_be_review

虚函数:

  1. void print_func ();
  2. int select_func();

多出来的函数:

  1. void show_need_review(); // 展示所有待审核课程
  2. void approve_class(Class a); // 通过某一课程的审核
  3. void disapprove_class(Class a); // 将某一课程下架(可以让该课程不再对学生开放)

4.3 设计思路

1.将所有代码及程序文件和数据保存文件分别放在两个不同的文件夹中,当程序打开时,write_in()打开数据文件并把文档中成员信息写入程序。

2.然后进入登陆/注册环节,审核通过以后注册成功。

  • 登陆:核对用户的id与密码是否相符合
  • 注册:需要用户提供相应的代码来确定用户的身份(是学生还是老师还是教务员)

3.载入用户信息load函数。

4.进入操作环节

  • 步骤三的load函数返回一个person类的引用temp
  • 然后用temp调用虚函数print_func根据具体载入的用户类型调用具体类型的打印函数
  • 再用temp调用虚函数select_func根据具体载入的用户类型调用具体类型的选择操作

公共操作:

  • 更改用户名、密码(这个直接改,很简单)
  • 列出所有课程(这个直接遍历vector<Class> c_all 打印即可)
  • 查找相应课程(遍历vector,如果该课程name与输入相符,打印即可)

差别操作:

学生的

void list、_myclass();列出自己的课程,遍历vector<Class>myclass 即可

  • 隐藏冲突课程—— void shield_conflict();这个函数通过比较class类的time信息来判断具体课程是否与该学生的课程(myclass)的time冲突,如果冲突,就不打印该课程

  • 隐藏满员课程—— void shield_full();如果某课程的最大容量等于当前学生人数(即Class类的capacity==stu_num),就不打印该课程

  • 选择课程void select_class(string name);即在该学生的vector\<Class\>myclass中加入这个课程并且所有相应的存有stu_num的数据都惊醒stu_num++的操作

  • 退课void delete_class(string name);即在该学生的vector<Class>myclass中删除(erase)这个课程,并且所有相应的存有stu_num的数据都惊醒stu_num—的操作

老师的

  • 列出课程void list_myclass(); 遍历vector <Class>have_opened和 vector \<Class>to_be_review 即可

  • 开课void open_class(Class a); 定义一个Class对象,要求老师输入课程名称并且完善相应课程信息到该对象,并且判断老师的课程是否存在重名、时间,地点冲突等问题。完成以后,将该对象插入到该老师的vector \<Class\>to_be_review当中,并且插入所有教务员的vector <Class>to_be_review中

  • 删除课程void delete_class(Class a);遍历vector <Class>have_opened和 vector <Class>to_be_review找到名字和对象a的名字相同的成员,删除该成员,然后遍历所有教务员e_all的vector <Class>to_be_review和所有学生s_all的vector<Class>myclass,找到同名的对象并删除

教务员的

  • 展示所有待审核课程void show_need_review(); 遍历该教务员的vector <Class>to_be_review

  • 通过某一课程的审核void approve_class(Class a); 遍历该教务员的vector <Class>to_be_review,删除名字与对象相同的成员;在全局的c_all中加入这个对象;遍历所有老师的vector <Class>to_be_review,找到相同名字的成员并删除

  • 将某一课程下架(可以让该课程不再对学生开放)void disapprove_class(Class a); 在所有教务员的vector <Class>to_be_review中加入这个对象,stu_num置为0,表示这个对象需要重新审核;把这个课程对应的老师的vector <Class>have_opened和 vector <Class>to_be_review分别减少和增加一个该对象,stu_num置为0;遍历所有学生的vector<Class>myclass找到同名课程,删除掉

5.操作完成退出程序

5 输入与输出

进入登陆界面

5.1 教务员端

5.2 教师端

5.3 学生端

6 心得体会

我不提供老师修改课程的函数,如果要修改课程,应该先删除原有课程,然后再新建课程,这样也刚刚好可以给教务员进行批准。

其实应该把所有的class都放在一个容器里面,这样既节省了空间,又节省了时间,现在搞成这样简直想死,各种改来改去,我都怕了,作了大死啊,真的是写了好久啊,以后一定要先想好怎么写啊啊啊啊啊啊啊啊,气死了,吃力不讨好。

其实冷静一点就只要在每个函数做一点点的,但是这次真的是气的不行,一开始的设计有问题,导致了事倍功半。

上传的附件 cloud_download 基于Linux的教务选课系统.7z ( 2.98mb, 1次下载 )
error_outline 下载需要3点积分

发送私信

回首才能读懂人生,但频频回首会耽误你往前走

10
文章数
16
评论数
最近文章
eject