今日は Java 言語で書かれた学生の成績管理システムを紹介したいと思います. 現在、システムの機能は非常に包括的ですが、将来的にはさらに改善される予定です。システム全体のインターフェースは美しく、完全なソースコードが付いているので、誰もが気に入ってもらえると思います。いいねやフォローにご協力ください。一緒にプログラムし、一緒に進歩する
開発環境
開発言語はJava、開発環境はEclipseまたはIDEA、データはMySQLです。メイン プログラムを実行するか、JAR ファイルを実行して開いてプログラムを実行します。
システムフレームワーク
JDK に付属する SWING フレームワークを使用して開発およびダウンロードします。純粋な形式モードでは、メイン ファイルを直接実行できます。同時に詳細な設計書も作成します。
プロジェクトの背景
生徒の成績管理システムは、学校の日常の情報管理の重要な部分です。学校試験の増加に伴い、生徒の成績管理の負担も増大しています。生徒の成績を体系的に管理できれば、生徒のテストの成績を迅速に照会したり、より適切かつ便利に変更したりできるようになり、面倒で面倒なファイル管理が不要になり、学校の管理部門に間違いなく大きな利便性をもたらすでしょう。この目的に基づき、今回のコース設計のテーマとして教師管理システムを選択しました。
プロジェクトの目的
学生成績管理システムは典型的な情報管理システムです。その開発には主に、バックグラウンド データベースの構築と保守、およびアプリケーション プログラムの開発が含まれます。前者では、強力なデータの一貫性と完全性、および良好なデータ セキュリティを備えたデータベースの構築が必要であり、後者では、アプリケーション プログラムが完全に機能し、使いやすいことが必要です。学校が生徒の成績管理を手作業で行うと、多大な人的・物的資源を消費し、ミスが発生しやすいことから、本システムは生徒の成績管理の効率化を目的として開発されました。
メインモジュール
学生管理システムには、学生とシステム管理者の 2 種類のユーザーがいます。このうち、学生側の操作としては、自身の情報の照会・変更、コース情報や自身の成績の閲覧などがあり、システム管理者の操作としては、コースの追加・削除・変更、学生の成績の追加・削除・変更・確認、コース成績の統計などが挙げられます。
ER図は次のとおりです。
システム運用効果
ユーザーが正常にログインすると、メイン インターフェイスにジャンプします。メイン インターフェイスには、システム終了、コース管理、学生管理、学生の成績管理の 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);
}
}
}