美文网首页JavaJava学习笔记
用JAVA写一个简易的学生信息管理系统

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

作者: 极客汪 | 来源:发表于2016-10-07 15:52 被阅读12621次

前言:写这篇文章的目的:

  • 为了以后复习方便,当你回头看自己的代码的时候不至于想不起你写下这段代码的思路;
  • 慢慢锻炼自己总结的能力,养成习惯以后去写自己的技术博客,古人云,温故而知新
  • 作为一个技术拓荒者,我希望分享我的学习心得,希望在枯燥的学习过程中找到哪怕一丁点的乐趣

效果图如下:

简易学生信息管理系统

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

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


我是快乐的分割线1号


关于界面:

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

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

至于界面的安装可以参照百度经验
Eclipse中JavaSwing图形插件安装

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

没有文本域的界面

没有文本域的界面

我是快乐的分割线2号


功能及代码:

别以为这个程序很小,但其中需要注意的细节还是很多的

学生类Student

  1. 要想对学生进行IO操作,则必须实现 Serializable接口,打上可序列化标志
public class Student implements Serializable {
    //学生可以被进行IO操作,则必须实现 Serializable接口,打上可序列化标志
    private String no;
    private String name;
    private String age;
  1. 要想对学生进行增删改查操作,必须重写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类

  1. 在这个类里面你可以放入存放学生对象的集合
    至于集合容器你用哪一种,我认为在作为初学者,而且信息量很少,使用ArrayList和LinkedlList都可以,无伤大雅,当你后期有大的项目,有大量的信息需要处理,那时候再去考虑吧

    • ArrayList:数组结构,查询效率比较高,但删除,插入元素时效率比较低
    • LinkedList:链表结构,查询效率低,但删除,插入元素的效率比较高
      他们这种差异主要由于他们的的结构所决定的
  2. 在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:考虑到贴上代码文章太长,再说也没必要,后面的稍长的代码我就略过,阿弥陀佛,么么哒

2. 给-“删除”-删除按键添加事件

注意:
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

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

2. // 读出学生对象信息
    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();
        }

我是最后的分割线


需要改进的地方:

  • 可能还存在小bug没有解决
  • 学生信息不完整,可以添加院校,专业,班级等等来扩展
  • 学生对象完全可以存入到数据库中,利用JDBC来操作学生对象
  • 缺少一个登陆界面,以管理的身份验证密码后进入管理系统,管理学生信息

明白事理的人使自己适应这个世界;不明白事理的人想让这个世界适应自己。---萧伯纳

施主,结个善缘吧!
您好,我是小焱焱_

相关文章

网友评论

  • b23606423c0e:楼主,,你好啊,,可以把这个源代码发一下吗😊 急用1318177321@qq.com,万分感谢
  • a75b841f87ca:大神我可以求个源代码吗:sob::sob:我的邮箱是836075524@qq.com
  • d1aa31d3f499:楼主=-= 求发源码 850867443@qq.com 好人一生平安!
  • 2100d119f3c7:楼主好人!TVT 求源代码 2735259879@qq.com
  • 刘小仙女:楼楼,求完整版代码943167696@qq.com
  • ff28e51193cc:大神 求一份完整的源代码代码,2210874089@qq.cpm 万分感谢
  • c072d62efbfa:大神,如果只是将信息存到面板上的文本域中并进行各种操作,而不用txt文档,怎么做呢?
    c072d62efbfa:@极客汪 看了一天,对于刚学五周的我来说有点难
    c072d62efbfa:@极客汪 大神大哥,没能弄出来,存入和读出的那点您能帮我改一下么
    // 保存学生对象
    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();
    }
    }

    }

    // 读出学生对象信息
    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();
    }
    for (int i = 0; i < c.stuList.size(); i++) {
    String str = String.format("学号:%s,姓名:%s,年龄:%s", c.stuList.get(i).getNo(), c.stuList.get(i).getName(),
    c.stuList.get(i).getAge());
    textArea.append(str + "\r\n");
    System.out.print(str + "\n");
    }
    }
    极客汪:@张大大_81e1 一样的,不用IO流读写就可以,先读取信息,然后用程序直接写到面板就可以了啊
  • _千寻瀑_:想要源码的加我315764194
    663c0cb2d944:@_千寻瀑_请问是加qq吗? 这个源码能给我发一下吗?谢谢您!
  • HEROQYC:楼主可以分享一下源码么或者加一下qq最近在做一个和楼主差不多的也是学生管理系统,可以交流交流么?十分感谢🙏🙏🙏1439069801@qq.com
    QQ 1439069801
  • 686698dac1db:急用代码,1936991055@qq.com谢谢
  • 762a4740d5a3:亲爱的楼主 源码发一下吧2201903835@qq.com
  • 青春年少疯狂几许:源码可以分享吗?可以的话,发我邮箱可以吗?谢谢哦2521345456@qq.com
  • f8798ab3f865:楼主可以分享一下吗,谢谢,可以吧源码发到邮箱吗 1679059110@qq.com
  • 35794aa17d46:楼主!写的很好!分享一下!万分感激!zjxing123@126.com
  • 64f04d06d857:楼主,可以分享一下源码吗😂😂😂,邮箱:741215298@qq.com,谢谢啦!
  • 39f097dc9fb2:楼主楼主我也想要源码,万分感激!791606715@qq.com,谢谢啦:pray: :pray: :pray:
  • fd0aff65e795:楼主可以给我发下源代码吗,最近在学习这个,我的邮箱是1198255517@qq.com 万分感谢!
  • c6d040cfb503:您好,能发下源码嘛,1240306775@qq.com,非常感谢
  • Zoe333口亨:求源代码 qq892048853 谢谢!!
  • 758593e8e821:楼楼可否把源代码 发给我呢 谢谢 2841195582
  • a847841afda7:小白学习JAVA中,求楼主源代码学习一下(903068211@qq.com),万分感谢楼主
  • 9d02e4a4b8f8:楼主我也想要源码_(:з」∠)_最近在学这个,,拜托拜托,我邮箱是2215652205@qq.com,谢谢啦
  • 肉乎乎_81b2:想要完整代码
  • 221985aa27d2:博主能否把源代码发给我490440371@qq.com
  • fb9d12f2600b:1619695521@qq.com 谢谢楼主源代码,急需
  • 74058fba5c5c:为什么我txt有录入但是却没办法显示呢?
    74058fba5c5c:@极客汪 有的 可以私信或着用别的软件··讨论一下吗?
    极客汪:你IO读取文件的时候有问题吗
  • aee2e84ed084:楼楼,新年快乐!!,可以给我发一份源码吗,拜托了~~:blush: 3122394300@qq.com
  • ae67b08760ed:楼楼可以发一下源代码吗?邮箱845997503@qq.com.拜托了( •̥́ ˍ •̀ू )
  • 二分之一的承诺_c772:楼主,可以发一下源程序吗?非常着急!谢谢😜了!
    39f097dc9fb2:在么?能给我也发一份么?791606715@qq.com,谢谢啦
    极客汪:@二分之一的承诺_c772 已发
    二分之一的承诺_c772:@二分之一的承诺_c772 2115957701
  • b7e4b5061716:楼主,,你好,,可以把这个源代码发一下吗😊 急用2293018816@qq.com
    39f097dc9fb2:楼主给您发了么?能给我也发一份么?791606715@qq.com,谢谢啦
    b7e4b5061716:@极客汪 谢谢啦
    极客汪:@嗯呵呵哒 已发
  • 10da92eda584:楼楼,这是我的邮箱3220363306@qq.com,源码就拜托了啊
  • 10da92eda584:lou楼主可否借源码一观
    10da92eda584:急用,多谢了
  • _千寻瀑_:能发下源代码吗?315764194@qq.com。谢谢啦
    44f02e99742f:源码可以分享吗 923557252@qq.com
    HEROQYC:@_千寻瀑_ 朋友楼主分享给你的源代码还有么么,能不能分享一下谢谢🙏🙏🙏
    极客汪:@_千寻瀑_ 已发
  • a27f68a00673:可以发我一份吗?1328597555@qq.com,谢谢了
  • ccc385f82548:我想要源代码,能不能发我一份,谢谢!
    1228271379@qq.com
  • 极客汪:求求你们这些要源码的放过我。 :sob:
  • e7b3e7c07e24:楼主 能给我一份源代码吗?:wink: 刚学这个,所以感觉挺适合初学者的:wink:
    630399274@qq.com 万分感谢万分感谢:pray:
  • 989bcabf9142:急用啊,能不能发下源代码905473010@qq.com
    谢谢
    极客汪:@A飞的世界你不懂 晚上发你吧!目前没空!在外面
  • 989bcabf9142:905473010@qq.com
  • 989bcabf9142:可以给我发一下源代码吗/
  • 803a1e3d8724:楼楼发一下源代码吧 现在有急用 万分感谢 1677806086@qq.com
    44f02e99742f:请问可以发一下源码吗,现在在学习相关知识,想借鉴一下923557252@qq.com
    HEROQYC:@夜_ba7a 哥不知道源代码你还有没有啊,希望给发一份啊🙏🙏万分感谢
    极客汪:@夜_ba7a 已发
  • 阿瘦_dd13:源代码可以发一下吗,谢谢。QQ邮箱:9241903222@qq.com
    44f02e99742f:请问可以发一下源码吗,现在在学习相关知识,想借鉴一下923557252@qq.com
    HEROQYC:@阿瘦_dd13 哥不知道源代码你还有没有啊,希望给发一份啊🙏🙏万分感谢
    极客汪:@阿瘦_dd13 兄弟,邮箱错了吧
  • 阿瘦_dd13:可以发一下源代码吗,谢谢楼主。QQ:924190322
    44f02e99742f:请问可以发一下源码吗,现在在学习相关知识,想借鉴一下923557252@qq.com
    极客汪:@阿瘦_dd13 已发
  • 464bb2c3cd71:楼主 可以给下源代码吗?:stuck_out_tongue_winking_eye:
    44f02e99742f:请问可以发一下源码吗,现在在学习相关知识,想借鉴一下923557252@qq.com
    极客汪:@依然小昊 已发
    464bb2c3cd71:1660711001@qq.com
  • 3b13eb815a05:楼主能发一下源代码吗,849740047@qq.com,万分感谢!
    二分之一的承诺_c772:@FreeFall1911 可以给我发一下源程序吗?非常感谢!
    极客汪:@FreeFall1911 已发
  • f4533d44bd09:发我一下下,2060985960@qq.com
  • f4533d44bd09:@l楼主发个源代码给我呗,谢谢最近在学,2060985960@qq.com
  • f4533d44bd09:谁有源代码可以发我一下吗2060985960@qq.com
  • 13683295ca95:楼楼,可不可以把源代码发一下啊
  • 16015d1109c7:麻烦发一下源代码 qq852283702 qq邮箱852283702@qq.com
    16015d1109c7:谢谢楼主
  • c5bd0f064609:楼主可以给我发一下这个源代码吗?最近要学这个,如果可以我的邮箱是18253801759@163.com。不胜感激
  • 4e490c47064d:楼主求发一下源代码,我的qq邮箱:315148233@qq.com 。最近就在学这个发现怎么都运行不起来
    极客汪:@洪耀东 你可以去找下楼上 我已经发给她了 我电脑已经关了
  • 初七qt:可以给我一下源代码么?刚刚开始学还看不太懂😬QQ3386654299谢谢啦
    f4533d44bd09:@初七qt 发我一下,2060985960@qq.com
    极客汪:@初七qt 行,但是这个也是很久的了!我找给你吧
  • c778f0917613:楼主,请问您可以发一份源代码给我吗?
    c778f0917613: @我是小焱焱 谢谢楼主.
    极客汪:@沁心凉 好的,我抽空发给你
    c778f0917613:如果可以的话,我qq是2473341182。谢谢楼主
  • 傲世晓贝:朋友,可以发吗?
    f4533d44bd09:@傲世晓贝 发我2060985960@qq.com
    傲世晓贝: @我是小焱焱 好吧,下午需要交材料了,登录窗口老是不对
    极客汪:@傲世晓贝 你现在就要???我上班呢 我自己电脑没带
  • a0478395a587:楼主能不能给我发一份源码 万分感谢 我的编码出了点问题 百度了好久也解决不了 想参考一下楼主的。好不
    极客汪:@傲世晓贝 留下qq吧!
    傲世晓贝:可以给我发一份源代码吗,急求!!!谢谢
    极客汪:@雷奕明_db2d 怎么这么多要源码的!:sweat:把QQ留下吧 我抽空发给你
  • 小明同学呀呀呀:楼楼可否把源代码 发给我呢
    HEROQYC:@可乐_2262 哥不知道源代码你还有没有啊,希望给发一份啊🙏🙏万分感谢
    Sky_4936:嗨,朋友!不知楼主给你发代码了没?可否分享一下qq2940239914
    极客汪:@可乐_2262 周末找给你 这几天比较忙 好不?
  • 会飞的猪_0f59:楼主能不能把textArea那部分代码展示出来,我们学校就是要点击“确定按钮”后显示出来,我写的总是报错,说setText();里填的只能是final类型的常量,那JTextField一开始都是不知道的变量,请问楼主怎么解决呢?
    极客汪:我大概清楚你的问题了 你不要使用setText()方法,使用.append()方法试试
    极客汪:@会飞的猪_0f59 这周项目上线比较忙,我周末看看,毕竟很久之前写的了!
  • c9084d3c79d4:题主思路整理很清晰啊,赞一个

本文标题:用JAVA写一个简易的学生信息管理系统

本文链接:https://www.haomeiwen.com/subject/adyyyttx.html