8.3Java入门--->第十一节

1、方法重写

出现在继承当中,子类对父类的方法进行改造

也可以说是覆盖,重置(子类的方法将覆盖弗雷德方法)

1.重写的方法必须和覆盖的方法就有相同的名字,参数和返回值类型

2.不可以出现比父类更严格的访问权限

3.重写方法和被重写方法必须同为static或同不是

4.子类抛出异常不可以比父类被重写方法的异常大

5.子类重写的返回值 类型 可以比父类返回值类型小,或是相同;

总结:若父类的方法对子类不适用,子类可以对父类的方法进行重写

 

继承大练习(其实也不大,如果用Array List做非常简单)

项目2:客户信息管理软件
目标
•    模拟实现一个基于文本界面的《客户信息管理软件》
•    进一步掌握编程技巧和调试技巧,熟悉面向对象编程 
•    主要涉及以下知识点: 
–    类和对象(属性、方法及构造器) 
–    类的封装 
–    引用数组 
–    数组的插入、删除和替换 
–    对象的聚集处理 
–    多对象协同工作 
需求说明
模拟实现基于文本界面的《客户信息管理软件》。 
该软件能够实现对客户对象的插入、修改和删除(用数组实现),并能够打印客户明细表。 
项目采用分级菜单方式。主菜单如下: 
-----------------客户信息管理软件-----------------
                            1 添 加 客 户
                            2 修 改 客 户
                            3 删 除 客 户
                            4 客 户 列 表
                            5 退           出
                            请选择(1-5):_
•    每个客户的信息被保存在Customer对象中。
•    以一个Customer类型的数组来记录当前所有的客户
•    每次“添加客户”(菜单1)后,客户(Customer)对象被添加到数组中。
•    每次“修改客户”(菜单2)后,修改后的客户(Customer)对象替换数组中原对象。
•    每次“删除客户”(菜单3)后,客户(Customer)对象被从数组中清除。
•    执行“客户列表 ”(菜单4)时,将列出数组中所有客户的信息

“添加客户”的界面及操作过程如下所示: 
                …… 
                   请选择(1-5):1
---------------------添加客户---------------------
姓名:张三
性别:男
年龄:30
电话:010-56253825
邮箱:zhang@abc.com
---------------------添加完成---------------------
“修改客户”的界面及操作过程如下所示: 
                …… 
                   请选择(1-5):2
---------------------修改客户---------------------
请选择待修改客户编号(-1退出):1
姓名(张三):<直接回车表示不修改> 
性别(男):
年龄(30):
电话(010-56253825):
邮箱(zhang@abc.com):zsan@abc.com
---------------------修改完成---------------------
“删除客户”的界面及操作过程如下所示: 
                …… 
                   请选择(1-5):3
---------------------删除客户---------------------
请选择待删除客户编号(-1退出):1
确认是否删除(Y/N):y
---------------------删除完成---------------------
“客户列表”的界面及操作过程如下所示: 
                ……
                 请选择(1-5):4
---------------------------客户列表---------------------------
编号  姓名       性别    年龄   电话            邮箱
 1    张三       男      30     010-56253825   abc@email.com
 2    李四       女      23     010-56253825    lisi@ibm.com
 3    王芳       女      26     010-56253825   wang@163.com
-------------------------客户列表完成-------------------------
软件设计结构 
该软件由以下三个模块组成: 
 
CustomerView为主模块,负责菜单的显示和处理用户操作 
CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象,并提供相应的添加、修改、删除和获取方法,供CustomerView调用 
Customer为实体对象,用来封装客户信息 
Customer类的设计
•    Customer为实体类,用来封装客户信息 
•    该类封装客户的以下信息: 
–    String name :客户姓名 
–    char gender  :性别 
–    int age          :年龄 
–    String phone:电话号码 
–    String email :电子邮箱 
•    提供各属性的get/set方法 
•    提供所需的构造器    (可自行确定) 
CustomerList类的设计
•    CustomerList为Customer对象的管理模块,内部用数组管理一组Customer对象 
•    本类封装以下信息: 
–    Customer[] customers:用来保存客户对象的数组 
–    int total = 0                 :记录已保存客户对象的数量 
•    该类至少提供以下方法: 
–    public CustomerList(int totalCustomer) 
–    public boolean addCustomer(Customer customer) 
–    public boolean replaceCustomer(int index, Customer cust)
–    public boolean deleteCustomer(int index)
–    public Customer[] getAllCustomers() 
–    public Customer getCustomer(int index) 
•    public CustomerList(int totalCustomer) 
–    用途:构造器,用来初始化customers数组 
–    参数:totalCustomer:指定customers数组的最大空间 
•    public boolean addCustomer(Customer customer) 
–    用途:将参数customer添加组中最后一个客户对象记录之后 
–    参数:customer指定要添加的客户对象 
–    返回:添加成功返回true;false表示数组已满,无法添加 
•    public boolean replaceCustomer(int index, Customer cust)
–    用途:用参数customer替换数组中由index指定的对象 
–    参数:customer指定替换的新客户对象 
                   index指定所替换对象在数组中的位置 
–    返回:替换成功返回true;false表示索引无效,无法替换 
–    public boolean deleteCustomer(int index)
–    用途:从数组中删除参数index指定索引位置的客户对象记录 
–    参数: index指定所删除对象在数组中的索引位置 
–    返回:删除成功返回true;false表示索引无效,无法删除 
–    public Customer[] getAllCustomers() 
–    用途:返回数组中记录的所有客户对象 
–    返回: Customer[] 数组中包含了当前所有客户对象,该数组长度与对象个数相同。 
–    public Customer getCustomer(int index) 
–    用途:返回参数index指定索引位置的客户对象记录 
–    参数: index指定所要获取的客户对象在数组中的索引位置 
–    返回:封装了客户信息的Customer对象 
CustomerView类的设计
•    CustomerView为主模块,负责菜单的显示和处理用户操作 
•    本类封装以下信息: 
–    CustomerList customers = new CustomerList(10);
    创建最大包含10客户对象的CustomerList 对象,供以下各成员方法使用。 
•    该类至少提供以下方法: 
–    public void enterMainMenu() 
–    private void addNewCustomer() 
–    private void modifyCustomer()
–    private void deleteCustomer()
–    private void listAllCustomers()
–    public static void main(String[] args)
•    public void enterMainMenu() 
–    用途:显示主菜单,响应用户输入,根据用户操作分别调用其他相应的成员方法(如addNewCustomer),以完成客户信息处理。 
•    private void addNewCustomer() 
    private void modifyCustomer()
    private void deleteCustomer()
    private void listAllCustomers()
–    用途:这四个方法分别完成“添加客户”、“修改客户”、“删除客户”和“客户列表”等各菜单功能。 
    这四个方法仅供enterMainMenu()方法调用。 
•    public static void main(String[] args)
–    用途:创建CustomerView实例,并调用 enterMainMenu()方法以执行程序。 
enterMainMenu()方法的活动图
 
键盘访问的实现
•    项目中提供了CMUtility.java类,可用来方便地实现键盘访问。 
•    该类提供了以下静态方法: 
–    public static char readMenuSelection() 
    用途:该方法读取键盘,如果用户键入’1’-’5’中的任意字符,则方法返回。返回值为用户键入字符。 
–    public static char readChar() 和 
    public static char readChar(char defaultValue)
    用途:这两个方法功能相同,均从键盘读取一个字符,并将其作为方法的返回值。 
    参数: defaultValue — 如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。(提示:此方法可在修改客户时调用) 
–    public static int readInt() 和 
    public static int readInt(int defaultValue)
    用途:这两个方法功能相同,均从键盘读取一个长度不超过2位的   整数,并将其作为方法的返回值。 
    参数: defaultValue — 如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。 
–    public static String readString(int limit)  和 
    public static String readString(int limit, String defaultValue)
    用途:这两个方法功能相同,均从键盘读取一个长度不超过limit的字符串,并将其作为方法的返回值。 
    参数:limit — 指定字符串的最大长度 
                   defaultValue — 如果用户不输入字符而直接回车,方法将以defaultValue 作为返回值。 
–    public static char readConfirmSelection() : 
    用途:从键盘读取‘Y’或’N’,并将其作为方法的返回值。 
第1步 — 实现Customer类
1.     按照设计要求编写Customer类,并编译 
2.    在Customer 类中临时添加一个main方法中,作为单元测试方法。 
    在方法中创建Customer对象,并调用对象的各个方法,以测试该类是否编写正确。 
第2步 — 实现CustomerList类
1.    按照设计要求编写CustomerList类,并编译 
2.    在CustomerList类中临时添加一个main方法中,作为单元测试方法。 
3.    在方法中创建CustomerList对象(最多存放5个客户对象),然后分别用模拟数据调用以下各个方法,以测试各方法是否编写正确: 
–    addCustomer 
–    replaceCustomer 
–    deleteCustomer 
–    getAllCustomers 
–    getCustomer 
4.    进一步测试以下情况,以验证该类是否编写正确: 
–    调用addCustomer方法,添加至5个以上客户对象时 
–    当数组中客户对象数量为0时,仍然调用replaceCustomer方法替换对象 
–    当数组中客户对象数量为0时,仍然调用deleteCustomer方法删除对象 
–    对于replaceCustomer、 deleteCustomer和getCustomer的调用,当参数index的值无效时(例如-1或6) 
–    getAllCustomers方法返回的数组长度是否与实际的客户对象数量一致 
第3步 — 实现CustomerView类
1.    按照设计要求编写CustomerView类,逐一实现各个方法,并编译 
2.    执行main方法中,测试以下功能: 
–    主菜单显示及操作是否正确 
–    “添加客户”操作是否正确,给用户的提示是否明确合理;测试当添加的客户总数超过10时,运行是否正确 
–    “修改客户”操作是否正确,给用户的提示是否明确合理; 
–    “删除客户”操作是否正确,给用户的提示是否明确合理; 
–    “客户列表”操作是否正确,表格是否规整; 
3.    思考以下问题: 
–    当软件退出时,所有客户信息便丢失了!运用什么手段可以将这些信息长久保存,以便在下一次运行软件时继续使用? 
package com.xian;

public class Customer {
    private String name;// :客户姓名
    private String gender;//  :性别
    private int age;//          :年龄
    private String phone;//:电话号码
    private String email;// :电子邮箱


    public Customer() {
        super();
    }
    public Customer(String name, String gender, int age, String phone, String email) {
        super();
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.phone = phone;
        this.email = email;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "Customer [name=" + name + ", gender=" + gender + ", age=" + age + ", phone=" + phone + ", email="
                + email + "]";
    }

}
package com.xian;
public class CustomerList {

    private Customer[] customers;
    private int total = 0;

    public CustomerList(int totalCustomer) {
        customers = new Customer[totalCustomer];
    }

    public boolean addCustomer(Customer customer)  {
        for(int i=0;i<customers.length;i++) {
            if(customers[i]==null) {
                customers[i] = customer;
                total++;
                return true;
            }
        }
        return false;
    }

    public boolean replaceCustomer(int index, Customer cust) {
        if(index>=customers.length) {
            return false;
        }
        customers[index] = cust;
        return true;
    }

    public boolean deleteCustomer(int index) {
        if(index>=customers.length) {
            return false;
        }
        customers[index] = null;
        total--;
        return true;
    }

    public Customer[] getAllCustomers()  {
        return customers;
    }


    public Customer getCustomer(int index) {
        if(index>=customers.length) {
            return null;
        }
        return customers[index];
    }

    public Customer[] getCustomers() {
        return customers;
    }

    public void setCustomers(Customer[] customers) {
        this.customers = customers;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }
}
package com.xian;
import java.util.Scanner;
public class CustomerView {
    private CustomerList list = new CustomerList(5);
    private static Scanner scan = new Scanner(System.in);

    public static void main(String[] args) {
        CustomerView cv = new CustomerView();
        cv.enterMainMenu();
    }
    public void enterMainMenu() {
        while(true) {
            while(true) {
                souts();
                int i = scan.nextInt();
                switch (i) {
                    case 1:
                        addNewCustomer();
                        break;
                    case 2:
                        modifyCustomer();
                        break;
                    case 3:
                        deleteCustomer();
                        break;
                    case 4:
                        listAllCustomers();
                        break;
                    case 5:
                        return;
                    default:
                        System.out.println("请选择(1-5):_");
                        break;
                }
            }
        }


    }

    public void  souts(){
        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("请选择(1-5):_");
    }
    private void addNewCustomer() {
        while(true) {
            System.out.println("请输入客户姓名:");
            String name = scan.next();
            System.out.println("请输入客户年龄:");
            int age = scan.nextInt();
            System.out.println("请输入客户性别:");
            String gender = scan.next();
            System.out.println("请输入客户电话:");
            String phone = scan.next();
            System.out.println("请输入客户邮箱:");
            String email = scan.next();

            Customer c = new Customer(name,gender,age,phone,email);
            boolean b = list.addCustomer(c);
            String noti = b?"您插入成功":"您插入失败";
            System.out.println(noti);
            break;
        }

    }
    private void modifyCustomer(){
        Customer cs=new Customer();
        listAllCustomers();
        System.out.println("选择需要修改的用户");
        int id=scan.nextInt();
        if(id>list.getTotal()){
            System.out.println("输入错误");
        }
        soutChange(id,cs);
        list.replaceCustomer(id,cs);
    }

    private void deleteCustomer(){
        while(true){
            System.out.println("请输入要删除的序号:");
            int id=scan.nextInt();
            if(id>list.getTotal()){
                System.out.println("输入错误");
            }
            list.deleteCustomer(id);
            return;
        }
    }
    private void listAllCustomers(){
        Customer[] custList=new Customer[10];
        custList=list.getAllCustomers();
        for (int i = 0; i < custList.length; i++) {
            System.out.println(custList[i]);
        }
        return;
    }
    public void soutChange(int id,Customer cs){
        list.getCustomer(id);
        System.out.println("修改姓名");
        cs.setName(scan.next());

        System.out.println("修改性别");
        cs.setGender(scan.next());

        System.out.println("修改年龄");
        cs.setAge(scan.nextInt());

        System.out.println("修改电话");
        cs.setPhone(scan.next());

        System.out.println("修改邮箱");
        cs.setEmail(scan.next());

    }

}

 

posted @ 2020-08-03 18:16  Spring_Xian  阅读(216)  评论(0编辑  收藏  举报