思路:
一、分析用户管理功能模块
- User类型属性值设定
private String username; // 用户id(唯一字段)
private String nickname; // 昵称
private String password; // 密码
private int age; // 年龄
- 实现用户数据(通过 UserManager 类进行 User 对象的数据管理)的“增删改查”功能;
增加用户: add(user User):void
删除功能: delete(username String):void
修改用户: update(user User):void
查询数据: load(user User):User
- 实现用户登录功能;
登录功能: login(username String,password String):void
UML图示:
二、创建User类和UserManager类
- User 类中只包含私有的 User 属性,并用 setter 方法和 getter 方法进行封装;
- UserManager 类包含上述的自定义方法,用于实现用户数据的“增删改查”操作;
思考:
在 UserManager 类中,需要存储 n 多一个User类型的数据,则可以在该类中 new 一个 User 类型的数组,即:User[] users;
数组的长度是未知的,如果直接在该类中定义死了,则这个系统的灵活性就降低了(无论如何只能用初始定义好的数组大小,后期需要扩容的时候面临需要修改源代码的烦恼)。因此可以考虑如果想增加数组的灵活性,能不能在main函数中管理者自己定义一个数组大小呢?答案是可以的,可以使用 UserManager 的构造方法来设定 users 数组的大小,即:
public class UserManager( int size ) {
users = new User[size];
}
三、UserManager 类中各个功能模块的业务逻辑思路
1、load( String username ) 方法
实现通过参数 username 在整个数组中寻找到相应的数组元素,并返回该数组元素(User 对象);
通过 for 循环遍历数组,在循环体中:将每次遍历的数组元素和参数 username 进行 equals 比较:
- 如果比较值为真,则表示找到了该 username 对应的数组元素,返回该遍历的数组;
- 如果整个遍历完了都没有找到,则在循环语句之后进行null值返回,因为 load() 方法返回值类型为 User 。
注意:
如果这个数组的长度(size)是 5 ,数组中目前只有三条记录,那么遍历的时候就只需要遍历到这有记录的三条即可。
那怎么让for循环遍历的时候只遍历到当前数据记录的最后一条的位置呢?
我们可以人为的定义一个“标记”,这个标记用来表示,数组存到哪里,就指到哪里,为后期需要增加/删除新的元素操作做铺垫;
比如:
users = new User[10]; //默认初始的5个数组内存中都是null,此时遍历元素值为 null 的数组元素没有任何意义。
当user[0] 中增加了一条数据,我们就让“标记”记录一条,此时标记累计值为 1 ;