当前位置:   article > 正文

java宠物商店管理系统_宠物管理系统java

宠物管理系统java

java面向对象编写宠物商店管理系统,控制台输出和输入,使用map集合和list集合存储输入的数据信息。

宠物抽象类:

  1. /**
  2. * 宠物类
  3. */
  4. public class Pet {
  5. //属性
  6. private String name;//宠物名字
  7. private int age;//年龄
  8. private String sex;//性别
  9. private String strain;//品种
  10. private int inPrice;//购入价格
  11. private int outPrice;//出售价格
  12. //方法
  13. //getter/setter方法
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public int getAge() {
  21. return age;
  22. }
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26. public String getSex() {
  27. return sex;
  28. }
  29. public void setSex(String sex) {
  30. this.sex = sex;
  31. }
  32. public String getStrain() {
  33. return strain;
  34. }
  35. public void setStrain(String strain) {
  36. this.strain = strain;
  37. }
  38. public int getInPrice() {
  39. return inPrice;
  40. }
  41. public void setInPrice(int inPrice) {
  42. this.inPrice = inPrice;
  43. }
  44. public int getOutPrice() {
  45. return outPrice;
  46. }
  47. public void setOutPrice(int outPrice) {
  48. this.outPrice = outPrice;
  49. }
  50. //无参构造方法
  51. public Pet() {
  52. }
  53. //含所有参数的构造方法
  54. public Pet(String name, int age, String sex, String strain, int inPrice, int outPrice) {
  55. this.name = name;
  56. this.age = age;
  57. this.sex = sex;
  58. this.strain = strain;
  59. this.inPrice = inPrice;
  60. this.outPrice = outPrice;
  61. }
  62. //显示方法 printf沿用了C的printf,用法也完全一致 第一组参数(占位符)代表要输出的类型,第二组参数代表待输出的数据对象
  63. public void play() {//输出错误信息 通过this关键字来调用属性
  64. System.out.printf("宠物:%s\t\t年龄:%d\t\t性别:%s\t\t品种:%s\t\t购入价格:%d\t\t售出价格:%d\t\t利润:%d\n",
  65. this.name, this.age, this.sex, this.strain, this.inPrice, this.outPrice, (this.outPrice - this.inPrice));
  66. }
  67. }
宠物管理接口:
  1. import java.util.ArrayList;
  2. //宠物管理接口
  3. public interface PetAdministration {
  4. /**
  5. * 显示所有宠物信息
  6. * @param pets
  7. */
  8. void showAllPets(ArrayList<Pet>pets);
  9. /**
  10. *根据名字查找宠物
  11. * @param name
  12. * @param pets
  13. */
  14. void findPetByName(String name,ArrayList<Pet>pets);
  15. /**
  16. * 根据名字删除宠物信息,先根据名字找到对应的宠物信息,将其加到另一个集合中后从原集合删除,
  17. * 从原集合被删除的被存入新集合,实现记录数据
  18. * @param name
  19. * @param pets
  20. * @param pets1
  21. */
  22. void deletePetByName(String name,ArrayList<Pet>pets,ArrayList<Pet> pets1);
  23. /**
  24. * 宠物信息
  25. * @return
  26. */
  27. Pet petInformation();
  28. /**
  29. * 添加宠物信息
  30. * @param pet
  31. * @param pets
  32. */
  33. void addPets(Pet pet,ArrayList<Pet>pets);
  34. /**
  35. * 按名字修改宠物信息
  36. * @param name
  37. * @param pets
  38. */
  39. void updatePets(String name,ArrayList<Pet>pets);
  40. /**
  41. * 根据购入价格排序
  42. * @param pets
  43. */
  44. void sortByInprice(ArrayList<Pet>pets);
  45. /**
  46. * 按售出价格排序
  47. * @param pets
  48. */
  49. void sortByOutPrice(ArrayList<Pet>pets);
  50. /**
  51. * 根据盈利排序
  52. * @param pets
  53. */
  54. void sortByProfit(ArrayList<Pet>pets);
  55. /**
  56. * 记录删除的数据
  57. * @param pets1
  58. */
  59. void findDeletePets(ArrayList<Pet>pets1);
  60. }

接口实现类:

  1. import org.junit.Test;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. /**
  5. * 业务类 实现接口
  6. */
  7. public class PetBiz implements PetAdministration {
  8. Scanner input = new Scanner(System.in);
  9. Pet pet4 = new Pet();
  10. /**
  11. * 显示所有的宠物信息
  12. *
  13. * @param pets
  14. */
  15. @Override
  16. public void showAllPets(ArrayList<Pet> pets) {
  17. if (pets.size() == 0) {
  18. System.out.println("没有查询到宠物信息!!您的宠物商店还没有宠物!!");
  19. }
  20. for (Pet pet : pets) {//遍历集合 调用play方法输出
  21. if (pet.getName() != null) {
  22. pet.play();
  23. }
  24. }
  25. }
  26. /**
  27. * 根据名字查找宠物 传递参数为宠物姓名
  28. *
  29. * @param name
  30. * @param pets
  31. */
  32. @Override
  33. public void findPetByName(String name, ArrayList<Pet> pets) {
  34. boolean flag = false;//标志位 flag
  35. for (Pet pet1 : pets) {//遍历集合
  36. if (pet1.getName().equals(name)) {//如果传递的参数(name)和集合中的name相同
  37. pet1.play();//调用显示方法
  38. flag = true;//修改标志位
  39. break;//跳出循环
  40. }
  41. }
  42. if (!flag) {//如果遍历后标志位没有变,输出该宠物不存在
  43. System.out.println(name + "不存在!!");
  44. }
  45. }
  46. /**
  47. * 根据宠物名字删除宠物 传递参数为宠物名字 和查找类似,只是在找到后使用remove方法将其从集合中删除
  48. *
  49. * @param name
  50. * @param pets
  51. */
  52. @Override
  53. public void deletePetByName(String name, ArrayList<Pet> pets, ArrayList<Pet> pets1) {
  54. boolean flag = false;//标志位
  55. for (Pet pet2 : pets) {
  56. if (pet2.getName().equals(name)) {
  57. pet4 = pet2;
  58. pets1.add(pet4);
  59. pets.remove(pet2);
  60. flag = true;
  61. System.out.println("宠物删除成功!!");
  62. break;
  63. }
  64. }
  65. if (!flag) {
  66. System.out.println("删除失败!!! 宠物" + name + "不存在!!");
  67. }
  68. }
  69. /**
  70. * 宠物信息
  71. *
  72. * @return
  73. */
  74. @Override
  75. public Pet petInformation() {
  76. System.out.print("宠物名字:");
  77. String name = input.next();
  78. System.out.print("年龄:");
  79. int age = input.nextInt();
  80. System.out.print("性别:");
  81. String sex = input.next();
  82. System.out.print("品种:");
  83. String strain = input.next();
  84. System.out.print("购入价格:");
  85. int inPrice = input.nextInt();
  86. System.out.print("售出价格:");
  87. int outPrice = input.nextInt();
  88. return new Pet(name, age, sex, strain, inPrice, outPrice);
  89. }
  90. /**
  91. * 添加宠物信息
  92. *
  93. * @param pet
  94. * @param pets
  95. */
  96. @Override
  97. public void addPets(Pet pet, ArrayList<Pet> pets) {
  98. pets.add(pet);//对象.add(对象)
  99. }
  100. /**
  101. * 修改宠物信息 全部输一遍,把旧的宠物信息删除后再添加新的宠物信息 参数为宠物姓名
  102. *
  103. * @param name
  104. * @param pets
  105. */
  106. @Override
  107. public void updatePets(String name, ArrayList<Pet> pets) {
  108. boolean flag = false;//标志位
  109. for (Pet pet2 : pets) {
  110. if (pet2.getName().equals(name)) {//对比集合中的宠物姓名和输入的宠物姓名 如果相同删除该宠物信息
  111. pets.remove(pet2);
  112. System.out.println("请输入要修改的宠物信息:");
  113. Pet pet3 = petInformation();//调用输入宠物信息的方法
  114. pets.add(pet3);
  115. flag = true;//修改标志位
  116. System.out.println("修改成功!!");
  117. break;
  118. }
  119. }
  120. if (!flag) {
  121. System.out.println(name + "不存在!!");
  122. }
  123. }
  124. /**
  125. * 根据进价排序
  126. *
  127. * @param pets
  128. */
  129. @Override
  130. public void sortByInprice(ArrayList<Pet> pets) {
  131. /* //Collections是一个工具类,sort是其中的静态方法,是用来对List集合进行排序的
  132. //当集合中的元素为某个类的实例时,则必须传入比较器,比较器无法省略
  133. //compare(类名 o1,类名 o2) 返回值为
  134. //当值>0时,相邻的两个元素o1和o2不交换位置;值<0时,相邻的两个元素o1和o2交换位置。
  135. // 需要注意的是,o1是List中下标较大的那个元素,o2是List中下标较小的那个元素
  136. Collections.sort(pets, (o1, o2) -> o1.getInPrice() - o2.getInPrice());*/
  137. /*双冒号(::)运算符在Java 8中被用作方法引用(method reference*/
  138. Collections.sort(pets, Comparator.comparingInt(Pet::getInPrice).reversed());
  139. }
  140. /**
  141. * 按售价排序 排序方法一致
  142. *
  143. * @param pets
  144. */
  145. @Override
  146. public void sortByOutPrice(ArrayList<Pet> pets) {
  147. Collections.sort(pets, Comparator.comparingInt(Pet::getOutPrice));
  148. }
  149. /**
  150. * 按利润排序 还可以引申出按其他各种价格排序的方法
  151. *
  152. * @param pets
  153. */
  154. @Override
  155. public void sortByProfit(ArrayList<Pet> pets) {
  156. Collections.sort(pets, Comparator.comparingInt(o -> (o.getOutPrice() - o.getInPrice())));
  157. }
  158. /**
  159. * 查看被删除的数据
  160. *
  161. * @param pets1
  162. */
  163. @Override
  164. public void findDeletePets(ArrayList<Pet> pets1) {
  165. if (pets1.size() == 0) {
  166. System.out.println("还没有删除数据哦!!!");
  167. } else {
  168. for (Pet pet : pets1) {
  169. pet.play();
  170. }
  171. }
  172. }
  173. }

工具类:

  1. import org.junit.Test;
  2. import java.text.SimpleDateFormat;
  3. import java.util.*;
  4. public class Tool1 {
  5. //属性
  6. String userName;//用户名
  7. String password;//密码
  8. Map<String, String> map = new HashMap<>();
  9. Scanner input = new Scanner(System.in);
  10. @Test
  11. public void register() {//注册
  12. map.put("zsss1", "111111");//初始化信息
  13. map.put("admin1", "123456");
  14. map.put("admin", "111111");
  15. System.out.println("*****欢迎使用宠物商店管理系统!!!*****");
  16. while (true) {
  17. System.out.println("请选择要进行的操作:1、注册 2、登录");//菜单
  18. int num3 = input.nextInt();
  19. if (num3 == 1) {//注册
  20. while (true) {
  21. System.out.print("请输入用户名:");
  22. userName = input.next();
  23. System.out.print("请输入密码:");
  24. password = input.next();
  25. System.out.print("请再次输入密码:");
  26. String password1 = input.next();
  27. boolean flag = false;//标志位
  28. //执行分支 判断用户名和密码长度是否满足
  29. if (userName.length() > 3 && password1.length() >= 6) {//判断信息长度是否满足设置的要求
  30. //判断用户名是否已存在 用map集合中的键和用户名对比,用户名不存在,将其加入到集合中,存在给出提示
  31. // Set keySet = map.keySet();//keyset集合,即map集合中所有的userName
  32. //只需要对比用户名即可,如果用户名存在,修改标志位,不存在继续执行下一步操作
  33. String[] str = map.keySet().toArray(new String[map.keySet().size()]);
  34. for (int i = 0; i < str.length; i++) {
  35. if (str[i].equals(userName)) {//用户名与map集合中的键相同
  36. flag = true;//修改标志位
  37. break;
  38. }
  39. }
  40. if (flag) {//flag==true 对比标志位,如果存在,即执行了上述循环中的if语句
  41. System.out.println("用户已存在!!");//输出提示信息后继续执行循环
  42. } else {//flag为false,即集合中不存在对应的用户名,可以注册
  43. if (password.equals(password1)) {//对比两次输入的密码是否一致 如果一致,将其存入集合
  44. map.put(userName, password);//键值对,键为用户名,值为密码
  45. System.out.println("注册成功,请牢记用户名和密码!!");
  46. break;
  47. } else {//前后密码不一致,不用跳出循环
  48. System.out.println("两次密码不相同!!");
  49. //用户名与map集合中的元素不相同,判断密码是否相同
  50. }
  51. }
  52. } else {//最开始执行的判断密码和用户名长度是否满足需求中的不满足需求,不满足跳出循环,执行外层循环,继续询问
  53. System.out.println("用户名长度不能小于3,密码长度不能小于6!!");
  54. break;
  55. }
  56. }
  57. } else if (num3 == 2) {//登录
  58. Date date = new Date();//时间类
  59. System.out.println("请输入用户名和密码进行登录!!");
  60. System.out.print("请输入用户名:");//输入登录账户
  61. String userName2 = input.next();
  62. System.out.print("请输入密码:");
  63. String password2 = input.next();//输入密码
  64. SimpleDateFormat sd = new SimpleDateFormat("HH");//时间格式化后输出获取时间的小时,根据小时数来判断时间段
  65. String str = sd.format(date);//将格式化后的时间(小时)转为字符串
  66. int a = Integer.parseInt(str);//parseInt() 方法用于将字符串参数作为有符号的十进制整数进行解析,返回用十进制参数表示的整数值
  67. String time = "";
  68. if (a >= 0 && a <= 6) {
  69. time = "凌晨";
  70. } else if (a >= 7 && a < 12) {
  71. time = "上午";
  72. } else if (a >= 13 && a < 19) {
  73. time = "下午";
  74. } else if (a >= 20) {
  75. time = "晚上";
  76. }
  77. if (map.get(userName2) == null) {//map集合中获取输入的用户名返回值为null,用户不存在
  78. System.out.println("用户不存在");
  79. } else if (map.get(userName2).equals(password2)) {//返回值非空,用户存在,对比输入的密码和集合中获取的密码
  80. //System.out.println(map.get(userName2)+"***"+password2);
  81. System.out.println("登录成功!!");
  82. System.out.println(userName2 + time + "好 欢迎登录宠物商店管理系统!!!");
  83. break;
  84. } else {//用户不存在 用户存在但是密码不匹配 用户存在且密码匹配
  85. System.out.println("登录失败,密码错误!!!");
  86. }
  87. } else {
  88. System.out.println("您的输入有误!!!");
  89. continue;
  90. }
  91. }
  92. }
  93. }

测试类:

  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. /**
  4. * 测试类
  5. */
  6. public class TestPet {
  7. public static void main(String[] args) {
  8. Scanner input = new Scanner(System.in);
  9. //注册和登录
  10. Tool1 tool1 = new Tool1();//新建对象
  11. tool1.register();//调用方法
  12. PetBiz petBiz = new PetBiz();
  13. ArrayList<Pet> pets = new ArrayList<>();
  14. ArrayList<Pet> pets1 = new ArrayList<>();
  15. System.out.println("********宠物商店管理系统********");
  16. //初始化数据
  17. pets.add(new Pet("小白", 1, "F", "狗", 100, 200));
  18. pets.add(new Pet("张三", 2, "M", "猫", 200, 400));
  19. pets.add(new Pet("小小", 3, "F", "狗", 900, 876));
  20. while (true) {
  21. System.out.println("请选择要执行的操作:1.查看所有宠物 2.按名字查找宠物 3.删除宠物 4.添加宠物 " +
  22. "5.修改宠物信息 6.按购入价格排序 7.按出售价格排序 8.按利润排序 9.查看删除记录 0.退出");
  23. try {
  24. int num = input.nextInt();
  25. switch (num) {//分支选择要进行的操作
  26. case 1:
  27. petBiz.showAllPets(pets);//查看所有宠物信息
  28. break;
  29. case 2:
  30. System.out.print("请输入要查找的宠物名字:");
  31. String name = input.next();
  32. petBiz.findPetByName(name, pets);//按名字查找宠物
  33. break;
  34. case 3:
  35. System.out.print("请输入要删除的宠物的名字:");
  36. String name1 = input.next();
  37. petBiz.deletePetByName(name1, pets, pets1);//按名字删除宠物
  38. break;
  39. case 4:
  40. Pet pet = petBiz.petInformation();//添加宠物信息
  41. pets.add(pet);//将传递的宠物信息添加到集合中
  42. System.out.println("添加成功!!");//输出提示信息
  43. break;
  44. case 5:
  45. System.out.print("请输入要修改的宠物名字:");
  46. String name2 = input.next();//录入需要修改的宠物信息
  47. petBiz.updatePets(name2, pets);//调用修改宠物信息的方法,传递参数为录入的宠物姓名
  48. break;
  49. case 6:
  50. petBiz.sortByInprice(pets);//调用按进价排序的方法
  51. petBiz.showAllPets(pets);//将排序后的集合输出
  52. break;
  53. case 7:
  54. petBiz.sortByOutPrice(pets);
  55. petBiz.showAllPets(pets);
  56. break;
  57. case 8:
  58. petBiz.sortByProfit(pets);
  59. petBiz.showAllPets(pets);
  60. break;
  61. case 9:
  62. petBiz.findDeletePets(pets1);//查看已经删除的数据信息
  63. break;
  64. case 0:
  65. System.out.println("再见,欢迎再次使用宠物管理系统!!!");
  66. System.exit(1);
  67. default:
  68. System.out.println("您的选择有误!!!请重新选择!!!");
  69. }
  70. } catch (Exception e) {
  71. System.out.println("输入错误!!!");
  72. break;
  73. }
  74. }
  75. }
  76. }

实现注册登录功能后进行宠物管理,有一些异常因为没有重写异常类,只能抛出异常,没有进行处理

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/374934
推荐阅读
相关标签
  

闽ICP备14008679号