jtree+mysql_Java课设--学生成绩管理系统

本文介绍了一款基于jtree和mysql的学生成绩管理系统,包括登录验证、用户数据存储、学生信息展示、JTree菜单功能、表格编辑限制以及界面美化等。系统采用dao模式实现数据库操作,并通过监听树节点实现不同功能跳转。界面设计注重细节,如隔行变色、图标设置等,但仍有改进空间,如菜单栏布局。未来计划优化菜单栏并学习poi技术以实现数据导出。
摘要由CSDN通过智能技术生成

一、 前期调查

由于无教师权限,无法实实在在考察成绩管理系统的界面,但考虑到成绩管理系统和教务系统的相似性,所以,此次前期调查是以集美大学教务系统为立足点开始的。

可以从图中看出,登录界面是由登录信息与验证信息的标签栏和输入文本框,以及功能按钮组成。(这个登录界面说实话有点粗糙,文本框并没有对齐,“密 码”这个table也并没有与上下的table对齐) 所以要引以为“鉴”,在系统界面的细节上要处理好。

4ed32085167bdf5a653b3fc2d498e9b4.png

登录系统后,顶部为小功能按钮实现区,该系统的主打操作区使用了树形的父子列表放在了左边,这可以使菜单区与功能实现区很好的分割了开来。

875bfd35ff8639bbf079efef98946c2f.png

二、 系统架构图

dea0da1e7de5808d017cdc8070b02def.png

三、团队博客链接及gitee地址

四、 gui包

根据所需要实现的功能对对应了一个界面类。

8dc2437b17305fcf94b35a7fc5e14d94.png

五、 部分详解

1 、Users数据表

登录的用户信息是存储在MySQL中的,由于考虑的成绩管理这种系统的特殊性(一般账号管理员会分配到个人,不支持个人注册使用),该系统就没有编写注册的功能。Uers表里的内容也是极简为主,能显示出这个账号的使用者及账号和密码即可。

2bc9c57ce808084fe490d02703cf3765.png

当然就算简单为主,在编写登录功能的过程中,还是使用了dao模式来实现应用与逻辑分离。

3a7f2fea03bdf70f4df609a7e7e11551.png

public boolean checkLogin(String sql,Object[] obj) {

boolean isok = false;

try {

connection = getConnection();

preStatement = connection.prepareStatement(sql);

//System.out.println(preStatement.toString());

for(int i=0;obj!=null&&i

{

preStatement.setObject(i+1, obj[i]);

//System.out.println(obj.length);

}

resultset = preStatement.executeQuery();

//System.out.println("1");

if(resultset.next()) {

isok=true;

}

} catch (SQLException e) {

e.printStackTrace();

}

realeaseAll(resultset, preStatement, connection);

return isok;

}

2、 列表形式显示学生信息

98c817091433ee673f96c997db906964.png

从代码中可以看出,从数据库取出来的是List型的数据,存到vector容器中的,再将容器的值传入table模板即可。

private Vector> createTableModelData() {

Vector> data = new Vector>();

Operation opt = new Operation();

list = opt.showStudent();

for (int i = 0; i < list.size(); i++){

Vector rowData = new Vector();

rowData.add(""+list.get(i).getNumber());

rowData.add(list.get(i).getName());

rowData.add(""+list.get(i).getMath());

rowData.add(""+list.get(i).getJava());

rowData.add(""+list.get(i).getPe());

data.add(rowData);

}

return data;

通过在new的时候重构prepareRenderer函数,对奇偶行设置不同的颜色实现隔行颜色交替。

Vector> data = createTableModelData();

tableModel = new DefaultTableModel(data,columNames) ;

table = new JTable(tableModel) {

@Override

public Component prepareRenderer(TableCellRenderer renderer, int row,int column) {

Component component = super.prepareRenderer(renderer, row, column);

int num = 2;

if (row % num == 0) {

component.setBackground(Color.white);

}

if (row % num == 1) {

component.setBackground(new Color(153,204,255));

}

return component;

}

};

3、 Jtree树菜单的实现

通过对JTree树的逻辑增加树节点,来实现父子文件夹的菜单模型。并对该树的节点们设置监听,判断是否为叶子节点,若为叶子节点,则匹配该节点的内容来判断要进入哪个功能操作界面。

JTree menuTree=new JTree();

menuTree.setFont(new Font("宋体", 0, 24));

DefaultMutableTreeNode treeNode1 = new DefaultMutableTreeNode("教师管理菜单");

DefaultMutableTreeNode treeNode2 = new DefaultMutableTreeNode("学生信息");

DefaultMutableTreeNode treeNode3 = new DefaultMutableTreeNode("添加学生信息");

treeNode2.add(treeNode3);

treeNode3 = new DefaultMutableTreeNode("删除学生信息");

treeNode2.add(treeNode3);

treeNode1.add(treeNode2);

treeNode2 = new DefaultMutableTreeNode("学生成绩");

treeNode3 = new DefaultMutableTreeNode("导入学生成绩");

DefaultMutableTreeNode treeNode4 = new DefaultMutableTreeNode("Math");

treeNode3.add(treeNode4);

treeNode4 = new DefaultMutableTreeNode("Java");

treeNode3.add(treeNode4);

treeNode4 = new DefaultMutableTreeNode("PE");

treeNode3.add(treeNode4);

treeNode2.add(treeNode3);

treeNode3 = new DefaultMutableTreeNode("查询学生成绩");

treeNode2.add(treeNode3);

treeNode4 = new DefaultMutableTreeNode("根据学号查询");

treeNode3.add(treeNode4);

treeNode4 = new DefaultMutableTreeNode("根据姓名查询");

treeNode3.add(treeNode4);

treeNode3 = new DefaultMutableTreeNode("修改学生成绩"); treeNode2.add(treeNode3);

treeNode3 = new DefaultMutableTreeNode("显示学生成绩");

treeNode2.add(treeNode3);

treeNode1.add(treeNode2);

treeNode3 = new DefaultMutableTreeNode("模拟生成十万数据")

treeNode1.add(treeNode3);

menuTree.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1));

menuTree.setRowHeight(60);

menuTree.setVisibleRowCount(30);

treejScrollPane1.setViewportView(menuTree);

4、 对table的列设置iscellEditable来限制用户是否能够编辑操作。

在录入成绩界面,只有Math这一列的值是能更改的。在表格模型new时,重构iscellEditable函数,使得在自定义的行或者列中实现可编辑操作。

tableModel = new DefaultTableModel(data,columNames) {

/**

* 设置只有成绩列才能进行编辑

*/

private static final long serialVersionUID = 1L;

@Override

public boolean isCellEditable(int row, int column) {

int ableColumn = 2;

if(column == ableColumn ) {

return true;

}

return false;

}

};

5、 界面添加小图标

这些小图标的添加,会使界面看起来舒服一点,不会过于死板

e8099f4b7804c5f69dfc530c661e0b8a.png

无小图标版本如下图所示:

8bd428b84b0ac98952808832b87fc327.png

菜单小图标设置代码:

systemenu.setFont(new java.awt.Font("宋体", 0, 36));

systemenu.setText("系统菜单");

ImageIcon menuima = new ImageIcon("img/menu.png"); systemenu.setIcon(menuima);

登录界面背景图设置代码:

public Login() {

initComponents();

this.setIconImage(Toolkit.getDefaultToolkit().getImage("img/jmu.png"));

this.setTitle("学生成绩管理系统");

//要设置的背景图片

ImageIcon img = new ImageIcon("img/2.jpg");

//将背景图放在标签里。

JLabel imgLabel = new JLabel(img);

//将背景标签添加到jfram的LayeredPane面板里。

this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));

imgLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());

this.setSize(1000, 620);

this.setLocation((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-1000)/2,

(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-620)/2);

setResizable(false);

}

六、部分界面运行截图

登录界面:

4cd88c2b29b245fced3c6200d5b3252a.png

登录成功后的操作界面:

c97f358a6f08cbb0daf3922020276dcf.png

添加学生信息:

7702030316997ef4d823f1572e2eb36f.png

录入学生成绩:分不同科目,通过对列表分数栏的值进行更改后,点击保存导入

efc6aef9b5805a3c100a7fad668b8386.png

修改学生成绩:

4026b60a309b6c86ed1ec2a79c2735db.png

七、展望

1、 重做菜单栏面板。这次菜单栏界面虽然实现了JTree树,但在某些panel的布局上,仍觉得有些凌乱,不够理想。

2、 由于本次课设精力全部花在了做功能界面上,很遗憾的没有学习poi技术实现导出xml文档,会在课后学习掌握运用该技术。

[[]()]()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值