“Java架构设计之商品口”的版本间的差异
(创建页面,内容为“==任务描述== 1.创建用户操作的业务逻辑层 *用户注册 *用户登陆验证 *展示所有用户 2. 对用户操作的数据访问层做必要改动…”) |
|||
第1行: | 第1行: | ||
==任务描述== | ==任务描述== | ||
− | 1. | + | 1.创建商品操作的业务逻辑层 |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
2. 对用户操作的数据访问层做必要改动 | 2. 对用户操作的数据访问层做必要改动 | ||
第26行: | 第20行: | ||
===数据访问层=== | ===数据访问层=== | ||
数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。 | 数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。 | ||
+ | |||
+ | ==数据访问层== | ||
+ | ===GoodsDao接口=== | ||
+ | 本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。 | ||
+ | |||
+ | 变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去 | ||
+ | |||
+ | <nowiki> | ||
+ | package dao; | ||
+ | |||
+ | import java.util.ArrayList; | ||
+ | |||
+ | import entity.Goods; | ||
+ | |||
+ | public interface GoodsDao { | ||
+ | public int getNum(); | ||
+ | public boolean add(Goods g);//增加商品 | ||
+ | |||
+ | public boolean delete(String id);//删除商品 | ||
+ | |||
+ | public ArrayList<Goods> findAll();//查询所有商品 | ||
+ | |||
+ | public ArrayList<Goods> find(String name);//查询某种商品是否存在 | ||
+ | |||
+ | public boolean modify(String id,float p);//修改商品 | ||
+ | |||
+ | public int hasGoods(String name);//查询某种商品是否存在,返回id号 | ||
+ | }</nowiki> | ||
+ | |||
+ | ===创建GoodsDaoSQL实现类=== | ||
+ | 本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。 | ||
+ | |||
+ | 变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去 | ||
+ | |||
+ | <nowiki> | ||
+ | package dao; | ||
+ | |||
+ | import java.sql.*; | ||
+ | import java.util.ArrayList; | ||
+ | |||
+ | import entity.*; | ||
+ | |||
+ | public class GoodsDaoSQL implements GoodsDao{ | ||
+ | // JDBC 驱动名及数据库 URL | ||
+ | |||
+ | Connection conn; | ||
+ | |||
+ | public GoodsDaoSQL(){ | ||
+ | this.getConn(); | ||
+ | } | ||
+ | /** | ||
+ | * 连接数据库 | ||
+ | * @param 值为空 | ||
+ | * @return 布尔值 | ||
+ | */ | ||
+ | private boolean getConn() { | ||
+ | |||
+ | //Connection conn = null; | ||
+ | try { | ||
+ | final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; | ||
+ | final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8"; | ||
+ | // static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8"; | ||
+ | |||
+ | // 数据库的用户名与密码,需要根据自己的设置 | ||
+ | final String USER = "root"; | ||
+ | final String PASS = "000000"; | ||
+ | |||
+ | Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动 | ||
+ | this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS); | ||
+ | System.out.println("MySQL连接成功!"); | ||
+ | } catch (ClassNotFoundException e) { | ||
+ | System.out.println(e.getMessage()); | ||
+ | return false; | ||
+ | } catch (SQLException e) { | ||
+ | System.out.println(e.getMessage()); | ||
+ | return false; | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | } | ||
+ | </nowiki> | ||
+ | |||
==业务逻辑层== | ==业务逻辑层== | ||
[[文件:java2020-12-1.png|500px]] | [[文件:java2020-12-1.png|500px]] | ||
− | === | + | ===创建服务类GoodsService=== |
+ | |||
+ | <nowiki> | ||
+ | package service; | ||
− | |||
import java.util.ArrayList; | import java.util.ArrayList; | ||
import dao.*; | import dao.*; | ||
import entity.*; | import entity.*; | ||
− | //import exception. | + | //import exception.GoodsException; |
− | public class | + | /** |
+ | * 这个类处理与商品有关的业务逻辑 | ||
+ | */ | ||
+ | public class GoodsService { | ||
+ | |||
− | + | private GoodsDao dbset ; | |
− | |||
− | |||
− | private | ||
− | public | + | public GoodsService() { |
− | + | dbset = new GoodsDaoSQL(); | |
} | } | ||
− | }</nowiki> | + | public static void main(String[] args) { |
+ | } | ||
+ | } | ||
+ | </nowiki> | ||
− | === | + | ===添加商品addGoods()=== |
<nowiki> | <nowiki> | ||
/** | /** | ||
− | + | * 商品上架,向数据仓库中添加商品 | |
− | + | * @param g 向仓库中添加的商品 | |
− | + | * @return 值为空 | |
+ | */ | ||
+ | public void addGoods(Goods g){ | ||
+ | |||
+ | String name = g.getName(); | ||
+ | int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 | ||
+ | if(id == 0){ //如果没有该商品,再执行上架操作 | ||
+ | if(dbset.add(g)==true) { | ||
+ | System.out.println(" 商品 "+g.getName() +" 成功上架"); | ||
+ | }else { | ||
+ | System.out.println(" 商品 "+g.getName() +" 上架失败"); | ||
+ | } | ||
+ | }else { | ||
+ | System.out.println(" 商品 "+g.getName() +"已存在"); | ||
+ | } | ||
− | + | } | |
− | + | ||
− | + | </nowiki> | |
− | + | ||
+ | ===删除商品delGoods()=== | ||
− | |||
− | |||
<nowiki>/** | <nowiki>/** | ||
− | * | + | * 向数据仓库中删除商品 |
+ | * @param g 向仓库中删除的商品 | ||
+ | * @return 值为空 | ||
+ | */ | ||
+ | public void delGoods(String name) { | ||
+ | //try{ | ||
+ | System.out.println("现在开始向库中删除商品 "); | ||
+ | int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 | ||
+ | if(id!=0){//确定有该商品再执行删除操作 | ||
+ | if(dbset.delete(Integer.toString(id))==true) { | ||
+ | System.out.println("商品"+ name+" 下架成功!"); | ||
+ | }else { | ||
+ | System.out.println("商品"+ name+" 下架失败!"); | ||
+ | } | ||
+ | }else{ | ||
+ | //throw new GoodsException("要删除的商品"+id+" 不存在哦!"); | ||
+ | System.out.println("要删除的商品"+name+" 不存在"); | ||
+ | } | ||
+ | System.out.println(); | ||
+ | //}catch(GoodsException e){ | ||
+ | //System.out.println(e.toString()); | ||
+ | //} | ||
+ | }</nowiki> | ||
+ | |||
+ | ===查看所有商品queryGoods( )=== | ||
+ | <nowiki> | ||
+ | /** | ||
+ | * 查询仓库中的商品 | ||
+ | * * @param 值为空 | ||
+ | * @return 值为空 | ||
*/ | */ | ||
− | public void | + | |
− | + | public void queryGoods( ){ | |
− | ArrayList< | + | |
− | + | ArrayList<Goods> goods = dbset.findAll(); | |
− | for( | + | System.out.println("本店现有商品数:"); |
− | System.out.println( | + | for(Goods g :goods) { |
+ | System.out.println(g); | ||
} | } | ||
− | System.out.println(); | + | System.out.println();; |
+ | |||
+ | |||
}</nowiki> | }</nowiki> | ||
− | === | + | ===搜索商品queryGoods(String name)=== |
<nowiki>/** | <nowiki>/** | ||
− | * | + | * 查询仓库中的商品 |
− | * | + | * * @param 值为空 |
− | + | * @return 值为空 | |
− | |||
− | |||
*/ | */ | ||
− | public | + | |
− | + | public void queryGoods(String name) { | |
− | + | ||
− | + | ArrayList<Goods> goods = dbset.find(name); | |
− | + | System.out.println("查询到名称为"+name+"商品有:"); | |
− | + | for(Goods g :goods) { | |
− | + | System.out.println(g); | |
− | + | } | |
− | + | System.out.println();; | |
− | |||
− | |||
− | |||
− | System.out.println( | ||
− | |||
− | |||
− | |||
− | |||
− | |||
}</nowiki> | }</nowiki> | ||
− | |||
− | + | ===查询函数queryUser( )=== | |
− | + | 这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <nowiki>/** | |
− | <nowiki> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* 查询仓库中的用户 | * 查询仓库中的用户 | ||
*/ | */ | ||
第156行: | 第234行: | ||
System.out.println("本店现有如下用户:"); | System.out.println("本店现有如下用户:"); | ||
ArrayList<User> users =userset.queryUser(); | ArrayList<User> users =userset.queryUser(); | ||
+ | //测试代码 | ||
for(User user:users){ | for(User user:users){ | ||
System.out.println(user); | System.out.println(user); | ||
} | } | ||
System.out.println(); | System.out.println(); | ||
− | } | + | }</nowiki> |
+ | |||
+ | ===修改商品modifyGoods()=== | ||
+ | |||
+ | <nowiki> | ||
+ | |||
/** | /** | ||
− | + | * 向数据仓库中修改商品的数量 | |
− | + | * @param g 仓库中待修改的商品 | |
− | + | * @param p 商品修改后的价格 | |
− | + | * @return 值为空 | |
− | + | */ | |
− | + | public void modifyGoods(String name,float p) { | |
− | public | + | System.out.println("现在开始修改商品 "+name+ " 的价格"); |
− | |||
//try{ | //try{ | ||
− | + | int id = dbset.hasGoods(name); | |
− | //throw new | + | if(id==0){//如果查不到这个商品 |
− | System.out.println(" | + | //throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!"); |
− | + | System.out.println("要修改的商品"+name+" 不存在"); | |
− | }else | + | }else {//查到这个商品了,可以做进一步操作 |
− | + | dbset.modify(Integer.toString(id), p); | |
− | + | System.out.println(name+" 的价格更改为 " + p+ " 元"); | |
− | + | System.out.println(); | |
} | } | ||
− | + | //}catch( GoodsException e){ | |
− | //}catch( | + | //System.out.println(e.toString()); |
− | + | //} | |
− | + | ||
− | //} | + | |
− | |||
} | } | ||
− | + | </nowiki> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ===在main方法中写测试代码=== | |
<nowiki> | <nowiki> | ||
− | + | public static void main(String[] args) { | |
− | + | // TODO Auto-generated method stub | |
− | + | GoodsService s = new GoodsService(); | |
− | + | //GoodsDao s = new GoodsDaoSet(); | |
− | + | //GoodsDao s = new GoodsDaoArrayList(); | |
− | + | //GoodsDao s = new GoodsDaoLinkedList(); | |
− | + | ||
− | + | Goods g1= new Goods("1","山西刀削面",105.0f,30); | |
− | + | Goods g2= new Noodles("2","兰州牛肉面",15.0f,20); | |
− | + | Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false); | |
− | + | ||
− | + | //商品上架 | |
− | + | System.out.println("执行添加餐品操作..."); | |
− | + | s.addGoods(g1); | |
− | + | s.addGoods(g2); | |
− | + | s.addGoods(g3); | |
− | + | ||
− | + | //System.out.println("共找到商品?件:"+s.getNum()); | |
− | + | System.out.println("以下为商品详情信息:"); | |
− | + | s.queryGoods(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | //商品下架 | |
− | + | System.out.println("执行删除餐品操作..."); | |
− | + | s.delGoods("山西刀削面"); | |
− | + | //查询所有商品 | |
− | + | s.queryGoods(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | System.out.println("修改兰州牛肉面的价格为15:"); | |
− | + | s.modifyGoods("兰州牛肉面", 15f); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | //根据商品名称查找商品 | |
− | + | String name="牛肉面"; | |
− | + | s.queryGoods(name); | |
+ | }</nowiki> | ||
− | + | ===完整代码=== | |
− | + | <nowiki> | |
− | + | </nowiki> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==显示层== | ==显示层== |
2020年5月27日 (三) 07:02的版本
任务描述
1.创建商品操作的业务逻辑层
2. 对用户操作的数据访问层做必要改动
3. 编写表示层的代码
实训原理
表示层
表示层又称表现层UI,位于三层构架的最上层,与用户直接接触,主要是B/S信息系统中的Web浏览页面。作为Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到BLL系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用BLL或者是Models进行调试,保证用户体验。
业务逻辑层
业务逻辑层BLL的功能是对具体问题进行逻辑判断与执行操作,接收到表现层UI的用户指令后,会连接数据访问层DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层UI中,实现软件功能。
数据访问层
数据访问层DAL是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写DataAccessCommon,保证数据访问层DAL数据处理功能。
数据访问层
GoodsDao接口
本接口改动不大,主要是find和findALL返回值变成了ArrayList<User>类型。
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
package dao; import java.util.ArrayList; import entity.Goods; public interface GoodsDao { public int getNum(); public boolean add(Goods g);//增加商品 public boolean delete(String id);//删除商品 public ArrayList<Goods> findAll();//查询所有商品 public ArrayList<Goods> find(String name);//查询某种商品是否存在 public boolean modify(String id,float p);//修改商品 public int hasGoods(String name);//查询某种商品是否存在,返回id号 }
创建GoodsDaoSQL实现类
本类改动不大,主要是queryUser( )返回值变成了ArrayList<User>类型。
变动的原因是 现在软件分层了,数据库查询到的数据不宜直接在dao层打印了,通过arraylist传出去
package dao; import java.sql.*; import java.util.ArrayList; import entity.*; public class GoodsDaoSQL implements GoodsDao{ // JDBC 驱动名及数据库 URL Connection conn; public GoodsDaoSQL(){ this.getConn(); } /** * 连接数据库 * @param 值为空 * @return 布尔值 */ private boolean getConn() { //Connection conn = null; try { final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; final String DB_URL = "jdbc:mysql://10.0.0.30:3306/cloud?characterEncoding=utf8"; // static final String DB_URL = "jdbc:mysql://localhost:3306/cloud?characterEncoding=utf8"; // 数据库的用户名与密码,需要根据自己的设置 final String USER = "root"; final String PASS = "000000"; Class.forName(JDBC_DRIVER); //classLoader,加载对应驱动 this.conn = (Connection) DriverManager.getConnection(DB_URL, USER, PASS); System.out.println("MySQL连接成功!"); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); return false; } catch (SQLException e) { System.out.println(e.getMessage()); return false; } return true; } }
业务逻辑层
创建服务类GoodsService
package service; import java.util.ArrayList; import dao.*; import entity.*; //import exception.GoodsException; /** * 这个类处理与商品有关的业务逻辑 */ public class GoodsService { private GoodsDao dbset ; public GoodsService() { dbset = new GoodsDaoSQL(); } public static void main(String[] args) { } }
添加商品addGoods()
/** * 商品上架,向数据仓库中添加商品 * @param g 向仓库中添加的商品 * @return 值为空 */ public void addGoods(Goods g){ String name = g.getName(); int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 if(id == 0){ //如果没有该商品,再执行上架操作 if(dbset.add(g)==true) { System.out.println(" 商品 "+g.getName() +" 成功上架"); }else { System.out.println(" 商品 "+g.getName() +" 上架失败"); } }else { System.out.println(" 商品 "+g.getName() +"已存在"); } }
删除商品delGoods()
/** * 向数据仓库中删除商品 * @param g 向仓库中删除的商品 * @return 值为空 */ public void delGoods(String name) { //try{ System.out.println("现在开始向库中删除商品 "); int id = dbset.hasGoods(name);//查询有无该商品,返回商品id号 if(id!=0){//确定有该商品再执行删除操作 if(dbset.delete(Integer.toString(id))==true) { System.out.println("商品"+ name+" 下架成功!"); }else { System.out.println("商品"+ name+" 下架失败!"); } }else{ //throw new GoodsException("要删除的商品"+id+" 不存在哦!"); System.out.println("要删除的商品"+name+" 不存在"); } System.out.println(); //}catch(GoodsException e){ //System.out.println(e.toString()); //} }
查看所有商品queryGoods( )
/** * 查询仓库中的商品 * * @param 值为空 * @return 值为空 */ public void queryGoods( ){ ArrayList<Goods> goods = dbset.findAll(); System.out.println("本店现有商品数:"); for(Goods g :goods) { System.out.println(g); } System.out.println();; }
搜索商品queryGoods(String name)
/** * 查询仓库中的商品 * * @param 值为空 * @return 值为空 */ public void queryGoods(String name) { ArrayList<Goods> goods = dbset.find(name); System.out.println("查询到名称为"+name+"商品有:"); for(Goods g :goods) { System.out.println(g); } System.out.println();; }
查询函数queryUser( )
这个功能要完成,需要把UserDao的queryUser( )返回值改为ArrayList<User>,这个我们稍后处理
/** * 查询仓库中的用户 */ public void queryUser( ){ System.out.println("本店现有如下用户:"); ArrayList<User> users =userset.queryUser(); //测试代码 for(User user:users){ System.out.println(user); } System.out.println(); }
修改商品modifyGoods()
/** * 向数据仓库中修改商品的数量 * @param g 仓库中待修改的商品 * @param p 商品修改后的价格 * @return 值为空 */ public void modifyGoods(String name,float p) { System.out.println("现在开始修改商品 "+name+ " 的价格"); //try{ int id = dbset.hasGoods(name); if(id==0){//如果查不到这个商品 //throw new GoodsException("要修改的商品"+g.getName()+" 不存在哦!"); System.out.println("要修改的商品"+name+" 不存在"); }else {//查到这个商品了,可以做进一步操作 dbset.modify(Integer.toString(id), p); System.out.println(name+" 的价格更改为 " + p+ " 元"); System.out.println(); } //}catch( GoodsException e){ //System.out.println(e.toString()); //} }
在main方法中写测试代码
public static void main(String[] args) { // TODO Auto-generated method stub GoodsService s = new GoodsService(); //GoodsDao s = new GoodsDaoSet(); //GoodsDao s = new GoodsDaoArrayList(); //GoodsDao s = new GoodsDaoLinkedList(); Goods g1= new Goods("1","山西刀削面",105.0f,30); Goods g2= new Noodles("2","兰州牛肉面",15.0f,20); Goods g3= new Rice("3","黄焖鸡米饭",12.0f,30,false); //商品上架 System.out.println("执行添加餐品操作..."); s.addGoods(g1); s.addGoods(g2); s.addGoods(g3); //System.out.println("共找到商品?件:"+s.getNum()); System.out.println("以下为商品详情信息:"); s.queryGoods(); //商品下架 System.out.println("执行删除餐品操作..."); s.delGoods("山西刀削面"); //查询所有商品 s.queryGoods(); System.out.println("修改兰州牛肉面的价格为15:"); s.modifyGoods("兰州牛肉面", 15f); //根据商品名称查找商品 String name="牛肉面"; s.queryGoods(name); }
完整代码
显示层
显示层 调用业务逻辑层的代码,完成查询
客户端
main/TestUser:
package main; import java.util.Scanner; import service.*; public class TestUser { public static void start(Scanner sc){ System.out.println("****************************"); System.out.println("*****欢迎登录商院面馆平台客户端****"); System.out.println("****************************"); System.out.println("账号:"); String uname = sc.nextLine(); System.out.println("密码:"); String pwd = sc.nextLine(); //System.out.println("用户名为:"+uname+",密码为:"+pwd); UserService us =new UserService(); us.login(uname,pwd);//向下调用业务逻辑层的代码 } public static void main(String[] args) throws Exception{ Scanner sc = new Scanner(System.in); start(sc); } }
输出结果:
管理端
管理端显示层功能:
1. 添加用户
2. 展示所有用户
管理员先在这两个功能中选择其一,然后根据选择、调用业务逻辑层的不同方法,实现功能。