【任务一】:创建一个 DoubleConverter 类,该类的作用是将一个字符串转换成浮点型(double)数值。
要求: 1 DoubleConverter 具有一个属性,double result;
2 DoubleConverter 具有一个方法 boolean convert(String value);
2.1 该方法将参数字符串转换为整数。
2.2 转换若成功,则返回值为 true,并且转换的值存在 result 属性中。
2.3 若转换失败,则返回值为 false,并将 result 属性的值赋 0。
3 设计一个测试类来测试 DoubleConverter。
3.1 当测试类开始运行时,要求用户从键盘输入一个字符串,然后调用 DoubleConverter 的方法将字符串转换成为一个浮点型的数值。
3.2 当用户输入的字符串不是浮点数时,则提示“你输入的不是浮点数。”,并要求重新输入。
3.3 若用户输入的是浮点数,则打印该值的内容,最后退出程序。
提示:
把 DoubleConverter 类应在放在合适的包中。
当你不确定什么数能够转换成功时,可以参考 Double 类的 parseDouble()方法的结果。 3. 不能直接使用 Java 内置的 Double 类的 parseDouble()方法和 Scanner 类的 nextDouble()方法将整个字符串转换为整数,而必须读取用户输入的字符串提取每一个字符挨个转换为数字。
import java.util.Scanner;
public class DoubleConverterTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个字符串");
String org = input.next();
while (!isFloat(org)) {
System.out.println("error");
org = input.next();
}
boolean isSuccess;
DoubleConverter doubleConverter = new DoubleConverter();
isSuccess = doubleConverter.convert(org);
if (isSuccess){
System.out.println("The result is:"+ doubleConverter.result);
}
}
public static boolean isFloat(String org){
char charArray[] = org.toCharArray();
int figureNum = 0;
int pointNum = 0;
for(int i = 0;i < org.length();i++){
if(charArray[i] == '.'){
pointNum++;
}
if(charArray[i] <= '9' && charArray[i] >= '0'){
figureNum++;
}
if(pointNum == 1 && figureNum + pointNum == org.length()){
return true;
}
}
return false;
}
}
public class DoubleConverter {
double result = 0;
public boolean convert(String org){
int pointPosition = org.indexOf('.');
pointPosition--;
for(int i = 0;i < org.length();i++){
if(org.charAt(i) == '.') continue;
result = result + Math.pow(10,pointPosition)* Integer.parseInt(String.valueOf(org.charAt(i)));
pointPosition--;
}
return true;
}
}
【任务二】:完成用户注册和登录功能。
要求:
1 必须在实验一的基础上扩展,必须具备实验一中任务二的所有功能。
2 对于实验一中实现的一级菜单:
登录系统;
系统设置;
写日记;
查找日记;
退出系统;
请选择:
3 当用户选择除了菜单项 1 外的任何菜单,则提示“用户未登录,请先登录。”然后直接返回菜单。
4 当用户选择菜单项 1 时,提示二级菜单:
注册;
登录;
找回密码;
返回上一层菜单;
请选择:
5 当用户选择 1. 注册;功能时,
5.1 提示用户依次输入:用户名、显示名、密码、确认密码、邮箱等数据。
5.2 用户名只能包含字母、数字和下划线,并且首字母只能为字母,用户名最短不能少于 6 个字符,最长不能超过 20 个字符。
5.3 显示名可以包含任意字符,但是最小只能为 3 个字符,最长可以为 20 个字符。
5.4 用户密码必须包含字母数字和特殊符号,密码最短为 8 位,最长不能超过 30 位;密码和确认密码必须相同。
5.5 邮箱必须符合邮箱格式,最常不能超过 50 个字符。
5.6 提示用户从 5 个密码提示问题中选择一个,并填写答案,答案不能为空。
5.7 最后生成一个简单的 3 个整数的四则运算,例如[3 * 9-2=?],并要求用户回答。如果用户回答正确,则用户注册过程成功。如果用户回答错误,则更新问题,并让用户重新输入,直到输入正确为止,或者用户输入错误超过 5 次。
5.8 由于未使用具体的数据库,注册成功后,将所有数据存放在数组中,然后输出数组的设置。例如,如果用户注册后是第三个用户 , 则用户名存储为 : username[2]=”zhangsan” , 用 户 名 存 储 为
password[2]=”#zsma123456#”等等,则输出:
username[2]=”zhangsan”;
password[2]=”#zsma123456#”;
……
然后将输出复制回代码当中。
5.9 注册完成后,直接返回登录二级菜单。
6 当用户选择 2. 登录;功能时,
6.1 提示用户输入用户名和密码。判断用户输入的用户名和密码的字符数是否满足需求,否则提示用户重新输入。
6.2 如果用户输入的用户名和密码正确,则登录成功。
6.3 最后直接返回一级菜单,并且,一级菜单的第一个菜单项变为(高亮部分):
[显示名]退出登录;
系统设置;
写日记;
查找日记;
退出系统;
请选择:
7 当用户登录成功后,选择任意菜单,则提示“正在执行某功能……”,完成后返回一级菜单。
8 当用户选择一级菜单当中的 1. [显示名]退出登录;功能时,则退出用户登录,并将菜单项还原。此时若用户再选择任意功能,继续提示“用户未登录,请先登录。”
9 当用户选择二级菜单中 3. 找回密码;功能时,
9.1 提示用户在 5 个密码提示问题中选择一个。
9.2 然后提示用户输入密码提示问题答案。
9.3 如果答案和用户注册时填写的一致,则提示用户输入新的密码和确认密码。
9.4 如果密码和确认密码合法,则输出输出密码更新代码,例如:
password[2]=”#zhangsan123#”;
然后将输出复制回代码中。
9.5 最后回到二级登录菜单。
提示:
密码输入时可以使用明文输入。如果想使用*代替密码字符,则可以使用 Console 类。但是 Console 类不兼容 Eclipse输入框,可以在 Windows 自带的控制台测试。
不能在任何用户输入错误时直接退出程序,必须等待用户选择退出功能时退出。
注意包、类、变量的命名。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Login {
public static String[] userNameArray = new String[100] ;
public static String[] screenNameArray = new String[100];
public static String[] passwordArray = new String[100];
public static String[] emailAddressArray = new String[100];
public static String[] answerArray = new String[100];
public static int userCount = 0;
public static void main(String[] args){
mainMenue();
}
public static void mainMenue () {
Scanner input = new Scanner(System.in);
System.out.println("1.系统登陆");
System.out.println("2.系统设置");
System.out.println("3.写日记");
System.out.println("4.查找日记");
System.out.println("5.退出系统");
System.out.println("请选择:");
int option = input.nextInt();
while (!(option >= 1 && option <= 5)) {
System.out.println("Input Error,input again");
option = input.nextInt();
}
switch (option) {
case 1:
loginMenue();
break;
case 2:
case 3:
case 4:
System.out.println("用户未登录,请先登录");
break;
case 5:
System.out.println("谢谢使用,再见!");
System.exit(0);
break;
}
}
public static void loginMenue(){
System.out.println("1.注册");
System.out.println("2.登录");
System.out.println("3.找回密码");
System.out.println("4.返回上一级菜单");
System.out.println("请选择:");
Scanner input = new Scanner(System.in);
int option = input.nextInt();
switch(option) {
case 1:
System.out.println("请输入用户名:");
String username = input.next();
while (!usernameIsRight(username)) {
System.out.println("请重新输入用户名:");
username = input.next();
}
userNameArray[userCount] = username;
System.out.println("请输入显示名:");
String screenName = input.next();
while (!screenNameIsRight(screenName)){
System.out.println("请重新输入显示名:");
screenName = input.next();
}
screenNameArray[userCount] = screenName;
System.out.println("请输入密码:");
String password = input.next();
while (!passwordIsRight(password)){
System.out.println("请重新输入密码:");
password = input.next();
}
passwordArray[userCount] = password;
System.out.println("请确认密码:");
String confirmPassword = input.next();
while (!confirmPasswordIsRight(password,confirmPassword)){
System.out.println("请重新输入确认密码:");
confirmPassword = input.next();
}
System.out.println("请输入邮箱:");
String mailAddress = input.next();
while (!mailAddressIsRight(mailAddress)){
System.out.println("请重新输入邮箱:");
mailAddress = input.next();
}
emailAddressArray[userCount] = mailAddress;
System.out.println("请选择密码提示问题:");
System.out.println("1.Q1");
System.out.println("2.Q2");
System.out.println("3.Q3");
System.out.println("4.Q4");
System.out.println("5.Q5");
int choice = input.nextInt();
System.out.println("请回答密码提示问题:");
String answer = input.next();
while (!answerIsRight(answer)){
System.out.println("请重新回答密码提示问题:");
answer = input.next();
}
answerArray[userCount] = answer;
System.out.println("请作答:5*3-6=");
int result = input.nextInt();
if(result == 9) System.out.println("注册成功!");
else{
System.out.println("请作答:5*4-6=");
result = input.nextInt();
if(result == 14) System.out.println("注册成功!");
else{
System.out.println("请作答:1*4+2=");
result = input.nextInt();
if(result ==6) System.out.println("注册成功!");
else{
System.out.println("请作答:8/4+3=");
result = input.nextInt();
if(result == 5) System.out.println("注册成功!");
else{
System.out.println("请作答:9/3-6=");
result = input.nextInt();
if(result == -3) {
System.out.println("注册成功!");
}
else{
System.out.println("注册失败!");
}
}
}
}
}
userCount++;
loginMenue();
break;
case 2:
System.out.println("请输入用户名:");
username = input.next();
while (!usernameIsRight(username)) {
System.out.println("请重新输入用户名:");
username = input.next();
}
System.out.println("请输入密码:");
password = input.next();
while (!passwordIsRight(password)){
System.out.println("请重新输入密码:");
password = input.next();
}
if(checkInformation(username,password)){
logoutMenue(username);
}
break;
case 3:
System.out.println("请选择密码提示问题:");
System.out.println("1.Q1");
System.out.println("2.Q2");
System.out.println("3.Q3");
System.out.println("4.Q4");
System.out.println("5.Q5");
choice = input.nextInt();
System.out.println("请输入密码提示问题答案:");
answer = input.next();
if(answer.equals(answerArray[userCount-1])){
System.out.println("请输入新密码:");
password = input.next();
while (!passwordIsRight(password)){
System.out.println("请重新输入新密码:");
password = input.next();
}
System.out.println("请确认密码:");
confirmPassword = input.next();
while (!confirmPasswordIsRight(password,confirmPassword)){
System.out.println("请重新输入确认密码:");
confirmPassword = input.next();
}
passwordArray[userCount-1] = password;
}
loginMenue();
break;
}
}
public static void logoutMenue(String username){
Scanner input = new Scanner(System.in);
int option;
System.out.println("1.[" + username + "]" + "退出登录" );
System.out.println("2.系统设置");
System.out.println("3.写日记");
System.out.println("4.查找日记");
System.out.println("5.退出系统");
System.out.println("请选择:");
option = input.nextInt();
switch (option){
case 1:
loginMenue();
break;
case 2:
System.out.println("正在执行系统设置功能");
logoutMenue(username);
break;
case 3:
System.out.println("正在执行写日记功能");
logoutMenue(username);
break;
case 4:
System.out.println("正在执行查找日记功能");
logoutMenue(username);
break;
case 5:
System.out.println("正在退出系统功能");
logoutMenue(username);
break;
}
}
public static void secondMenue () {
System.out.println("1.按标题查找");
System.out.println("2.按内容查找");
System.out.println("3.按日期查找");
System.out.println("4.按心情查找");
System.out.println("5.按天气查找");
System.out.println("6.返回上一层菜单");
System.out.println("请选择:");
Scanner input = new Scanner(System.in);
int option = input.nextInt();
while (!(option >= 1 && option <= 6)) {
System.out.println("Input Error,input again");
option = input.nextInt();
}
switch (option) {
case 1:
System.out.println("正在执行按标题查找功能");
break;
case 2:
System.out.println("正在执行按内容查找功能");
break;
case 3:
System.out.println("正在执行按日期查找功能");
break;
case 4:
System.out.println("正在执行按心情查找功能");
break;
case 5:
System.out.println("正在执行按天气查找功能");
break;
case 6:
mainMenue();
break;
}
}
public static boolean usernameIsRight(String username){
if(!(username.charAt(0) >= 'A' && username.charAt(0) <= 'z')){
return false;
}
if(!(username.length() >=6 && username.length() <= 20)){
return false;
}
for(int i = 0;i < username.length();i++){
if(!((username.charAt(i) >= '0' && username.charAt(i) <= '9') || (username.charAt(i) >= 'A' && username.charAt(i) <= 'z') || username.charAt(i) == '_')){
return false;
}
}
return true;
}
public static boolean screenNameIsRight(String screenName){
if(!(screenName.length() >= 3 && screenName.length() <= 20)){
return false;
}
return true;
}
public static boolean passwordIsRight(String password){
boolean hasFigure = false;
boolean hasLetter = false;
boolean hasFix = false;
if(!(password.length() >= 8 && password.length() <= 30)){
return false;
}
for (int i = 0;i < password.length();i++){
if(password.charAt(i) <= '9' && password.charAt(i) >= '0') hasFigure = true;
if(password.charAt(i) <= 'z' && password.charAt(i) >= 'A') hasLetter = true;
if(password.charAt(i) == '!' || password.charAt(i) == '@' || password.charAt(i) == '#' || password.charAt(i) == '$' || password.charAt(i) == '%' || password.charAt(i) == '*' || password.charAt(i) == '^' ){
hasFix = true;
}
if (hasFigure && hasFix && hasLetter){
return true;
}
}
return false;
}
public static boolean confirmPasswordIsRight(String password,String confirmPassword){
return password.equals(confirmPassword);
}
public static boolean mailAddressIsRight(String mailAddress){
if (mailAddress == null)
return false;
if(!(mailAddress.length() <= 50)){
return false;
}
String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern p;
Matcher m;
p = Pattern.compile(regEx1);
m = p.matcher(mailAddress);
if (m.matches())
return true;
else
return false;
}
public static boolean answerIsRight(String answer){
if (answer == null){
return false;
}
else{
return true;
}
}
public static boolean checkInformation(String username,String password){
for(int i = 0;i < userCount;i++){
if(userNameArray[i].equals(username)){
if(passwordArray[i].equals(password)){
return true;
}
}
}
return false;
}
}
以上实验代码由某L姓大牛独家赞助播出,✿✿ヽ(°▽°)ノ✿撒花撒花
我现在看到这些代码就想骂人,coding一时爽,我现在看就是HZC!立个flag(反正也会倒 我一定要好好儿把这些又长又臭的代码写成函数!!!