第四周课程总结&试验报告(二)

实验二 Java简单类与对象

1.写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color,width和height都是double型的,
而color则是String类型的。要求该类具有:
(1) 使用构造函数完成各属性的初始赋值

(2) 使用get…()和set…()的形式完成属性的访问及修改

(3) 提供计算面积的getArea()方法和计算周长的getLength()方法

 1 package java实验报告二;
 2 
 3 class Rectangle{
 4     private double width,height;    //声明属性
 5     private String color;           //声明属性
 6     public Rectangle(String color,double width,double height){     //定义构造方法为各属性赋值
 7         this.setColor(color);                                       //为属性赋值
 8         this.setWidth(width);
 9         this.setHeight(height);
10     }
11     public void getArea(){                                     //计算面积的方法
12         System.out.println("面积:"+getWidth()*getHeight());
13     }
14     public void getLength(){                                   //计算周长的方法
15         System.out.println("周长:"+2*(getWidth()+getHeight()));
16     }
17     public void getColor1(){                                    //定义颜色方法
18         System.out.println("颜色:"+getColor());
19     }
20     public String getColor(){             //取得color
21         return color;
22     }
23     public void setColor(String n){       //设置color
24         color=n;
25     }
26     public double getWidth(){             //取得width
27         return width;
28     }
29     public void setWidth(double w){       //设置width
30         width=w;
31     }
32     public double getHeight(){            //取得height
33         return height;
34     }
35     public void setHeight(double h){      //设置height
36         height=h;
37     }
38 }
39 public class classdemo2 {
40 
41     public static void main(String[] args) {
42         Rectangle re=new Rectangle("yellow",15.01,22.22);
43         re.getArea();         //调用Rectangle类的方法
44         re.getLength();
45         re.getColor1();
46     }
47 }

 

 

实验过程:这道题很简单,理解了类与对象的关系,就觉得很简单,基本操作。

2.银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期,
账户密码(六位的数字,可以用0开头),当前的余额。银行规定新开一个账户时,银行方面提供一个标
识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始
余额为0。定义该类,并要求该类提供如下方法:存款、取款、变更密码、可以分别查询账户的标识、姓名、
开户日期、当前余额等信息。

  1 package java实验报告二;
  2 
  3 import java.text.DecimalFormat;  
  4 import java.util.Scanner;
  5 
  6 class Account{   
  7     private String id,name;                              //声明属性
  8     private int time,key;
  9     private double balance;
 10     public Account(String id,String name,int time,int key,int balance){     //定义构造方法为各属性赋值
 11         this.setId(id);                                       //为属性赋值
 12         this.setName(name);
 13         this.setTime(time);
 14         this.setKey(key);
 15         this.setBalance(balance);
 16     }
 17     public void deposit(){              //存取款方法
 18         System.out.println("1.存款 2.取款");
 19         System.out.print("再次输入你要进行的操作的序号:");
 20         DecimalFormat df=new DecimalFormat("0.00");           //控制余额输出精度
 21         Scanner sc=new Scanner(System.in);
 22         int a1=sc.nextInt();
 23         if(a1==1){
 24             System.out.println("当前余额:"+df.format(+getBalance())+"元");
 25             System.out.print("请输入要存入的钱数:");
 26             double money1=sc.nextDouble();
 27             setBalance(getBalance()+money1);       //把输入的钱数赋值给getBalance
 28             System.out.println("成功!当前余额:"+df.format(+getBalance())+"元");
 29         }
 30         else if(a1==2){
 31             System.out.println("当前余额:"+df.format(+getBalance())+"元");
 32             System.out.print("请输入要取出的钱数:");
 33             double money2=sc.nextDouble();
 34             setBalance(getBalance()-money2);
 35             if(getBalance()<0){
 36                 System.out.println("余额不足!");
 37             }
 38             else{
 39                 System.out.println("成功!当前余额:"+df.format(+getBalance())+"元");
 40             }
 41         }
 42         
 43     }
 44     public void change(){               //更改密码方法
 45         System.out.print("请设置新密码:");
 46         Scanner sc=new Scanner(System.in);
 47         int key1=sc.nextInt();
 48         System.out.print("请再次确认密码:");
 49         int key2=sc.nextInt();
 50         if(key1==key2){
 51             setKey(key1);             //把新设置的密码值赋给getKey()
 52             System.out.println("设置成功!你的密码为:"+getKey());
 53         }
 54         else{
 55             System.out.println("两次输入的密码不同!");
 56         }
 57         
 58     }
 59     public void inquire(){              //查询信息方法
 60         System.out.print("输入六位数密码查询信息:");
 61         Scanner sc=new Scanner(System.in);
 62         int data=sc.nextInt();
 63         if(data==getKey()){
 64         DecimalFormat df=new DecimalFormat("0.00");      //控制余额输出精度
 65         System.out.println("标识:"+getId());
 66         System.out.println("姓名:"+getName());
 67         System.out.println("开户日期:"+getTime());
 68         System.out.println("余额:"+df.format(+getBalance())+"元");
 69         }
 70         else{
 71             System.out.println("密码错误");
 72         }
 73     }
 74     public String getId(){
 75         return id;
 76     }
 77     public void setId(String i){
 78         id=i;
 79     }
 80     public String getName(){
 81         return name;
 82     }
 83     public void setName(String n){
 84         name=n;
 85     }
 86     public int getTime(){
 87         return time;
 88     }
 89     public void setTime(int t){
 90         time=t;
 91     }        
 92     public int getKey(){
 93         return key;
 94     }
 95     public void setKey(int k){
 96         key=k;
 97     }
 98     public double getBalance(){
 99         return balance;
100     }
101     public void setBalance(double b){
102         balance=b;
103     }
104 }
105 public class classdemo3 {
106 
107     public static void main(String[] args) {
108         boolean R=false;
109         Account ac=new Account("yanzi404123","张晏子",20190917,123456,0);
110         while(!R)
111         {
112         System.out.println("1.存取款");
113         System.out.println("2.修改密码");
114         System.out.println("3.查询信息");
115         System.out.println("4.退出程序");
116         System.out.print("请输入你要进行的操作的序号:");
117         Scanner sc=new Scanner(System.in);
118         int a=sc.nextInt();
119         if(a==1){
120             ac.deposit();    //存取款
121         }
122         else if(a==2){
123             ac.change();     //修改密码
124             
125         }
126         else if(a==3){
127             ac.inquire();       //信息查询
128         }
129         else if(a==4){
130             System.out.println(" 感谢使用!");
131             break;
132         }
133       }
134    }
135 }

       

       

 

 

做这道题花的时间比较多,大概3个小时,首先跟第一题一样,先做个框架。我提供了3个方法:存取款、修改密码、查询信息。
最先遇到的问题是,人民币余额得保留小数点后两位,而我直接通过get输出它的时候,默认保留的是后一位即0.0,然后仿造C
的方法失败,最后找了个b站教程知道了DecimalFormat的用法,通常通过这样一句话DecimalFormat df=new DecimalFormat("0.00");
来设置保留几位小数。
       第二个问题是写修改密码的代码时,因为我设置了要输入两次密码,所以需要把新密码int key1值赋值给getKey();很明显 getKey()=key1;
是错误的,在网上也搜不到办法,然后我乱写了半个小时,各种排列组合方法都试过了,最后套出了setKey(key1); 这个办法,完全ok。
还有因为使用while循环没有设置break,导致陷入了死循环,下次注意。还有此程序是beta版 还有很多小细节没有完善,比如密码暂时

还不能以0开始,标识也不是随机生成,也没有优化程序。之后再改吧我先提交。

 

posted @ 2019-09-18 02:07  yanzi404  阅读(195)  评论(0编辑  收藏  举报