员工学生管理系统小结

 

学生员工管理系统

1、要求对学生和员工都要支持添加、修改、查询(按ID,全部查询,模糊查询)、删除的操作,用文件保存信息和数据库保存信息两种方式实现。在排序方面,学生按成绩高低排,成绩一样按年龄高低来排,工人按工资高低来排,工资一样,按年龄高低来排。

2、为了增加这个小的管理系统的灵活性,这里采用了分层的设计方法。  

最底层的io层:

    FileOperate类:主要负责把本地文件中的数据save 或load ,save的参数是一个set集合,而load的返回值是一个set集合。

数据访问dao层

    PersonDAO接口:里面定义了标准的操作接口,doCreate() ;doUpdate() ;doDelete()等

    PersonDAOImplFile类:这个类要继承PersonDAO接口,通过对象组合的思想,把FileOperate对象组合进来,通过FileOperate对象,在继承的接口中来实现这些接口。

    PersonDAOImplJDBC类:这个类也要继承PersonDAO接口,但是他不需要把FileOperate组合进来,因为它不是对文件进行操作,而是对数据库进行操作,只需要在继承的接口中,用数据库操作语句来操作数据即可。

数据访问dao层与上层调用的代理层:

    PersonDAOProxyFile类:这个类需要继承PersonDAO接口,内置一个PersonDAOImplFile对象,通过这个对象来调用PersonDAOImplFile类里面具体实现的接口,其实,这个PersonDAOProxyFile类里面很简单,只需要在相应的方法中,调用具体实现的方法即可。

    PersonDAOProxyJDBC类:这个类需要继承PersonDAO接口,内置一个PersonDAOImplJDBC对象,通过这个对象来条用PersonDAOImplJDBC类里面具体实现的接口,同样,这个代理里面的代码也相当简单。理由同上。

数据模型vo层:

    Person类:这个类是从学生和工人的共性而抽离出来的抽象类。Abstract 。这个类要继承Comparable 和Serializable接口。但是这个类里面不具体实现CompareTo() ,在其子类StudentPerson 和WorkerPerson中去具体实现,因为这个两个对象他们的排序方式不一样。而Serializable接口,表示可序列化,可以以对象的形式保存在文件中。      

    StudentPerson类:继承自Person类,实现compareTo(),不需要添加对数据的操作方法。

    WorkerPerson类:同上。

操作operate层:

    Operate接口:定义一套接口,用于数据操作,这里的方法名字最好不要与PersonDAO接口中的一样,我的习惯是,在Operate里面是create() 的话,在PersonDAO中就是doCreate();

    StudentOperate类:需要继承Operate接口,通过对象组合的方式组合进来一个PersonDAO对象,通过这个对象操作数据,当然继承自Operate接口在这个类中实现对应的方法体也很简单,就是用PersonDAO对象的实现方法即可,这个实现通过代理,再到具体的实现操作之上,如果想用文件来保存文件,就用PersonDAOProxyFile代理来实例化它,这就体现了一个好处,比如我以后想通过数据库来保存数据了,我就用PersonDAOProxyJDBC代理来实例化它,修改起来非常方便。你代理怎么去实现,我不需要管,只需要代理给你就行了。这里也体现出来为什么代理要去继承PersonDAO接口的原因,那就是在用代理的时候,要用它去实例化PersonDAO,所以代理,必须是PersonDAO的子类。

    WorkerOperate类:同理。

工具util层:

    InputData类:这个类主要负责接收用户的输入后处理成标准的相关类型,比如输入整型,字符型,浮点型等等。组合进了一个BufferedReader 对象,用来读取用户输入的字符串。通过自己定义的getInt() ; getString() ; getFloat() 来处理这个字符串,从而得到自己想要的输入类型。

    TimeStamp类:这个类主要用于生产学生和工人的id,考虑到要添加入数据库,而id一般来说都是数据库中某一记录的主键,所以,这里生成id的方法就是当前时间再加上4位随机数字。在PersonDAOImplFile的doCreate方法中,如果是学生的话,这个 id前加上s ,工人的话,加上w。

菜单menu:

    Menu类中,一个主菜单,两个子菜单,分别是学生菜单和工人菜单,这里在菜单的设计方面,可以通过两个变量来分别控制两个子菜单的循环,我觉得这个菜单还是设计的很好,在主菜单中,就是一个死循环,当用户选择退出后,就结束程序,而不是靠一个标志来结束循环。另外,两个子菜单就,就会考虑到StudentOperate 和WorkerOperate 对象的实例化问题,这里最好还是内置一个PersonOperate对象,在用的时候,再用StudentOperate 或WorkerOperate来实例化它,这体现了面向对象的灵魂,那就是多态!当然,我内置StudentOperate 和 WorkerOperate 也是可以的。

主方法Main类:

    在main方法中只需要new Menu() 即可。

3、UML图:

       

4、总感觉这个分层里面体现出来的设计模式有很多,如桥接模式,策略模式。用了3天时间,参考李兴华老师讲的java视频,还是半推半就地把这个课程设计做出来了。这三天也没少想这里面类与类的关系,接下来的时间就加深对javaSE的知识的理解,多写。一步步来,学过了的知识,总要做点东西出来才算是有成就感,以前学的知识就是没有做东西出来,所以很快就忘了,学程序嘛,唯手足矣!小小鼓励一下自己!加油!奋斗

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值