学生教务系统(java实现版)【附全部源码】

简介: 学生教务系统【java实现版附源码】

学生教务系统【java实现版附源码】

一、需求背景

《学生教务系统》 系统设计以方便快捷和安全为出发点,放弃传统的人工记录对学生信息管理的缺陷和不足, 采用全新的方式使学校对学生信息进行存储和维护,增加管理效率。


本系统大体为教务学生管理系统 、并且赋予了管理员很多功能来操作这个系统,包括:学生管理,小组管理,班级管理等功能;通过这些功能模块的设计,满足了老师对学生的信息进行管控所需的功能。


系统采用 c/s 三层结构 ,对动态页面的制作采用了 JSP+Ajax 技术,为了实现管理系统的安全可靠以及对有些代码可以进行重复使用考虑, 对程序的重要代码进行封装时采用 Java Bean。本系统贯彻以人为本的思想,实用性高。


二、产品目标

学生信息的管理工作变得越来越庞大和繁冗,效率也低。为了充分利用互联网带给人们的便利,更好地提高教学管理管理工作的效率,使学生和教职员工能更方便地进行信息查询活动,特开发此教学管理系统。本软件通过权限识别登录到该系统,权限不同享有的功能就又说差异,来实现日常的学生信息的管理。


三、《学生教务系统》项目介绍:

1、开发环境


image.png

2、《TJCU教务系统》的总体功能


image.png

(3)用户角色描述


image.png

四、具体需求

1、功能划分

  本系统总体功能上是C/S 结构的Windows应用程序!

2、项目整体功能框架


image.png

3、概念数据模型CMD

CMD是实体与实体之间关系的模型(使用PowerShell 设计)


image.png


五、主要功能截图

**「用户登录」 **

用户登录是选择角色进行登录:管理员、用户


image.png


「用户注册」

1. 用户登录之前用户名必须是在注册时通过邮箱激活后的,否则不能登录, 返回提示信息:用户名输入错误~~
2. 如果用户名输入错误 返回提示信息:用户名输入错误~~
3. 如果验证码输错    返回提示信息: 验证码输入错误~~~
4. 如果用户名,验证码正确  返回提示信息: 密码输入错误~~


image.png

「用户激活模块」

1.注册进行提交后,会跳转到请去邮箱激活用户页面 
3.激活成功后会跳转到登录

image.png

image.png

image.png

「学生管理模块」

1. 添加学生信息(城市表,班级表,标签表,小组表有数据之后才能添加)
2. 功能是修改学生,删除学生
3. 展示内容(分页实现)
4. 以Json形式下载信息
5. 以QQ或者姓名或者手机号查询学生信息


image.png

** 「小组管理模块」**

1. 添加小组功能:会添加组名称,然后选择班级(小组是班级的外键,需要先建班级表才能创建小组表)
          (其中包含student外键:添加组名称时:本组学生的标签会自动增加到小组标签上,并且统计本组学生人数)
2. 删除小组功能: 删除小组之前需要将本小组的studnet删除或者修改带其他组,否则无法删除
                (使用Ajax判断是否删除)
3.页面展示功能中的学生标签和学生人数,将从外键Student中获取,班级名称名班级表中获取


image.png

「班级管理模块」

班级的增删查功能


image.png

「标签管理模块」

1. 添加标签: 添加标签注意添加标签名称,标签类型(标签类型包含:学生/班级两种类型)
2. 删除标签: 删除标签名字字段之前之前,我们得把对应的学生表,
            班级表中选中相关标签的班级和班级信息进行修改或者删除
            (使用Ajax判断是否删除)


image.png

「城市管理模块」


image.png

六、主要代码展示

「学生分页展示相关」

两张数据库表连接分页查询sql语句:

  SELECT s.s_id,
               s.s_name,
               s.s_phone,
               s.s_qq,
               s.s_age,
               s.s_birthday,
               s.s_stars,
               s.s_attribute,
               clazz.clazz_id,
               clazz.c_name,
               g.g_id,
               g.g_name,
               c.c_id,
               c.c_name,
               m.m_id,
               m.m_name
        FROM (select *
              from t_student limit #{page} , #{rows}
             ) as s
                 LEFT JOIN t_clazz clazz ON s.clazz_id = clazz.clazz_id
                 LEFT JOIN t_city c ON s.c_id = c.c_id
                 LEFT JOIN t_group g ON s.g_id = g.g_id
                 LEFT JOIN m_s_fk ms ON s.s_id = ms.s_id
                 LEFT JOIN t_mark m ON ms.m_id = m.m_id

「通过学生生日计算年龄,生肖,星座展示相关」

public class BirthdayUtil {
    //根据生日计算生肖,年龄,星座
    private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23,
            23, 23, 24, 23, 22 };
    private final static ArrayList<String> constellationList = new ArrayList<>();//存放星座的集合
     static {
         constellationList.add(0, "水瓶座");
         constellationList.add(1, "双鱼座");
         constellationList.add(2, "白羊座");
         constellationList.add(3, "金牛座");
         constellationList.add(4, "双子座");
         constellationList.add(5, "巨蟹座");
         constellationList.add(6, "狮子座");
         constellationList.add(7, "处女座");
         constellationList.add(8, "天秤座");
         constellationList.add(9, "天蝎座");
         constellationList.add(10, "射手座");
         constellationList.add(11, "魔羯座");
     }
    //获得年龄
    public static Integer  getAge(Date birthday){
        int year1 = birthday.getYear();
        Date date = new Date();
        int year2 = date.getYear();
        return  year2-year1;
    }
    //获得生肖
    public static String getChineseZodiac(Date birthday) {
        int year = birthday.getYear();
        //0代表1900年
        if (year < 0) {
            return "未知";
        }
        int start = 0;
        String[] years = new String[] { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊",
                "猴", "鸡", "狗", "猪" };
        return years[(year - start) % 12];
    }
    //获得星座
    /**
     * 传入日期,返回星座
     */
    public static String getConstellation(Date date) {
        String constellation = "";
        Calendar birthday = Calendar.getInstance();
        birthday.setTime(date);
        int month = birthday.get(Calendar.MONTH) + 1;
        int day = birthday.get(Calendar.DAY_OF_MONTH);
        switch (month) {
            case 1:
                //Capricorn 摩羯座(12月22日~1月20日)
                constellation = day <= 20 ? constellationList.get(11) : constellationList.get(0);
                break;
            case 2:
                //Aquarius 水瓶座(1月21日~2月19日)
                constellation = day <= 19 ? constellationList.get(0) : constellationList.get(1);
                break;
            case 3:
                //Pisces 双鱼座(2月20日~3月20日)
                constellation = day <= 20 ? constellationList.get(1) : constellationList.get(2);
                break;
            case 4:
                //白羊座 3月21日~4月20日
                constellation = day <= 20 ? constellationList.get(2) : constellationList.get(3);
                break;
            case 5:
                //金牛座 4月21~5月21日
                constellation = day <= 21 ? constellationList.get(3) : constellationList.get(4);
                break;
            case 6:
                //双子座 5月22日~6月21日
                constellation = day <= 21 ? constellationList.get(4) : constellationList.get(5);
                break;
            case 7:
                //Cancer 巨蟹座(6月22日~7月22日)
                constellation = day <= 22 ? constellationList.get(5) : constellationList.get(6);
                break;
            case 8:
                //Leo 狮子座(7月23日~8月23日)
                constellation = day <= 23 ? constellationList.get(6) : constellationList.get(7);
                break;
            case 9:
                //Virgo 处女座(8月24日~9月23日)
                constellation = day <= 23 ? constellationList.get(7) : constellationList.get(8);
                break;
            case 10:
                //Libra 天秤座(9月24日~10月23日)
                constellation = day <= 23 ? constellationList.get(8) : constellationList.get(9);
                break;
            case 11:
                //Scorpio 天蝎座(10月24日~11月22日)
                constellation = day <= 22 ? constellationList.get(9) : constellationList.get(10);
                break;
            case 12:
                //Sagittarius 射手座(11月23日~12月21日)
                constellation = day <= 21 ? constellationList.get(10) : constellationList.get(11);
                break;
        }
        return constellation;
    }

### 「注册邮箱发送相关源代码」


/*
 * 1.首先需要获取发送邮件的Session对象
 *   Session session = Session.getDefaultInstance(Properties prop)
 * 2.使用session对象 获取待发送的邮件信息
 *  MimeMessage mime = new MimeMessage(session)
 * 3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
 * 4.利用Transport 发送邮件
 * */
public class EmailUtils {
  public static void sendEmail(User user){
    //发送方
    String myAccount = "15120308630@163.com";
    //授权码
    String myPass = "VBRMIRUBJXIERYNH";
    //发件人 邮箱的 SMTP 服务器地址
    String SMTPHost = "smtp.163.com";
    //组成 properties
    Properties prop = new Properties();
    prop.setProperty("mail.transport.protocol", "smtp");//设置协议类型
    prop.setProperty("mail.smtp.host", SMTPHost);//定义发件人的邮箱服务器地址
    prop.setProperty("mail.smtp.auth", "true");//设置请求验证
    //1.Session对象 创建会话 用于和邮箱服务器进行交互
    Session session = Session.getDefaultInstance(prop);
    //设置debug模式 可以查看详细发送信息 可略
    session.setDebug(true);
    //2.创建方法 用来组成一封完整的邮件
    //参数 session(参数配置), myAccount 发送方 , user.getEmail() 接收方
    MimeMessage message = createMsg(session,myAccount,user);
    //4.利用Transport 发送邮件
    try {
      Transport tran = session.getTransport();
      //连接服务器 确认发送方 是否授权
      tran.connect(myAccount, myPass);
      //发送邮件 将message 对象 传给 Transport 对象 将邮件发送出去
      //参数1 要发的内容 参数2 要给哪些人发
      //message.getAllRecipients() 获取到所有的收件人 | 抄送 | 密送
      tran.sendMessage(message, message.getAllRecipients());
      //关闭连接
      tran.close();
    } catch (MessagingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  private static MimeMessage createMsg(Session session, String myAccount, User user) {
    //使用session对象 获取待发送的邮件信息
    MimeMessage message = new MimeMessage(session);
    //3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
    try {
      //3.1发件人 from
      message.setFrom(new InternetAddress(myAccount, "百知教务系统", "utf-8"));
      //3.2收件人 to 支持可以添加多个收件人 | 抄送 | 密送 如果想要发送给多个人 可以重复下面代码多次
      /*
       * MimeMessage.RecipientType.TO 发送
       * MimeMessage.RecipientType.CC 抄送
       * MimeMessage.RecipientType.BCC 密送
       * */
      message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
      //3.3生成邮件主题
      message.setSubject("教务管理系统账号激活邮件","utf-8");
      String ip = Inet4Address.getLocalHost().getHostAddress();
      String url = "http://"+ip+":8080/student_system/user/active?c="+Base64Utils.encode(user.getCode());
      //设置邮件正文 setContent 可以使用html标签
      message.setContent(user.getUsername()+",你好<br>欢迎注册教务管理系统! 请点击链接进行激活:<a href='"+url+"'>点击此处进行激活!</a>","text/html;charset=utf-8");
      //设置邮件的发送时间 是立即发送
      message.setSentDate(new Date());
      //保存设置
      message.saveChanges();
    } catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    return message;
  }
}

七、主要数据库表

表的数量 和模块有关 6表


确认字段


   用户表:id 用户名 密码 角色


   城市表:id 地址名


   标签表: id 标签名,标签创建时间,标签类型


   班级表: id 班级名称,班级Logo(图片路径)


   小组表: id 小组名称,创建时间


   学生表: id 名字,生日,QQ,电话,星座,生肖


确认关系

   关系:


       学生-班级: 多对一 外键列加在学生表 clazz_id


       学生-小组: 多对一 外键列加在学生表 gropu_id


       学生-就业城市: 多对一 外键列加在学生表 city_id


       学生-标签: 多对多 中间表(关系表)


       班级-标签: 多对一 外键列加在班级表 clazz_id


       班级-小组: 一对多 外键列加在小组表 group_id


八、源码获取

今天分享这个基于java+Struts2+mybatis+jquery、用来作为java毕设和课程以及学习使用。都是不错的选择,该项目我已经全部开源到gitee上面了,如果需要研究一下的同学可以参考


《学生教务系统》源码:https://gitee.com/wanghengjie563135/student_system.git


image.png

image.png


相关文章
|
8天前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
9天前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
71 0
|
15天前
|
NoSQL Java 关系型数据库
超全 Java 学习路线,帮你系统掌握编程的超详细 Java 学习路线
本文为超全Java学习路线,涵盖基础语法、面向对象编程、数据结构与算法、多线程、JVM原理、主流框架(如Spring Boot)、数据库(MySQL、Redis)及项目实战等内容,助力从零基础到企业级开发高手的进阶之路。
103 2
|
1月前
|
Java 数据库 前端开发
分享44个java系统,总有一款适合您
分享44个微信小程序,总有一款适合您
37 0
|
1月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
155 7
|
1月前
|
安全 Oracle Java
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
177 0
JAVA高级开发必备·卓伊凡详细JDK、JRE、JVM与Java生态深度解析-形象比喻系统理解-优雅草卓伊凡
|
2月前
|
存储 Java 数据库连接
java 初学者必看的系统知识结构图详解
本文详解Java知识结构图,涵盖Java语言基础、JVM原理、集合框架、并发编程、网络通信及主流框架(如Spring Boot、MyBatis),并结合学生信息管理系统实例,帮助初学者构建完整知识体系,提升实战开发能力。
90 0
|
2月前
|
存储 Java 关系型数据库
Java Swing 开发的五星级酒店客房预订与管理系统源码
本文介绍了基于Java Swing的酒店管理系统开发方案。系统采用Java Swing构建GUI界面,结合MySQL数据库,实现预订管理、前台服务、客房管理、客户关系维护等功能模块。文章详细展示了登录界面、开房操作等核心功能的代码实现,包括数据验证和业务逻辑处理。该系统具有跨平台性,能有效提升酒店运营效率,为开发者提供GUI设计和数据库开发的实践案例。技术方案涵盖IntelliJ IDEA开发环境、Jform Designer插件辅助设计等工具链,适合中小型酒店管理需求。
139 0
|
3月前
|
NoSQL Java Shell
2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝
2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝
164 8
2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝
|
3月前
|
Java 调度 流计算
基于Java 17 + Spring Boot 3.2 + Flink 1.18的智慧实验室管理系统核心代码
这是一套基于Java 17、Spring Boot 3.2和Flink 1.18开发的智慧实验室管理系统核心代码。系统涵盖多协议设备接入(支持OPC UA、MQTT等12种工业协议)、实时异常检测(Flink流处理引擎实现设备状态监控)、强化学习调度(Q-Learning算法优化资源分配)、三维可视化(JavaFX与WebGL渲染实验室空间)、微服务架构(Spring Cloud构建分布式体系)及数据湖建设(Spark构建实验室数据仓库)。实际应用中,该系统显著提升了设备调度效率(响应时间从46分钟降至9秒)、设备利用率(从41%提升至89%),并大幅减少实验准备时间和维护成本。
255 0