赞
踩
java面向对象编写宠物商店管理系统,控制台输出和输入,使用map集合和list集合存储输入的数据信息。
宠物抽象类:
- /**
- * 宠物类
- */
- public class Pet {
- //属性
- private String name;//宠物名字
- private int age;//年龄
- private String sex;//性别
- private String strain;//品种
- private int inPrice;//购入价格
- private int outPrice;//出售价格
-
- //方法
- //getter/setter方法
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- public String getStrain() {
- return strain;
- }
-
- public void setStrain(String strain) {
- this.strain = strain;
- }
-
- public int getInPrice() {
- return inPrice;
- }
-
- public void setInPrice(int inPrice) {
- this.inPrice = inPrice;
- }
-
- public int getOutPrice() {
- return outPrice;
- }
-
- public void setOutPrice(int outPrice) {
- this.outPrice = outPrice;
- }
-
- //无参构造方法
- public Pet() {
- }
-
- //含所有参数的构造方法
- public Pet(String name, int age, String sex, String strain, int inPrice, int outPrice) {
- this.name = name;
- this.age = age;
- this.sex = sex;
- this.strain = strain;
- this.inPrice = inPrice;
- this.outPrice = outPrice;
- }
-
- //显示方法 printf沿用了C的printf,用法也完全一致 第一组参数(占位符)代表要输出的类型,第二组参数代表待输出的数据对象
- public void play() {//输出错误信息 通过this关键字来调用属性
- System.out.printf("宠物:%s\t\t年龄:%d\t\t性别:%s\t\t品种:%s\t\t购入价格:%d\t\t售出价格:%d\t\t利润:%d\n",
- this.name, this.age, this.sex, this.strain, this.inPrice, this.outPrice, (this.outPrice - this.inPrice));
- }
- }
宠物管理接口:
-
- import java.util.ArrayList;
- //宠物管理接口
- public interface PetAdministration {
- /**
- * 显示所有宠物信息
- * @param pets
- */
- void showAllPets(ArrayList<Pet>pets);
-
- /**
- *根据名字查找宠物
- * @param name
- * @param pets
- */
- void findPetByName(String name,ArrayList<Pet>pets);
-
- /**
- * 根据名字删除宠物信息,先根据名字找到对应的宠物信息,将其加到另一个集合中后从原集合删除,
- * 从原集合被删除的被存入新集合,实现记录数据
- * @param name
- * @param pets
- * @param pets1
- */
- void deletePetByName(String name,ArrayList<Pet>pets,ArrayList<Pet> pets1);
-
- /**
- * 宠物信息
- * @return
- */
- Pet petInformation();
-
- /**
- * 添加宠物信息
- * @param pet
- * @param pets
- */
- void addPets(Pet pet,ArrayList<Pet>pets);
-
- /**
- * 按名字修改宠物信息
- * @param name
- * @param pets
- */
- void updatePets(String name,ArrayList<Pet>pets);
-
- /**
- * 根据购入价格排序
- * @param pets
- */
- void sortByInprice(ArrayList<Pet>pets);
-
- /**
- * 按售出价格排序
- * @param pets
- */
- void sortByOutPrice(ArrayList<Pet>pets);
-
- /**
- * 根据盈利排序
- * @param pets
- */
- void sortByProfit(ArrayList<Pet>pets);
-
- /**
- * 记录删除的数据
- * @param pets1
- */
- void findDeletePets(ArrayList<Pet>pets1);
- }
接口实现类:
-
- import org.junit.Test;
-
- import java.util.*;
- import java.util.stream.Collectors;
-
-
- /**
- * 业务类 实现接口
- */
- public class PetBiz implements PetAdministration {
- Scanner input = new Scanner(System.in);
- Pet pet4 = new Pet();
-
- /**
- * 显示所有的宠物信息
- *
- * @param pets
- */
- @Override
- public void showAllPets(ArrayList<Pet> pets) {
- if (pets.size() == 0) {
- System.out.println("没有查询到宠物信息!!您的宠物商店还没有宠物!!");
- }
- for (Pet pet : pets) {//遍历集合 调用play方法输出
- if (pet.getName() != null) {
- pet.play();
- }
- }
- }
-
- /**
- * 根据名字查找宠物 传递参数为宠物姓名
- *
- * @param name
- * @param pets
- */
- @Override
- public void findPetByName(String name, ArrayList<Pet> pets) {
- boolean flag = false;//标志位 flag
- for (Pet pet1 : pets) {//遍历集合
- if (pet1.getName().equals(name)) {//如果传递的参数(name)和集合中的name相同
- pet1.play();//调用显示方法
- flag = true;//修改标志位
- break;//跳出循环
- }
- }
- if (!flag) {//如果遍历后标志位没有变,输出该宠物不存在
- System.out.println(name + "不存在!!");
- }
- }
-
-
- /**
- * 根据宠物名字删除宠物 传递参数为宠物名字 和查找类似,只是在找到后使用remove方法将其从集合中删除
- *
- * @param name
- * @param pets
- */
- @Override
- public void deletePetByName(String name, ArrayList<Pet> pets, ArrayList<Pet> pets1) {
- boolean flag = false;//标志位
- for (Pet pet2 : pets) {
- if (pet2.getName().equals(name)) {
- pet4 = pet2;
- pets1.add(pet4);
- pets.remove(pet2);
- flag = true;
- System.out.println("宠物删除成功!!");
- break;
- }
- }
- if (!flag) {
- System.out.println("删除失败!!! 宠物" + name + "不存在!!");
- }
- }
-
-
- /**
- * 宠物信息
- *
- * @return
- */
- @Override
- public Pet petInformation() {
- System.out.print("宠物名字:");
- String name = input.next();
- System.out.print("年龄:");
- int age = input.nextInt();
- System.out.print("性别:");
- String sex = input.next();
- System.out.print("品种:");
- String strain = input.next();
- System.out.print("购入价格:");
- int inPrice = input.nextInt();
- System.out.print("售出价格:");
- int outPrice = input.nextInt();
- return new Pet(name, age, sex, strain, inPrice, outPrice);
- }
-
- /**
- * 添加宠物信息
- *
- * @param pet
- * @param pets
- */
- @Override
- public void addPets(Pet pet, ArrayList<Pet> pets) {
- pets.add(pet);//对象.add(对象)
- }
-
- /**
- * 修改宠物信息 全部输一遍,把旧的宠物信息删除后再添加新的宠物信息 参数为宠物姓名
- *
- * @param name
- * @param pets
- */
- @Override
- public void updatePets(String name, ArrayList<Pet> pets) {
- boolean flag = false;//标志位
- for (Pet pet2 : pets) {
- if (pet2.getName().equals(name)) {//对比集合中的宠物姓名和输入的宠物姓名 如果相同删除该宠物信息
- pets.remove(pet2);
- System.out.println("请输入要修改的宠物信息:");
- Pet pet3 = petInformation();//调用输入宠物信息的方法
- pets.add(pet3);
- flag = true;//修改标志位
- System.out.println("修改成功!!");
- break;
- }
- }
- if (!flag) {
- System.out.println(name + "不存在!!");
- }
- }
-
- /**
- * 根据进价排序
- *
- * @param pets
- */
- @Override
- public void sortByInprice(ArrayList<Pet> pets) {
- /* //Collections是一个工具类,sort是其中的静态方法,是用来对List集合进行排序的
- //当集合中的元素为某个类的实例时,则必须传入比较器,比较器无法省略
- //compare(类名 o1,类名 o2) 返回值为
- //当值>0时,相邻的两个元素o1和o2不交换位置;值<0时,相邻的两个元素o1和o2交换位置。
- // 需要注意的是,o1是List中下标较大的那个元素,o2是List中下标较小的那个元素
- Collections.sort(pets, (o1, o2) -> o1.getInPrice() - o2.getInPrice());*/
- /*双冒号(::)运算符在Java 8中被用作方法引用(method reference)*/
- Collections.sort(pets, Comparator.comparingInt(Pet::getInPrice).reversed());
- }
-
- /**
- * 按售价排序 排序方法一致
- *
- * @param pets
- */
- @Override
- public void sortByOutPrice(ArrayList<Pet> pets) {
- Collections.sort(pets, Comparator.comparingInt(Pet::getOutPrice));
- }
-
- /**
- * 按利润排序 还可以引申出按其他各种价格排序的方法
- *
- * @param pets
- */
- @Override
- public void sortByProfit(ArrayList<Pet> pets) {
- Collections.sort(pets, Comparator.comparingInt(o -> (o.getOutPrice() - o.getInPrice())));
- }
-
- /**
- * 查看被删除的数据
- *
- * @param pets1
- */
- @Override
- public void findDeletePets(ArrayList<Pet> pets1) {
- if (pets1.size() == 0) {
- System.out.println("还没有删除数据哦!!!");
- } else {
- for (Pet pet : pets1) {
- pet.play();
- }
- }
- }
- }
工具类:
-
- import org.junit.Test;
-
- import java.text.SimpleDateFormat;
- import java.util.*;
-
- public class Tool1 {
- //属性
- String userName;//用户名
- String password;//密码
- Map<String, String> map = new HashMap<>();
- Scanner input = new Scanner(System.in);
-
- @Test
- public void register() {//注册
- map.put("zsss1", "111111");//初始化信息
- map.put("admin1", "123456");
- map.put("admin", "111111");
- System.out.println("*****欢迎使用宠物商店管理系统!!!*****");
- while (true) {
- System.out.println("请选择要进行的操作:1、注册 2、登录");//菜单
- int num3 = input.nextInt();
- if (num3 == 1) {//注册
- while (true) {
- System.out.print("请输入用户名:");
- userName = input.next();
- System.out.print("请输入密码:");
- password = input.next();
- System.out.print("请再次输入密码:");
- String password1 = input.next();
- boolean flag = false;//标志位
- //执行分支 判断用户名和密码长度是否满足
- if (userName.length() > 3 && password1.length() >= 6) {//判断信息长度是否满足设置的要求
- //判断用户名是否已存在 用map集合中的键和用户名对比,用户名不存在,将其加入到集合中,存在给出提示
- // Set keySet = map.keySet();//key的set集合,即map集合中所有的userName
- //只需要对比用户名即可,如果用户名存在,修改标志位,不存在继续执行下一步操作
- String[] str = map.keySet().toArray(new String[map.keySet().size()]);
- for (int i = 0; i < str.length; i++) {
- if (str[i].equals(userName)) {//用户名与map集合中的键相同
- flag = true;//修改标志位
- break;
- }
- }
- if (flag) {//flag==true 对比标志位,如果存在,即执行了上述循环中的if语句
- System.out.println("用户已存在!!");//输出提示信息后继续执行循环
- } else {//flag为false,即集合中不存在对应的用户名,可以注册
- if (password.equals(password1)) {//对比两次输入的密码是否一致 如果一致,将其存入集合
- map.put(userName, password);//键值对,键为用户名,值为密码
- System.out.println("注册成功,请牢记用户名和密码!!");
- break;
- } else {//前后密码不一致,不用跳出循环
- System.out.println("两次密码不相同!!");
- //用户名与map集合中的元素不相同,判断密码是否相同
- }
- }
- } else {//最开始执行的判断密码和用户名长度是否满足需求中的不满足需求,不满足跳出循环,执行外层循环,继续询问
- System.out.println("用户名长度不能小于3,密码长度不能小于6!!");
- break;
- }
- }
- } else if (num3 == 2) {//登录
- Date date = new Date();//时间类
- System.out.println("请输入用户名和密码进行登录!!");
- System.out.print("请输入用户名:");//输入登录账户
- String userName2 = input.next();
- System.out.print("请输入密码:");
- String password2 = input.next();//输入密码
- SimpleDateFormat sd = new SimpleDateFormat("HH");//时间格式化后输出获取时间的小时,根据小时数来判断时间段
- String str = sd.format(date);//将格式化后的时间(小时)转为字符串
- int a = Integer.parseInt(str);//parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析,返回用十进制参数表示的整数值
- String time = "";
- if (a >= 0 && a <= 6) {
- time = "凌晨";
- } else if (a >= 7 && a < 12) {
- time = "上午";
- } else if (a >= 13 && a < 19) {
- time = "下午";
- } else if (a >= 20) {
- time = "晚上";
- }
- if (map.get(userName2) == null) {//map集合中获取输入的用户名返回值为null,用户不存在
- System.out.println("用户不存在");
- } else if (map.get(userName2).equals(password2)) {//返回值非空,用户存在,对比输入的密码和集合中获取的密码
- //System.out.println(map.get(userName2)+"***"+password2);
- System.out.println("登录成功!!");
- System.out.println(userName2 + time + "好 欢迎登录宠物商店管理系统!!!");
- break;
- } else {//用户不存在 用户存在但是密码不匹配 用户存在且密码匹配
- System.out.println("登录失败,密码错误!!!");
- }
- } else {
- System.out.println("您的输入有误!!!");
- continue;
- }
- }
- }
-
- }
测试类:
-
- import java.util.ArrayList;
- import java.util.Scanner;
-
- /**
- * 测试类
- */
- public class TestPet {
- public static void main(String[] args) {
- Scanner input = new Scanner(System.in);
- //注册和登录
- Tool1 tool1 = new Tool1();//新建对象
- tool1.register();//调用方法
- PetBiz petBiz = new PetBiz();
- ArrayList<Pet> pets = new ArrayList<>();
- ArrayList<Pet> pets1 = new ArrayList<>();
- System.out.println("********宠物商店管理系统********");
- //初始化数据
- pets.add(new Pet("小白", 1, "F", "狗", 100, 200));
- pets.add(new Pet("张三", 2, "M", "猫", 200, 400));
- pets.add(new Pet("小小", 3, "F", "狗", 900, 876));
- while (true) {
- System.out.println("请选择要执行的操作:1.查看所有宠物 2.按名字查找宠物 3.删除宠物 4.添加宠物 " +
- "5.修改宠物信息 6.按购入价格排序 7.按出售价格排序 8.按利润排序 9.查看删除记录 0.退出");
- try {
- int num = input.nextInt();
- switch (num) {//分支选择要进行的操作
- case 1:
- petBiz.showAllPets(pets);//查看所有宠物信息
- break;
- case 2:
- System.out.print("请输入要查找的宠物名字:");
- String name = input.next();
- petBiz.findPetByName(name, pets);//按名字查找宠物
- break;
- case 3:
- System.out.print("请输入要删除的宠物的名字:");
- String name1 = input.next();
- petBiz.deletePetByName(name1, pets, pets1);//按名字删除宠物
- break;
- case 4:
- Pet pet = petBiz.petInformation();//添加宠物信息
- pets.add(pet);//将传递的宠物信息添加到集合中
- System.out.println("添加成功!!");//输出提示信息
- break;
- case 5:
- System.out.print("请输入要修改的宠物名字:");
- String name2 = input.next();//录入需要修改的宠物信息
- petBiz.updatePets(name2, pets);//调用修改宠物信息的方法,传递参数为录入的宠物姓名
- break;
- case 6:
- petBiz.sortByInprice(pets);//调用按进价排序的方法
- petBiz.showAllPets(pets);//将排序后的集合输出
- break;
- case 7:
- petBiz.sortByOutPrice(pets);
- petBiz.showAllPets(pets);
- break;
- case 8:
- petBiz.sortByProfit(pets);
- petBiz.showAllPets(pets);
- break;
- case 9:
- petBiz.findDeletePets(pets1);//查看已经删除的数据信息
- break;
- case 0:
- System.out.println("再见,欢迎再次使用宠物管理系统!!!");
- System.exit(1);
- default:
- System.out.println("您的选择有误!!!请重新选择!!!");
- }
- } catch (Exception e) {
- System.out.println("输入错误!!!");
- break;
- }
- }
- }
- }
实现注册登录功能后进行宠物管理,有一些异常因为没有重写异常类,只能抛出异常,没有进行处理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。