学生姓名 |
刘钟泽 |
学号 |
21106010413 |
实验成绩 |
||
实验项目名称 |
程序封装实现与测试 |
|||||
实验地点 |
机房 |
实验日期 |
2022年10月9日 |
|||
在面向对象程序设计过程中,为了保证数据安全,通常不允许从外面直接访问类的成员变量,系统通过类中设计的特定的方法处理与类相关的数据。因此在设计中对于全体成员变量或需要保护的成员变量通过private修饰。需要设计一组get/set方法来处理相关业务逻辑。此方式使用Eclipse中的生成方式可以快速解决。
参考上面的演示代码,创建银行账号Account类,成员变量为ID(帐号)number(金额),实现存款类(balance)的不同业务:存(deposit)、取(withdraw)和查询(getbalance)等功能。要求对成员变量进行封装处理。考虑如何设计菜单选项。 提示:在Eclipse中,在代码区按Alt_Shift_S快捷键,可以直接使用生成工具完成,也可以在代码点击鼠标右键,选择Source,然后在级联菜单中选择Generate Getters/Setters…功能。
import java.util.Scanner; public class Test5 { public static void main(String[] args) { System.out.printf("\033[H \033[2J");//这里是实现清屏指令 //\033[H:将光标移动到屏幕或控制台的左上角。 //\033[2J:从光标处清屏到屏幕末尾。 //此处的清屏时为了之后如需做图形页面更方便
System.out.printf("请先录入第一个信息\n输入账户id,姓名,密码,金额\n"); Scanner sc1 = new Scanner(System.in);//输入账户信息 Account acc = new Account (sc1.nextInt(), sc1.next(), sc1.nextInt(), sc1.nextInt()); Balance bal = new Balance (acc.getId(),acc.name, acc.getPassword(), acc.getNumber()); while (true) { System.out.println ("------------------------------------------------"); System.out.println ("-------------欢迎进入银行账户操作系统-------------"); System.out.println ("--welcome to the Bank Account Operating System--"); System.out.println ("--------------1查询余额(getbalance)--------------"); System.out.println ("--------------2取款操作(withdraw)----------------"); System.out.println ("--------------3存款操作(withdraw)----------------"); System.out.println ("--------------4录入信息(enterInformation)--------"); System.out.println ("--------------0退出系统(quit)--------------------"); System.out.println ("------------------------------------------------"); Scanner in = new Scanner(System.in); int choice = in.nextInt(); switch (choice) {//用选择结构,进行图形界面的功能选择 case 0: System.exit(0); break; case 1: System.out.println ("--------------1查询余额(getbalance)--------------"); bal.getbalance(); break; case 2: System.out.println ("--------------2取款操作(withdraw)----------------"); bal.withdraw(); break; case 3: System.out.println ("--------------3存款操作(withdraw)----------------"); int inNum = sc1.nextInt(); bal.deposit(inNum); break; case 4: System.out.println ("--------------4录入信息(enterInformation)--------"); acc.enterInformation(); break; default: System.out.println ("您的选择有误!请重新选择"); break; } } } } class Account { private int id;//使用private保护成员变量 public String name; private int number; private int password;
public Account(int id, String name, int password, int number) { this.setId(id);//使用get/set来实现调用 this.name = name; this.setPassword(password); this.setNumber(number); } public void enterInformation() {//实现录入信息 System.out.printf("输入账户id,姓名,密码,金额\n"); Scanner sc = new Scanner(System.in);//输入账户信息 setId(sc.nextInt()); name = sc.next(); setPassword(sc.nextInt()); setNumber(sc.nextInt()); } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } } class Balance extends Account{ public Balance(int id, String name, int password, int number) { super(id, name, password, number); } public void getbalance() {//实现查询功能 System.out.println("账号:" + getId()); System.out.println("姓名:" + name); System.out.println("金额:" + getNumber()); } public void withdraw() {//实现存钱功能 while (true) { Scanner sc = new Scanner(System.in); System.out.println("请输入密码进行验证!"); int pass = sc.nextInt(); if (pass == getPassword()) { System.out.println("请输入需要取款的金额:"); int withdrawals = sc.nextInt(); if (withdrawals <= getNumber()) { setNumber(getNumber() - withdrawals); System.out.println("账户余额:" + getNumber()); } else { System.out.println("当前余额不足!"); } break; } else {
System.out.println("你输入的密码有误,请重新输入!"); }
} } public void deposit(int inmoney) {//实现取钱功能 setNumber(getNumber() + inmoney); System.out.println("此次存款为:" + inmoney); System.out.println("账户余额:" + getNumber()); } }
封装可是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。 适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。 封装的优点 1. 良好的封装能够减少耦合。 2. 类内部的结构可以自由修改。 3. 可以对成员变量进行更精确的控制。 4. 隐藏信息,实现细节。 在这个实验中任然留有遗憾,没有实现多个数据的录入,与输出,目前思路为创建结构体数组用于存储录入数据,输出时可以用循环输出 |
大二上学期学习记录——java实验——程序封装实现与测试
本文含有隐藏内容,请 开通VIP 后查看