校园教务管理系统

   

学年论文(课程设计)

题目    信息管理系统     

校园教务管理系统

摘要:数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心,随着计算机技术的发展,数据库技术已经成为网络信息化的基础。本教务管理系统就是让教务人员从繁重的工作中解放出来,使他们在使用一个软件之后能极容易的对所有教务工作进行管理。

Key words:数据库;java;教务管理;图形化设计界面

目  录

1 功能需求.......................................1

1.1 课题介绍......................................1

1.2 工具与知识......................................1

1.3 功能任务......................................1

2  概要设计.....................................2

2.1 流程图....................................2

3 详细设计与实验.................................4

3.1 java文件定义及功能   ..............4

3.2主界面描述.....................4

3.2.1登陆界面.....................4

3.2.2学生端界面....................4

3.2.3 教师端界面......................10

3.2.4 管理员界面......................12

4 测试结果.............................24

4.1 登录界面测试...................................24

4.2学生界面测试................................25

4.3教师界面测试................................28

4.4 管理员界面测试................................30

5 总结........................................36

参考文献........................................37

附录.....................................38      

1  功能需求

    1. 课题介绍

在现代,高科技的飞跃发展,人们工作习惯的改变和电脑的普及,怎样提高工作效率是人们首先考虑的问题,教务管理是一个非常繁琐与复杂的一项工作,对于学校而言,应该运用一些本地资源提高管理力度,提高工作效率。

教务管理系统是一个复杂的计算机网络信息系统,满足各类高校对现在和将来对信息资源采集,存储,处理,组织,管理和利用的需求,实现信息资源的集中管理和统一调度。为信息交流、教务管理提供一个便捷的电子化手段。

    1. 工具与知识

工具:MySQL数据库,IntelliJ IDEA 。

MySQL是一个关系型数据库管理系统,关联数据库将数据库保存在不同的表中,而不是把所有数据放在一个大仓库中,增加了速度和灵活性。MySQL所使用的SQL语言是访问数据库的最常用标准化语言。

IDEA,全称IntelliJ IDEA,是 Java 语言的集成开发环境, IDEA 在业界被公认为是最好的 java 开发工具之一,一旦用上了就会上瘾。尤其在智能代码助手、代码自动提示、重构、 J2EE 支持、 Ant JUnit CVS 整合、代码审查、创新的 GUI 设计等方面的功能可以说是超常的。强大的整合能力。比如: Git Maven Spring  .IntelliJ IDEA 主要用于支持 Java Scala Groovy 等语言的开发工 具,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 用的开发。

知识:java语言,数据库管理,sql语言

1.3功能任务

  主界面: 1)登录          2)注册

学生功能:1)查询并修改自己个人信息 2)查询本学期课表 

               3)选课、退课       4)选课结果

教师功能:1)查询、修改个人信息   2)查看选课情况

管理员功能:1)课程管理       2)教师管理

                     3)学生管理       4)密码重置

  1. 修改密码

2 概要设计

2.1  流程图

3 详细设计

3.1 java文件定义及功能

  根据实际需要我设计了4个java文件,分别是Student.java,Teacher.java,Administrator.java,Login_up.java。

Student.java是学生类

功能:查询、修改个人信息,查看课表、选课、查看老师信息、查看选课结果。

Teacher.java是教师类

功能:查询、修改个人信息,查看选课结果。

Adminstrator.java管理员类

功能:对课程、老师、学生进行增删改,重置密码、修改密码。

Login_up.java是登录和注册功能。

3.2主界面描述   

3.2.1登陆界面

 学生个人信息储存在数据库student中,包括s_id、姓名等,教师信息存储在Teacher中,包括id、姓名等个人信息。

     用户选择登录身份(学生、教师或管理员),用户名,密码,首先检查用户名在学生表(或教师表)中是否存在,不存在则提示,在进行数据库连接,若成功则密码正确,登录成功,否则密码错误。

流程如右图所示:      

 3.2.2学生端界面

在登录时,用静态变量JTname存储学生的ID。个人信息通过检索数据库表student得到(个人信息的修改也通过修改学生表完成)。

核心代码:stmt = con.createStatement();rs = stmt.executeQuery("select *from student where s_id=" + jTName.getText() + "");while (rs.next()) {jLabel1 = new JLabel(" \n学号: " + rs.getString("s_id"));jLabel2 = new JLabel(" \n姓名: " + rs.getString("s_name"));jLabel3 = new JLabel(" \n性别: " + rs.getString("s_gender"));jLabel4 = new JLabel(" \n年龄: " + rs.getString("s_age"));jLabel5 = new JLabel(" \n专业: " + rs.getString("s_specialty"));jLabel6 = new JLabel(" \n生源: " + rs.getString("s_source"));}

  核心代码:(其他字段类似)

if (!j_id.getText().isEmpty()) {String str = "update  student set s_id="+j_id.getText()+" where s_id="+jTName.getText()+"";System.out.println(str);try {stmt = con.createStatement();stmt.executeUpdate(str);} catch (SQLException ex) {throw new RuntimeException(ex);}}

课程表通过检索选cou_stu表,输出 满足(state=1&&sid=JTname)条件的信息,再拿此信息去遍历course表,输出所有返符合条件的信息。

  核心代码:

Vector rowdata = new Vector();Vector titlename = new Vector();//{"学号","姓名","性别","年龄","专业"};titlename.add("课序号");titlename.add("课程名称");titlename.add("授课老师编号");titlename.add("上课时间");titlename.add("上课地点");titlename.add("周数");titlename.add("课程类型");titlename.add("学分");String sql_1="select distinct cid from cou_stu  where state=0 && sid="+jTName.getText();System.out.println(sql_1);stmt=con.createStatement();rs=stmt.executeQuery(sql_1);while (rs.next()) {System.out.println(rs.getString("cid"));String s = "select *from course where c_id=" + rs.getString("cid");System.out.println(s);stmt1 = con.createStatement();ResultSet rs_1 = stmt1.executeQuery(s);while (rs_1.next()) {Vector hang = new Vector();hang.add(rs_1.getString("c_id"));hang.add(rs_1.getString("c_name"));hang.add(rs_1.getString("c_teacher"));hang.add(rs_1.getString("c_time"));hang.add(rs_1.getString("c_place"));hang.add(rs_1.getString("c_week"));hang.add(rs_1.getString("c_type"));hang.add(rs_1.getString("c_credit"));rowdata.add(hang);}}table1 = new JTable(rowdata,titlename);

选课窗口:通过遍历所有课程,以表格的形式展示再窗口上。学生在文本框里输入课序号,点击确认选课,选课成功后子在cou_stu表中添加了学生的学号、选课的状态以及课程的编号。

核心代码:(退课类似)

  JFrame jf=new JFrame("课程库表");jf.setBounds(0,0,600,400);JTable jt1=new JTable();Vector titlename = new Vector();//{"学号","姓名","性别","年龄","专业"};titlename.add("课序号");titlename.add("课程名称");titlename.add("授课老师编号");titlename.add("上课时间");titlename.add("上课地点");titlename.add("周数");titlename.add("课程类型");titlename.add("学分");Vector rowdata=new Vector();stmt=con.createStatement();String sql="select * from course ";rs=stmt.executeQuery(sql);while (rs.next()) {Vector hang = new Vector();hang.add(rs.getString("c_id"));hang.add(rs.getString("c_name"));hang.add(rs.getInt("c_teacher"));hang.add(rs.getString("c_time"));hang.add(rs.getString("c_place"));hang.add(rs.getString("c_week"));hang.add(rs.getString("c_type"));hang.add(rs.getInt("c_credit"));rowdata.add(hang);}JTable jTable=new JTable(rowdata,titlename);//两个VectorjTable.setEnabled(false);//显示但不可点击JScrollPane Scroll=new JScrollPane(jTable);jf.add(jTable.getTableHeader(),BorderLayout.NORTH);jf.getContentPane().add(Scroll,BorderLayout.CENTER);JMenuBar jMenuBar=new JMenuBar();jMenuBar.setLayout(null);JLabel jLabel=new JLabel("输入课序号");jLabel.setBounds(0,0,30,20);JTextField jTextField=new JTextField();jTextField.setBounds(100,0,10,30);JButton jsure=new JButton("确认选课");jsure.setBounds(160,0,20,15);jMenuBar.add(jLabel);jMenuBar.add(jTextField);jMenuBar.add(jsure);
jsure.addActionListener(new ActionListener() {int flag;@Overridepublic void actionPerformed(ActionEvent e) {String sql = "insert into cou_stu (sid,cid) value (" + jTName.getText() + "," + jTextField.getText() + ")";System.out.println(sql);try {flag= stmt.executeUpdate(sql);} catch (SQLException ex) {JOptionPane.showConfirmDialog(null, "操作失败,下次注意!!!", "信息修改", JOptionPane.YES_NO_CANCEL_OPTION);throw new RuntimeException(ex);}if (flag != 0) {JOptionPane.showConfirmDialog(null, "操作成功,下次注意!!!", "信息修改", JOptionPane.YES_NO_CANCEL_OPTION);}}});

任课老师信息:通过遍历cou_stu表,将符合(sid=JTName)条件的cid输出,在course表中遍历,将得到的一些列教师号到Teacher表中对比以表格形式输出匹配的老师的信息

核心代码:

Vector rowdata=new Vector<>();Vector head=new Vector();head.add("课程");head.add("教师编号");head.add("姓名");head.add("性别");head.add("电话");head.add("学院");String sql="select distinct cid from cou_stu where sid="+jTName.getText();System.out.println(sql);stmt=con.createStatement();rs=stmt.executeQuery(sql);while (rs.next()){String sql1="select  c_teacher,c_name from course where c_id="+rs.getString("cid");System.out.println(sql1);stmt1=con.createStatement();rs1=stmt1.executeQuery(sql1);while (rs1.next()){String sql2="select  id,name,gender,tel,college from teacher where id="+rs1.getString("c_teacher");System.out.println(sql2);stmt2=con.createStatement();rs2=stmt2.executeQuery(sql2);while (rs2.next()) {Vector hang = new Vector();hang.add(rs1.getString("c_name"));hang.add(rs2.getString("id"));hang.add(rs2.getString("name"));hang.add(rs2.getString("gender"));hang.add(rs2.getString("tel"));hang.add(rs2.getString("college"));rowdata.add(hang);}}}

选课结果:(与任课老师模块查询方式类似,只是少了一步查询老师的信息。)

核心代码:

Vector rowdata=new Vector();Vector headtitle=new Vector();headtitle.add("课序号");headtitle.add("课程名");headtitle.add("授课老师编号");headtitle.add("授课时间");headtitle.add("授课地点");headtitle.add("周次");headtitle.add("课程类型");headtitle.add("学分");String sql="select distinct cid from cou_stu where state=1 && sid="+jTName.getText();System.out.println(sql);stmt=con.createStatement();rs=stmt.executeQuery(sql);while (rs.next()){String sql1="select * from course where c_id="+rs.getString("cid");System.out.println(sql1);stmt1=con.createStatement();rs1=stmt1.executeQuery(sql1);while(rs1.next()){Vector hang=new Vector();hang.add(rs1.getInt("c_id"));hang.add(rs1.getString("c_name"));hang.add(rs1.getString("c_teacher"));hang.add(rs1.getString("c_time"));hang.add(rs1.getString("c_place"));hang.add(rs1.getString("c_week"));hang.add(rs1.getString("c_type"));hang.add(rs1.getString("c_credit"));rowdata.add(hang);}}JTable jTable=new JTable(rowdata,headtitle);

3.2.3 教师端界面

 个人信息查询与修改与学生相同,只是在Teacher表中查询。

核心代码:

String sql = "select *from teacher where id=" + jTName.getText();System.out.println(sql);stmt = con.createStatement();rs = stmt.executeQuery(sql);while (rs.next()) {jLabel1.setText("教师编号:" + rs.getString("id"));jLabel2.setText("姓名   :" + rs.getString("name"));jLabel3.setText("性别   :" + rs.getString("gender"));jLabel4.setText("电话   :" + rs.getString("tel"));jLabel5.setText("出生年月:" + rs.getString("birthday"));jLabel6.setText("学历   :" + rs.getString("degree"));jLabel7.setText("职称   :" + rs.getString("pTitle"));jLabel8.setText("入职年份:" + rs.getString("entrytime"));jLabel9.setText("学院   :" + rs.getString("college"));}jchange.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {jf.setVisible(false);change_per();jf.setVisible(true);}});jflash.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {jf.setVisible(false);perinfor();} catch (SQLException ex) {throw new RuntimeException(ex);}}});}

  

查看选课结果,一个老师可能有多个课程,所以先遍历course表,查询符合这个(c_id=JTName)的所有课程,每个课程开一个窗口,以表格的形式展示选择该课的学生信息(方法类似学生的教师查询)。

核心代码:

Vector title=new Vector();title.add("学号");title.add("姓名");title.add("性别");title.add("年龄");title.add("专业");title.add("生源");String sql="select c_id,c_name from course where c_teacher="+jTName.getText();System.out.println(sql);stmt=con.createStatement();rs=stmt.executeQuery(sql);while (rs.next()){String str=rs.getString("c_name");//每次开一个窗口JFrame jFrame=new JFrame(str);jFrame.setBounds(0,0,screenWidth,screenHeight);JMenuBar jMenuBar=new JMenuBar();JLabel jLabel=new JLabel("?");jMenuBar.add(jLabel);jFrame.setJMenuBar(jMenuBar);Vector rowdata=new Vector();String sql1="select distinct sid from cou_stu where cid="+rs.getString("c_id")+"&& state=1";System.out.println(sql1);stmt1=con.createStatement();rs1=stmt1.executeQuery(sql1);int count=0;while(rs1.next()){String sql2="select * from student where s_id="+rs1.getString("sid");System.out.println(sql2);stmt2=con.createStatement();rs2=stmt2.executeQuery(sql2);while (rs2.next()){count++;Vector hang=new Vector();hang.add(rs2.getString("s_id"));hang.add(rs2.getString("s_name"));hang.add(rs2.getString("s_gender"));hang.add(rs2.getString("s_age"));hang.add(rs2.getString("s_specialty"));hang.add(rs2.getString("s_source"));rowdata.add(hang);}}jLabel.setText("本次共计"+count+"名学生选择此课");JTable jTable=new JTable(rowdata,title);

4 测试结果

4.1登录界面测试

正常测试:

异常测试:

4.2 学生端界面测试

异常测试:

4.3  教师界面测试

正常情况:

异常情况:

4.4 管理员界面测试

异常测试:

5 总结

刚开始接触数据库,我并不理解,通过网上课程的学习,有了简单的理解,通过这个课设,我深入理解了数据库的应用和java的图形化界面设计,还偶然学会了函数式编程。在我所有的程序里,我用的最多的是数据库的查询、插入、删除、修改功能,然后也用了大量的捕获异常处理,总的来说能做出自己的系统,还教会了我一种自主学习的思想,在日后的学习中我会继续成长,开发出更具有价值的软件。

参考文献:

[1] CSDN博主「兔老大RabbitMQ」的原创文章原文链接:https://blog.csdn.net/hebtu666/article/details/115613082

[2] CSDN博主「放肆青春的博客」的原创文章原文链接:https://blog.csdn.net/qq_35038153/article/details/77113076?spm=1001.2014.3001.5506

 [3] CSDN博主「随缘。。。。」的原创文章原文链接:https://blog.csdn.net/suiyuanxiangyu/article/details/108064964?spm=1001.2014.3001.5506

附录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录 | linux静态库和动态库的理解

hello.cpp&#xff1a; #include <cstdio>void hello() {printf("Hello, world!\n"); }main.cpp&#xff1a; #include <cstdio>void hello();int main() {hello();return 0; }静态库编译配置&#xff1a; cmake_minimum_required(VERSION 3.12) proj…

C++大小写字母转换

这内容确实很初级了&#xff0c;就是ascii码的加减转换类型输出&#xff0c;但是以往都是学学理论&#xff0c;好多东西还真掌握不扎实&#xff0c;现在通过实验了验证一下&#xff0c;代码如下 可以看到字母的大小写直接差了32&#xff0c;如果要进行转换的话对应加减就可以了…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

智慧配电运维系统解决方案

智慧配电运维系统依托电易云-智慧电力物联网&#xff0c;是一种基于云计算、物联网、大数据等先进技术的配电室运维管理系统&#xff0c;具有实时监测、智能分析、远程控制等特点&#xff0c;可以提高配电室的安全可靠性、运行效率和管理水平。 智慧配电运维系统解决方案通过以…

一文通关物理机Ubuntu22.04融合部署OpenStack

前言 因为博主笔记本是amd的&#xff0c;就最近搞了个小主机&#xff0c;就想装个云平台玩玩&#xff0c;搞了三四天才正儿八经弄完&#xff0c;摸了一大堆错误出来&#xff0c;在文章前面我会将这些需要注意的点列举出来。 环境 物理环境&#xff1a; i5 12450H 32G内存 无线…

css 3D背景反转实现

body{/* 透视 */perspective: 800px; } div{transform-style:preserve-3d;width:259px;height:396px;margin: 100px auto;position: relative; } div img{position: absolute;width:259px;height:396px;left:0;top:0;transition: all linear 2s;z-index: 0; } div img:nth-chil…

Centos7安装GItLab(在线版)

基础环境准备 1.配置清华大学镜像仓库 新建仓库配置文件使用 vim /etc/yum.repos.d/gitlab-ce.repo 命令&#xff0c;输入以下内容,保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck0 enabl…

免费文章生成器的种类,3款免费的文章生成器推荐

内容创作无疑是网络营销和品牌建设中不可或缺的一环。许多人在日常工作中可能会面临时间不足、灵感枯竭等问题&#xff0c;本文将深入聊聊免费文章生成器的种类&#xff0c;详细介绍使用方法。 1. 免费文章生成器的种类 基于模板的生成器 这类生成器通常提供一系列文章模板&…

清新脱俗的Notes主页

大家好&#xff0c;才是真的好。 作为Notes客户端重度用户&#xff0c;我个人非常喜欢Notes客户机&#xff0c;平时都在使用。对于另一些Notes用户&#xff0c;喜欢Notes的人非常喜欢&#xff0c;而且还知道它非常强大&#xff0c;可以进行很多定制化。 今天我们来讲的就是No…

PHP:解决一个字符串中的斜杠 / 进行 JSON 编码时,斜杠被转义为 \/

一、修改前 问题代码 直接通过JSON编码&#xff0c;就会出现问题 代码 $url SO/.$fileName; echo json_encode($url); 效果 二、解决后 代码 使用 json_encode 函数的第二个参数 JSON_UNESCAPED_SLASHES 来禁止对斜杠进行转义 $url SO/.$fileName; echo json_encode…

html实现好看的个人博客留言板源码

文章目录 1.设计来源1.1 博客主界面1.2 常用源码1.3 我的文章1.4 留言板1.5 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134837482 html实现好看的个人博客留言…

【征稿倒计时十天,ACM独立出版,有确定的ISBN号,ei检索稳且快】

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff0…

谈谈我对HashMap扩容机制的理解及底层实现

目录 一、HashMap的底层实现 二、HashMap扩容机制 概念 详细扩容&#xff1a; 1、初始容量 2、添加元素 3、元素数量检查 4、触发扩容 5、迁移元素 6、更新容量和阈值 代码&#xff1a; 一、HashMap的底层实现 HashMap 是 Java 中常用的数据结构之一&#xff0c;用于…

Python学习路线 - Python语言基础入门 - 判断语句

Python学习路线 - Python语言基础入门 - 判断语句 前言布尔类型和比较运算符布尔类型布尔类型的定义 比较运算符 if语句的基本格式if判断语句 if else 语句if elif else 语句判断语句的嵌套实战案例 前言 进行逻辑判断&#xff0c;是生活中常见的行为。同样&#xff0c;在程序…

Powerbuilder9.0 安装是一直卡在setup is running无法继续

这种情况是安装时&#xff0c;他后面弹出来一个提示框&#xff0c;但是因为其他进程的干扰&#xff0c;我们无法看到也就无法继续了。 我看到这个文章&#xff1a;https://blog.csdn.net/FLORY_/article/details/105244102 使用他说的方法的确有效。过程 1. 打开任务管理器 …

子查询在SQL中的应用和实践

作者&#xff1a;CSDN-川川菜鸟 在SQL中&#xff0c;子查询是一种强大的工具&#xff0c;用于解决复杂的数据查询问题。本文将深入探讨子查询的概念、类型、规则&#xff0c;并通过具体案例展示其在实际应用中的用途。 文章目录 子查询概念子查询的类型子查询的规则实际案例分析…

Photoshop Elements 2023 v21.0(ps简化版)

Photoshop Elements 2023是一款ps简化版图像处理软件&#xff0c;它加入了一些新的功能和工具&#xff0c;以帮助用户更高效地处理图片。 新功能&#xff1a;软件加入了黑科技&#xff0c;采用Adobe Sensei AI技术&#xff0c;主打人工智能&#xff0c;一键P图&#xff0c;新增…

Demystifying DeFi MEV Activities in Flashbots Bundle

目录 笔记后续的研究方向摘要引言贡献 Demystifying DeFi MEV Activities in Flashbots Bundle CCS 2023 笔记 本文介绍了对 Flashbots 捆绑包中的去中心化金融 &#xff08;DeFi&#xff09; 矿工可提取价值 &#xff08;MEV&#xff09; 活动的研究。作者开发了ActLifter&am…

文献速递:多模态影像组学文献分享(一种诊断方法结合了多模态放射组学和基于腰椎CT及X光的机器学习模型,用于骨质疏松症)

文献速递&#xff1a;多模态影像组学文献分享:(一种诊断方法结合了多模态放射组学和基于腰椎CT及X光的机器学习模型&#xff0c;用于骨质疏松症)** Title 题目 A diagnostic approach integrated multimodal radiomics with machine learning models based on lumbar spine CT…

Codeforces Round 913 (Div. 3) A~E

目录 A. Rook 问题分析: B. YetnotherrokenKeoard 问题分析: C. Removal of Unattractive Pairs 问题分析: D. Jumping Through Segments 问题分析: E. Good Triples 问题分析: A. Rook 问题分析: 给一个棋子将其同行同列的位置输出 #include<bits/s…