数据库设计任务


(1) 实现学生信息、课程信息、教师信息管理;
(2) 实现学生选课、退课功能;
(3) 实现教师及任课信息管理;
(4) 实现教师开课、录入成绩功能
(5) 实现管理员创建和删除学生和教师用户;
(6) 实现选课登记,要保证学生不能选修重复的课程(实用触发器实现);
(7) 创建存储过程统计各学生指定学期选修课程的总学分数;
(8) 创建视图查询2006-2007学年,没有被选修的课程;
(9) 创建存储过程统计各教师任课的学生人数;
(10) 具有数据备份和数据恢复功能。*

功能:

1.用户的需求:
学生:查询个人信息、修改密码、查询课程、选课、查询已选课程、查学期学分、查成绩
教师:查询个人信息、修改密码、开设课程、录入学生成绩、查询自己的课程、 加入或退出别的课程、取消开设的课程
管理员:添加教师用户和学生用户、删除教师和学生、查询教师和学生、选课通知
2.不允许重复的学号和工号;
3.学生完善个人信息后所在班级人数自动加减;
4.学生选课后该课程选课人数自动加减;
5.课程达到人数上限后,学生无法选此课;
6.选课人数未达到要求,教师可选择取消此门课
7.创建用户后自动添加到登陆表里


实体之间的联系

根据需求分析,归结出合适的联系:
1、一个学生能够选多门课,一门课可以被多个学生选;
2、一个老师能教多门课,一门课可以被多个老师教授;
3、一个学生属于一个班级,一个班级可以有多名学生

局部E-R图

(1)学生课程联系E-R图

(2)学生班级联系E-R图

(3)教师课程联系E-R图

总E-R图

数据字典



用户界面












---------2019.9.30更新-----------------------------

关于解决时间地点冲突的算法

这是我后来在写web端时的一套实现方法,这里我就不详细说明了,各位可以参考参考
其核心思想就是设置一套有规则地编码,根据这个编码分部分判断

public boolean judgeExist(String Sno, String CourseCode, String CourseCodeSC) {String halfTerm1 = CourseCode.substring(0, 13);String halfTerm2 = CourseCode.substring(13, 26);String halfTermSC1 = CourseCodeSC.substring(0, 13);String halfTermSC2 = CourseCodeSC.substring(13, 26);if (judgeTerm(halfTerm1, halfTermSC1) || judgeTerm(halfTerm2, halfTermSC2)) {System.out.println(halfTerm1 + "," + halfTerm2 + "," + halfTermSC1 + "," + halfTermSC2);return true;}return false;}public boolean judgeTerm(String halfTerm, String halfTermSC) {String place1 = halfTerm.substring(8, 13);String place2 = halfTermSC.substring(8, 13);String course1 = halfTerm.substring(2, 5);String course2 = halfTerm.substring(5, 8);String courseSC1 = halfTermSC.substring(2, 5);String courseSc2 = halfTermSC.substring(5, 8);String week = halfTerm.substring(0, 2);String weekSC = halfTermSC.substring(0, 2);if ((!halfTerm.equals("zz00000000000")) && (!halfTermSC.equals("zz00000000000")) && place(place1, place2)&& week(week, weekSC) && course(course1, course2, courseSC1, courseSc2)) {return true;}return false;}public boolean place(String place1, String place2) {if (place1.equals(place2)) {System.out.println(place1 + "," + place2);return true;}return false;}public boolean week(String week, String weekSC) {char beginWeek = week.substring(0, 1).charAt(0);char beginWeekSC = weekSC.substring(0, 1).charAt(0);char endWeek = week.substring(1, 2).charAt(0);char endWeekSC = weekSC.substring(1, 2).charAt(0);if ((beginWeek <= endWeekSC && beginWeek >= beginWeekSC)|| (beginWeekSC <= endWeek && beginWeekSC >= beginWeek)) {System.out.println(beginWeek + "," + endWeek + "," + beginWeekSC + "," + endWeekSC);return true;}return false;}public boolean course(String course1, String course2, String courseSC1, String courseSC2) {if (course1.equals(courseSC1) || course2.equals(courseSC2)) {System.out.println(course1 + "," + courseSC1 + "," + course2 + "," + courseSC2);return true;}return false;}
public class ChooseServlet extends HttpServlet {protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String userAccount = request.getParameter("userAccount");String CourseNo = request.getParameter("courseNo");//要选的课的课程号String CourseCode = request.getParameter("CourseCode");//要选的课的课程编码StudentDao dao = new StudentDao();CourseDao cdao = new CourseDao();Student student = dao.findOneStudent(userAccount);String Sno = student.getSno();List<SC> scs = cdao.findSCDetails(Sno);SC sc2 = cdao.findChosen(Sno,CourseNo); Course course  = cdao.findOneCourse(CourseNo);//改whereSystem.out.println(course);int courseMaxnum = course.getCourseMaxnum();int courseChosennum = course.getCourseChoosennum();System.out.println(courseMaxnum+","+courseChosennum);if(sc2 !=null) {request.setAttribute("conflict", "该课程已选!");request.getRequestDispatcher("selectCourse.jsp").forward(request, response);}else {if(courseMaxnum == courseChosennum) {request.setAttribute("conflict", "该课程已达到选课人数上限!");request.getRequestDispatcher("selectCourse.jsp").forward(request, response);}else {if(scs.size()==0) {cdao.chooseCourse(Sno,CourseNo);request.setAttribute("conflict", "选课成功!");request.getRequestDispatcher("selectCourse.jsp").forward(request, response);}else {for (int i =0;i<scs.size();i++) {SC sc = scs.get(i);String CourseCodeSC = sc.getCourseCode();if(!cdao.judgeExist(Sno,CourseCode,CourseCodeSC)) {cdao.chooseCourse(Sno,CourseNo);request.setAttribute("conflict", "选课成功!");request.getRequestDispatcher("selectCourse.jsp").forward(request, response);}else {request.setAttribute("conflict", "地点或时间冲突");request.getRequestDispatcher("selectCourse.jsp").forward(request, response);break;}}}}}}}

源码

本人花了很多时间做这个课程设计,若是有需求的用户可以移步下载区:
用户界面中由于要链接数据库,所以登陆数据库的账号和密码在代码中按自己的修改
https://download.csdn.net/download/qq_43284141/11289235
其中包括近3000行的用户界面代码和51页课程设计报告

如果只是想参考代码,请移步GitHub
https://github.com/pengchenyu111/ChooseCourse
web版
https://github.com/pengchenyu111/ChooseCourseWeb

2020/4/14更新

建议大家别看我的代码了,在现在看起来当时写的代码就是一坨SHIT,我现在觉得汗颜~大家看看报告混混学分还行。
数据库文件地址:
非web版:db-file
web版:db-file

学生选课管理系统(SQL Server+Java 解决选课冲突问题+附源码)相关推荐

  1. 极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

    实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.S ...

  2. 百看不如一练,55个Java练手项目(附源码+视频教程),全都在这里了

    我们都知道,不管学习那门语言最终都要做出实际的东西来,而对于编程而言,这个实际的东西当然就是项目啦,不用我多说大家都知道学编程语言做项目的重要性. 于是,我熬了几个通宵,终于整理出了55个培训机构内部 ...

  3. 手把手搭建Java金融借贷系统【附源码】(毕设)

    一.项目简介 本课程演示的是一套基于基于JavaWeb实现的金融借贷系统 或 P2P金融管理系统 或 小额贷款系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群. 详细介绍 ...

  4. java手机象棋软件下载,Java手机网络版象棋游戏附源码JAVA游戏源码下载

    运行于手机上的中国象棋游戏,鉴于JAVA J2ME技术,本游戏分服务端和客户端,导入JAR包即可在手机上运行,内有开发文档和运用说明. Java手机网络版象棋游戏附源码 (1 folders, 2 f ...

  5. 视频教程-手把手搭建Java金融借贷系统【附源码】(毕设)-Java

    手把手搭建Java金融借贷系统[附源码](毕设) 南京大学软件工程硕士,全栈开发工程师,全栈讲师. 曾就职于中软国际.擎天科技.华为等公司,擅长Java开发.Web前端.Python爬虫.PHP等领域 ...

  6. JAVA计算机毕业设计摄影网站(附源码、数据库)

    JAVA计算机毕业设计摄影网站(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Inte ...

  7. 天天酷跑php源码_使用Java实现天天酷跑(附源码)

    首先,写一个需求文档: 一.项目名称:<天天酷跑>(RunDay) 二.功能介绍: 闯关类游戏,玩家登录后,选择进入游戏,通过键盘控制玩家的上下左右移动,来躲避 障碍物和吃金币,玩家躲避的 ...

  8. 10款经典Java游戏项目合集,附源码课件

    家人们,我又来啦,今天我们来看一下学Java必练的10款游戏项目! 大家都知道学习编程必须要做的就是敲代码和做项目练手了,那项目有难有易,很多小伙伴不知道从哪里找项目来练习,今日我们来看一下初级项目中 ...

  9. 最全Java项目合集(附源码课件),可完美运行

    当今时代是飞速发展的信息时代.在各行各业中离不开信息处理,而有信息处理就离不开信息管理系统,这使得信息管理系统被广泛应用于各领域 其中系统设计是一个把软件需求转换成用软件系统表示的过程.通过对目标系统 ...

最新文章

  1. 2014年最热门的国人开发开源软件TOP100
  2. linux下configure命令详解
  3. linux mysql 编码修改,Linux下修改MySQL编码的方法
  4. Linux查看端口使用状态及启动
  5. STL 容器 与 数据结构
  6. poj3683 Priest John's Busiest Day
  7. linux字符处理工具 新手教程
  8. css hack(ie6-9,firefox,chrome,opera,safari)
  9. HALCON示例程序board.hdev检测电路板焊锡有无程序剖析
  10. 登录时本地保存账号密码及关闭ARC的方法
  11. python-类的定制
  12. 【计算机组成原理】I/O设备
  13. 测绘工程所用软件评析
  14. 使用ZooKeeper实现分布式队列、分布式锁和选举详解
  15. 关于联想oem系统激活方法尝试
  16. 7人表决器的实现之路
  17. 百度竞价新人提升赚钱概率的技巧方法
  18. 备案域名绑定服务器后 提示需要备案_网站空间配置和域名解析怎么选择
  19. DLang 编译实验
  20. 如何编辑修改PDF,PDF怎么删除页眉页脚

热门文章

  1. 《白帽子讲Web安全》| 学习笔记之Web框架安全
  2. 【微信小程序】web-view 无法打开该页面不支持打开
  3. 农村没网络怎样安监控,家里没有wifi安哪种监控器
  4. Python - 寻找数组的子集
  5. 安装版—安装MySQL
  6. 学习ARM开发(3)
  7. 智能卡:常见智能卡芯片型号及其厂家-1
  8. 目标检测——梯度均衡机制GHM(Gradient Harmonized Mechanism)的理解
  9. HTML5开发系列(4) 之 样式表的三种类型
  10. http url转义字符,特殊字符