<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Loading

      java學習筆記part2

      面向對象oop

      設計對象并使用

      • 類:對象共同特征的描述
      • 對象:真實存在的具體實例

      image

      對象在內存中的運行機制

      • 方法區:字節碼文件加載時進入的內存
      • 棧內存:方法運行時,進入的內存,變量也在這里,變量中存儲 對象在堆內存的地址
      • 堆內存:new出來的對象,在這塊內存中開辟空間并產生地址,放置成員變量,在對象中放置成員方法的引用地址
      • 堆內存中的對象,沒有任何變量應用時,就會判定為內存中的垃圾

      面向對象練習

      模擬購物車

      package oop;
      
      
      import java.util.Scanner;
      
      public class ShowCarTest{
          public static void main(String[] args) {
              //定義商品類,用于創建商品對象
              //定義購物車對象,使用數組對象表示
              Goods[] shopCar = new Goods[100];//商品類型的數組
              //搭建操作架構
              while (true) {
                  System.out.println("選擇下面命令操作");
                  System.out.println("添加商品到購物車 add");
                  System.out.println("查詢購物車商品 query");
                  System.out.println("修改商品購買數量  update");
                  System.out.println("結算商品 pay");
                  Scanner sc = new Scanner(System.in);
                  System.out.println("輸入命令");
      
                  String command = sc.next();
                  switch (command){
                      case "add":
                          //添加商品到購物車
                          addGoods(shopCar, sc);
                          break;
                      case "query":
                          //查詢購物車商品
                          queryGoods(shopCar);
                          break;
                      case "update":
                          //修改商品購買數量
                          updateGoods(shopCar, sc);
                          break;
                      case "pay":
                          //結算商品
                          payGoods(shopCar);
                          break;
                      default:
                          System.out.println("沒有該功能");
                  }
              }
          }
      
          public static void payGoods(Goods[] shopCar) {
              queryGoods(shopCar);
              //定義求和遍歷,累加金額
              double money = 0;
              //遍歷購物車數組中全部商品對象,單價*數量
              for (int i = 0; i < shopCar.length; i++) {
                  Goods g =shopCar[i];
                  if(g != null){
                      money += (g.price * g.buyNumber);
                  }else {
                      break;
                  }
              }
              System.out.println("訂單金額" + money);
          }
      
          //修改購買數量
          public static void updateGoods(Goods[] shopCar, Scanner sc) {
              //讓用戶輸入要修改商品的id,id查詢要修改的對象
              while (true) {
                  System.out.println("輸入要修改的商品id");
                  int id = sc.nextInt();
                  Goods g = getGoodsById(shopCar, id);
                  if(g == null){
                      //沒有商品
                      System.out.println("沒有該商品");
                  }else {
                      //存在該商品
                      System.out.println("輸入"+g.name+"購買數量");
                      g.buyNumber = sc.nextInt();
                      System.out.println("修改完成");
                      queryGoods(shopCar);
                      break;
                  }
              }
          }
      
          //    根據id查詢要修改的對象
          public static Goods getGoodsById(Goods[] shopCar, int id){
              for (int i = 0; i < shopCar.length; i++) {
                  Goods g = shopCar[i];
                  if(g != null){
                      //判斷商品id是不是要找的
                      if(g.id == id){
                          return g;
                      }
                  }else {
                      return null;//找完前面存在的都沒找到
                  }
              }
              //所有位置都不是null,都有數據,不匹配
              return null;
          }
      
      
          //查詢購物車中商品信息
          public static void queryGoods(Goods[] shopCar) {
              System.out.println("--------購物車信息如下--------");
              System.out.println("編號\t\t名稱\t\t價格\t\t購買數量");
              for (int i = 0; i < shopCar.length; i++) {
                  Goods g = shopCar[i];
                  if(g != null){
                      //展示這個對象
                      System.out.println(g.id+"\t\t"+g.name+"\t\t"+g.price+"\t\t"+g.buyNumber);
                  }else {
                      //遍歷結束
                      break;
                  }
              }
          }
      
          //商品添加到購物車
          public static void addGoods(Goods[] shopCar, Scanner sc) {
      
              //1.錄入用戶輸入的購買商品的信息
              System.out.println("輸入購買商品的編號");
              int id = sc.nextInt();
              System.out.println("輸入購買商品的名稱");
              String name = sc.next();
              System.out.println("輸入購買商品的數量");
              int buyNumber = sc.nextInt();
              System.out.println("商品價格");
              double price = sc.nextDouble();
      
              //把購買商品的信息,封裝成商品對象
              Goods g = new Goods();
              g.id = id;
              g.name = name;
              g.buyNumber = buyNumber;
              g.price = price;
      
              //商品對象添加到購物車數組中
              for (int i = 0; i < shopCar.length; i++) {
                  if(shopCar[i] == null){
                      //這個位置沒有元素
                      shopCar[i] = g;
                      break;//商品成功存進去,退出
                  }
              }
              System.out.println(g.name + "\t添加到購物車");
          }
      }
      
      

      構造器

      • 定義在類中,可以用于初始化一個類的對象,并返回對象地址
      • 無參數構造器:默認存在的,初始化對象時,成員變量的數據采用默認值
      • 有參數構造器:在初始化對象時,同時可以接收參數為對象進行賦值
      • 調用構造器得到對象的格式Car c = new Car()
      public  class Car{
      	public Car(){
      	//無參構造器
      	}
      	public Car(String n){
      	//有參構造器
      	}
      }
      
      //測試類
      package constructor;
      
      import org.w3c.dom.ls.LSOutput;
      
      public class Test {
          public static void main(String[] args) {
              //調用無參數構造器,得到對象
              Car c = new Car();
              c.namr = "bmw";
              c.price = 33.33;
              System.out.println(c.price);
              System.out.println(c.namr);
      
      
              //調用有參數構造器
              Car c2 = new Car("bbb", 55.55);
              System.out.println(c2.namr);
              System.out.println(c2.price);
      
          }
      }
      
      //Car類
      package constructor;
      
      public class Car {
          String namr;
          double price;
      
      
      //    無參數構造器
          public Car(){
              System.out.println("調用無參數構造器");
          }
      
      //    有參數構造器
          public Car(String n, double p){
              System.out.println("調用有參數構造器");
              namr = n;
              price = p;
          }
      }
      

      注意事項:

      1. 任何類定義出來,默認自帶無參數構造器,
      2. 一旦定義了有參數構造器,那無參數構造器就沒有了,如果還想用無參數構造器,就需要自己寫一個無參數構造器

      this 關鍵字

      • this可以出現在構造器,方法中
      • this代表當前對象的地址
      • 可以用于指定訪問當前對象的成員變量,成員方法
      //測試類
      package thist;
      
      public class Test {
          public static void main(String[] args) {
      //        Car c = new Car();
      //        c.run();
      //        System.out.println(c);
              Car c = new Car("bmw", 55.55);
              System.out.println(c.name);
              System.out.println(c.price);
      
              c.gowith("bbb");
          }
      }
      
      
      
      //Car類
      package thist;
      
      public class Car {
          String name;
          double price;
      //  定義無參數構造器
      //    public Car(){
      //        System.out.println("無參數構造器中的" + this);
      //    }
      //
      //    public void run(){
      //        System.out.println("方法中的" + this);
      //    }
      
          public Car(String name, double price){
              this.name =name;
              this.price = price;
              //指定訪問當前對象的成員變量
          }
          public void gowith(String name){
              System.out.println(this.name + "和" + name + "一起比賽");
          }
      }
      
      
      

      封裝

      • 面向對象的三大特征:封裝,繼承,多態

      • 封裝:如何正確設計對象的屬性和方法

      • 封裝的原則:對象代表什么,就得封裝對應的數據,并對數據提供對應的行為

      • private

      image

      標準javabean

      • 實體類,對象可以用于程序中封裝數據

      標注javabean書寫要求

      • 成員變量使用private修飾
      • 提供成員變量get,set方法
      • 必須提供一個無參構造器,有參構造器可寫可不寫

      image

      面向對象案例

      //測試類
      
      package demo;
      
      public class Test {
          public static void main(String[] args) {
      //        1.設計電影類
      //        2.創建三個電影對象,封裝電影信息
      //        3.定義電影類型的數組,存儲電影對象
              Movie[] movies = new Movie[3];
              movies[0] = new Movie("長津湖", 8.7, "吳京");
              movies[1] = new Movie("我和我的父輩", 5.5, "吳京");
              movies[2] = new Movie("少年", 6.6, "王");
              
              
      //        4.遍歷數組中電影對象
              for (int i = 0; i < movies.length; i++) {
                  Movie m = movies[i];
                  System.out.println(m);//輸出地址
                  System.out.println(m.getName());
                  System.out.println(m.getScore());
                  System.out.println(m.getActor());
                  System.out.println("-----------------------------");
      
              }
          }
      }
      
      
      
      package demo;
      
      public class Movie {
          //1.成員變量
          private String name;
          private double score;
          private String actor;
      
          public Movie() {
          }
      
          public Movie(String name, double score, String actor) {
              this.name = name;
              this.score = score;
              this.actor = actor;
          }
      
      
          //2.get,set
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public double getScore() {
              return score;
          }
      
          public void setScore(double score) {
              this.score = score;
          }
      
          public String getActor() {
              return actor;
          }
      
          public void setActor(String actor) {
              this.actor = actor;
          }
      }
      
      

      常用api

      • java寫好的功能代碼,可直接調用

      String類

      • String類定義的變量可以用來存儲字符串
      • 常被稱為不可變字符串類型,對象創建后不能修改
      • String變量每次修改,都是產生并指向了新的字符串對象,原來的字符串對象沒有改變

      String創建對象的兩種方式

      • “ ”方法給出的字符串,在字符串常量池中存儲,相同內容只會在其中存儲一份
      • 通過構造器new對象,每new一次都會產生新的對象,放在堆內存
      package StringLei;
      
      public class StringDemo {
          public static void main(String[] args) {
      //        1.使用雙引號,得到字符串對象
              String name = "rrr";
      //        2.通過構造器創建對象
      //        public String();創建一個空白字符串對象,不用
              String s1 = new String();
      //        public String(String);根據傳入的字符串內容,創建字符串對象,不用
              String s2 = new String("tttttt");
      //        public String(char[] c);根據字符數組的內容,創建字符串對象
              char[] chars = {'2', '3', '4'};
              String s3 = new String(chars);
      //        public String(byte[] b);根據字節數組的內容,創建字符串對象
              byte[] bytes = {1, 2, 3, 4, 5};
              String s4 = new String(bytes);
      
          }
      }
      

      String類常用api

      • 比較
      package StringLei;
      
      import java.util.Scanner;
      
      public class StringEqualsDemo {
          public static void main(String[] args) {
              // 正確登錄名和密碼
              String okName = "heima";//指向常量池
              String okPasswd = "123456";
      
              //輸入登錄名和密碼
              Scanner sc = new Scanner(System.in);
              System.out.println("用戶名");
              String name = sc.next();
              System.out.println("密碼");//堆內存
              String passwd = sc.next();
      
      
              //判斷用戶輸入
             if(okName.equals(name) && okPasswd.equals(passwd)){//比較地址
                  System.out.println("對了");
              }else {
                  System.out.println("錯誤");
              }
             
          }
      }
      
      package StringLei;
      
      import java.nio.charset.StandardCharsets;
      
      public class StringDemo11 {
          public static void main(String[] args) {
              //獲取字符串長度
              String name = "好家伙";
              System.out.println(name.length());
      
              //獲取索引位置處的字符
              System.out.println(name.charAt(1));
      
              //遍歷字符串中的每個字符
              for (int i = 0; i < name.length(); i++) {
                  System.out.println(name.charAt(i));
              }
      
              //字符串轉換成字符數組
              System.out.println(name.toCharArray());
      
      
              //截取字符串
              String name2 = "haojiahuo";
              System.out.println(name2.substring(0, 4));//包括前面,不包括后面
      
      
              //從當前索引截取到結尾
              System.out.println(name2.substring(1));
      
              //替換,后面的字符串替換前面的字符串
              String name3 = "niubi";
              System.out.println(name3.replace("bi", "bidal"));
      
      
              //判斷是否包含,生成一個布爾值
              System.out.println(name3.contains("bi"));
      
              //判斷開頭
              System.out.println(name3.startsWith("niu"));
      
      
              //將字符串分割,返回
              String name4 = "niu, bi, da, l";
              String[] name5 = name4.split(",");
              for (int i = 0; i < name5.length; i++) {
                  System.out.println(name5[i]);
              }
          }
      }
      
      

      案例

      //驗證碼
      package StringLei;
      
      import java.util.Random;
      
      public class StringDemo2 {
          public static void main(String[] args) {
              String data = "qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKMNJHBGVFCDXSZA1234567890";
      
              //循環5次,每次生成一個隨機索引,提取對應字符
              String code = "";
              Random r = new Random();
              for (int i = 0; i < 5; i++) {
                  //隨機一個索引
                  int index = r.nextInt(data.length());
                  char c =data.charAt(index);
                  code += c;
              }
              System.out.println(code);
          }
      }
      
      
      
      //登錄
      package StringLei;
      
      import java.util.Scanner;
      
      public class StringDemo3 {
          public static void main(String[] args) {
              //1. 定義名稱密碼
              String okname = "root";
              String okpasswd = "root";
      
              //2. 定義循環三次
              Scanner sc = new Scanner(System.in);
              for (int i = 0; i < 3; i++) {
                  System.out.println("輸入名稱");
                  String name = sc.next();
                  System.out.println("輸入密碼");
                  String passwd = sc.next();
      
                  //3. 判斷登錄成功
                  if(okname.equals(name)){
                      if(okpasswd.equals(passwd)) {
                          System.out.println("登錄成功");
                          break;
                      }else {
                          System.out.println("passwd錯誤");
                      }
                  }else {
                      System.out.println("name錯誤");
                  }
              }
          }
      }
      
      
      //屏蔽手機號
      package StringLei;
      
      import java.util.Scanner;
      
      public class StringDemo5 {
          public static void main(String[] args) {
              // 輸入號碼
              Scanner sc = new Scanner(System.in);
              System.out.println("輸入號碼");
              String tel = sc.next();
      
      
              //截取號碼,前三后四
              String before = tel.substring(0, 3);
              String after = tel.substring(7);
      
      
              String s = before + "****" + after;
              System.out.println(s);
          }
      }
      
      

      ArrayList集合

      • 支持索引的集合
      package ArrayLIst1;
      
      import java.util.ArrayList;
      
      public class Demo1 {
          public static void main(String[] args) {
              // 1.創建arraylist對象
              ArrayList list = new ArrayList();
      
              //添加數據
              list.add("java");
              list.add("mysql");
              list.add(2);
              list.add(false);
              System.out.println(list);
      
      
              //指定索引插入元素
              list.add(1, 666);
              System.out.println(list);
          }
      }
      

      泛型

      ArrayList:其實就是一個泛型類,可以在編譯階段約束集合對象只能操作某種數據類型

      • ArrayList:此集合只能操作字符串類型的元素

      集合中只能存儲引用類型,支持基本數據類型

      package ArrayLIst1;
      
      import java.util.ArrayList;
      
      public class Demo2 {
          public static void main(String[] args) {
              ArrayList<String> list = new ArrayList<>();//jdk1.7開始,泛型 后面的類型聲明可以不寫
              list.add("6666666");
      //        list.add(6666666);//只有字符串加進去
      
              ArrayList<Integer> list2 = new ArrayList<>();
              list2.add(33333);
              
          }
      }
      
      

      常用api,遍歷

      package ArrayLIst1;
      
      import java.util.ArrayList;
      
      public class Demo3 {
          public static void main(String[] args) {
              ArrayList<String> list = new ArrayList<>();
              list.add("java");
              list.add("mysql");
              list.add("6666");
      
              //獲取每個索引位置的元素值
              System.out.println(list.get(2));
      
              //獲取集合元素的個數
              System.out.println(list.size());
      
              //集合元素遍歷
              for (int i = 0; i < list.size(); i++) {
                  System.out.println(list.get(i));
              }
      
      
              //根據索引刪除元素值,返回被刪除的元素值
              System.out.println(list);
              System.out.println(list.remove(1));
              System.out.println(list);
      
      
              //直接刪除元素值,成功返回ture,失敗返回false
              //刪除集合的相同元素,會刪除第一個
              System.out.println(list.remove("java"));
              System.out.println(list);
      
      
      
              //修改索引處的元素值,返回修改前的元素值
              System.out.println(list.set(0, "333333333"));
              System.out.println(list);
      
          }
      }
      
      

      ArrayList案例

      1. 99.77.66.89.79.50.100,去掉低于80的
      package ArrayLIst1;
      
      import java.util.ArrayList;
      
      public class Demo4 {
          public static void main(String[] args) {
           //1. 創建ArrayList集合存儲一個班級學生成績
              ArrayList<Integer> score = new ArrayList<>();
              score.add(98);
              score.add(77);
              score.add(66);
              score.add(89);
              score.add(79);
              score.add(100);
              score.add(50);
              System.out.println(score);
      
      
              //低于80的成績在集合中去掉
              //方案1
      /*        for (int i = 0; i < score.size(); i++) {
                  int s = score.get(i);
                  if(s < 80 ){
                      //刪除分數
                      score.remove(i);
                      i--;
                  }
              }
              System.out.println(score);*/
      
              //方案2
              for (int i = score.size() - 1; i >= 0 ; i--) {
                  int s = score.get(i);
                  if(s < 80){
                      score.remove(i);
                  }
              }
              System.out.println(score);
          }
      }
      
      
      1. 展示三個對象
      //測試類
      package ArrayLIst1;
      
      import java.util.ArrayList;
      
      public class Demo5 {
          public static void main(String[] args) {
      
          //定義電影類
          //創建電影對象'
          Movie m1 = new Movie("小", 6.6,"xiao");
          Movie m2 = new Movie("中", 6.7,"zhong");
          Movie m3 = new Movie("大", 6.8,"da");
      
          //創建電影類型的集合
          ArrayList<Movie> movies = new ArrayList<>();
      
          movies.add(m1);
          movies.add(m2);
          movies.add(m3);
      
          //遍歷電影類集合中的對象
              for (int i = 0; i < movies.size(); i++) {
                  Movie m = movies.get(i);
                  System.out.println("name" + m.getName());
                  System.out.println("score" + m.getScore());
                  System.out.println("actor" + m.getActor());
                  System.out.println("--------------------------");
              }
          }
      }
      
      
      
      
      
      package ArrayLIst1;
      
      public class Movie {
          private String name;
          private double score;
          private String actor;
      
          //有參構造器
          public Movie(String name, double score, String actor) {
              this.name = name;
              this.score = score;
              this.actor = actor;
          }
          //無參構造器
          public Movie() {
          }
      
          //get,set
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public double getScore() {
              return score;
          }
      
          public void setScore(double score) {
              this.score = score;
          }
      
          public String getActor() {
              return actor;
          }
      
          public void setActor(String actor) {
              this.actor = actor;
          }
      }
      
      
      
      1. 元素所搜
        存儲學生信息并展示,提供安寧莊學號搜索的功能
      //測試類
      package ArrayLIst1;
      
      import java.util.ArrayList;
      import java.util.Scanner;
      
      public class Demo6 {
      
          public static void main(String[] args) {
          //構建學生類
          //創建集合,存儲學生對象,封裝學生信息
              ArrayList<Students> students = new ArrayList<>();
              students.add(new Students("2222", "hao", 23, "yiban"));
              students.add(new Students("3333", "jia", 24, "erban"));
              students.add(new Students("4444", "huo", 25, "sanban"));
      
          //遍歷,展示
              for (int i = 0; i < students.size(); i++) {
                  Students s = students.get(i);
                  System.out.println(s.getNumber()+ "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassname());
              }
      
          //定義搜索方法,按學號
              Scanner sc =new Scanner(System.in);
              while (true){
                  System.out.println("輸入學號查詢學生");
                  String num = sc.next();
      
                  //調用方法查詢
                  Students s = getStudentnyid(students, num);
      
                  //判斷s中是否存在,地址
                  if(s == null){
                      System.out.println("找不到");
                  }else {
                      System.out.println("找到了");
                      System.out.println(s.getNumber()+ "\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassname());
                  }
              }
          }
      
      
      
          /**
           * 根據學生的學號嗎,查詢學生對象返回
           * @param arrayList 存儲學生對象的集合
           * @param num 學號
           * @return 學生對象 | null
           */
          public static Students getStudentnyid(ArrayList<Students> arrayList, String num){
              //遍歷學生對象
              for (int i = 0; i < arrayList.size(); i++) {
                  Students s = arrayList.get(i);
                  //對比當前學號,和要搜索的學號
                  if(s.getNumber().equals(num)){
                      //找到了
                      return s;
                  }
              }
              //找不到
              return null;
          }
      }
      
      
      
      
      //學生類
      package ArrayLIst1;
      
      public class Students {
          private String number;
          private String name;
          private int age;
          private String classname;
      
      
      
          //構造器
          public Students(String number, String name, int age, String classname) {
              this.number = number;
              this.name = name;
              this.age = age;
              this.classname = classname;
          }
      
          public Students() {
          }
      
      
      
          //set,get
          public String getNumber() {
              return number;
          }
      
          public void setNumber(String number) {
              this.number = number;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          public String getClassname() {
              return classname;
          }
      
          public void setClassname(String classname) {
              this.classname = classname;
          }
      }
      
      

      ATM系統

      package ATM;
      
      import javax.crypto.spec.PSource;
      import java.util.ArrayList;
      import java.util.Random;
      import java.util.Scanner;
      
      /**
       * 入口類
       */
      public class ATMSystem {
          public static void main(String[] args) {
              //1.定義賬戶類
              //2. 定義集合容器,存儲全部賬戶對象
              ArrayList<Account> accounts = new ArrayList<>();
              //3. 展示系統首頁,
              while (true) {
                  System.out.println("--------ATM系統---------");
                  System.out.println("1, 登錄");
                  System.out.println("2, 注冊");
                  Scanner sc = new Scanner(System.in);
                  System.out.println("選擇操作");
                  int command = sc.nextInt();
      
                  switch (command) {
                      case 1 ->
                          //登錄
                              login(accounts, sc);
                      case 2 ->
                          //注冊
                              register(accounts, sc);
                      default -> System.out.println("沒這功能");
                  }
              }
          }
      
      
          /**
           * 登錄功能,
           * @param accounts 全部賬戶對象集合
           * @param sc 掃描器
           */
          private static void login(ArrayList<Account> accounts, Scanner sc) {
              System.out.println("----------------登錄-----------------");
              //1。判斷賬戶集合中是否存在賬戶,沒有的話不能運行
              if(accounts.size() == 0){
                  System.out.println("系統中無任何用戶,先注冊");
                  return;//結束方法的執行
              }
      
              //進入登錄操作
              while (true) {
                  System.out.println("輸入卡號");
                  String cardId = sc.next();
      
                  //判斷卡號是否存在
                  Account acc = getAccountByCardId(cardId, accounts);
                  if(acc != null){
                      //卡號存在
                      //用戶輸入密碼認證
                      while (true) {
                          System.out.println("輸入密碼");
                          String passwd = sc.next();
                          //判斷密碼是否正確
                          if(acc.getPasswd().equals(passwd)){
                              //登錄成功
                              System.out.println(acc.getUsername() + "登錄成功,卡號是" + acc.getCardid());
                              //展示登錄后的操作頁,整個方法
                              showUserCommand(sc, acc, accounts);
                              return;//干掉登錄方法
      
                          }else {
                              System.out.println("輸入密碼有誤");
                          }
                      }
                  }else {
                      System.out.println("系統中不存在該賬戶卡號");
                  }
              }
          }
      
          /**
           * 展示登錄后的操作頁面
           */
          private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {
              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 = sc.nextInt();
                  switch (command) {
                      case 1 ->
                          //查詢賬戶,當前登錄的賬戶信息
                              showAccount(acc);
                      case 2 ->
                          //存款
                              depositMoney(acc, sc);
                      case 3 ->
                          //取款
                              drawMoney(acc, sc);
                      case 4 ->
                          //轉賬
                              transferMoney(sc, acc, accounts);
                      case 5 -> {
                          //修改密碼
                          updatepasswd(sc, acc);
                          return;//跳出登錄
                      }
                      case 6 -> {
                          //退出
                          System.out.println("退出成功");
                          return;//干掉當前方法的執行
                      }
                      case 7 -> {
                          //注銷
                          if(deleteAccount(acc, sc, accounts)){
                              return;
                          }else {
                              //銷戶沒有成功
                              break;
                          }
                      }
                      default -> System.out.println("輸入的操作命令不正確");
                  }
              }
          }
      
          /**
           * 銷戶
           * @param acc
           * @param sc
           * @param accounts
           */
          private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
              System.out.println("-----------用戶銷戶-----------");
              System.out.println("真的銷戶嗎 y/n");
              String s = sc.next();
              switch (s){
                  case "y":
                      //真銷戶
                      if(acc.getMoney() > 0){
                          System.out.println("賬戶還有錢,不能銷戶");
                      }else {
                          accounts.remove(acc);
                          System.out.println("銷戶成功");
                          return true;
                      }
                      break;
                  default:
                      System.out.println("那就不銷戶了");
              }
              return false;
          }
      
          /**
           * 改密碼
           * @param sc 掃描器
           * @param acc 當前登錄成功的對象
           */
          private static void updatepasswd(Scanner sc, Account acc) {
              System.out.println("-----------用戶改密碼-----------");
              while (true) {
                  System.out.println("輸入當前密碼");
                  String passwd = sc.next();
      
                  //判斷密碼
                  if(acc.getPasswd().equals(passwd)){
                      //正確
                      //輸入密碼
                      while (true) {
                          System.out.println("輸入新密碼");
                          String newpasswd = sc.next();
                          System.out.println("再次輸入密碼");
                          String newpasswd2 = sc.next();
      
                          if(newpasswd.equals(newpasswd2)){
                              //兩次輸入一致,可以修改了
                              acc.setPasswd(newpasswd2);
                              System.out.println("修改成功");
                              return;
                          }else {
                              System.out.println("兩次密碼不一致");
                          }
                      }
                  }else {
                      System.out.println("當前密碼不正確");
                  }
              }
      
          }
      
          /**
           * 轉賬
           * @param sc 掃描
           * @param acc 自己賬戶
           * @param accounts 全部賬戶集合
           */
          private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
              System.out.println("-----------用戶取錢-----------");
              // 1.分析系統是否足夠兩個賬戶
              if(accounts.size() < 2){
                  System.out.println("不夠兩個賬戶,不能轉賬");
                  return;
              }
      
              //判斷自己賬戶是否有錢
              if(acc.getMoney() == 0){
                  System.out.println("自己沒錢");
                  return;
              }
      
              //3.開始轉賬
      
              while (true) {
                  System.out.println("輸入對方卡號");
                  String  cardId = sc.next();
      
                  //卡號不能自己
                  if(cardId.equals(acc.getCardid())){
                      System.out.println("不能給自己轉賬");
                      continue;//結束當此執行,進行下一次
                  }
      
                  //根據卡號查賬戶
                  Account a = getAccountByCardId(cardId, accounts);
                  if(a == null){
                      System.out.println("輸入賬戶不存在");
                  }else {
                      //賬戶存在,繼續認證姓氏
                      String userName = a.getUsername();
                      String tip = '*' + userName.substring(1);
                      System.out.println("輸入" + tip + "姓氏");
                      String preName = sc.next();
      
                      //檢查
                      if(userName.startsWith(preName)){
                          while (true) {
                              //通過
                              //開始轉賬
                              System.out.println("輸入轉賬金額");
                              double money = sc.nextDouble();
                              //判斷余額
                              if(money > acc.getMoney()){
                                  System.out.println("余額不足,最多轉賬" + acc.getMoney());
                              }else {
                                  //余額足夠
                                  acc.setMoney(acc.getMoney() - money);
                                  a.setMoney(a.getMoney() + money);
                                  System.out.println("轉賬成功,賬戶剩余" + acc.getMoney());
                                  return;  //轉賬結束,干掉方法
                              }
                          }
                      }else {
                          System.out.println("輸入錯誤");
                      }
                  }
              }
          }
      
          /**
           * 取錢
           * @param acc 當前賬戶對象
           * @param sc 掃描器
           */
          private static void drawMoney(Account acc, Scanner sc) {
              System.out.println("-----------用戶取錢-----------");
              //判斷是否有錢
              if(acc.getMoney() < 100){
                  System.out.println("錢不夠100,不能取");
                  return;
              }
              // 提示用戶輸入取錢金額
              while (true) {
                  System.out.println("輸入取款金額");
                  double money = sc.nextDouble();
                  //判斷金額
                  if(money > acc.getQuotaMoney()){
                      System.out.println("不能取,每次最多可取" + acc.getQuotaMoney());
                  }else {
                      //沒超過限額
                      // 判斷是否超過總余額
                      if(money > acc.getMoney()){
                          System.out.println("余額不足,還有" + acc.getMoney());
                      }else {
                          //可以取錢
                          System.out.println("取錢成功" + money);
                          //跟新余額
                          acc.setMoney(acc.getMoney() - money);
                          showAccount(acc);
                          return;
                      }
                  }
              }
          }
      
          /**
           * 存錢
           * @param acc 當前賬戶對象
           * @param sc 掃描器
           */
          private static void depositMoney(Account acc, Scanner sc) {
              System.out.println("-----------用戶存錢-----------");
              System.out.println("輸入存款金額");
              double Money = sc.nextDouble();
      
              //跟新賬戶余額,原來的+存的
              acc.setMoney(acc.getMoney() + Money);
              System.out.println("存錢成功");
              showAccount(acc);
      
          }
      
          /**
           * 展示賬戶信息
           */
          private static void showAccount(Account acc) {
              System.out.println("--------當前賬戶信息如下--------------");
              System.out.println("卡號" + acc.getCardid());
              System.out.println("姓名" + acc.getUsername());
              System.out.println("余額" + acc.getMoney());
              System.out.println("限額" + acc.getQuotaMoney());
          }
      
          /**
           * 用戶注冊功能的實現
           * @param accounts,接收賬戶的集合
           */
          private static void register(ArrayList<Account> accounts, Scanner sc) {
              System.out.println("------------注冊功能---------------");
              //創建賬戶對象,用于后期封裝賬戶信息
              Account account = new Account();
      
              //錄入當前賬戶的信息,注入到賬戶中
              System.out.println("輸入用戶名");
              String usereanme = sc.next();
              account.setUsername(usereanme);
      
              while (true) {
                  System.out.println("輸入密碼");
                  String passwd = sc.next();
                  System.out.println("輸入密碼");
                  String okpasswd = sc.next();
                  if(okpasswd.equals(passwd)){
                      //密碼一樣
                      account.setPasswd(passwd);
                      break;//錄入成功,退出循環
                  }else {
                      System.out.println("兩次密碼不一樣");
                  }
              }
      
              System.out.println("輸入賬戶限額");
              double quotamoney = sc.nextDouble();
              account.setQuotaMoney(quotamoney);
      
      
              //隨機一個,8位不重復的號碼(獨立成方法)
              String cardId = getRandomCardId(accounts);
              account.setCardid(cardId);
      
      
              //把賬戶對象添加到賬戶集合中
              accounts.add(account);
              System.out.println(usereanme + "注冊成功" + cardId);
      
      
          }
      
          /**
           * 為賬戶生成8位,不重復的卡號
           *
           */
          private static String getRandomCardId(ArrayList<Account> accounts) {
              Random r = new Random();
              while (true) {
                  //生成八位數字
                  String cardId = "";
                  for (int i = 0; i < 8; i++) {
                      cardId += r.nextInt(10);
                  }
      
                  //判斷卡號是否重復
                  //根據卡號查詢賬戶對象
                  Account acc = getAccountByCardId(cardId, accounts);
                  if(acc == null){
                      //cardid,沒有重復,可以使用
                      return cardId;//return可以立即跳出尋循環,并停止當前方法
                  }
              }
          }
      
          /**
           * 根據卡號查詢賬戶
           * @param cardId 卡號
           * @param accounts 全部賬戶集合
           * @return 賬戶對象
           */
          private static Account getAccountByCardId(String cardId, ArrayList<Account> accounts){
              for (int i = 0; i < accounts.size(); i++) {
                  Account acc = accounts.get(i);
                  if(acc.getCardid().equals(cardId)){
                      return acc;
                  }
              }
              return null;
          }
      
      }
      
      package ATM;
      
      /**
       * 賬戶類
       */
      public class Account {
          private String cardid;//卡號
          private String username;//用戶名
          private String passwd;//密碼
          private double money;//余額
          private double 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 getPasswd() {
              return passwd;
          }
      
          public void setPasswd(String passwd) {
              this.passwd = passwd;
          }
      
          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;
          }
      }
      
      posted @ 2022-04-27 20:39  5rem  閱讀(59)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 熟女乱一区二区三区四区| 成年女人免费碰碰视频| 韩国三级在线 中文字幕 无码| 制服丝袜美腿一区二区| 噜噜综合亚洲av中文无码| 一边吃奶一边摸做爽视频| 一区二区三区国产不卡| 亚洲第一最快av网站| 国产男人的天堂在线视频| 亚洲精品宾馆在线精品酒店| 亚洲爆乳少妇无码激情| 免费人成年激情视频在线观看| 久久一区二区三区黄色片| 亚洲v欧美v国产v在线观看| 中文字幕人妻精品在线| 久草热大美女黄色片免费看| 午夜精品视频在线看| 日韩丝袜亚洲国产欧美一区| 中文字幕在线精品人妻| 亚洲成在人线在线播放无码| 一本色道国产在线观看二区| 在线A级毛片无码免费真人| 日韩一区二区三区日韩精品| 亚洲欧美精品一中文字幕| 884aa四虎影成人精品| 激情国产一区二区三区四区 | 久久精品国产亚洲AV瑜伽| 欧美牲交a欧美牲交aⅴ图片| 麻豆最新国产AV原创精品| 另类 专区 欧美 制服| 97久久精品无码一区二区天美| 午夜成人无码免费看网站| 精品国产午夜理论片不卡| 一本色道国产在线观看二区| 国产精品国产三级国产专i| 一区二区三区四区五区黄色| 久久久久青草线蕉亚洲| 亚洲精品乱码免费精品乱| 国产精品av中文字幕| 扒开女人内裤猛进猛出免费视频| 久久久久久久久久久免费精品|