题目:在当下这个学习占据主导的时代,考试无疑是检验学习最好的方式。高中三年大大小小的考试数不胜数,作为曾经的英语课代表,每次考试结束,老师都会录入成绩,可是普通的表格又无法准确的查找到学生的成绩,那作为新时代的大学生,你能否为天下的老师们设计一款可查询成绩的java程序呢?要求如下,运用java程序设计一款可实现查询、增添信息的程序,其中包含学生的基本信息,所以,就把这个难题交给“你”了。
管理信息系统正在向着网络化、智能化和集成化等趋势发展。学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。
本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。达到提高学生成绩管理效率的目的。与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。
计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。
1.系统基本需求
(1)、登录界面
(2)、信息的查询,录入,增添,删减
(3)、学生基本信息的保存
2.设计思路
1、对“学生”类进行编码
//**学生类**
public class Student {
String id;
String name;
float chengji;
public Student() {
}
public Student(String id, String name, float chengji) {
super();
this.id = id;
this.name = name;
this.chengji = chengji;
}
//定义一个方法设置个变量的值
public void set(String id, String name, float math, float physics, float english) {
this.id = id;
this.name = name;
this.chengji = chengji;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public float getChengji() {
return chengji;
}
}
这里对 "学生"类进行详细划分,其中“学生”类包含了id、名字以及成绩。
其中定义了getId、getName、getChengji3个方法分别获取对应的信息。
最后进行输出的结果变成我们所想要的结果。
2、程序界面的相关程序
//测试类
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
class mySwing {
JFrame frame;
JTabbedPane tabbedPane;
public void init() {
tabbedPane = new JTabbedPane();
tabbedPane.add("录入成绩",new addPanel().panel);
tabbedPane.add("查询成绩",new checkPanel().panel2);
tabbedPane.add("排序成绩",new sortPanel().panel3);
tabbedPane.add("修改成绩",new modifyPanel().panel4);
tabbedPane.add("删除记录",new deletePanel().panel5);
}
//先创建一个窗口
public mySwing() {
frame = new JFrame("XXX学校学生成绩管理系统");
init();
frame.add(tabbedPane,BorderLayout.NORTH);
frame.setVisible(true);
frame.setSize(500, 580);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
这里设计了500*580大小的窗口,其中的界面按钮only have录入成绩、查询成绩、修改成绩、以及删除记录,还有窗口的关闭按钮。
这里定义了“mySwing”类来进行窗口的布局。
其中这里调用了init方法,这里init与destroy遥相呼应,一个加载一个销毁,
java在编译后会在字节码文件中生成
java在编译后会在字节码文件中生成
这里借用了csdn中关于init方法的介绍;*Java的
3、测试类
public class myText {
public static void main(String[] args) {
new mySwing();
}
}
测试类没啥好说的。
--------------
ok,到这里程序的雏形已经差不多了,之后的内容便是本次课程设计的难题。
4、数据的录入
这里先展示代码。
//添加数据实现
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class addPanel{
MyDBUtil dbUtil = new MyDBUtil();
JPanel panel;
//录入成绩 窗口组件设置
JPanel p1,p2,p3,p4;
Box boxH1,boxH2;
Box box1,box2,box3,box4;
JButton button;
JTextField textField1,textField2,textField3,textField4,textField5;
JTextArea area;
//录入成绩窗口
public addPanel() {
boxH1 = Box.createHorizontalBox();
boxH2 = Box.createHorizontalBox();
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(35));
box1.add(new JLabel("学号"));
box1.add(Box.createVerticalStrut(35));
box1.add(new JLabel("姓名"));
box1.add(Box.createVerticalStrut(35));
box1.add(new JLabel("成绩"));
boxH1.add(box1);
boxH1.add(Box.createHorizontalStrut(55));
box2 = Box.createVerticalBox();
textField1 = new JTextField(12);
textField2 = new JTextField(12);
textField3 = new JTextField(12);
box2.add(Box.createVerticalStrut(35));
box2.add(textField1);
box2.add(Box.createVerticalStrut(35));
box2.add(textField2);
box2.add(Box.createVerticalStrut(35));
box2.add(textField3);
boxH1.add(box2);
button =new JButton("录入");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Student student = new Student(textField1.getText(), textField4.getText(), Float.parseFloat(textField2.getText()));
dbUtil.add(student);
area.setText("你输入的信息添加成功!!"+"\r\n"+"你可以通过查询成绩来查看相关信息!!");
textField1.setText("");
textField2.setText("");
textField3.setText("");
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"添加成绩失败,请重新进行操作!!");
textField1.setText("");
textField2.setText("");
textField3.setText("");
}
}
});
p3 = new JPanel();
p3.setLayout(new FlowLayout(FlowLayout.CENTER,5,100));
p3.add(button);
p1 = new JPanel();
p1.add(boxH1);
p2 = new JPanel();
p2.add(boxH2);
p4 = new JPanel();
area = new JTextArea("请在下面输入你想存入的相关的信息!!!",3,30);
p4.add(area);
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(p1,BorderLayout.WEST);
panel.add(p2);
panel.add(p3,BorderLayout.SOUTH);
panel.add(p4,BorderLayout.NORTH);
}
}
在本程序里,首先添加数据使其保存在数据库里是我们必须要先进行的一步,然后再去构想添加数据页面的卜布局,这里我是创建了2个列式盒,其中第一个列式盒被填入了我们所想要看到的信息,例如“学号、姓名、成绩”等,其中在次列式盒后紧跟着文本框让我们及时的输入数据。
在真个界面最下方,我设置了一个按钮是录入按钮,确保使用者录入信息正确并可以正确录入到数据库中。
其中,我运用了BorderLayout边界布局这一函数,我将其与前面的我所想要的大小相结合,为此栏目的大小进行了调整。
5.查询数据
//查询数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class checkPanel implements ActionListener{
JTable table; //定义一个表格引用
Object name[]={"学号","姓名","成绩"};
Object a[][];
ResultSet rs=null;
MyDBUtil dbUtil = new MyDBUtil();
LinkedList list=null;
JPanel panel2;
JButton button1;
//查询成绩窗口设置
public void setList(){
rs= dbUtil.checkAll();
list=new LinkedList();
if(rs!=null){
try {
while(rs.next()){
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setTable() {
setList();
a=new Object[list.size()][name.length];
for(int i=0;i
在查询数据一栏中是将学号、id、成绩看做了数组,通过与数据库中checkAll方法连用,来显示数据。
在此栏中,我先是定义了一个循环,通过循环将数据放入集合中,并实现了与数据库的连接,然后我又设置了表格来显示数据,通过for循环,将拿到的集合的第i个位置元素传给student对象,然后通过student的get方法获取相应的值。
6.排序实现
// 排序实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class sortPanel implements ActionListener {
JTable table;
Object name[]={"学号","姓名","成绩"};
Object aa[][];
ResultSet rs=null;
MyDBUtil dbUtil = new MyDBUtil();
LinkedList list=null;
JPanel panel3,p1,p2;
JTextField field;
JTextArea area;
JButton b1,b2;
public void setList(){
rs= dbUtil.checkAll();
list=new LinkedList();
if(rs!=null){
try {
while(rs.next()){
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setList1(String grade,String sort){
rs= dbUtil.checkAll(grade,sort);
list=new LinkedList();
if(rs!=null){
try {
while(rs.next()){
list.add(new Student(rs.getString(1),rs.getString(2),rs.getFloat(3)));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void setTable() {
setList();
aa=new Object[list.size()][name.length];
for(int i=0;i
这里对数据排序,通过创建一个新的数组,然后依照我们所想要的排序顺序进行排序,这里雨数据库建立了连接,实例化集合对象,然后就是基础的设置按钮,为按钮赋予功能,同时与C语言中的排序一样,在这里是通过比较数据的大小来进行排序(int i=0;i
(19条消息) java常用的排序方法_想去海边~的博客-CSDN博客
7.修改数据
// 修改数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class modifyPanel {
MyDBUtil dbUtil = new MyDBUtil();
JPanel panel4;
//修改成绩窗口组件设置
JPanel p1,p2,p3,p4;
Box boxH1,boxH2;
Box box1,box2,box3,box4;
JButton button1;
JTextField t1,t2,t3,t4,t5,t6;
JTextArea area;
public modifyPanel() {
boxH1 = Box.createHorizontalBox();
boxH2 = Box.createHorizontalBox();
box1 = Box.createVerticalBox();
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("学号"));
box1.add(Box.createVerticalStrut(35));
box1.add(new JLabel("姓名"));
box1.add(Box.createVerticalStrut(35));
box1.add(new JLabel("成绩"));
boxH1.add(box1);
boxH1.add(Box.createHorizontalStrut(50));
box2 = Box.createVerticalBox();
box2.add(Box.createVerticalStrut(50));
//实例化单行文本框
t1 = new JTextField(12);
t2 = new JTextField(12);
t3 = new JTextField(12);
//向列式盒中添加单行文本框
box2.add(t1);
box2.add(Box.createVerticalStrut(35));
box2.add(t2);
box2.add(Box.createVerticalStrut(35));
box2.add(t3);
boxH1.add(box2);
p2 = new JPanel();
p2.add(boxH1);
p3 = new JPanel();
p3.add(boxH2);
t6 = new JTextField(10);
button1 = new JButton("修改");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if(t1.getText().equals(t6.getText())) {
//获取到文本框中的内容传给Student类
Student student = new Student(t1.getText(), t4.getText(), Float.parseFloat(t2.getText()));
dbUtil.modify(student);
area.setText("成绩信息修改成功,你可以通过查询成绩来查看相关信息!!!");
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
}else {
area.setText("温馨提示!!"+"\r\n"+"由于两处学号信息不一致,无法进行修改.."+"\r\n"+"请重新输入你想修改的信息!!");
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
}
} catch (NumberFormatException e1) {
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"输入的成绩不符合要求,修改失败,请重新进行操作!!");
//运行之后设置文本框的值为空
t1.setText("");
t2.setText("");
t3.setText("");
t4.setText("");
}
}
});
p4 = new JPanel();
p4.add(new JLabel("输入学号: "));
p4.add(t6);
p4.add(button1);
area = new JTextArea("请按标签信息输入你想修改的信息!!",5,30);
p1 = new JPanel();
p1.add(area);
panel4 = new JPanel();
panel4.setLayout(new BorderLayout());
panel4.add(p2,BorderLayout.WEST);
panel4.add(p3);
panel4.add(p4,BorderLayout.SOUTH);
panel4.add(p1,BorderLayout.NORTH);
}
}
在此步中,与查询数据所运用的方法基本相同,其中try所代表的函数将修改成绩可能出现的异常状况给处理了。
8.删除数据
// 删除数据实现
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class deletePanel {
MyDBUtil dbUtil = new MyDBUtil();
JPanel panel5;
JPanel p1,p2,p3,p4;
Box boxH1,boxH2;
Box boxV1,boxV2,boxV3,boxV4;
JButton button1;
JTextField te1,te2,te3,te4,te5,te6;
JTextArea area;
public deletePanel() {
//实例化行式盒
boxH1 = Box.createHorizontalBox();
boxH2 = Box.createHorizontalBox();
boxV1 = Box.createVerticalBox();
boxV1.add(Box.createVerticalStrut(50));
boxV1.add(new JLabel("学号"));
boxV1.add(Box.createVerticalStrut(35));
boxV1.add(new JLabel("姓名"));
boxV1.add(Box.createVerticalStrut(35));
boxV1.add(new JLabel("成绩"));
boxH1.add(boxV1);
boxH1.add(Box.createHorizontalStrut(50));
boxV2 = Box.createVerticalBox();
boxV2.add(Box.createVerticalStrut(50));
//实例化单行文本框
te1 = new JTextField(12);
te2 = new JTextField(12);
te3 = new JTextField(12);
//向列式盒中添加单行文本框
boxV2.add(te1);
boxV2.add(Box.createVerticalStrut(35));
boxV2.add(te2);
boxV2.add(Box.createVerticalStrut(35));
boxV2.add(te3);
boxH1.add(boxV2);
p1 = new JPanel();
p1.add(boxH1);
p2 = new JPanel();
p2.add(boxH2);
te6 = new JTextField(10);
button1 = new JButton("删除");
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if(te1.getText().equals(te6.getText())) {
Student student = new Student();
student.set(te1.getText(), te4.getText(), Float.parseFloat(te2.getText()), Float.parseFloat(te5.getText()), Float.parseFloat(te3.getText()));
dbUtil.delete(student);
area.setText("成绩信息删除成功,你可以通过查询成绩来查看相关信息!!!");
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
}else {
area.setText("温馨提示!!"+"\r\n"+"由于两处学号信息不一致,无法进行删除.."+"\r\n"+"请重新输入你想删除的信息!!");
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
}
}catch (NumberFormatException e1) {
// TODO Auto-generated catch block
area.setText("温馨提示!!"+"\r\n"+"输入的成绩不符合要求,删除失败,请重新进行操作!!!");
//运行之后设置文本框的值为空
te1.setText("");
te2.setText("");
te3.setText("");
te4.setText("");
}
}
});
p3 = new JPanel();
p3.add(new JLabel("输入学号: "));
p3.add(te6);
p3.add(button1);
area = new JTextArea("请按标签信息输入你想删除的信息!!",5,30);
p4 = new JPanel();
p4.add(area);
panel5 = new JPanel();
panel5.setLayout(new BorderLayout());
panel5.add(p1,BorderLayout.WEST);
panel5.add(p2);
panel5.add(p3,BorderLayout.SOUTH);
panel5.add(p4,BorderLayout.NORTH);
}
}
9.数据库连接
// 数据库操作实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MyDBUtil {
public Connection getCon() {
Connection con=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//连接数据库
con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root&useSSL=true&serverTimezone=GMT%2B8");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
//查询所有记录
public ResultSet checkAll() {
Connection con = getCon();
Statement statement=null;
ResultSet rs=null;
try {
if (con!=null) {
//建立查询语句
statement = con.createStatement();
//使用查询语句获取结果
rs=statement.executeQuery("select * from student");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//查询所有记录并按某一成绩进行排序(升序或降序)
public ResultSet checkAll(String grade,String sort) {
Connection con = getCon();
Statement statement=null;
ResultSet rs=null;
try {
if (con!=null) {
//建立查询语句
statement = con.createStatement();
//使用查询语句获取结果
rs=statement.executeQuery("select * from student order by "+grade+" "+sort+"");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//添加记录
public void add(Student stu) {
Connection con = getCon();
PreparedStatement pst = null;
try {
if (con!=null) {
pst=con.prepareStatement("insert into student values(?,?,?,?,?)");
pst.setString(1, stu.getId());
pst.setString(2,stu.getName());
pst.setDouble(3, stu.getChengji());
pst.executeUpdate();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//删除记录
public void delete(Student stu) {
Connection con = getCon();
PreparedStatement pst = null;
try {
if (con!=null) {
String sql = "delete from student where 学号 = ?";
pst = con.prepareStatement(sql);
pst.setString(1, stu.getId());
pst.execute();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//修改记录
public void modify(Student stu) {
Connection con = getCon();
PreparedStatement pst = null;
try {
if (con!=null) {
String sql = "update student set 姓名=?,成绩=? where 学号=?";
pst = con.prepareStatement(sql);
pst.setString(1, stu.getName());
pst.setFloat(2, stu.getChengji());
pst.setString(5, stu.getId());
pst.execute();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if(pst!=null) {
try {
pst.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
这部分的数据库连接基本上是照书上来的。
10.运行结果
本次课程设计可以说是临时抱佛脚,数据库方面可以说是还是小白入手,排序方面还是有点冗杂,以及对数据库的远程操作本课程设计都未作出明确的程序,可以说程序仍待完善。
项目git地址: 李长帅2/阿帅的仓库 - Gitee.com