大二上学期学习记录——java实验——程序封装实现与测试

发布于:2022-11-05 ⋅ 阅读:(256) ⋅ 点赞:(0)

学生姓名

刘钟泽

学号

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. 隐藏信息,实现细节。

在这个实验中任然留有遗憾,没有实现多个数据的录入,与输出,目前思路为创建结构体数组用于存储录入数据,输出时可以用循环输出

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到