球员信息管理

package com.tian.dao;

import java.util.Arrays;

import java.util.Scanner;

import com.tian.mycompare.MyCompare;
import com.tian.myexception.PlayerIDException;

/*
 * 成员变量
 *  用一个球员类对象的数组来保存球员对象
 *    
 *  公开的方法:
 *     雇佣新球员
 *     解雇球员
 *     修改球员信息
 *     查看球员信息
 *     按照工资排序(降序)
 *     按照年龄排序(升序)
 *     按照ID排序(降序)
 *     展示所有球员
 *     
 *  私有化方法:
 *      提供给类内的成员方法使用
 *      通过球员ID号找出当前球员所在数组的下标
 *      grow方法,用于扩容TeamManager里面保存球员的数组。
 */

//球队管理类
public class TeamManger {
    private String name;

    //默认的球队球员可容纳个数【方便维护】
    private static final int DEFAULT_CAPACITY = 10;

    private Player[] allPlayers = new Player[DEFAULT_CAPACITY];

    // 统计计数,统计当前allPlayers数组中有多少元素,静态成员变量,程序不退出
    private static int itemCount = 0;

    // 类内能够使用的Scanner类对象
    private Scanner sc = new Scanner(System.in);

    // 构造方法
    public TeamManger() {
    }

    public TeamManger(String name) {
        this.name = name;
    }

//雇佣新球
    public boolean employenNewPlayer(Player newPlayerToAdd) {
        if (null == newPlayerToAdd) {
            System.out.println("传入球员为空,无法添加");
            return false;
        }
        if(itemCount == this.allPlayers.length) {
            //调用扩容数组方法进行【扩容】
            grow();
        }
        // 添加新球员到数组中有效元素的末尾
        this.allPlayers[itemCount++] = newPlayerToAdd;
        return true;
    }

    // 通过球员ID号删除指定球员 
    public boolean layoffPlayerByID(int playerID) throws PlayerIDException {
        //调用类内的私有化方法  通过球员ID查询球员在数组中下标
        int index = findIndexByPlayerID(playerID);

        // 如果找到了,index不为-1,然后删除,如果index为-1,表示没有找到
        if (index != -1) {
            for (int i = index; i < itemCount - 1; i++) {
                allPlayers[i] = allPlayers[i + 1];
            }
            allPlayers[--itemCount] = null;
            return true;
        } else {
            System.out.println("查无此人,无法删除");
            return false;
        }

    }

    // 通过球员的ID号修改球员信息
    public void modifyPlayerByID(int playerID) throws PlayerIDException {
        //利用自定义异常
        //调用类内的私有化方法  通过球员ID查询球员在数组中下标
        int index = findIndexByPlayerID(playerID);
        //2.修改球员,其余条件是index值不为-1
        if(index != -1) {
            //3.修改信息

            //设置一个标记
            int flag = -1;
            //temp作为一个零时变量
            Player temp = this.allPlayers[index];
            while(true) {
                System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
                System.out.println("$$$ 修改:"+temp.getName()+"球员信息");
				System.out.println("$$$ age:"+temp.getAge()+"  gender:"+temp.getGender());
                System.out.println("$$$ salary:"+temp.getSalary()+"  location:"+temp.getLocation());
				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("6.结束修改");
                int choose = sc.nextInt();

                sc.nextLine();

                //利用switch - case结构完成修改操作
                switch (choose) {
                case 1:
                    //修改球员姓名
                    System.out.println("请输入球员姓名:");
                    String name = sc.nextLine();
                    temp.setName(name);
                    break;
                case 2:
                    //修改球员性别
                    System.out.println("请输入球员性别:");
                    char gender = sc.nextLine().charAt(0);

                    //过滤gende数据,只保存男或者女
                    if('男' == gender||'女' == gender) {
                        temp.setGender(gender);
                    }else {
                        System.out.println("输入错误,默认为男");
                        temp.setGender('男');
                    }
                    break;
                case 3:
                    //修改球员年龄
                    System.out.println("请输入球员年龄:");
                    int age = sc.nextInt();
                    if(age>0||age<45) {
                        temp.setAge(age);
                    }else {
                        temp.setAge(18);
                    }

                    break;
                case 4:
                    //修改球员工资
                    System.out.println("请输入球员工资:");
                    double salary = sc.nextDouble();
                    if(salary>0) {
                        temp.setSalary(salary);
                    }else {
                        temp.setSalary(80000);
                    }
                    break;
                case 5:
                    //修改球员位置
                    System.out.println("请输入球员位置:");
                    String location =sc.nextLine();
                    temp.setLocation(location);

                    break;
                case 6:
                    flag = 1;
                    System.out.println("修改完成,退出!!!");
                    break;
                default:
                    System.out.println("What are you 弄啥嘞?");
                    break;

                }//switch


                //利用标记flag判断
                if(flag == 1) {
                    break; //跳出while ture 循环
                }


            }//while ture

        }else {
            System.out.println("查无此人,无法修改");
        }       
    }

    //通过球员ID展示球员信息
    public void showPlayerByID(int playerID) throws PlayerIDException {

        //调用类内的私有化方法   通过球员ID查询球员在数组中下标
        int index = findIndexByPlayerID(playerID);

        if(index != -1) {
            System.out.println(this.allPlayers[index]);
        }else {
            System.out.println("查无此人,无法展示");
        }
    }



    // 展示所有球员
    public void showAllPlayers() {
        for (int i = 0; i < itemCount; i++) {
            System.out.println(allPlayers[i]);
        }
    }

    public void show() {
        for (int i = 0; i < allPlayers.length; i++) {
            System.out.println(allPlayers[i]);

        }
    }
    /*
     *  按照工资排序(降序)
     *  按照年龄排序(升序)
     *  按照ID排序(降序)
     */

    /*
    // 按照工资排序(降序)
    public void selectSortBySalaryDecending() {
        //数据保护  把排序数据拿出来  拷贝一份
        Player[] soretTemp =new Player[itemCount];

        for(int i=0;i<itemCount;i++) {
            soretTemp[i]= this.allPlayers[i];
        }

        //选择排序
        for(int i = 0;i<itemCount-1;i++) {
            int index = i;
            for(int j= i+1;j<itemCount;j++) {
                if(soretTemp[index].getSalary() < soretTemp[j].getSalary()) {
                    index = j;

                }
            }
            if(index !=i) {
                Player temp = soretTemp[index];
                soretTemp[index] = soretTemp[i];
                soretTemp[i] = temp;
            }
        }
        for(int i=0;i<itemCount;i++) {
            System.out.println(soretTemp[i]);
        }
    }


    //按照年龄排序(升序
    public void selectSortByAgeAscending() {
        // 数据保护 把排序数据拿出来 拷贝一份
        Player[] soretTemp = new Player[itemCount];

        for (int i = 0; i < itemCount; i++) {
            soretTemp[i] = this.allPlayers[i];
        }

        // 选择排序
        for (int i = 0; i < itemCount - 1; i++) {
            int index = i;
            for (int j = i + 1; j < itemCount; j++) {
                if (soretTemp[index].getAge() > soretTemp[j].getAge()) {
                    index = j;

                }
            }
            if (index != i) {
                Player temp = soretTemp[index];
                soretTemp[index] = soretTemp[i];
                soretTemp[i] = temp;
            }
        }
        for (int i = 0; i < itemCount; i++) {
            System.out.println(soretTemp[i]);
        }
    }

    // 按照ID排序(降序)
    public void selectSortByIDDecending() {
        // 数据保护 把排序数据拿出来 拷贝一份
        Player[] soretTemp = new Player[itemCount];

        for (int i = 0; i < itemCount; i++) {
            soretTemp[i] = this.allPlayers[i];
        }

        // 选择排序
        for (int i = 0; i < itemCount - 1; i++) {
            int index = i;
            for (int j = i + 1; j < itemCount; j++) {
                if (soretTemp[index].getId() < soretTemp[j].getId()) {
                    index = j;

                }
            }
            if (index != i) {
                Player temp = soretTemp[index];
                soretTemp[index] = soretTemp[i];
                soretTemp[i] = temp;
            }
        }
        for (int i = 0; i < itemCount; i++) {
            System.out.println(soretTemp[i]);
        }
    }
    */


    /**
     *  通用的排序算法
     * @param com  传入的比较器接口
     */
    public void selectSoetUsingMyCompare(MyCompare com) {
        // 数据保护 把排序数据拿出来 拷贝一份
        Player[] soretTemp = new Player[itemCount];

        for (int i = 0; i < itemCount; i++) {
            soretTemp[i] = this.allPlayers[i];
        }

        // 选择排序
        for (int i = 0; i < itemCount - 1; i++) {
            int index = i;
            for (int j = i + 1; j < itemCount; j++) {
                if (com.compareTwoPlayer(soretTemp[index], soretTemp[j])) {
                    index = j;

                }
            }
            if (index != i) {
                Player temp = soretTemp[index];
                soretTemp[index] = soretTemp[i];
                soretTemp[i] = temp;
            }
        }
        for (int i = 0; i < itemCount; i++) {
            System.out.println(soretTemp[i]);
        }
    }

    /**
     * 私有化方法,提供给类内需要通过球员ID查询球员在数组中下标的方法使用
     * @param playID  传入的球员ID号
     * @return  放回大于等于0,表示找到球员,返回-1,表示没有找到
     * @throws PlayerIDException 
     */
    private int findIndexByPlayerID(int playerID) throws PlayerIDException {

        // 利用自定义异常,处理参数合法性判断
        if (playerID < 0 || playerID > 100) {
            throw new PlayerIDException("传入球员ID不合法");
        }
        // 1找到和playerID一致的球员对象
        int index = -1;
        for (int i = 0; i < itemCount; i++) {
            if (this.allPlayers[i].getId() == playerID) {
                index = i;
                break;
            }
        }
        return index;
    }


    /**
     * 
     * 私有化成员方法:grow方法,用于扩容TeamManager里面保存球员的数组。
     * 
     */
    private void grow() {
        //1.获取原本的数组容量
        int oldCapacity = this.allPlayers.length;

        //2.扩充数组容量为原来的1.5倍     【oldCapacity >> 1】  == 【oldCapacity/=2】
        int newCapacity = oldCapacity +(oldCapacity >> 1);// 位运算    速度快

        //3.创建新的数组
        Player[] newArray = new Player[newCapacity];

        //4.拷贝原来的数据
        for(int i = 0; i < oldCapacity; i++) {
            newArray[i] = this.allPlayers[i];
        }

        //5.保存新数组的地址
        this.allPlayers = newArray;
    }
}


package com.tian.dao;


//球员类
public class Player {
    //成员变量
    private int id;
    private String name;
    private char gender;
    private int age;
    private double salary;
    private String location;

    //构造方法
    public Player() {}

    public Player(int id,String name,char gender,int age,double salary,String  location) {
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.salary = salary;
        this.location =location;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    @Override
    public String toString() {
        return "Player [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + ", salary=" + salary
                + ", location=" + location + "]";
    }



}


package com.tian.mycompare;

import com.tian.dao.Player;

/*
 * 定义一个比较器接口,里面规定比较的方式,
 * 应该使用哪一种根据需求选择
 * 
 * 
 */

public interface MyCompare {


    /**
     * 定义比较方式   要求所用【遵从】该接口的类,都要完成这个方法
     * @param p1  传入player的类的对象
     * @param p2 传入player的类的对象
     * @return Boolean类型  根据实际判断含义
     */
    public boolean compareTwoPlayer(Player p1,Player p2);

}


package com.tian.myexception;

/*
 *  球员ID不合法的 异常信息,用于使用到球员ID位置,作为异常处理
 *  @author 田
 * 
 */
public class PlayerIDException extends Exception {

    /**
     * 暂时不考虑
     */
    private static final long serialVersionUID = 1L;
    /*
     * 利用String类的字符串message作为异常的详细错误描述,放入到Exception中
     * @param message
     */

    public PlayerIDException(String message) {
        super(message);
    }
}

package com.tian.dao;

import com.tian.mycompare.MyCompare;
import com.tian.myexception.PlayerIDException;

public class MainProject {

    public static void main(String[] args) throws PlayerIDException {
        // TODO Auto-generated method stub

        //球队管理类对象
        TeamManger tm = new TeamManger("Housten");
        for(int i=0;i<15;i++) {
            int id =i;
            String name = "YAO"+i;
            char gender ='男';

            int age = (int)(Math.random()*100);
            double salary = Math.random()*100000;
            String location = "C";

            Player newPlayerToAdd = new Player(id, name, gender, age, salary, location);
            tm.toString();

            //测试添加方法
            tm.employenNewPlayer(newPlayerToAdd);

        }   
        /*
        System.out.println("$$$$$$$$$$$$$$$$$$$$$   展示所有球员信息     $$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.showAllPlayers();

        //System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$ 通过球员ID删除指定球员   $$$$$$$$$$$$$$$$$$$$$$$$$");
        //tm.layoffPlayerByID(1);

        //System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  通过球员ID修改球员信息   $$$$$$$$$$$$$$$$$$$$$$$");
        //tm.modifyPlayerByID(2);

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  通过球员ID查找球员      $$$$$$$$$$$$$$$$$$$$$$$$");
        tm.showPlayerByID(2);

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  展示所有球员信息          $$$$$$$$$$$$$$$$$$$$$$$");
        tm.show();

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据薪资降序         $$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSortBySalaryDecending();

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据年龄升序       $$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSortByAgeAscending();

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据ID降序        $$$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSortByIDDecending(); 
        */


        /*
        //匿名内部类的匿名对象,直接作为方法的参数
        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据薪资降序         $$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSoetUsingMyCompare(new MyCompare() {
            @Override
            public boolean compareTwoPlayer(Player p1, Player p2) {

                return p1.getSalary() < p2.getSalary();
            }
        });

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据年龄升序       $$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSoetUsingMyCompare(new MyCompare() {

            @Override
            public boolean compareTwoPlayer(Player p1, Player p2) {

                return p1.getAge() > p2.getAge();
            }
        });

        System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$  根据ID升序        $$$$$$$$$$$$$$$$$$$$$$$$$$$");
        tm.selectSoetUsingMyCompare(new MyCompare() {

            @Override
            public boolean compareTwoPlayer(Player p1, Player p2) {
                // TODO Auto-generated method stub
                return p1.getId() > p2.getId();
            }
        });
        */

        //测试数组是否扩容
        tm.showAllPlayers();


    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值