Java实现快递管理系统四(View+Main+Dao总结)

目录

一、项目结构总览 

二、使用分层模式的好处

1. 首先,谈一下什么是三层架构?

2. 这种三层结构有什么优势呢?  

三、各层功能实现分析汇总

1.View层

2.Main层

3.Dao层 


一、项目结构总览 

 

二、使用分层模式的好处

1. 首先,谈一下什么是三层架构?

所谓的三层开发就是将整个业务应用划分为表示层-业务逻辑层―数据访问层-数据库等,有的还要细一些,明确地将客户端的表示层、业务逻辑访问、和数据访问及数据库访问划分出来,十分有利于系统的开发,维护、部署和扩展。

软件要分层,其实总结一句话,是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。 

2. 这种三层结构有什么优势呢?  

①通过将整个系统分为不同的逻辑块,大大降低了应用系统开发和维护的成本。 

三层结构将表示部分和业务逻辑部分按照客户层和应用服务器相分离,客户端和应用服务器、应用服务器和数据库服务器之间的通信以及异构平台之间的数据交换等都可以通过中间件或者相关程序来实

现。当数据库或者应用服务器的业务逻辑改变时,客户端并不需要改变,反之亦然,从而大大提高了系统模块的复用性,缩短了开发周期,降低了维护费用。

②将数据访问和逻辑操作都集中到组件中,增强了系统的复用性。 

如:将数据访问集中到数据访问层的组件中,从而减少了应用程序中的重复代码,每个需要访问数据库、表的窗体都使用相同的组件。 

如:一些共性的逻辑操作都集中封装在逻辑层的组件中,每一个使用该方法的操作,可以共享来访问该组件。

③系统的扩展性大大增强。 

模块化使得系统很容易在纵向和水平两个方向拓展:一方面可以将系统升级为更大、更有力的平台,同时也可以适当增加规模来增强系统的网络应用。由于摆脱了系统同构性的限制,使得分布数据处理成

为可能。在扩充或修改功能时,基本不会破坏原有结构的稳定性。

三层结构在营造企业竞争优势中的作用主要体现在模块化设计使得用户在现有结构的基础上实现了系统扩展,从而提高企业信息化的速度和业务水平;同时三层结构中中间件的出现使得用户可以直接从市

场上选择合适的产品来构建系统,大大降低了开发周期和开发费用。 

但分层结构也有缺点也不是越多越好,那样管理很多层会比较麻烦,运行效率可能比较低。所以,一个具备良好层次结构的系统,其层的数目要恰到好处才行。

 

三、各层功能实现分析汇总

1.View层

Views视图层类
void welcome()输出欢迎信息
void bye()输出再见信息
int menu()
  • 显示菜单
  • 用户选择身份(1-快递员/2-普通用户/0-退出)
  • 返回选择结果
int cMenu()
  • 显示快递员菜单
  • 快递员输入要进行的操作序号(1快递录入 2快递删除 3快递修改 4查看所有快递 0退出)
  • 返回选择结果
int uMenu()
  • 显示普通用户菜单
  • 普通用户输入取件码
  • 返回取件码
快递录入流程View 输入快递信息并返回快递对象 ->Dao存入快递
Express insert()
  • 提示快递员输入要存储的快递基本信息(快递单号,快递公司)
  • 返回要录入的快递对象
快递修改流程
Views findByName输入快递单号->调度逻辑Dao查找快递->View printExpress打印快递信息
->View update输入修改后的快递信息->Dao存入快递柜

我们在视图层要实现的方法有三个:

String findByNumber()

 

  •  提示用户输入快递单号(很多地方用到所以单独封装方法)
  • 返回输入的快递单号
void printExpress(Express e)显示快递信息
void update(Express e)
  • 提示快递员输入新的快递信息(快递单号,快递公司)
  • 修改快递e的信息(修改了引用)
快递删除流程
View findByName输入快递单号->调度逻辑Dao查找快递->View printExpress打印快递信息
->View delete询问是否确认删除->Dao从快递柜删除快递

我们在试图层要实现三个方法:(其中前两个已经在上面实现)

int delete()
  • 询问用户是否确认删除
  • 返回用户选择结果
显示全部快递流程Dao获取全部快递信息(存储在二维数组里)->View遍历显示所有快递信息
void printAll(Express[][] es)()遍历es显示所有快递信息

2.Main层

Main逻辑层类
private static Views v = new Views();
private static ExpressDao dao = new ExpressDao();
持有视图层和数据层的操作对象
public static void main(String[] args )
程序入口:
  • 欢迎用户
  • 调用View层显示主界面菜单选项,获取用户在View层的输入
  • 根据输入结果对不同身份用户进行逻辑处理
  • 用户输入结果为退出时再见
private static void cClient()

处理与快递员交互的逻辑:

  1. 显示快递员的菜单(在View层),获取View层返回的选择结果
  2. 快递录入:①View层用户输入快递信息,获取View层返回的快递对象 ②Dao层判断此快递是否被存储过 ③Dao层存储快递,View层显示快递信息
  3. 快递删除:①View层用户输入快递单号 ②Dao层判断快递是否存在 ③View层显示快递信息,询问用户是否确认删除 ④Dao层删除快递 ⑤View层显示操作成功
  4. 快递修改:①View层用户输入快递单号 ②Dao层判断快递是否存在 ③View层显示快递信息,View层用户输入新的快递信息 ④获取View层返回的新的快递对象 ⑤Dao层修改快递信息  ⑥View层打印快递信息
  5. 查看所有数据:①Dao层回去所有快递信息 ②获取从Dao层返回的快递信息,View层显示快递信息
private static void uClient()

处理与普通用户交互的逻辑:

  1. View层获取取件码
  2. 获取从View层返回的取件码,Dao层查询该取件码对应的快递
  3. View层显示快递信息
  4. Dao层删除快递
  5. View层显示操作成功

3.Dao层 

ExpressDao数据层类
属性 
private Express[][] data = new Express[10][];
用二维数组存储快递,其中下标表示快递柜位置
int size;
保存快递柜的目前快递数目
{
    for(int i=0;i<10;i++){
        data[i] = new Express[10];
    }
    size = 0;
}
构造快开辟二维空间,以及初始化size变量
Random random
用于生成随机数
方法 
boolean add(Express e)

 录入快递:

  • 判断快递柜是否满了
  • 随机生成快递柜子的位置(x,y),不能是已经有快递的柜子
  • 随机生成取件码,不能是已经被分配的取件码
  • 录入快递
  • 返回录入的结果
int randomCode()
  • 生成随机的取件码(6位),不能是已被分配的取件码
  • 返回生成的取件码
Express findByCode(int code)
  • 通过取件码查询快递,遍历二维数组比较即可
  • 返回查询到的快递对象
Express findByNumber(String number)
  • 通过快递单号查询快递,便利二维数组比较即可(用equals比较)
  • 返回查询到的快递对象
void update(Express oldExpress, Express newExpress)
  • 删除原来的快递
  • 加入新的快递
void delete(Express e)
  • 遍历二维数组,比较快递是否相同(equals)
  • 删除找到的快递
 Express[][] findAll()

返回所有快递信息,即返回二维数组引用

 

 

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
很抱歉,由于代码量太大,无法在此处提供全部代码。但我可以为您提供一个简单的示例,帮助您更好地理解Java三层架构实现。 表示层(View)代码示例: ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入要查询的客户名称:"); String customerName = scanner.nextLine(); CustomerService customerService = new CustomerServiceImpl(); Customer customer = customerService.getCustomerByName(customerName); System.out.println(customer); } } ``` 业务逻辑层(Service)代码示例: ```java public interface CustomerService { Customer getCustomerByName(String name); } public class CustomerServiceImpl implements CustomerService { private CustomerDao customerDao = new CustomerDaoImpl(); public Customer getCustomerByName(String name) { return customerDao.getCustomerByName(name); } } ``` 数据访问层(Dao)代码示例: ```java public interface CustomerDao { Customer getCustomerByName(String name); } public class CustomerDaoImpl implements CustomerDao { public Customer getCustomerByName(String name) { // 连接数据库,执行SQL查询语句,返回结果 // 这里为了示例,直接返回一个Customer对象 Customer customer = new Customer(); customer.setName(name); customer.setAge(20); customer.setAddress("北京市海淀区"); return customer; } } ``` 请注意,这里的示例仅用于演示Java三层架构的基本实现,实际上还有很多细节需要考虑,比如异常处理、事务控制等。如果您需要完整的客户信息管理系统Java三层架构代码,请自行搜索相关资料或者参考开源项目。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值