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)