校园教务管理系统
? ?
学年论文(课程设计)
题目: ???信息管理系统? ???
校园教务管理系统
摘要:数据库技术是现代信息科学与技术的重要组成部分,是计算机数据处理与信息管理系统的核心,随着计算机技术的发展,数据库技术已经成为网络信息化的基础。本教务管理系统就是让教务人员从繁重的工作中解放出来,使他们在使用一个软件之后能极容易的对所有教务工作进行管理。
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? 功能需求
-
- 课题介绍
在现代,高科技的飞跃发展,人们工作习惯的改变和电脑的普及,怎样提高工作效率是人们首先考虑的问题,教务管理是一个非常繁琐与复杂的一项工作,对于学校而言,应该运用一些本地资源提高管理力度,提高工作效率。
教务管理系统是一个复杂的计算机网络信息系统,满足各类高校对现在和将来对信息资源采集,存储,处理,组织,管理和利用的需求,实现信息资源的集中管理和统一调度。为信息交流、教务管理提供一个便捷的电子化手段。
-
- 工具与知识
工具: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)密码重置
- 修改密码
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);//两个Vector
jTable.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;
??????????? @Override
??????????? public 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() { ??????? @Override ??????? public void actionPerformed(ActionEvent e) { ??????????? jf.setVisible(false); ??????????? change_per(); ??????????? jf.setVisible(true); ??????? } ??? }); ??? jflash.addActionListener(new ActionListener() { ??????? @Override ??????? public 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
附录
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!