学生信息管理系统的数据库系统课程设计(Java)

前言:

博主在深入了解Java的语法后,觉得前段时间数据库课设写的代码有点菜了,于是决定重写界面设计部分(数据库的dao层没改),原来的可以参见之前我的这篇文章:https://blog.csdn.net/Zhongtongyi/article/details/105031058(包括此课设题目的详细说明)。

 

总结一下这次写的和之前的对比有哪些改进呢?(其实主要是代码行数,原来同样的UI界面设计需要代码500行+,现在才200行+,优化了接近300行了

一、不同类实现不同功能

原来写的代码太冗余而且长,主要是几个界面的代码全放在一个类中,所以可读性不咋地,java嘛,本来就是面向对象的语言,不多写几个类就会搞得像面向过程一样了,多写几个类有什么好处呢?首先,不同类的类名就可以看出类的功能特性,以这次代码为例:one.class就放第一个界面的代码,two_four.class就放第二个到第四个界面的代码,Test类不难看出这个类就是测试的,用于生成界面类的实例对象。把整个UI层用多个类分开,这样找bug时也更方便,写代码思路也清晰。

 

二、使用新语法:

之前写的太多重复、单一化的语句了,比如:


	JPanel jep1=null;JTextField JeTF1=null;JLabel jeb1 = null;
	JPanel jep2=null;JButton JeB1=null;
	JPanel jep3=null;JButton JeB2=null;
	JPanel jep4=null;JTextField JeTF4=null;JLabel jeb4 = null;
	JPanel jep5=null;JTextField JeTF5=null;JLabel jeb5 = null;
	JPanel jep6=null;JTextField JeTF6=null;JLabel jeb6 = null;
	JPanel jep7=null;JTextField JeTF7=null;JLabel jeb7 = null;
	JPanel jep8=null;JTextField JeTF8=null;JLabel jeb8 = null;
	JPanel jep9=null;JTextField JeTF9=null;JLabel jeb9 = null;
	JPanel jep10=null;JTextField JeTF10=null;JLabel jeb10 = null;
	JPanel jep11=null;JTextField JeTF11=null;JLabel jeb11 = null;
	JPanel jep12=null;JTextField JeTF12=null;JLabel jeb12 = null;

看到这么多眼睛都难受,这次直接用到泛型数组,还用到了循环语句避免了大量的相似代码重写,还有for(each:element){}这种简化循环的语法格式,lambda表达式,

 

三、小技巧

比如在two_four.class的addjp方法中通过一个形参变量j用于区分第二、三个界面和第四个界面,j=0时用于第二、三个界面,j=1时用于第四个界面,如果没有这个技巧我就得将two_four.class分开写成two.class,three.class,four.class,这样代码量又大了,而且又会造成代码冗余。

 

四、工厂思想的体现

一个类中不同的方法用于不同的功能。比如setjl方法用于设置label标签,addjp方法用于将子面板放入主面板中,这就像个工厂一样。在Test.class中通过传递参数到界面类中的特定方法从而实现特定功能。当然用spring框架更快,连界面设置的类都不用写了。

 

UI图:

好,接下来搬代码,由于各个界面实现功能差不多,所以在one.java中详细作了注释,其他几个界面类原来差不多:

one.java

package ZTY;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class one {
    public final JPanel japmax = new JPanel();//最后将所有界面一所有子面板放在japmax中
    private final ArrayList<JPanel> jap = new ArrayList<>(10);//存所有子面板
    private final JButton jab = new JButton();//界面一的按钮
    private final ArrayList<JLabel> jal = new ArrayList<>(10);//界面一的标签
    private final ArrayList<JTextField> JTFA = new ArrayList<>(10);//界面一的输入文本框

    public void makejap(int size) {//为泛型数组jap赋予真实面板元素,size指定数组元素个数
        for (int i = 0; i < size; i++) {
            jap.add(new JPanel());
        }
    }

    public void makeJTFA(int size) {//为泛型数组JTFA赋真实面板元素,size指定数组元素个数
        for (int i = 0; i < size; i++) {
            JTFA.add(new JTextField(8));//8为输入框的宽度
        }
    }

    public void makejab(String name, Dimension preferredSize) {//为按钮设置名字和大小
        jab.setText(name);
        jab.setPreferredSize(preferredSize);
    }

    public void setJal(int index, String name) {//为泛型数组jal赋真实标签元素
        jal.add(index, new JLabel(name));
    }

    public void addjap() {
        for (int i = 0; i < 7; i++) {
            jap.get(i).add(jal.get(i));//前七个标签放到jap中
            jap.get(i).add(JTFA.get(i));//前七个输入框放到jap中
        }

        jap.get(7).add(jab);//按钮放到jap中
        jap.get(8).add(jal.get(7));//作者:ZTY的标签放到jap中

        for (JPanel jxap : jap) {//将所有的子标签加入到表示界面一的大面板japmax中
            japmax.add(jxap);
        }
    }
}

two_to_four.java

package ZTY;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class two_to_four {
    public final JPanel jpmax = new JPanel();//设置public可以在Test.java中访问常量jpmax,如果为private则不能访问
    private final ArrayList<JPanel> jp = new ArrayList<>(10);
    private final JButton jb = new JButton();
    private final ArrayList<JLabel> jl = new ArrayList<>(10);
    private final ArrayList<JTextField> JTF = new ArrayList<>(10);

    public void makejp(int size) {
        for (int i = 0; i < size; i++) {
            jp.add(new JPanel());
        }
    }

    public void makeJTF(int size) {
        for (int i = 0; i < size; i++) {
            JTF.add(new JTextField(8));
        }
    }

    public void makejb(String name, Dimension preferredSize) {
        jb.setText(name);
        jb.setPreferredSize(preferredSize);
    }

    public void setJl(int index, String name) {//为泛型数组jl赋真实标签元素
        jl.add(index, new JLabel(name));
    }

    public void addjp(int j) {//注意:当j为0时用于第二三个界面,j为1时用于第四个界面
        for (int i = 0; i < 5+j; i++) {//放标签和输入文本框
            jp.get(i).add(jl.get(i));
            jp.get(i).add(JTF.get(i));
        }
        jp.get(5+j).add(jb);//放按钮

        for (JPanel jxp : jp) {
            jpmax.add(jxp);
        }
    }
}

five.java

package ZTY;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class five {
    public final JPanel jepmax = new JPanel();
    private final JButton jeb1 = new JButton();
    private final JButton jeb2 = new JButton();
    private final ArrayList<JPanel> jep = new ArrayList<>(10);
    private final ArrayList<JLabel> jel = new ArrayList<>(10);
    private final ArrayList<JTextField> JTFE = new ArrayList<>(10);
    public void makejep(int size) {
        for (int i = 0; i < size; i++) {
            jep.add(new JPanel());
        }
    }

    public void makeJTFE(int size) {
        for (int i = 0; i < size; i++) {
            JTFE.add(new JTextField(8));
        }
    }

    public void makejeb(String name1,String name2, Dimension preferredSize) {
        jeb1.setText(name1);
        jeb1.setPreferredSize(preferredSize);
        jeb2.setText(name2);
        jeb2.setPreferredSize(preferredSize);
    }

    public void setJel(int index, String name) {
        jel.add(index, new JLabel(name));
    }

    public void addjep(){
        jep.get(0).add(jel.get(0));
        jep.get(0).add(JTFE.get(0));

        jep.get(1).add(jeb1);
        jep.get(2).add(jeb2);

        for(int i=0;i<jel.size()-1;i++){
            jep.get(i+3).add(jel.get(i+1));
            jep.get(i+3).add(JTFE.get(i+1));
        }
        for (JPanel jexp : jep) {
            jepmax.add(jexp);
        }
    }
}

Test.java

package ZTY;
import javax.swing.*;
import java.awt.*;

public class Test extends JFrame {//继承JFrame类
    public Test(){
        //生成各个类的实例
        one one=new one();
        two_to_four two=new two_to_four();
        two_to_four three=new two_to_four();
        two_to_four four=new two_to_four();
        five five=new five();

        one.makejap(9);//学生个人信息输入界面设置
        one.makeJTFA(7);
        one.setJal(0,"学号");
        one.setJal(1,"姓名");
        one.setJal(2,"性别");
        one.setJal(3,"生日");
        one.setJal(4,"籍贯");
        one.setJal(5,"院系");
        one.setJal(6,"班级");
        one.makejab("输入",new Dimension(150,20));
        one.setJal(7,"作者:ZTY");
        one.addjap();

        two.makejp(6);//学籍变更情况输入界面设置
        two.makeJTF(5);
        two.setJl(0,"记录号");
        two.setJl(1,"学号");
        two.setJl(2,"变更代码");
        two.setJl(3,"记录时间");
        two.setJl(4,"描述");
        two.makejb("输入",new Dimension(136,20));
        two.addjp(0);//注意j的作用

        three.makejp(6);//奖励情况输入界面设置
        three.makeJTF(5);
        three.setJl(0,"记录号");
        three.setJl(1,"学号");
        three.setJl(2,"级别代码");
        three.setJl(3,"记录时间");
        three.setJl(4,"描述");
        three.makejb("输入",new Dimension(136,20));
        three.addjp(0);//注意j的作用

        four.makejp(7);//处罚情况输入界面设置
        four.makeJTF(6);
        four.setJl(0,"记录号");
        four.setJl(1,"学号");
        four.setJl(2,"级别代码");
        four.setJl(3,"记录时间");
        four.setJl(4,"描述");
        four.setJl(5,"是否生效");
        four.makejb("输入",new Dimension(136,20));//设置按钮名字和大小
        four.addjp(1);

        five.makejep(13);//学生个人情况查询和修改界面设置
        five.makejeb("查询","修改",new Dimension(136,20));//设置按钮名字和大小
        five.makeJTFE(11);
        five.setJel(0,"学号");
        five.setJel(1,"学籍变动");
        five.setJel(2,"记录时间");
        five.setJel(3,"描述");
        five.setJel(4,"奖励");
        five.setJel(5,"记录时间");
        five.setJel(6,"描述");
        five.setJel(7,"处罚");
        five.setJel(8,"记录时间");
        five.setJel(9,"描述");
        five.setJel(10,"是否生效");
        five.addjep();

        JTabbedPane JTP=new JTabbedPane();//最外层的选项卡面板
        JTP.addTab("学生个人信息输入界面 ",one.japmax);
        JTP.addTab("学籍变更情况输入界面",two.jpmax);
        JTP.addTab("奖励信息输入界面",three.jpmax);
        JTP.addTab("处罚情况输入界面",four.jpmax);
        JTP.addTab("学生个人情况查询和修改界面",five.jepmax);
        JTP.addChangeListener(e -> System.out.println("当前选中的选项卡: " + JTP.getSelectedIndex()));
        JTP.setSelectedIndex(0);
        this.add(JTP);
        this.setLayout(new GridLayout(2, 1));
        this.setContentPane(JTP);
        this.setSize(600,400);
        this.setLocation(400, 180);
        this.setTitle("学生信息管理系统");
        this.setVisible(true);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

    public static void main(String []args){
        Test test=new Test();
    }
}

 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值