学生信息管理系统的数据库系统课程设计(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();
    }
}

 

  • 20
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
该学生成绩信息管理系统涉及到学生、教师、系统管理员、班级、学生成绩、课程。设置一个系统管理员对系统进行管理。所有用户需输入账号、密码登录进入系统;管理员进入系统后可对学生、老师、班级、课程进行增删改查操作;学生进入系统,查看成绩、查看和修改自己的信息;老师进入系统后,对自己这门课程的学生设置课程成绩、查看和修改自己的信息,查看学生的信息和成绩、以及统计分析学生的成绩; 管理员为班级设置年级,为年级设置课程,为班级的每门课程设置老师,为学生设置班级。一个年级有多门课程(语文、数学、外语等等),班级的每门课程只能有一名老师,一个老师可以有多门课程;老师选择自己这门课程为该课程的学生登记成绩。老师可以查看其他老师的信息(可以当成是老师的通讯录),查看本课程学生的信息和成绩;学生可以查看班级其他同学的信息(可以看成是班级的同学录)。 考试分为两种,一种是年级统考,一种是平时考试。年级统考需要管理员事先添加一次年级统考,考试成绩出来后,老师进入系统选择该次考试为学生登记成绩。平时考试则是班级平时的考试,老师添加考试信息,登记成绩。成绩统计分析则是针对年级统考进行分析,主要涉及各学科分数名次,总分名次。 技术实现 系统环境:Windows开发工具:IDEAJava版本:JDK 1.8服务器:Tomcat 1.8数据库MySQL 5.X系统采用技术:Servlet+Jsp+Jdbc+H-ui+EasyUI+jQuery+Html+Css+Ajax 系统功能系统主要分为三种用户角色,分别是管理员、老师以及学生,其具体功能如下: - 管理员   学生信息管理、教师信息管理、年级信息管理、班级信息管理、课程信息管理、考试信息管理,系统参数设置 - 老师   教学管理、教师个人信息维护、教师通讯录管理 - 学生考试成绩查询、学生通讯录、学生个人信息维护 运行截图 登录界面: 管理员界面: 考试列表:  成绩统计: 学生信息管理: 教师信息管理: 年级、班级信息管理:  系统设置: 教师界面:  成绩登记:  教师通讯录: 个人信息:  学生界面: 学生成绩查询: 班级通讯录: 学生个人信息:              
JAVA程序设计 课程设计报告 课 题: 学生信息管理系统 姓 名: 学 号: 同组姓名: 专业班级: 指导教师: 设计时间: 目 录 一、系统描述 2 1、需要实现的功能 3 2、设计目的 3 二、分析与设计 3 1、功能模块划分 3 2、数据库结构描述 4 3、系统详细设计文档 6 4、各个模块的实现方法描述 9 5、测试数据及期望结果 11 三、系统测试 16 四、心得体会 23 五、参考文献 24 六、附录 24 一、系统描述 1、需求实现的功能 1.1、录入学生基本信息的功能 学生基本信息主要包括:学号、姓名、年龄、出生地、专业、班级总学分,在插入 时,如果数据库已经存在该学号,则不能再插入该学号。 1.2、修改学生基本信息的功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 1.3、查询学生基本信息的功能 可使用 "姓名"对已存有的学生资料进行查询。 1.4、删除学生基本信息的功能 在管理员模式下,只要选择表格中的某个学生,就可以删除该学生。 1.5、用户登陆 用不同的登录权限可以进入不同的后台界面,从而实现权限操作。 1.6、用户登陆信息设置 可以修改用户登陆密码 2、设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息 管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者 和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快 捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据, 这种管理方式存在着许多缺点,如:效率低、保密性差、人工的大量浪费;另外时间一 长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学 技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人 类社会的各个领域并发挥着越来越重要的作用。 作为计算机应用的一部分,使用计算机对学校的各类信息进行管理,具有手工管理无 法比拟的优点。例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好 、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科 学化、正规化管理,与世界接轨的重要条件。 本系统是将现代化的计算机技术和传统的教学、教务工作相结合,按照学院的工作流 程设计完成的。通过一个简化的学生信息管理系统,使学生信息管理工作系统化、规范 化、自动化,从而达到提高学生信息管理效率的目的。 二、分析与设计 1、功能模块划分 图1 功能模块划分图 2、数据库结构描述 2.1、数据库E-R模型 图2 登录用户管理E-R图 图3 实体学生E-R图 2.2、数据库关系模型——二维表 表1 学生表(student) "字段 "数据类型 "说明 " "stuId "nvarchar(30) "学号 " "stuName "nvarchar(30) "姓名 " "stuSex "nvarchar(30) "性别 " "stuAge "int "年龄 " "stuJg "nvarchar(30) "籍贯 " "stuZy "nvarchar(30) "专业 " "classId "nvarchar(30) "班号 " "stuSourse "numeric(5,2) "总学分 " 图4 录入数据后的学生表 表2 登陆权限表(login) "字段 "数据类型 "说明 " "userId "nvarchar(30) "用户名(账号),即登 " " " "陆Id " "password "nvarchar(30) "登陆密码 " "position "nvarchar(30) "职位,如班委,普通学 " " " "生 " 图5 录入数据后的登陆权限表 3、系统详细设计文档 3.1、系统执行流程图 图6 系统执行流程图 3.2、类的划分 表3 学生信息查询类 "类名 "类的成员属性与方法 "说明 " "StuQuery.jav"JPanel jp1 "定义一个面板 " "a " " " " "JLabel jp1_jl1 "定义两个标签 " " "JTextField jp1_jtf1 "定义一个文本输入框 " " "JButton "定义三个按钮 " " "jp1_jb1,jp1_jb2,jp1_jb3 " " " "JTable jtb "定义一个表 " " "JScrollPane jsp "定义一个滚动面板,用于" " " "存放表 " " "TableModel tm "自定义一个表模型,用于" " " "更新表数据 " " "public StuQuery(Frame "构造方法,通过传递三个" " "Main,String title ,boolean "参数,实

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值