qianqianjun / Educational-management

北京化工大学软件工程项目,一个教务管理系统,包括教师端, 学生端和管理员系统,通过不同身份的账号可以登入不同的页面,使用spring boot,mysql,vue,由本人带领班级同学开发完成,其中本人负责选课系统开发,欢迎参考学习。PS:由于该项目代码由多人合作编辑完成,同学们水平不一,部分需求不太明确,接口编写有点混乱,项目存在部分烂代码没有维护,不建议直接拿来学习。推荐本人另外一个项目:https://github.com/qianqianjun/spring-boot-blog
112 stars 31 forks source link

关于各组api 接口开发流程的通知 #4

Closed qianqianjun closed 4 years ago

qianqianjun commented 5 years ago

因为各组开发的api 接口可能有重复,为了防止大家重复工作,每完成一个接口就在 这个issue 中说明一下自己的接口,各组在开发api 接口前先看一下是不是有人已经开发了。下面是例子:

高谦:第一组 学生选课子系统

4月6 日 完成 api :

  1. 登陆功能接口 login ,位于 Controller 模块下的 LoginController。
  2. 注销功能接口 logout ,位于Controller 模块下的 LoginController。
  3. AOP 登陆拦截,API接口 拦截,目前未登录的用户不可以获取信息,只可以显示登陆界面。
qianqianjun commented 5 years ago

4月 7 日完成api

登录时候根据身份自动查询详细数据表,将详细信息加到session 中 也就是说 学生的话就查学生表,教师就查教师表

qianqianjun commented 5 years ago

完成获取所有学院信息的api 完成根据学院id 获取学院信息的 api 两个api 接口位于 SelectCourseControllerApi 类中

Neil-White commented 5 years ago

毕业设计系统后端进度

论题表(service层)

1.根据学生号查找论题 public Question getSingleQuestionBySno(int sno)

2.根据专业获取全部论题表信息 public List getQuestionByMajorid(int majorid)

3.根据专业获取论题表部分信息(标题 难度 老师工号 是否已选择) public List getPartQuestionByMajorid(int majorid)

4.根据老师工号查询论题表的全部信息 public List getQuestionByTno(int tno)

5.根据论题号查询单个题目的全部信息 public Question getSingleQuestionByQuestionid(int questionid)

6.添加论题#添加成功则返回true;否则返回false public Boolean addQuestion(Question question)

7.根据论题号删除论题;必须有该论题且未被选中才能删除;已删除返回true#未删除返回false public Boolean deleteQuestionByQuestionid(int questionid)

8.确认学生和选题之间的连接;必须有该论题且该论题未被选中#并且学生也没有被任何其他论题选中;成功返回true;失败返回false public Boolean sureQuestionStudent(int questionId,int sno)

选题表(service层)

1.往选题表中增加记录;学生不能被论题绑定 论题也不能被任何学生选中;成功返回true 失败返回false
    public Boolean chooseQuestion(int questionid,int sno)
2.通过论题号和学生号查询某个选题表记录
    public QuestionStudentChoose getChoiceByQidSno(int questionid,int sno)
3.删除某个选题表的记录;该记录不能是在论题表中绑定过的记录
    public Boolean deleteQuestionStudent(int questionid,int sno)
4.获取某个学生所有的选题信息
    public List<Question> getQuestionOfStudent(int sno)
qianqianjun commented 5 years ago

选课子系统接口一览

 /**
 * 根据条件查询课程的接口
 * @param college  开课学院
 * @param capacity  是否有余量
 * @param cno  课程号码
 * @param cname  课程名称
 * @param tname  教师姓名
 * @return
 */
@PostMapping("/filtercourse")
/**
 * 返回所有学院的 Controller 接口。
 * @return
 */
@GetMapping("/getcolleges")
/**
 * 根据学院id 返回学院相关信息的接口
 * @param id  学院的id
 * @return  
 */
@PostMapping("/getcollegebyid")
/**
 * 选定一个课程,根据课程的课程号和学生的学号将信息加入到选课表中。
 * @param sno  学生学号
 * @param cno  课程号
 * @return  返回一个ResponseMessage ,标注是否添加成功!
 */
@PostMapping("/setcourseselected")

/**
 *  取消一门选课
 * @param cno  取消的课程号
 * @param sno  取消的学生学号
 * @return
 */
@PostMapping("/canclecourse")
/**
 * 生成学生的选课表信息。
 * @param semesterId   学期id
 * @param sno 学号
 * @return  这个学期的课表
 */
@GetMapping("/getcoursetable")
lqd117 commented 5 years ago

增加了对排课表的查找接口调用,在SchedulingControllerApi中可查 下为api样例 http://localhost:8080/getSchedulings?semesterId=1&cno=1&tno=null&status=null&capacity=null&address=null&percent=null&majorGrade=null&courseTime=null

lqd117 commented 5 years ago

需求与接口

  1. 得到所有学院名称 参数:None 返回类型:List 名字:getCollegeNames
  2. 得到某一学院的所有专业 参数:collegeName 返回类型:List 名字:getMajorNamesByCollegeName
  3. 得到某一年级某一专业在某一年应该排的课程 参数:year,semester,majorName,grade 返回类型:List Object属性:cno,cname,college,description,ifopen(是否已排) 名字:getWillCourses
  4. 增加某一年级某一专业在某一年应该排的课程 参数:cno,cname,college,description,status,year,semester,majorName,grade 返回类型:Boolean 名字:addWillCourse
  5. 删除某一年级某一专业在某一年应该排的课程 参数:cno,year,semester,majorName,grade 返回类型:boolean 名字:deleteWillCourse
  6. 选择某一个应该排的课程排课
    1. 首先要知道这个课是否已经被排过与其相关信息 参数:cno,year,semester,majorName,grade 返回类型:List Object属性:tno,address,status,capacity,time 如果未排,这里的值全为null 名字:getCourse
    2. 填好信息后向后端发送数据 参数:cno,tno,year,semester,majorName,grade,status,capacity,address,time(这里的time应该写成字符串) 返回类型:Boolean 名字:addCourse
    3. 删除某一课程的排课信息但不删除这门课 参数:cno,year,semester,majorName,grade 返回类型:Boolean 名字:deleteCourse
    4. 具体实现看代码

      qianqianjun commented 5 years ago

      排课与选课的冲突检测功能的接口添加

      /**
       * @author 高谦
       * 用于检测冲突的 服务:包括排课系统的冲突和选课系统的冲突
       * 表示上课的时间字符串:
       * (startweek-endweek,weekday,coursestarttime-courseendtime);(startweek-endweek,weekday,coursestarttime-courseendtime)
       * 例如: (1-4,5,1-3);(1-4,2,3-5);(5-10,1,6-8)
       */
      @Service
      public class ConflictService {
          @Autowired
          SchedulingDao schedulingDao;
          /**
           * 查询当前学期,当前老师,当前时间下,是否已经安排了任务
           * @param semesterId  当前学期的id
           * @param tno  当前老师的工号
           * @param timeStr  表示要插入数据库的时间的格式串(采用刘权达大佬的超级无敌时间表示法)
           *                 "(1-4,5,1-3);(1-4,2,3-5);(5-10,1,6-8)"
           * @return 如果已经安排了任务,就返回false,表示不可以再安排
           * 如果没有任务,就返回true 表示可以安排任务。
           */
          public Boolean teacher(Integer semesterId,Integer tno,String timeStr)
      
          /**
           * 检查学生的时间是不是冲突,和上面的是一样的。
           * @param semesterId
           * @param sno
           * @param timeStr
           * @return  详细见 teacher 的注释
           */
          public Boolean student(Integer semesterId,Integer sno,String timeStr)
      
          /**
           * 用于检测教室使用是不是有冲突
           * @param semesterId  学期id
           * @param room  教室的名称 比如 A-103
           * @return  详见 teacher 的注释
           */
          public Boolean classRoom(Integer semesterId,String room,String timeStr)
      }

      直接在其他的service 中调用这个service 中的方法即可,具体用法请见注释