一、 前期调查
由于无教师权限,无法实实在在考察成绩管理系统的界面,但考虑到成绩管理系统和教务系统的相似性,所以,此次前期调查是以集美大学教务系统为立足点开始的。
可以从图中看出,登录界面是由登录信息与验证信息的标签栏和输入文本框,以及功能按钮组成。(这个登录界面说实话有点粗糙,文本框并没有对齐,“密 码”这个table也并没有与上下的table对齐) 所以要引以为“鉴”,在系统界面的细节上要处理好。
登录系统后,顶部为小功能按钮实现区,该系统的主打操作区使用了树形的父子列表放在了左边,这可以使菜单区与功能实现区很好的分割了开来。
二、 系统架构图
三、团队博客链接及gitee地址
四、 gui包
根据所需要实现的功能对对应了一个界面类。
五、 部分详解
1 、Users数据表
登录的用户信息是存储在MySQL中的,由于考虑的成绩管理这种系统的特殊性(一般账号管理员会分配到个人,不支持个人注册使用),该系统就没有编写注册的功能。Uers表里的内容也是极简为主,能显示出这个账号的使用者及账号和密码即可。
当然就算简单为主,在编写登录功能的过程中,还是使用了dao模式来实现应用与逻辑分离。
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、 列表形式显示学生信息
从代码中可以看出,从数据库取出来的是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、 界面添加小图标
这些小图标的添加,会使界面看起来舒服一点,不会过于死板
无小图标版本如下图所示:
菜单小图标设置代码:
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);
}
六、部分界面运行截图
登录界面:
登录成功后的操作界面:
添加学生信息:
录入学生成绩:分不同科目,通过对列表分数栏的值进行更改后,点击保存导入
修改学生成绩:
七、展望
1、 重做菜单栏面板。这次菜单栏界面虽然实现了JTree树,但在某些panel的布局上,仍觉得有些凌乱,不够理想。
2、 由于本次课设精力全部花在了做功能界面上,很遗憾的没有学习poi技术实现导出xml文档,会在课后学习掌握运用该技术。
[[]()]()