Java字符串实验报告

【任务一】:创建一个 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(反正也会倒 我一定要好好儿把这些又长又臭的代码写成函数!!!

你可能感兴趣的:(Java字符串实验报告)