本节从商品管理系统讲如何使用封装,继承,多态
(多态的实现仅思路,在最后)
在此时,我的继承没有写好,并且此时的商品管理系统丢失了存放商品的ArrayList
数组(会导致空指针异常,别问我是怎么知道的)
顾客那个买东西功能现在是完全不能用的
先检讨原来的,再放正确代码
首先,让我们缕清代码逻辑,我想写一个有顾客和管理者的商品管理系统,那么就要存储顾客的账号,管理者账号,登录进去,然后就是不同的使用者有不同的权限,顾客就只能购买和查询商品,但是管理者可以对商品进行增删改查
如何在此项目实现继承?
管理者是人,使用者(顾客)也是人,他们有共同的身份都是人,他们有共同的特征,有账户,密码,还有
如何在此项目实现封装?
将那些不能被别人看到的属性private
,比如用户的手机号,就不能被所有人知道,你自己也只能知道自己的手机号,不能知道别人的
如何在此项目实现多态?
多态有两种,方法重写和方法重载,我失败了,,,emmm,我承认我菜,(二编,我知道怎么写了,写在最后)
不过我其实觉得管理者注册必须需要验证自己真的是个管理者,要输入一串对应的数字之类的最好,不然在这个项目里如果人人都能注册管理者的账户岂不是很危险
(尝试搞个低配版)
如果用ArrayList
数组,我们需要用三个数组,因为我们分别要存储管理者的账户信息,使用者的账户信息,还有商品的信息,我刚开始范了错误,误以为只需要两个数组,把商品信息的给忽略了,对,空指针异常了,emo
我有好多错误是IDE
帮我改的,说真的,如果我自己来改可能要好久好久
闲话说完了,上代码
第一个是主控制台,控制所有功能
package cn.huobai.sale;
import cn.huobai.sale.entity.Good;
import cn.huobai.sale.entity.Sell;
import cn.huobai.sale.entity.customer;
import cn.huobai.sale.user.useradd;
import cn.huobai.sale.user.usercoming;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Sell> array = new ArrayList<Sell>();
ArrayList<Good> arrayList = new ArrayList<Good>();
ArrayList<customer> array1 = new ArrayList<customer>();
while (true) {
System.out.println("请选择你想要的服务");
System.out.println("****输入“1”创建使用者账号****");
System.out.println("****输入“2”创建管理者账号****");
System.out.println("****输入“3”登录使用者账号****");
System.out.println("****输入“4”登录管理者账号****");
System.out.println("****输入“5”退出服务*****");
int m = sc.nextInt();
switch (m) {
case 1: {
useradd.add(array1);
break;
}
case 2: {
useradd.addcontrol(array);
break;
}
case 3: {
usercoming.usecome(array1,arrayList);
break;
}
case 4: {
usercoming.controlcoming(array,arrayList);
}
case 5:{
System.out.println("欢迎下次使用");
System.exit(0);
}
}
}
}
}
这里是定义每一个类的属性,并且这里用到了继承,因为管理者和顾客他们都有相同的属性,都有账号,密码,用户名,所以我们定义一个people
类,让管理者和使用者继承他,商品不能继承,商品是分开的
package cn.huobai.sale.entity;
public class people {
private String id;
public String username;
private String select;
public people() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
}
package cn.huobai.sale.entity;
public class customer extends people{
}
package cn.huobai.sale.entity;
public class Sell extends people{
private String control;
public String getControl() {
return control;
}
public void setControl(String control) {
this.control = control;
}
}
package cn.huobai.sale.entity;
public class Good{
public String name;
private int value;
private String num;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "商品名:" + this.name + " 商品价格:" + this.value;
}
}
**此处重写toString
方法
这路是创建账号,我给管理者账号创建弄了一个门槛,减少风险,但是注意,他们的ArrayList
数组是不一样的,所以说,要传入不同的数组
package cn.huobai.sale.user;
import cn.huobai.sale.entity.Sell;
import cn.huobai.sale.entity.customer;
import java.util.ArrayList;
import java.util.Scanner;
public class useradd {
public static void add(ArrayList<customer> array1) {
Scanner sc = new Scanner(System.in);
String id;
String select;
String name;
customer c = new customer();
System.out.println("请输入您的手机号");
id = sc.nextLine();
System.out.println("请输入您的密码");
select = sc.nextLine();
System.out.println("请输入您的昵称");
name = sc.nextLine();
c.setId(id);
c.setSelect(select);
c.setUsername(name);
array1.add(c);
System.out.println("创建成功!");
}
public static void addcontrol(ArrayList<Sell> array) {
String id;
String select;
String name;
String protect;
Sell s = new Sell();
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的昵称");
name = sc.nextLine();
System.out.println("请输入您的手机号");
id = sc.nextLine();
System.out.println("请输入您的密码");
select = sc.nextLine();
System.out.println("请输入您的创建码");
protect = sc.nextLine();
if(s.getControl().equals(protect)){
s.setUsername(name);
s.setId(id);
s.setSelect(select);
array.add(s);
System.out.println("创建成功!");
}
}
}
这里是登录界面,分别登录顾客和管理者的账户,要传入两个不一样的ArrayList
数组,一个是保存商品信息的,一个是传入使用者账户信息的
package cn.huobai.sale.user;
import cn.huobai.sale.enter.customerenter;
import cn.huobai.sale.entity.Good;
import cn.huobai.sale.entity.Sell;
import cn.huobai.sale.entity.customer;
import cn.huobai.sale.enter.Gnerals;
import java.util.ArrayList;
import java.util.Scanner;
public class usercoming {
public static void controlcoming(ArrayList<Sell> array,ArrayList<Good> arrayList) {
String id;
String select;
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的账号");
id = sc.nextLine();
System.out.println("请输入你的密码");
select = sc.nextLine();
for (int i = 0; i < array.size(); i++) {
Sell s = array.get(i);
if (s.getId().equals(id) && s.getSelect().equals(select)) {
System.out.println("欢迎你! " + s.getUsername());
Gnerals.user(arrayList);
break;
}
}
}
public static void usecome(ArrayList<customer> array1,ArrayList<Good> arrayList) {
String id;
String select;
int cnt = 0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的账号");
id = sc.nextLine();
System.out.println("请输入你的密码");
select = sc.nextLine();
for (int i = 0; i < array1.size(); i++) {
customer s = array1.get(i);
if (s.getId().equals(id)) {
if(s.getSelect().equals(select)) {
cnt = 1;
System.out.println("欢迎你! " + s.getUsername());
customerenter.center(arrayList);
break;
}
}
}
if(cnt != 1){
System.out.println("登录失败!请重试");
}
}
}
这里是管理者控制台,专门用于商品管理
package cn.huobai.sale.enter;
import cn.huobai.sale.entity.Good;
import cn.huobai.sale.service.General;
import java.util.ArrayList;
import java.util.Scanner;
public class Gnerals {
public static void user(ArrayList<Good> arrayList) {
int n = 0;
while (true) {
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("———********——————————");
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
switch (n) {
case 1: {
General.addSell(arrayList);
break;
}
case 2: {
General.cutSell(arrayList);
break;
}
case 3: {
General.updateSell(arrayList);
break;
}
case 4: {
General.findSell(arrayList);
break;
}
case 5:
System.out.println("欢迎下次使用");
System.exit(0);
break;
}
}
}
}
package cn.huobai.sale.enter;
import cn.huobai.sale.entity.Good;
import cn.huobai.sale.service.customerGeneral;
import java.util.ArrayList;
import java.util.Scanner;
public class customerenter {
public static void center(ArrayList<Good> arrayList){
int s = 0;
while (true) {
System.out.println("**欢迎来到商品购买界面**");
System.out.println("输入(1)查询所需商品");
System.out.println("输入(2)退出使用");
Scanner sc = new Scanner(System.in);
s = sc.nextInt();
switch (s) {
case 1: {
customerGeneral.findcustom(arrayList);
break;
}
case 2: {
System.out.println("欢迎下次使用");
System.exit(0);
break;
}
}
}
}
}
这里是顾客操作台,可以查商品,估计隔天会完善购买商品的功能
package cn.huobai.sale.service;
import cn.huobai.sale.entity.Good;
import java.util.ArrayList;
import java.util.Scanner;
public class customerGeneral {
public static void findcustom(ArrayList<Good> arrayList) {
Scanner sc = new Scanner(System.in);
int cnt = -1;
System.out.println("请输入要查询的商品名字");
String name = sc.nextLine();
for (int i = 0; i < arrayList.size(); i++) {
Good s = arrayList.get(i);
if (s.getName().equals(name)) {
cnt = i;
System.out.println("商品名:" + s.getName());
System.out.println("商品价格" + s.getValue());
System.out.println("商品编号" + s.getNum());
System.out.println("查询商品成功");
System.out.println("如若仍需查询请按1,退出请按2");
break;
}
}
if (cnt == -1) {
System.out.println("查询商品信息失败");
}
}
}
**这里是增删改查的实现,一定传入的是Good
类的ArrayList
数组,传其他的等着空指针异常吧(你猜猜我怎么知道的)
import cn.huobai.sale.entity.Good;
import java.util.ArrayList;
import java.util.Scanner;
public class General {
public static void addSell(ArrayList<Good> arrayList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要加的商品的名字");
String name = sc.nextLine();
System.out.println("请输入要加的商品的价格");
int value = sc.nextInt();
System.out.println("请输入要加的商品的编号");
String num = sc.nextLine();
Good s = new Good();
s.setName(name);
s.setValue(value);
s.setNum(num);
arrayList.add(s);
System.out.println("添加成功");
}
public static void cutSell(ArrayList<Good> arrayList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删去的商品名字");
String name = sc.nextLine();
for (int i = 0; i < arrayList.size(); i++) {
Good s = arrayList.get(i);
if (s.getName().equals(name)) {
arrayList.remove(i);
System.out.println("删除商品成功");
break;
}
}
}
public static void updateSell(ArrayList<Good> arrayList) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的商品名字");
String name = sc.nextLine();
System.out.println("请输入修改商品新名字");
String name1 = sc.nextLine();
System.out.println("请输入修改商品新价格");
int value = sc.nextInt();
System.out.println("请输入修改商品新编号");
String num = sc.nextLine();
for (int i = 0; i < arrayList.size(); i++) {
Good s = arrayList.get(i);
if (s.getName().equals(name)) {
s.setName(name1);
s.setValue(value);
s.setNum(num);
arrayList.set(i, s);
System.out.println("修改商品信息成功");
break;
}
}
}
public static void findSell(ArrayList<Good> arrayList) {
Scanner sc = new Scanner(System.in);
int cnt = -1;
System.out.println("请输入要查询的商品名字");
String name = sc.nextLine();
for (int i = 0; i < arrayList.size(); i++) {
Good s = arrayList.get(i);
if (s.getName().equals(name)) {
cnt = i;
System.out.println("商品名:" + s.getName());
System.out.println("商品价格" + s.getValue());
System.out.println("商品编号" + s.getNum());
System.out.println("查询商品成功");
break;
}
}
if (cnt == -1) {
System.out.println("查询商品信息失败");
}
}
}
实现多态的思路
好了,这是一个实现了继承和重写的商品管理系统,总的来说,还没有写出今天上课所学的方法,我感觉,多态和抽象我还没有用起来,我还是希望自己能用起来的,我大概知道用在哪里了,商品是一个大类,但是可以分成很多小类,所以我们可以将商品抽象出来,用多态去实现,比如商品有生活用品类,体育器材类,我们可以只定义一个商品抽象类,但是我们一定要去实现(不实现就会爆炸,我不是小黑子),就是那些具体的类去实现
抽象来引发多态机制,可以不用改代码,但是扩展代码实现功能的设计模式