今天为大家分享一个java语言编写的学生成绩管理系统,目前系统功能已经很全面,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步
开发环境
开发语言为Java,开发环境Eclipse或者IDEA都可以,数据为MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。
系统框架
利用JDK自带的SWING框架开发,下载。纯窗体模式,直接运行Main文件即可以。同时带有详细得设计文档。
项目背景
学生成绩管理系统是学校日常信息管理的一个重要内容。随着学校考试次数越来越多,学生成绩管理的工作量也变得越来越大。如果能对学生成绩做系统的管理,就能更好更方便地快速查询或者修改学生的考试成绩,省去了文件管理的繁琐与麻烦,无疑将给学校的管理部门带来很大的方便。基于这个目的我们这次课程设计选择教师管理系统做为我们的题目。
项目目的
学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及应用程序的开发两个方面.对于前者要求建立数据一致性和完整性强,数据安全性好的数据库.而对于后者则要求应用程序功能完备,易使用等特点。在学校如果以人工的方式对学生成绩进行管理,将耗费大量的人力、物力,而且容易出错,本系统以此作为开发的目标,用以提高学生成绩管理的效率。
主要模块
学生管理系统的分两种用户类型:学生和系统管理员。其中学生包括查询,和修改自己的信息,查看课程信息和自己的成绩等;系统管理员的操作包括课程的增删改、学生成绩的的增删改查和课程成绩统计等功能。
E-R图如下:
系统运行效果
用户登录成功后,跳转到主界面,主界面有4个主要功能:系统退出,课程管理,学生管理,学生成绩管理。系统管理员具有所有功能。学生只能查看和自己的信息和自己的成绩。学生可能查看课程信息和成绩信息,单不能进行修改。只有管理员才有权利进行修改。
查询学生成绩
关键代码
package com.View;import com.SqlConnection.SqlConn;import com.Tools.*;//引入自定义的工具包(字体)import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class ManageView extends JFrame implements ActionListener{ //定义菜单需要要的组件 JMenuBar jmb; JMenu jm1,jm2,jm3,jm4; JMenuItem jm1_1,jm2_2,jm2_3,jm2_4,jm2_5,jm2_6; JMenuItem jm3_1,jm3_2,jm3_3,jm3_4; JMenuItem jm4_1,jm4_2,jm4_3,jm4_4,jm4_5; //定义一个表格,用于显示学生信息 JTable jtb; //定义一个滚动面板,用于存放表格 JScrollPane jsp; //定义设置窗口初始位置的变量 int width,height; //定义一个表格模型,用于更新表数据 CourseModel tm; StudentModel pvm; ChengjiModel anpaim; //把菜单封装成一个函数 public void menuInit() { jm1=new JMenu("系统"); jm1.setFont(MyFont.f1); jm1_1=new JMenuItem("<-退出系统->"); jm1_1.addActionListener(this); jm1_1.setFont(MyFont.f2); jm1.add(jm1_1); jm2=new JMenu("课程管理"); jm2.setFont(MyFont.f1); jm2_2=new JMenuItem("<-添加记录->"); jm2_2.addActionListener(this); jm2_2.setFont(MyFont.f2); jm2_3=new JMenuItem("<-修改记录->"); jm2_3.addActionListener(this); jm2_3.setFont(MyFont.f2); jm2_4=new JMenuItem("<-删除记录->"); jm2_4.addActionListener(this); jm2_4.setFont(MyFont.f2); jm2_5=new JMenuItem("<-显示记录->"); jm2_5.addActionListener(this); jm2_5.setFont(MyFont.f2); jm2_6=new JMenuItem("<-关闭记录->"); jm2_6.addActionListener(this); jm2_6.setFont(MyFont.f2); jm2.add(jm2_5);//把显示学生记录放在最前面 jm2.add(jm2_2); jm2.add(jm2_3); jm2.add(jm2_4); jm2.add(jm2_6); jm3=new JMenu("学生管理"); jm3.setFont(MyFont.f1); jm3_1=new JMenuItem("<-显示学生信息->"); jm3_1.setFont(MyFont.f2); jm3_1.addActionListener(this); jm3_2=new JMenuItem("<-新增学生信息->"); jm3_2.setFont(MyFont.f2); jm3_2.addActionListener(this); jm3_3=new JMenuItem("<-修改学生信息->"); jm3_3.setFont(MyFont.f2); jm3_3.addActionListener(this); jm3_4=new JMenuItem("<-删除学生信息->"); jm3_4.setFont(MyFont.f2); jm3_4.addActionListener(this); jm3.add(jm3_1); jm3.add(jm3_2); jm3.add(jm3_3); jm3.add(jm3_4); jm4=new JMenu("成绩管理"); jm4.setFont(MyFont.f1); jm4_1=new JMenuItem("<-显示学生成绩->"); jm4_1.setFont(MyFont.f2); jm4_1.addActionListener(this); jm4_2=new JMenuItem("<-新增学生成绩->"); jm4_2.setFont(MyFont.f2); jm4_2.addActionListener(this); jm4_3=new JMenuItem("<-删除学生成绩->"); jm4_3.setFont(MyFont.f2); jm4_3.addActionListener(this); jm4_4=new JMenuItem("<-修改学生成绩->"); jm4_4.setFont(MyFont.f2); jm4_4.addActionListener(this); jm4_5=new JMenuItem("<-查询学生成绩->"); jm4_5.setFont(MyFont.f2); jm4_5.addActionListener(this); jm4.add(jm4_1); jm4.add(jm4_2); jm4.add(jm4_3); jm4.add(jm4_4); jm4.add(jm4_5); if(MyFont.usertype.equalsIgnoreCase("学生")){ jm2_2.setEnabled(false); jm2_3.setEnabled(false); jm2_4.setEnabled(false); jm3_2.setEnabled(false); //jm3_3.setEnabled(false); jm3_4.setEnabled(false); jm4_2.setEnabled(false); jm4_3.setEnabled(false); jm4_4.setEnabled(false); } //设置菜单条 jmb=new JMenuBar(); //把菜单添加到菜单条 jmb.add(jm1); jmb.add(jm2); jmb.add(jm3); jmb.add(jm4); //把菜单条添加到窗体 this.setJMenuBar(jmb); } public static void main(String[] args) { // TODO Auto-generated method stub //ManageView manageview=new ManageView(); } public ManageView(String usertype) { //调用菜单函数 this.menuInit(); //当登陆进入界面时,最初显示的界面 jtb=new JTable(); //在刚登陆进去的时候不让数据显示出来,如果即时显示,当数据量大时,影响速度,也不太符合常规 ,因此在这里不用更新数据模型 jsp=new JScrollPane(jtb); this.add(jsp,"Center"); //设置窗体属性 this.setSize(600,400); this.setTitle("学生成绩管理系统-->"+usertype); //设置窗口的初始位置 width=Toolkit.getDefaultToolkit().getScreenSize().width; height=Toolkit.getDefaultToolkit().getScreenSize().height; this.setLocation(width/2-280, height/2-250); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } // @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub //退出系统 if(arg0.getSource()==jm1_1) { Object[] options = {"确定","取消"}; int respose=JOptionPane.showOptionDialog(this, "你确认要退出系统吗?","退出系统确认对话框",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null, options, options[0]); if(respose==0) { System.out.println("你按下了确认按钮!"); System.exit(0);//退出系统 } else if(respose==1) { System.out.println("你按下了取消按钮!"); return; } } // else if(arg0.getSource()==jm2_2) { System.out.println("添加被点击了"); AddCourse addstu=new AddCourse(this, "添加课程信息", true); if(addstu.falg()==1) { //更新当前窗口的学生信息,以便添加学生信息后就能看到新信息 tm=new CourseModel(null); jtb.setModel(tm); } else { //不更新数据 } } // else if(arg0.getSource()==jm2_3) { //先判断是否选择了一行,没有选中,则返回-1,如果选中,则返回选中的那一行的序号,也就是第几行 int rowNo=jtb.getSelectedRow(); if(rowNo==-1) { //没有选中,提示信息 JOptionPane.showMessageDialog(this, "你没有选中一行!"); return; } else { //得到选择的那一行的学号 //String stuId=(String)tm.getValueAt(rowNo, 0);//学号是字符串,因些得转型 //需要把当前的这个数据模型和所选择的那一行的序号传过去 UpdateCourse updateStu=new UpdateCourse(this, "修改课程信息", tm, rowNo, true); //更新当前窗口的学生信息,以便更新学生信息后就能看到新信息 tm=new CourseModel(null); jtb.setModel(tm);} } // else if(arg0.getSource()==jm2_4) { System.out.println("你点击了删除按钮"); //到得某一行,即选择的那一行 int rowNo=jtb.getSelectedRow(); //判断是否已经选择一行,如果没有选择,则弹出一个对话框,当等于-1时,表示没有选择 if(rowNo==-1) { JOptionPane.showMessageDialog(this,"你没有选择一行!"); return; } else { //得到选择的那一行的学号 String id=(String)tm.getValueAt(rowNo, 0);//某一行的第0列就是学号,因为得到的学号是字符串,所以得转型 System.out.println("id="+id); String sql="delete from t_course where id='"+id+"'"; Object[] options = {"确定","取消"}; int respose=JOptionPane.showOptionDialog(this, "你确认要删除该课程吗?","删除信息确认对话框",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null, options, options[0]); if(respose==0) { System.out.println("你按下了确认按钮!"); //连接数据库 SqlConn sqlconn=new SqlConn(); sqlconn.sqlDelete(sql); //注意:********这在里必须调用关闭数据库连接的方法,在这里,如果没有关闭资源,则表模型无法更新成功,切记!!!!! sqlconn.closeSqlConn(); tm=new CourseModel(null); jtb.setModel(tm); } else if(respose==1) { System.out.println("你按下了取消按钮!"); return; } } } // else if(arg0.getSource()==jm2_5) { tm=new CourseModel(null); jtb.setModel(tm); jtb.setVisible(true); } // else if(arg0.getSource()==jm2_6) { System.out.println("jm2_6,关闭记录被点击了!"); jtb.setVisible(false); } // // // else if(arg0.getSource()==jm3_1) { pvm=new StudentModel(null); jtb.setModel(pvm); //让表格显示学生信息 jtb.setVisible(true); } // else if(arg0.getSource()==jm3_2) { System.out.println("新增按钮被点击了"); AddStudent addstu=new AddStudent(this, "添加老师信息", true); if(addstu.falg()==1) { //更新当前窗口的学生信息,以便添加学生信息后就能看到新信息 pvm=new StudentModel(null); jtb.setModel(pvm); } else {} } // else if(arg0.getSource()==jm3_3) { System.out.println("修改老师数据数据被点击了"); //先判断是否选择了一行,没有选中,则返回-1,如果选中,则返回选中的那一行的序号,也就是第几行 int rowNo=jtb.getSelectedRow(); if(rowNo==-1) { //没有选中,提示信息 JOptionPane.showMessageDialog(this, "你没有选中一行!"); return; } else { //得到选择的那一行的学号 //String stuId=(String)tm.getValueAt(rowNo, 0);//学号是字符串,因些得转型 //需要把当前的这个数据模型和所选择的那一行的序号传过去 UpdateStudent updateStu=new UpdateStudent(this, "修改老师信息", pvm, rowNo, true); //更新当前窗口的学生信息,以便更新学生信息后就能看到新信息 pvm=new StudentModel(null); jtb.setModel(pvm);} } else if(arg0.getSource()==jm3_4){ System.out.println("hello word"); int rowNo=jtb.getSelectedRow(); //判断是否已经选择一行,如果没有选择,则弹出一个对话框,当等于-1时,表示没有选择 if(rowNo==-1) { JOptionPane.showMessageDialog(this,"你没有选择一行!"); return; } else { //得到选择的那一行的学号 String id=(String)pvm.getValueAt(rowNo, 0); System.out.println("id="+id); String sql="delete from t_student where id='"+id+"'"; Object[] options = {"确定","取消"}; int respose=JOptionPane.showOptionDialog(this, "你确认要删除该成绩信息吗?","删除信息确认对话框",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null, options, options[0]); if(respose==0) { System.out.println("你按下了确认按钮!"); //连接数据库 SqlConn sqlconn=new SqlConn(); sqlconn.sqlDelete(sql); //注意:********这在里必须调用关闭数据库连接的方法,在这里,如果没有关闭资源,则表模型无法更新成功,切记!!!!! sqlconn.closeSqlConn(); pvm=new StudentModel(null); jtb.setModel(pvm); } else if(respose==1) { System.out.println("你按下了取消按钮!"); return; } } } else if(arg0.getSource()==jm4_1){ anpaim=new ChengjiModel(null); jtb.setModel(anpaim); //让表格显示学生信息 jtb.setVisible(true); } else if(arg0.getSource()==jm4_2){ System.out.println("testtest"); AddChengji addstu=new AddChengji(this, "添加学生成绩信息", true); if(addstu.falg()==1) { //更新当前窗口的学生信息,以便添加学生信息后就能看到新信息 anpaim=new ChengjiModel(null); jtb.setModel(anpaim); } else {} } else if(arg0.getSource()==jm4_3){ int rowNo=jtb.getSelectedRow(); //判断是否已经选择一行,如果没有选择,则弹出一个对话框,当等于-1时,表示没有选择 if(rowNo==-1) { JOptionPane.showMessageDialog(this,"你没有选择一行!"); return; } else { //得到选择的那一行的学号 String id=(String)anpaim.getValueAt(rowNo, 0);//某一行的第0列就是学号,因为得到的学号是字符串,所以得转型 System.out.println("id="+id); String sql="delete from t_chengji where id='"+id+"'"; Object[] options = {"确定","取消"}; int respose=JOptionPane.showOptionDialog(this, "你确认要删除该条成绩数据吗?","删除信息确认对话框",JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE,null, options, options[0]); if(respose==0) { System.out.println("你按下了确认按钮!"); //连接数据库 SqlConn sqlconn=new SqlConn(); sqlconn.sqlDelete(sql); //注意:********这在里必须调用关闭数据库连接的方法,在这里,如果没有关闭资源,则表模型无法更新成功,切记!!!!! sqlconn.closeSqlConn(); anpaim=new ChengjiModel(null); jtb.setModel(anpaim); } else if(respose==1) { System.out.println("你按下了取消按钮!"); return; } } } else if(arg0.getSource()==jm4_4) { System.out.println("修改学生成绩数据被点击了"); //先判断是否选择了一行,没有选中,则返回-1,如果选中,则返回选中的那一行的序号,也就是第几行 int rowNo=jtb.getSelectedRow(); if(rowNo==-1) { //没有选中,提示信息 JOptionPane.showMessageDialog(this, "你没有选中一行!"); return; } else { //得到选择的那一行的学号 //String stuId=(String)tm.getValueAt(rowNo, 0);//学号是字符串,因些得转型 //需要把当前的这个数据模型和所选择的那一行的序号传过去 UpdateChengji updateStu=new UpdateChengji(this, "修改学生成绩信息", anpaim, rowNo, true); //更新当前窗口的学生信息,以便更新学生信息后就能看到新信息anpaim=new ChengjiModel(null); jtb.setModel(anpaim); //让表格显示学生信息 jtb.setVisible(true); } } else if(arg0.getSource()==jm4_5) { System.out.println("查询被点击了"); ChengjiQuery sq=new ChengjiQuery(this, "学生成绩查询", true); } }}
来源地址:https://blog.csdn.net/bangxiecode/article/details/129172714