注册和登录的功能实现,刚开始不太懂,就看看代码,琢磨了下,把思路整理出来了,欢迎大家讨论斧正。 1、User类中写入最基本的username,password,mail等信息成员变量并私有化,创建构造函数,与getters和setters方法 2、UserDao作为接口要被UserDaoImpl实现,定义抽象方法isLogin和regist方法 3、UserDaoImpl要实现UserDao的抽象方法,即登录功能和注册功能: 要登录就要先有用户已经注册过,注册过的数据存在于数据库中,或者一个容器 来存储注册的数据,容器有对象数组,集合(二者区别在于对象时数组得明确长度,集合则是可变的),集合还没学到,就先用指定好长度的对象数组来存数据,注册或者登录需要对比或者写入的数据并不是单个字段,所以将这些数据以对象形式封装,便于传递赋值与比较:这里我们指定 User [] users = new User[5];来存放数据,并加入静态static修饰,保证注册的数据存取和登录的数据取出操作的是同一个对象数组,同样表示角标的index也要加入static修饰。 注册功能是封装在UserDaoImpl中,当我们定义了这个操作类对象,每调用一次regist功能,就意味着注册的用户数据以对象形式从users对象数组中从左(index=0)往右地存入一次,再次调用时就得往下一个索引位置处存入。因此我们在定义了对象数组的同时,定义起始索引值为int index = 0; 并在regist功能中让index在执行完功能时自增,以便下次调用。另外注册功能实际上就是将用户传来的数据封装成对象(User user = new User();),传入定义好的对象数组users[index++],即为 users[index++] = user; 登录功能isLogin,登录结果成功与否就是boolean的结果,所以在功能开始前定义boolean flag = false;然后登录功能就是将用户键入的数据(字段值)与对象数组中的数据进行一一比较(equals)的过程,用for循环遍历(对象数组)实现,遍历到的对象数组的每个元素都是对象,因此可在局部定义User user =users[x]; 在循环体内,因为对象是引用型变量,首先进行是否为空null的判断(if),不为null的情况下才往下执行,用if语句将用户键入的参数username,password与遍历到的对象的username与password进行equals比对,(对象的username与password通过get方法获得)如果比对结果为真,则将返回值flag置为true,并用break;结束本次登录,循环后返回flag即可。 4、UserTest用户测试类:main函数所在类,功能执行入口,一般来讲,登录与注册界面的窗体一般为用户手动点击退出,即该功能模块不能自动结束,因此加入while(true)的整体递归控制, 在循环体内:首先写入欢迎界面,也是功能选择界面用sysop输出语句暂时替代,然后用Scanner的键盘录入sc.nextLine();方法输入相应的字符标号,以便接下来的判断进入具体功能界面,键入的字符标号有多个,可用switch来判断实现, case ”1”:就进入登录功能,同上,用sysop实现欢迎进入的提示语,并以此方式提醒用户键入用户名username和密码password,也用Scanner的sc.nextLine();方法实现录入,然后创建对象操作类UserDaoImpl(可利用多态定义)udi = new UserDaoImpl();调用其中的isLogin();方法将键入的用户名username和密码password以参数传入,函数执行结果flag为boolean型,用if判断,如果为真,则提示”登录成功,可以开始玩游戏”,否则,提示”用户名和密码输入有误,返回主界面”,然后一个break结束登录功能,通过while返回主界面。 case “2”:注册界面,同样的方式输出欢迎界面并提示用户输入注册所需的用户名和密码以及其它信息,用String型变量接收,然后创建局部的User user = new User(); 并用set方法为其传参赋值,然后创建用户操作类对象UserDaoImpl newUdi = newUserDaoImpl();并调用其中的regist功能,即可完成对注册用户数据的存入,然后提示注册成功,一个break结束注册功能,通过while返回主界面。 case“3: default:二者都是退出功能,提示结束语”谢谢使用”,然后调用System的exit(0)方法退出功能即可。
|