JavaSE入门附录:程序实例

61 阅读10分钟

案例演示

1.买飞机票

/**
 * 计算飞机票价格
 */
public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入机票价格:");
        double price = scanner.nextDouble();
        System.out.println("请输入仓位类型(头等舱、经济舱):");
        String type =scanner.next();
//         scanner.nextLine();
        System.out.println("请输入乘机月份(数字):");
        int month = scanner.nextInt();

        sum(price,type,month);
    }

    //判断月份
    public static void sum(double price,String type,int month){
        if (4<month && month<11){
            type(price,type,0.9,0.85);
        }else if (month==11 || month==12 || (1<=month && month<=4)){
            type(price,type,0.7,0.65);
        }else {
            System.out.println("月份输入错误!无法计算票价");
        }
    }

    //舱类
    public static void type(double price,String type,double a,double b){
        switch (type){
            case "头等舱":
                price *= a;
                break;
            case "经济舱":
                price *= b;
                break;
            default:
                System.out.println("舱输入错误!无法计算票价");
                break;
        }
        System.out.println("机票的价格是:"+price);
    }
    
}

2.找素数

/**
 * 找素数:
 *      101-200间有多少素数,并输出所有素数;
 *      素数:除了1和他本身为,不能被其他整数整除
 */
public class Test2 {
    public static void main(String[] args) {
        int[] arr = new int[50];
        boolean flag = false;
        int n=0;
        
        for (int i = 101; i <201 ; i++) {
            //是否是素数
            flag=sushu(i);
            if (flag){
                //素数,加入数组
                arr[n]=i;
                n++;
            }
        }
        System.out.println("101-200有素数:"+n+"个"+arr.length);
        System.out.println(Arrays.toString(arr));
    }
    
    //判断素数素数
    public static boolean sushu(int i){
        for (int j = 2; j <i ; j++) {
            if (i%j == 0){
                //能整除,非素数
                return false;
            }
        }
        return true;
    }
}

3.生成验证码

/**
 * 5位验证码:
 *      可能是数字、大小写字母
 */
public class Test3 {
    public static void main(String[] args) {
        String code = createCode(5);
        System.out.println(code);
    }
    
    //生成n位验证码
    public static String createCode(int n){
        String code = "";
        Random random = new Random();
        for (int i = 0; i < n; i++) {
            int type = random.nextInt(3);//0-2
            //选验证码类型
            switch (type){
                case 0:
                    //大写字符 A65 Z65+26
                    char c = (char) (random.nextInt(26)+65);
                    code += c;
                    break;
                case 1:
                    //小写字符 a97  z 97+26
                    char cc = (char) (random.nextInt(26)+97);
                    code += cc;
                    break;
                case 2:
                    code += random.nextInt(10);
                    break;
            }
        }
        return code;
    }
}

4.数组复制

/**
 * 复制数组:
 *  数组元素赋值给新数组
 */
public class Test4 {
    public static void main(String[] args) {
        int[] arrOne = {10,20,30,40,50,66};
        int[] arrTwo = new int[arrOne.length];
        for (int i = 0; i < arrOne.length; i++) {
            arrTwo[i] = arrOne[i];
        }
        System.out.println(Arrays.toString(arrTwo));
    }
}

5.评委打分

/**
 * 评委打分:
 *      六位评分,去掉最高和最低,取平均
 */
public class Test5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入几位评委打分:");
        int num = scanner.nextInt();
        int[] users = new  int[num];
        for (int i = 0; i < num; i++) {
            System.out.println("请输入第"+(i+1)+"位评委的评分(1-10分)");
            users[i] = scanner.nextInt();
        }
        //评分从小到大
        order(users,num);

        //最终得分
        avg(users,num);
    }

    //冒泡排序,评分从小到大整理
    public static void order(int[] users,int num){
        for (int i = 0; i < num-1; i++) {
            for (int j = 0; j < num-i-1; j++) {
                if (users[j]>users[j+1]){
                    int temp = users[j+1];
                    users[j+1] = users[j];
                    users[j] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(users));
    }

    //取平均值
    public static void avg(int[] users,int num){
        double score = 0;
        for (int i = 1; i < num-1 ; i++) {
            score += users[i];
        }
        double avgScore = score/(num-2);
        System.out.println("选手最终得分:"+avgScore);
    }
    
}

6.数字加密

/**
 * 数字加密规则:
 *     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
 */
public class Test6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一串正整数字:");
        String num = scanner.next();
        int length = num.length();
        //快速获取int位数
        //int length1 = String.valueOf(number).length();
        int[] passOne = new  int[length];
        for (int i = 0; i < length; i++) {
            //取字符num每位char字符,转为String,再转int
            passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
        }
        System.out.println(Arrays.toString(passOne));
        //+5%10
        for (int i = 0; i < length; i++) {
            passOne[i] = (passOne[i]+5)%10;
        }
        System.out.println(Arrays.toString(passOne));
        //取反
        for (int i = 0,j=length-1; i < j; i++,j--) {
             int temp = passOne[i];
             passOne[i] = passOne[j];
             passOne[j] = temp;
        }
        System.out.println(Arrays.toString(passOne));
    }

}

6.1数字解密


/**
 * 数字解密规则:
 *     得到每位数,+5,再对10取余,最后所有数字反转(顺序调换)
 		原0-4 加密后是5-9
 		原5-9 加密后是0-4
 */
public class Test7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一串正整数字:");
        String num = scanner.next();
        int length = num.length();
        int[] passOne = new  int[length];

        for (int i = 0; i < length; i++) {
            //取字符num每位char字符,转为String,再转int
            passOne[i] = Integer.parseInt(String.valueOf(num.charAt(i)));
        }
        System.out.println(Arrays.toString(passOne));

        //取反
        for (int i = 0,j=length-1; i < j; i++,j--) {
            int temp = passOne[i];
            passOne[i] = passOne[j];
            passOne[j] = temp;
        }
        System.out.println(Arrays.toString(passOne));

        //解密:分析变化规则
        for (int i = 0; i < length; i++) {
            if (0<=passOne[i] && passOne[i]<5){
                passOne[i] = passOne[i]+5;
            }else {
                passOne[i] = passOne[i]-5;
            }
        }
        System.out.println(Arrays.toString(passOne));

    }

}

7.Two球系统

/**
 * 双色球系统:
 *     投注号码由6个红球号码和1个篮球号码组成
 *     红球号从1-33中选(不可重复);篮球号码从1-16中选
 */
public class Test8 {
    public static void main(String[] args) {
        int[] luckNumbers = createLuckNumbers();
        int[] userNumbers = userInputNumbers();
        judge(luckNumbers,userNumbers);
    }

    //生成中奖号码
    public static int[] createLuckNumbers(){
        Random random = new Random();
        int[] luckNumbers = new int[7];

        for (int i = 0; i < luckNumbers.length-1; i++) {
            while (true){
                int date = random.nextInt(33)+1;
                boolean flag = true;

                for (int j = 0; j <i ; j++) {
                    //出现重复值
                    if (luckNumbers[j] == date){
                        flag = false;
                        break;
                    }
                }
                //不重复的值加入
                if (flag){
                    luckNumbers[i] = date;
                    break;//结束while
                }
            }
        }
        luckNumbers[luckNumbers.length-1] = random.nextInt(16)+1;
//        System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
        return luckNumbers;
    }

    //用户输入号码
    public static int[] userInputNumbers(){
        Random random = new Random();
        int[] userNumbers = new int[7];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入双色球号码前六位(1-33),最后一位(1-16):");

        while (true){
            System.out.println("请输入第1位号码:");
            int date = scanner.nextInt();
            if (0<date && date<34){
                userNumbers[0] = date;
                break;
            }else {
                System.out.println("有误:请输入(1-33)的数字:");
            }
        }

        for (int i = 1; i < userNumbers.length-1; i++) {
            while(true){
                System.out.println("请输入第"+(i+1)+"位号码:");
                int date = scanner.nextInt();
                if (0<date && date<34){
                    boolean flag = false;
                    for (int j = 0; j <i ; j++) {
                        //出现重复值
                        if (userNumbers[j] == date){
                            System.out.println("请不要输入重复数字:");
                            flag=true;
                            break;
                        }
                    }
                    if (flag){
                        continue;
                    }
                }else {
                    System.out.println("请输入(1-33)的数字:");
                    continue;
                }
                //不重复的值加入
                userNumbers[i] = date;
                break;
            }
        }

        while (true){
            System.out.println("请输入第7位号码:");
            int date = scanner.nextInt();
            if (0<date && date<17){
                userNumbers[userNumbers.length-1] = date;
                break;
            }else {
                System.out.println("请输入(1-16)的数字:");
            }
        }

//        System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));
        return userNumbers;
    }

    //判断中奖情况
    public static void judge(int[] luckNumbers,int[] userNumbers){
        System.out.println("中奖的号码是:"+Arrays.toString(luckNumbers));
        System.out.println("您输入的号码是:"+Arrays.toString(userNumbers));

        boolean blue = false;
        if (luckNumbers[luckNumbers.length-1] == userNumbers[userNumbers.length-1]){
            blue = true;
            System.out.println("恭喜您命中了篮球");
        }else {
            System.out.println("很遗憾,您没有命中篮球");
        }

        int count = 0;
        for (int i = 0; i < luckNumbers.length-1; i++) {
            if (luckNumbers[i] == userNumbers[i]){
                count++;
            }
        }
        if (count>0){
            System.out.println("恭喜您命中了"+count+"个红球");
        }else {
            System.out.println("很遗憾,您没有命中红球");
        }
        if (blue){
            switch (count){
                case 6:
                    System.out.println("恭喜中了1000万元");
                    break;
                case 5:
                    System.out.println("恭喜中了3000元");
                    break;
                case 4:
                    System.out.println("恭喜中了200元");
                    break;
                case 3:
                case 2:
                    System.out.println("恭喜中了10元");
                    break;
                case 1:
                    System.out.println("恭喜中了5元");
                    break;
                default:
                    System.out.println("很遗憾,没中奖");
                    break;
            }
        }else {
            switch (count){
                case 6:
                    System.out.println("恭喜中了500万元");
                    break;
                case 5:
                    System.out.println("恭喜中了200元");
                    break;
                case 4:
                    System.out.println("恭喜中了10元");
                    break;
                default:
                    System.out.println("很遗憾,没中奖");
                    break;
            }
        }

    }

}

RecordDate:2021/08/10

8.模拟ATM

package com.yanfeng.atm;

/**
 * 账户类:
 */
public class Account {
    private String cardId;
    private String userName;
    private String passWord;
    private double money;
    private double quotaMoney;

    public Account() {
    }

    public Account(String cardId, String userName, String passWord, double money, double quotaMoney) {
        this.cardId = cardId;
        this.userName = userName;
        this.passWord = passWord;
        this.money = money;
        this.quotaMoney = quotaMoney;
    }

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getQuotaMoney() {
        return quotaMoney;
    }

    public void setQuotaMoney(double quotaMoney) {
        this.quotaMoney = quotaMoney;
    }
}

package com.yanfeng.atm;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/**
 * ATM系统入口:
 */
public class ATMSystem {
    public static void main(String[] args) {
        ArrayList<Account> accounts = new ArrayList<>();
        //Ctrl+Alt+T 快捷键选择循环或者异常处理
        //展示系统首页
        while (true) {
            System.out.println("----风风ATM系统-----");
            System.out.println("1.账户登录");
            System.out.println("2.账户开户");

            Scanner scanner = new Scanner(System.in);
            System.out.println("请选择操作");
            int command = scanner.nextInt();
            switch (command){
                case 1:
                    //登录
                    login(accounts,scanner);
                    break;
                case 2:
                    register(accounts,scanner);
                    break;
                default:
                    System.out.println("输入操作命令不存在!");
            }
        }
    }

    /**
     * 用户登录
     * @param accounts
     * @param scanner
     */
    private static void login(ArrayList<Account> accounts, Scanner scanner) {
        System.out.println("===============系统登录界面======================");

        if (accounts.size()==0){
            System.out.println("当前系统中无账号,请开户后操作!");
            System.out.println("");
            return;//卫语言风格,结束方法执行
        }

        while (true) {
            System.out.println("请输入账户号:");
            String cardId = scanner.next();
            Account account = getAccountByCardId(cardId, accounts);
            if (account == null){
                System.out.println("系统内无该账号信息,请检查后输入!");
            }else {
                while (true) {
                    System.out.println("请输入账户密码:");
                    String passWord = scanner.next();
                    if (account.getPassWord().equals(passWord)) {
                        System.out.println(account.getUserName()+"登录成功,卡号是:"+account.getCardId());
                        showUserCommand(accounts,scanner,account);
                        return;//结束登录
                    }else {
                        System.out.println("输入密码有误!");
                    }
                }

            }
        }


    }

    /**
     * 登录后操作页
     * @param accounts
     * @param scanner
     * @param account
     */
    private static void showUserCommand(ArrayList<Account> accounts, Scanner scanner, Account account) {
        while (true) {
            System.out.println("===============开户操作页======================");
            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("7.注销账户");
            System.out.println("请选择:");
            int command = scanner.nextInt();
            switch (command){
                case 1:
                    showAcount(account);
                    break;
                case 2:
                    //存款
                    depositMoney(scanner,account);
                    break;
                case 3:
                    drawMoney(scanner,account);
                    break;
                case 4:
                    //转账
                    transferMoney(accounts,scanner,account);
                    break;
                case 5:
                    //修改密码
                    updatePassWord(scanner,account);
                    return;
                case 6:
                    //退出
                    System.out.println("退出成功,欢迎下次光临");
                    return;//停止选择操作方法
                case 7:
                    boolean flag = deleteAccount(accounts, scanner, account);
                    if (flag){
                        return;
                    }
                    break;
                default:
                    System.out.println("输入操作命令不存在!");
                    break;
            }
        }
    }

    /**
     * 销户
     * @param accounts
     * @param scanner
     * @param account
     */
    private static boolean deleteAccount(ArrayList<Account> accounts, Scanner scanner, Account account) {
        //销户
        System.out.println("确认要销户吗? Yes/No");
        String rs = scanner.next();
        switch (rs){
            case "Yes":
                if (account.getMoney()>0){
                    System.out.println("账户中还有余额,无法销户!");
                }else {
                    accounts.remove(account);
                    System.out.println("您的账户已销户!");
                    return true;
                }
                break;
            default:
                System.out.println("当前账户继续保留");
                break;
        }
        return false;
    }

    /**
     * 修改密码
     * @param scanner
     * @param account
     */
    private static void updatePassWord(Scanner scanner, Account account) {
        System.out.println("===============用户修改密码界面======================");

        while (true) {
            System.out.println("输入原密码:");
            String oldPassWord = scanner.next();
            if (account.getPassWord().equals(oldPassWord)){
                while (true) {
                    System.out.println("请输入新密码:");
                    String newPassWord = scanner.next();
                    System.out.println("请确认新密码:");
                    String okPassWord = scanner.next();
                    if (newPassWord.equals(okPassWord)){
                        //密码认证通过
                        account.setPassWord(newPassWord);
                        System.out.println("密码修改成功!");
                        return;
                    }else {
                        System.out.println("两次密码不一致,请重新录入密码");
                    }
                }
            }else {
                System.out.println("原密码输入错误,请重试!");
            }
        }


    }

    /**
     * 转账
     * @param accounts
     * @param scanner
     * @param account
     */
    private static void transferMoney(ArrayList<Account> accounts, Scanner scanner, Account account) {
        System.out.println("=========转账操作页面========");

        if (accounts.size()<2){
            System.out.println("当前系统中,不足两个账号,不支持转账操作!");
            System.out.println("");
            return;//卫语言风格,结束方法执行
        }

        double money = account.getMoney();
        if (money < 100){
            System.out.println("账户不足100元,无法转账,先存钱吧!");
            return;
        }

        while (true) {
            System.out.println("请输入对方账户的卡号");
            String cardId = scanner.next();
            if (account.getCardId().equals(cardId)){
                System.out.println("您不能给自己转账!");
                continue;//放弃当次循环

            }
            //转账账户方transferaccount
            Account transferaccount = getAccountByCardId(cardId,accounts);
            if (transferaccount == null){
                System.out.println("您输入账号不存在!");
                System.out.println("");
            }else {
                String userName = transferaccount.getUserName();
                String tip = "*"+userName.substring(1);
                System.out.println("请输入["+tip+"]的姓氏");
                String preName = scanner.next();
                if (userName.startsWith(preName)){
                    //认证通过开始转账
                    while (true) {
                        System.out.println("请输入转账金额:");
                        double transferMoney = scanner.nextDouble();
                        if (transferMoney<=money){
                            account.setMoney(money-transferMoney);
                            //对方账户余额变动
                            transferaccount.setMoney(transferaccount.getMoney()+transferMoney);
                            System.out.println("向账户:"+cardId+"转账"+transferMoney+"成功");
                            showAcount(account);
                            return;
                        }else {
                            System.out.println("余额不足,最多可以转账:"+money);
                        }
                    }
                }else {
                    System.out.println("验证信息有误!!");
                }
            }
        }
    }

    /**
     * 取款
     * @param scanner
     * @param account
     */
    private static void drawMoney(Scanner scanner, Account account) {
        System.out.println("=========取款操作页面========");
        double money = account.getMoney();

        if (money < 100){
            System.out.println("账户不足100元,无法取钱,存一点吧");
            return;
        }

        while (true) {
            System.out.println("请输入取款金额:");
            double drawMoney = scanner.nextDouble();
            if (drawMoney<=account.getQuotaMoney()){
                if (drawMoney<=account.getMoney()){
                    account.setMoney(account.getMoney()-drawMoney);
                    System.out.println("取款成功,当前账户信息如下");
                    showAcount(account);
                    return;
                }else {
                    System.out.println("存款不够了!当前账户余额:"+account.getMoney());
                }

            }else {
                System.out.println("取款超过每次限额,无法取款");
            }
        }
    }

    /**
     * 存款
     * @param scanner
     * @param account
     */
    private static void depositMoney(Scanner scanner, Account account) {
        System.out.println("=========存款操作页面========");
        System.out.println("请输入存款金额:");
        double tempMoney = scanner.nextDouble();
        //更新账号中余额,account中值更改,集合中也相应更改,里面存的是地址
        account.setMoney(account.getMoney()+tempMoney);
        System.out.println("存款成功,当前账户信息如下");
        showAcount(account);
    }

    /**
     * 展示当前账户信息
     * @param account
     */
    private static void showAcount(Account account) {
        System.out.println("=========当前账号信息如下==================");
        System.out.println("卡号:"+account.getCardId());
        System.out.println("户主:"+account.getUserName());
        System.out.println("余额:"+account.getMoney());
        System.out.println("限额:"+account.getQuotaMoney());
    }

    /**
     * 用户开户功能
     * @param accounts  账户集合
     * @param scanner
     */
    private static void register(ArrayList<Account> accounts, Scanner scanner) {
        System.out.println("===============系统开户操作======================");
        Account account = new Account();
        System.out.println("请输入账户用户名:");
        String userName = scanner.next();
        account.setUserName(userName);

        while (true) {
            System.out.println("请输入账户密码:");
            String passWord = scanner.next();
            System.out.println("请确认账户密码:");
            String okPassWord = scanner.next();
            if (passWord.equals(okPassWord)){
                //密码认证通过
                account.setPassWord(passWord);
                break;
            }else {
                System.out.println("两次密码不一致,请重新录入密码");
            }
        }

        System.out.println("请输入账户转账限额:");
        double quotaMoney = scanner.nextDouble();
        account.setQuotaMoney(quotaMoney);

        //为账号随机生成8位不与其他账号重复密码
        String cardId = getRandomCardId(accounts);
        account.setCardId(cardId);

        //账号添加到集合中
        accounts.add(account);
        System.out.println("恭喜您"+userName+"先生/女士,开户成功!您的卡号是:"+cardId+",请妥善保管卡号");


    }


    /**
     * 为账号随机生成8位不与其他账号重复密码
     * @return
     * @param accounts
     */
    private static String getRandomCardId(ArrayList<Account> accounts) {
        Random random = new Random();
        //死循环,直到可用账号出现
        while (true) {
            String cardId = "";
            for (int i = 0; i < 8; i++) {
                cardId += random.nextInt(10);
            }

            //判断卡号是否重复
            Account account = getAccountByCardId(cardId, accounts);
            if (account == null){
                //无重复,账号可用
                return cardId;
            }
        }

    }

    /**
     * 判断卡号是否重复
     * @param cardId
     * @param accounts
     */
    private static Account getAccountByCardId(String cardId, ArrayList<Account> accounts) {
        for (int i = 0; i < accounts.size(); i++) {
            Account account = accounts.get(i);
            if (account.getCardId().equals(cardId)){
                return account;
            }
        }
        return null;
    }
}