Java程序课程设计___一个简单的学生成绩管理信息系统

扬州大学数学科学学院

java程序设计实验报告

课题:一个简单的学生成绩管理信息系统姓名:

学号:

班级:

指导教师:

时间: 12月20日

团队完成:

考核结果

1. 绪论

(内容:要求小四号字体)

此次课题是一个简单的学生管理系统,该课题涉及数据库、Java 等领域。要求达到以下功能:

1. 能够根据学生姓名 、学号、班级、课程名称查询具体内容。

2. 能够实现按照单科成绩、总成绩、平均成绩、学号排序。

3. 能够实现学生信息的插入、删除和修改。

4. 能够查询每个课程的最高分、最低分及相应学生姓名、班级和学号。

5. 能够查询每个班级某门课程的优秀率(90分及以上)、不及格率,并进行排序。

6.能够使用图形界面进行操作。

要实现这些功能需要熟练使用数据库和Java 编程语言,并且能够实现数据库和Java 的连接。

2. 设计思路 (内容:要求小四号字体)

1)建立数据库表格:将班级、姓名、学号、成绩等具体信息录入数据库。

·数据库系统设计

成绩查询系统—--

·系统逻辑结构设计

学生成绩信息表

学号 姓名 班级 语文 数学 英语

·数据库截图

2)利用Java实现数据库连接,使其可以调用数据库表格中的内容。

具体截图如下:

3)Java程序编写思路:

主要编写了5个类:将添加数据、查询数据、删除数据、修改数据四个功能分别为四个类来实现,此外还有一个主类用于实现面板。

Insert类:

功能组件 6个文本域、6个标签、1个按钮

功能实现添加数据

实现过程对按钮添加监控,实现按钮事件为获取文本域中的信息,并执行SQL 的INSERT语句。

Delete类:

功能组件 1个单行文本、1个标签、1个按钮、1个多行文本

功能实现删除数据

实现过程与修改数据类似,对按钮添加监控,实现按钮事件为获取文本域中

的学号信息,并执行SQL的DELETE语句;不同的是以学号为主键进行查找并将删除信息输出到文本框中。

Modify类:

功能组件 6个单行文本、6个标签、1个按钮

功能实现修改数据

实现过程与添加数据类似,对按钮添加监控,实现按钮事件为获取文本域中的信息,并执行SQL的UPDATE语句;不同的是以学号为主键进行查找并更新。

Query 类:

功能组件 5个按钮、三个单行文本组件、1个下拉框、1个多行文本

功能实现按学号查询、按姓名查询、按班级查询、按课程查询、显示全部实现过程对按钮添加监控,共有五个监控事件,前三个实现按钮事件为先获取文本域中的信息,根据对应查询的要求执行相应的SQL的SELLECT语句;按课程查询通过在下来框中选择对应的选项,即查询相应的课程;第五个查询按钮将全部信息在多行文本框中输出。

MyFrame类:

主类,实现面板,可在其上进行对插入、删除、修改、查询等方法的调用,并且对界面进行了设计和规划。

4)界面设计:

功能组件 4个按钮、1个背景、1个标签文本、1个面板

功能实现查询数据、添加数据、删除数据、修改数据

实现过程对按钮添加监控,共有4个监控事件,实现按钮事件为创建对应功能的类对象,出现相应的功能窗口。

截图如下:

3. 算法实现及分析

(内容:要求小四号字体) 1.主界面

2.添加数据

3.修改数据

4.删除数据

5.查询数据

(1)按学号查询

(2)按姓名查询

(3)按班级查询

(4)按课程名称查询

(5)显示所有信息

4. 运行调试与讨论

(内容:要求小四号字体)

1.运行与调试过程中遇到的如下的问题

(1)数据库的链接出现问题,导致表格找不到。

解决方法:重新建表

(2)编译时系统没有提示错误,但是运行的界面中某些接口不能实现。

解决方法:经检查发现是连接数据库的密码错误,改正后可以运行。

2.此程序还存在下列不完善的地方

(1)面板设计较为单调,欠缺调色,还可以在面板上添加制作人等信息。(2)在添加信息时,光标可以依靠键盘上下移动,不需要鼠标点击,这样可以更方便快捷。

(3)修改数据的界面比例不是很协调

(4)修改数据的源代码不能实现选择性的修改:例如根据学号修改姓名。(5)显示信息不能做到数据的对齐,使得界面不美观。

(6)第一次查询用的信息不能自动更新,导致后面的查询给人一种凌乱感:例如先使用学号120702119查询,再使用姓名“张三”查询,此时上一个学号的信息还保留,并不能更新到“张三”的学号。

(7)没有退出的按钮,尚未实现退出语句。

5. 设计体会与小结

(内容:要求小四号字体)

选择“一个简单的学生成绩管理系统”作为这一次的课题,是因为这个课题主要运用的是Java与数据库的相关知识,而这个学期,我们正好学习了这两门课程,在这个课题中Java与数据库知识的结合,是对这两个课程理解学习成果的一个双重考察。

第一步,我们确定了课程的整体思路。首先在数据库中建好相关表格,然后将数据库连接到Java,最后运用Java编程实现相关界面与系统功能。

思路确定后,在具体实现过程中,我们遇到了一些问题。首先我们对Java 连接数据库的相关知识不是特别清楚,其次应用Java编程实现相关界面不是很熟练。为了解决这些问题,顺利完成课题,我们查阅了相关的资料并且请教了上一届的学长,了解了什么叫做架包,知道了怎么实现数据库与myeclipse的连接,如何在myeclipse的环境中使用建表语句以及实现相关界面。有了这些知识作为基础,我们的课程设计便走上了正轨。首先,我们在数据库中建立了包含学生学号、姓名、班级,语文、数学、英语成绩的数据的表格,然后Java中建立了架包,建立ConnectionUtil类,获得与数据库的连接,最后就是在myeclipse环境下,运用Java语句,将添加数据、查询数据、删除数据、修改数据四个功能分为四个类来实现,另外用一个主类实现面板,可在其上进行插入、删除、修改、查询等功能,并且对界面进行了设计和规划。

在这个过程中,我们遇到了许多问题,如数据库连接不上,程序编译没有错误,但功能无法实现等,学长都给了我们很大帮助,一次次修改尝试,最终得到

了现在的版本,虽然有许多不足与缺点,但是课题顺利完成仍是给了我们很大的满足感,也让我们体会到了程序员的辛苦。

通过这次课题的研究,让我充分认识到了自己距离一个合格的程序员还很远,认识到自己相关知识的的储备量还很少,对现在所学的Java及数据库课程的掌握程度还不够,但是在这个过程中我也学习到了很多相关知识,充分的认识到要想学好编程语言,就必须勤动手,要经常练习,才能熟练掌握每一种方法,光靠大脑的记忆是远远不够的,只能是纸上谈兵。在以后的课程学习中,我一定会更加重视实践练习,养成良好的编程习惯,这样才能做一个合格的程序员。

刚看到这个课题的时候,就先大体确定了整体思路,这个课题要求熟悉数据库,Java编程。实现过程中我们需要先在数据库中建立好表,再进行好与Java的连接,再运用myeclipse编程。

思路有了,但真正实施的时候出现了很多问题。通过相关资料的查询和请教上一届的学长,在Java中建立了架包,建立ConnectionUtil类,获得与数据库JSD1407的连接,在编程语言环境下写好建表语言,添加包含学生学号、姓名、班级,语文、数学、英语成绩的数据。与数据库的连接出现了表丢失的现象、要实现这个学生成绩管理系统,需要一个主类,以及涉及插入,删除,查询,修改的子类,在主类中调用,达到效果。

由于对Java语句没有很熟悉的掌握,导致很多代码显得累赘繁琐。在界面上,建立了4个按钮、1个背景、1个标签文本、1个面板,

参考文献

(内容:要求五号字体)

1.数据库系统基础教程(第三版)机械工业出版社

2.Java程序设计(第三版)清华大学出版社

附录(源代码)

(内容:要求小五号字体)

一、架包

package com.tarena.util;

import java.sql.Connection;

import java.sql.DriverManager;

public class ConnectionUtil {

public static Connection getConnection()throws Exception{ Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/JSD1407";

String user="root";

String password="1234";

Connection conn=DriverManager.getConnection(url,user,password);

return conn;

}

public static void main(String[] args) throws Exception{

System.out.println(getConnection());

}

//s通过打印看一下是否连接上了

}

//将获得连接的方法封装

二、建表语言

create table student(

no varchar(10) not null,

name varchar(50) not null,

class_no varchar(2) not null,

chinese double(3,1) not null,

math double(3,1) not null,

english double(3,1) not null,

primary key(no));

desc student;

insert into student(no,name,class_no,chinese,math,english) values(120702101,'陈丽芳',1,66,77,88);

select * from student;

三、Java编程

MainFrame类

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class MainFrame extends JFrame{

JButton insert,query,delete,modify;

JPanel panel,panel1,panel2;

public MainFrame()

{

// TODO Auto-generated method stub

ImageIcon img=new ImageIcon("1.gif");

JLabel text1,text2,picture=new JLabel(img);

JFrame frame=new JFrame("学生成绩管理系统");

insert=new JButton("添加数据");

insert.setBackground(Color.green);

insert.addActionListener(new insertActionPerformed());

query=new JButton("查询数据");

query.addActionListener(new queryActionPerformed());

query.setBackground(Color.green);

modify=new JButton("修改数据");

modify.setBackground(Color.green);

modify.addActionListener(new modifyActionPerformed());

delete=new JButton("删除数据");

delete.setBackground(Color.green);

delete.addActionListener(new deleteActionPerformed());

frame.setSize(360,200);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container contentPane=frame.getContentPane();

contentPane.setLayout(new BorderLayout());

text1=new JLabel("欢迎使用学生成绩管理系统",JLabel.CENTER);

text1.setFont(new Font("宋体",Font.BOLD,24));

text1.setForeground(Color.blue);

text2=new JLabel("------192091班罗斌制作");

text2.setFont(new Font("TimesRoman",Font.ROMAN_BASELINE,14));

panel1=new JPanel();

panel1.add(insert);

panel1.add(query);

panel2=new JPanel();

panel2.add(modify);

panel2.add(delete);

panel1.setOpaque(false);

panel2.setOpaque(false);

panel=new JPanel();

panel.add(text2,BorderLayout.NORTH);

panel.add(panel1,BorderLayout.NORTH);

panel.add(panel2,BorderLayout.SOUTH);

panel.setOpaque(false);

contentPane.add(text1,BorderLayout.NORTH);

contentPane.add(panel,BorderLayout.CENTER);

frame.getLayeredPane().add(picture,new Integer(Integer.MIN_VALUE));

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenWidth = screenSize.width/2;

int screenHeight = screenSize.height/2;

int height = this.getHeight();

int width = this.getWidth();

picture.setBounds(0,0,360,360);

((JPanel)contentPane).setOpaque(false);

frame.setLocation(screenWidth-width/2, screenHeight-height/2); frame.setVisible(true);

}

public class insertActionPerformed implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

new Insert().setVisible(true);

}

}

public class modifyActionPerformed implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

new Modify().setVisible(true);

}

}

public class queryActionPerformed implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

new Query().setVisible(true);

}

}

public class deleteActionPerformed implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

new Delete().setVisible(true);

}

}

public static void main(String[] args)

{

new MainFrame();

}

}

Insert类

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.sql.*;

public class Insert extends JFrame

{

JTextField input1,input2,input3,input4,input5,input6;

JLabel label1,label2,label3,label4,label5;

JButton button;

static Statement st;

static{

try{

Class.forName("com.mysql.jdbc.Driver");

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1407",

"root", "123456");

st=con.createStatement();

}

catch(Exception e){}

}

ResultSet rs;

public Insert()

{

input1=new JTextField(15);

input2=new JTextField(15);

input3=new JTextField(15);

input4=new JTextField(15);

input5=new JTextField(15);

input6=new JTextField(15);

JPanel panel=new JPanel();

panel.setLayout(new GridLayout(6,2));

panel.add(new JLabel("学号"),BorderLayout.CENTER);

panel.add(input1);

panel.add(new JLabel("姓名"),BorderLayout.CENTER);

panel.add(input2);

panel.add(new JLabel("班级"),BorderLayout.CENTER);

panel.add(input3);

panel.add(new JLabel("语文"),BorderLayout.CENTER);

panel.add(input4);

panel.add(new JLabel("英语"));

panel.add(input5);

panel.add(new JLabel("数学"));

panel.add(input6);

button=new JButton("添加");

button.addActionListener(new mysql());

Container container=getContentPane();

container.add(panel,BorderLayout.CENTER);

container.add(button,BorderLayout.SOUTH);

setTitle("添加数据窗口");

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setSize(250,250);

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenWidth = screenSize.width/2;

int screenHeight = screenSize.height/2;

int height = this.getHeight();

int width = this.getWidth();

setLocation(screenWidth-width/2, screenHeight-height/2);

setVisible(true);

}

class mysql implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

try

{

String number=input1.getText().trim();

String name=input2.getText().trim();

String clas=input3.getText().trim();

String temp=input4.getText();

double chinese=Integer.parseInt(temp);

temp=input4.getText();

double english=Integer.parseInt(temp);

temp=input4.getText();

double maths=Integer.parseInt(temp);

if(number.equals("")|name.equals("")| clas.equals("")|temp.equals(""))

{

JOptionPane.showMessageDialog(Insert.this,"请重新输入","提示对话框",1);

}

else

{

String sql="insert into Student(no,name,class_no,chinese,english,math) values('"+number+"','"+name+"','"+clas+"',"+chinese+","+english+","+maths+");";

st.executeUpdate(sql);

JOptionPane.showMessageDialog(Insert.this, "数据添加成功","提示对话框",1);

input1.setText("");

input2.setText("");

input3.setText("");

input4.setText("");

input5.setText("");

input6.setText("");

}

}

catch(Exception ee){}

}

}

}

Modify类

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.sql.*;

public class Modify extends JFrame{

JTextField input1,input2,input3,input4,input5,input6;

JLabel label1,label2,label3,label4,label5;

JButton button;

static Statement st;

static{

try{

Class.forName("com.mysql.jdbc.Driver");

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1407",

"root", "123456");

st=con.createStatement();

}

catch(Exception e){}

}

ResultSet rs;

public Modify()

{

input1=new JTextField(15);

input2=new JTextField(15);

input3=new JTextField(15);

input4=new JTextField(15);

input5=new JTextField(15);

input6=new JTextField(15);

JPanel panel=new JPanel();

panel.setLayout(new GridLayout(6,2));

panel.add(new JLabel("学号"));

panel.add(input1);

panel.add(new JLabel("姓名"));

panel.add(input2);

panel.add(new JLabel("班级"));

panel.add(input3);

panel.add(new JLabel("语文"));

panel.add(input4);

panel.add(new JLabel("英语"));

panel.add(input5);

panel.add(new JLabel("数学"));

panel.add(input6);

button=new JButton("修改");

button.addActionListener(new mysql());

Container container=getContentPane();

container.add(panel,BorderLayout.CENTER);

container.add(button,BorderLayout.SOUTH);

setTitle("修改数据窗口");

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setSize(300,150);

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenWidth = screenSize.width/2;

int screenHeight = screenSize.height/2;

int height = this.getHeight();

int width = this.getWidth();

setLocation(screenWidth-width/2, screenHeight-height/2);

setVisible(true);

}

class mysql implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

try

{

String number=input1.getText().trim();

String name=input2.getText().trim();

String clas=input3.getText().trim();

String temp=input4.getText();

double chinese=Integer.parseInt(temp);

temp=input4.getText();

double english=Integer.parseInt(temp);

temp=input4.getText();

double maths=Integer.parseInt(temp);

if(number.equals(""))

{

JOptionPane.showMessageDialog(Modify.this,"学号不能为空!","提示对话框",1);

}

else

{

try{

String sql="update Student set name='"+name+"',class_no='"+clas+"',chinese="+chinese+",english="+english+",math="+maths+" where no='"+number+"'";

st.executeUpdate(sql);

JOptionPane.showMessageDialog(Modify.this, "数据修改成功","提示对话框",1);

input1.setText("");

input2.setText("");

input3.setText("");

input4.setText("");

input5.setText("");

input6.setText("");

}

catch(Exception ee)

{

JOptionPane.showMessageDialog(Modify.this,"请确认需要修改的学号是否存在","提示对话框",1);

System.out.println(ee);

}

}

}

catch(Exception eee)

{

System.out.println(eee);

}

}

}

}

Query类

import java.awt.*;

import javax.swing.event.*;

import java.awt.event.*;

import javax.swing.*;

import java.sql.*;

public class Query extends JFrame{

JTextArea show;

JButton button1,button2,button3,button4,button5;

JTextField field1,field2,field3;

JComboBox comoBox;

static Statement st;

static{

try{

Class.forName("com.mysql.jdbc.Driver");

Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsd1407",

"root", "123456");

st=con.createStatement();

}

catch(Exception e){}

}

public Query()

{

show=new JTextArea(5,10);

button1=new JButton("显示所有信息");

button1.addActionListener(new Mysql1());

Container container=getContentPane();

container.setLayout(new BorderLayout());

JPanel panel=new JPanel();

JPanel mainpanel=new JPanel();

button2=new JButton("按学号查询");

button2.addActionListener(new Mysql2());

panel.add(button2);

field1=new JTextField(7);

panel.add(field1);

panel.setVisible(true);

mainpanel.add(panel);

button3=new JButton("按姓名查询");

button3.addActionListener(new Mysql3());

panel.add(button3);

field2=new JTextField(6);

panel.add(field2);

panel.setVisible(true);

mainpanel.add(panel);

button4=new JButton("按班级查询");

button4.addActionListener(new Mysql4());

panel.add(button4);

field3=new JTextField(6);

panel.add(field3);

panel.setVisible(true);

mainpanel.add(panel);

String items[]={"请选择","语文","英语","数学"};

comoBox=new JComboBox(items);

button5=new JButton("按课程名称查询");

button5.addActionListener(new Mysql5());

panel.add(button5);

panel.add(comoBox);

panel.setVisible(true);

mainpanel.add(panel);

panel=new JPanel();

panel.add(button1);

container.add(mainpanel,BorderLayout.NORTH);

container.add(panel,BorderLayout.SOUTH);

container.add(new JScrollPane(show),BorderLayout.CENTER);

setTitle("查询数据");

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setSize(750,400);

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenWidth = screenSize.width/2;

int screenHeight = screenSize.height/2;

int height = this.getHeight();

int width = this.getWidth();

setLocation(screenWidth-width/2, screenHeight-height/2);

setVisible(true);

}

class Mysql1 implements ActionListener

{

public void actionPerformed(ActionEvent e)

相关文档
最新文档