今天开发了一个小系统:先看一下测试界面:
学校信息管理程序
1: 学生信息管理
2: 工人信息管理
3: 退出系统
请选择所需要的操作:
s
输入的内容必须是整数,请重新输入:
2
工人信息管理
1: 增加工人信息
2: 列出全部工人信息
3: 查询工人信息
4: 删除工人信息
5:修改工人信息
6:返回上一级菜单
请选择具体的操作:
1
请输入工人姓名:d
请输入工人年龄:d
输入的内容必须是整数,请重新输入:
34
请输入工人工资:34.56
工人信息管理
1: 增加工人信息
2: 列出全部工人信息
3: 查询工人信息
4: 删除工人信息
5:修改工人信息
6:返回上一级菜单
请选择具体的操作:
3
请输入查询的关键字:
d
ID 姓名 年龄 工资
s20100226204646796653 d 34 34.56
工人信息管理
1: 增加工人信息
2: 列出全部工人信息
3: 查询工人信息
4: 删除工人信息
5:修改工人信息
6:返回上一级菜单
请选择具体的操作:
5
请输入要修改的工人的ID:s20100226204646796653
输入工人姓名(原姓名:d):d
输入工人年龄(原年龄:34):25
输入工人工资(原工资:34.56):99.63
工人信息管理
1: 增加工人信息
2: 列出全部工人信息
3: 查询工人信息
4: 删除工人信息
5:修改工人信息
6:返回上一级菜单
还是看一下设计思想:
ID、姓名、年龄为公共信息,而学生有成绩,工人有工资
定义一个抽象类Person(ID、姓名、年龄),学生是其子类,有成绩,工人是其子类有工资
ID如何定义呢?
ID最好可以自己生成,最好的方式是采用下面的编码方式:
· 标记 + 时间戳 + 三位随机数
· 例如:2009年3月22 20:10:10.345
· 学生的标记为s,工人的标记为w
· 生成的ID号: 学生 --> s20090322201010345023
工人 --> w20090322201010345023
因为现在的程序要满足文件和数据库的操作标准,所以此处应该定义出一个公共的标准 —— 接口
查询信息的时候可以进行排序操作,可以使用Comparable接口完成。
整个代码中牵扯到数据层的操作
· 数据层就是指真实的数据操作 --> CRUD。
· 最终结果操作的肯定是一个人(人为工人和学生)
应该进行分开,一个是全部的学生管理,一个是全部的工人管理。
数据层操作标准定义完成之后,有两种选择,一种是直接使用子类实现,但是以后的修改不是很方便,
所以此处最好使用代理设计的思路完成,做一个中间层。
代码关系:
Main --> Menu --> PersonOperate --> DAO
因为程序即要求使用文件保存,又要求使用数据库保存,所以此处可以设计出一个工厂,通过此工厂进行DAO的操作子类实例取得。
一些经验:
报错:
Exception in thread "main" java.lang.NullPointerException
at org.shp.dao.InputData.getInt(InputData.java:20)
at org.shp.dao.Menu.showMain(Menu.java:23)
at org.shp.dao.Menu. <init>(Menu.java:12)
at org.shp.dao.Main.main(Main.java:5)
原因:InputData 中str 没有初始化,因为 String str = null,
所以对str 进行操作时报错,str = this.InputData() ,就好啦!
具体代码可以看:http://bbs.51cto.com/thread-561277-1.html
或者可以去:http://shenghuiping2001.download.csdn.net/ 下载。
在开发过程中遇到问题,可以去http://www.myexception.cn/ 看看有没有类似的问题,别人的解决方法是什么。