第四周课程总结&试验报告(二)
实验二 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开始,标识也不是随机生成,也没有优化程序。之后再改吧我先提交。