用JAVA写一个简易的学生信息管理系统

395 阅读5分钟

主要功能:基本实现增删改查,跳转最后一个,跳转第一个,上一个,下一个(其中可能存在一点小bug,这个小程序也仅仅用于练习,将刚掌握的知识融合在一起)

工具:配置好java运行环境,且装好eclipse的PC机一台 运用的主要知识点:面对对象,IO,集合,AWT,Swing.......

关于界面: 友情提示:在界面上不用花过多的精力和时间,稍微复杂点的界面可以用插件拖拽自动生成,很方便,你可以把省出来的精力和时间用在代码逻辑上。

网上关于界面生成的插件很多,个人建议使用WindowBuilder,当然你也可以用其他的你认为顺手的插件; WindowBuilder是一款非常流行的Java图形化界面开发插件

注意:我是为了测试方便才在界面中加了一个文本域JTextArea textArea,如果你用的是Swing编程,textArea本身是不带滚动条的,而最好的解决办法是在textArea外加一个JScrollPane scrollPane面板,这样你就可以轻松拥有上下滚动条和左右滚动条,当然你完全可以不用将学生信息显示出来,也就是说根本不需要textArea

没有文本域的界面

没有文本域的界面 我是快乐的分割线2号

功能及代码: 别以为这个程序很小,但其中需要注意的细节还是很多的

学生类Student 要想对学生进行IO操作,则必须实现 Serializable接口,打上可序列化标志 public class Student implements Serializable { //学生可以被进行IO操作,则必须实现 Serializable接口,打上可序列化标志 private String no; private String name; private String age; 要想对学生进行增删改查操作,必须重写Student类中equals方法 public boolean equals(Object obj) { Student s=(Student)obj; return this.no==s.getNo()&&this.name==s.getName()&&this.age==s.getAge(); } Class类 在这个类里面你可以放入存放学生对象的集合 至于集合容器你用哪一种,我认为在作为初学者,而且信息量很少,使用ArrayList和LinkedlList都可以,无伤大雅,当你后期有大的项目,有大量的信息需要处理,那时候再去考虑吧

ArrayList:数组结构,查询效率比较高,但删除,插入元素时效率比较低 LinkedList:链表结构,查询效率低,但删除,插入元素的效率比较高 他们这种差异主要由于他们的的结构所决定的 在Class类你可封装你的增删改查方法

//添加学生
public void addStudent(Student stu){
    this.stuList.add(stu);      
}
//删除学生
public void deleteStudent(Student s){
    this.stuList.remove(s);
}

StudentFrame类 给每个按键添加事件 注意:每个按键事件被触发时你都要去判断3个文本框是否为空,如果是空的话需要弹出图示框(你可以封装一个方法检查文本框是否为空)

学号为空提示框

姓名为空提示框 年龄为空提示框 检查方法代码:

// 输入信息不能为空 public boolean check() { if (txtNo.getText().equals("")) { dialog.showMessageDialog(null, "学号不能为空!"); return false; } if (txtName.getText().equals("")) { dialog.showMessageDialog(null, "名字不能为空!"); return false; } if (txtAge.getText().equals("")) { dialog.showMessageDialog(null, "年龄不能为空!"); return false; } return true; }

  1. 给-“添加”按键-添加事件 需要注意的是,每次添加按键事件被触动后要判断库中是否有次学生,也就是说不能重复添加,如果重复弹出提示框

重复添加提示框 // 添加学生 public void addStu() { btnAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (check() == true) { //遍历根据学号找重复 for (Student s : c.stuList) { if (s.getNo().equals(txtNo.getText())) { dialog.showMessageDialog(null, "不能重复添加!"); return; } } try { c.addStudent(new Student(txtNo.getText(), txtName.getText(), txtAge.getText())); saveStudent(); } catch (Exception e1) {

                    e1.printStackTrace();
                }
                dialog.showMessageDialog(null, "添加成功");

            }

        }
    });
}

PS:考虑到贴上代码文章太长,再说也没必要,后面的稍长的代码我就略过,阿弥陀佛,么么哒

  1. 给-“删除”-删除按键添加事件 注意: 1.删除后则显示下一个学生的信息,如果删除的是最后一个学生,则显示第一个学生的信息 2.可以通过学生学号查找到学生对象,根据集合下标删除,亦可以直接查找这个学生对象删除学生信息(利用集合中contains(Object o)方法,如果此列表中包含指定的元素,则返回true)

//如果是删除的是最后一个学生,则显示第一个学生 if (c.stuList.get(c.stuList.size() - 1).getNo().equals(txtNo.getText())) { txtNo.setText(c.stuList.get(0).getNo()); txtName.setText(c.stuList.get(0).getName()); txtAge.setText(c.stuList.get(0).getAge()); } else { txtNo.setText(c.stuList.get(a).getNo()); txtName.setText(c.stuList.get(a).getName()); txtAge.setText(c.stuList.get(a).getAge()); } 3. 给-“修改按钮”-添加事件 根据学号来修改学生信息,修改失败弹出提示框

修改失败对话框 4. 给-“查找”-按钮添加事件 注意:根据学号来查找学生信息,遍历整个集合,但问题是如何才能判断迭代到了最后一个学生?这个问题我思虑良久,最终找到一个蹩脚的办法,定义一个整型变量temp,没遍历一次集合就加1,如果temp==集合的大小,则遍历到了最后一个学生对象,如果找不到学生信息,则弹出提示框:

找啊找 5. 给剩余的其他按钮添加事件 根据上面的步骤一步一步去操作,耐心的仔细的去考虑,相信难不倒聪明的你!

我是快乐的分割线3号

  1. 保存学生对象 // 保存学生对象 public void saveStudent() { FileOutputStream out; ObjectOutputStream writer = null; try { out = new FileOutputStream("F:\IO\stu.txt"); writer = new ObjectOutputStream(out); writer.writeObject(c);// 写入学生对象

     } catch (IOException e) {
         e.printStackTrace();
     } finally {
         try {
             writer.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
    

    } 打开你存储学生信息的文件你会发现如下:

stu.txt 因为我是已二进制的形式写进去的,所以看不懂

  1. // 读出学生对象信息 public void readStudent() { File file = new File("F:\IO\stu.txt"); if (file.exists()) { FileInputStream in = null; ObjectInputStream reader = null; try { in = new FileInputStream(file); reader = new ObjectInputStream(in); c = (Class) reader.readObject();

         } catch (Exception e) {
             e.printStackTrace();
         } finally {
             try {
                 reader.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     } else {
         try {
             file.createNewFile();
         } catch (IOException e) {
             e.printStackTrace();
         }
         saveStudent();
     }