黑马程序员___银行调度业务系统

----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------

 

模拟实现银行业务调度系统逻辑,具体需求如下:

 

 

 

  • 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。

 

  • 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。

 

  • 异步随机生成各种类型的客户,生成各类型用户的概率比例为:

 

        VIP客户 :普通客户 :快速客户  =  1 :6 :3。

 

  • 客户办理业务所需时间有最大值和最小值,在该范围内随机设定每个VIP客户以及普通客户办理业务所需的时间,快速客户办理业务所需时间为最小值(提示:办理业务的过程可通过线程Sleep的方式模拟)。

 

  • 各类型客户在其对应窗口按顺序依次办理业务。 

 

  • 当VIP(6号)窗口和快速业务(5号)窗口没有客户等待办理业务的时候,这两个窗口可以处理普通客户的业务,而一旦有对应的客户等待办理业务的时候,则优先处理对应客户的业务。

 

  • 随机生成客户时间间隔以及业务办理时间最大值和最小值自定,可以设置。

 

  • 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

  问题分析

  由于有三类客户,每类客户的号码编排都是完全独立的,所以,我想到本系统一共要产生三个号码管理器对象,各自管理一类用户的排队号码。这三个号码管理器对象统一由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
     
首先创建一个号码机器,获取号码。

NumberMachine类
定义三个成员变量分别指向三个NumberManager对象,分别表示普通、快速和VIP客户的号码管理器,定义三个对应的方法来返回这三个NumberManager对象。

分别为getCommonManager();普通客户
      getExpressManager(); 快速客户
      getVipManager();VIP客户
因为这个号码机器在整个系统中始终只能有一个,所以将NumberMachine类设计成单例。
      getinstance();


号码管理器。。NumberManager类
号码管理主要是产生号码 和获取号码,两个功能

     generateNewNumber()产生号码
     fetchNumber()获取号码

服务窗口类(ServiceWindow):作用是对产生的号码进行进行叫号(和火车站窗口买票类似)
定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法。
定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息。

CustomerType枚举类:作用是定义存储客户的类型
系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。

NumberManager类

1、定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合。
2、定义一个产生新号码的方法和获取马上要为之服务的号码的方法,这两个方法被不同的线程操作了相同的数据,所以,要进行同步。


import java.util.ArrayList;  
import java.util.List;  
  
public class NumberManager {  
    private int lastNumber = 0;  
    private List queueNumbers = new ArrayList();  
      
    public synchronized Integer generateNewNumber(){//为客户服务,客户来了取走一个队号  
        queueNumbers.add(++lastNumber);  
        return lastNumber;  
    }  
      
    public synchronized Integer fetchNumber(){//服务于窗口,服务完一个叫下一个  
        if(queueNumbers.size()>0){  
            return (Integer)queueNumbers.remove(0);  
        }else{  
            return null;  
        }  
    }  
}  
NUmbermachine类

定义三个成员变量分别指向三个NumberManager对象,分别表示普通、快速和VIP客户的号码管理器,定义三个对应的方法来返回这三个NumberManager对象。
将NumberMachine类设计成单例。

public class NumberMachine {  
      
    private NumberMachine(){}  
    private static NumberMachine instance = new NumberMachine();  
    public static NumberMachine getInstance(){  
        return instance;  
    }  
      
    private NumberManager commonManager = new NumberManager();  
    private NumberManager expressManager = new NumberManager();  
    private NumberManager vipManager = new NumberManager();  
    public NumberManager getCommonManager() {  
        return commonManager;  
    }  
    public NumberManager getExpressManager() {  
        return expressManager;  
    }  
    public NumberManager getVipManager() {  
        return vipManager;  
    }  
      
}  
CustomerType枚举类

系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。

public enum CustomerType {  
    COMMON,EXPRESS,VIP;  
    public String toString(){  
        String name = null;  
        switch(this){  
        case COMMON:  
            name = "普通";  
            break;  
        case EXPRESS:  
            name = "快速";  
            break;  
        case VIP:  
            name = name();  
            break;  
        }  
        return name;  
    }  
}  




ServiceWindow类

定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法。 
定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息。




import java.util.Random;  
import java.util.concurrent.Executors;  
import java.util.logging.Logger;  
  
/**  
 * 没有把VIP窗口和快速窗口做成子类,是因为实际业务中的普通窗口可以随时被设置为VIP窗口和快速窗口。  
 * */  
public class ServiceWindow {  
    private static Logger logger = Logger.getLogger("cn.itcast.bankqueue");  
    private CustomerType type = CustomerType.COMMON;  
    private int number = 1;  
  
    public CustomerType getType() {  
        return type;  
    }  
  
    public void setType(CustomerType type) {  
        this.type = type;  
    }  
      
    public void setNumber(int number){  
        this.number = number;  
    }  
      
    public void start(){  
        Executors.newSingleThreadExecutor().execute(  
                new Runnable(){  
                    public void run(){  
                        //下面这种写法的运行效率低,最好是把while放在case下面  
                        while(true){  
                            switch(type){  
                                case COMMON:  
                                    commonService();  
                                    break;  
                                case EXPRESS:  
                                    expressService();  
                                    break;  
                                case VIP:  
                                    vipService();  
                                    break;  
                            }  
                        }  
                    }  
                }  
        );  
    }  
      
    private void commonService(){  
        String windowName = "第" + number + "号" + type + "窗口";         
        System.out.println(windowName + "开始获取普通任务!");  
        Integer serviceNumber = NumberMachine.getInstance().getCommonManager().fetchNumber();         
        if(serviceNumber != null ){  
            System.out.println(windowName + "开始为第" + serviceNumber + "号普通客户服务");          
            int maxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;  
            int serviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;  
      
            try {  
                Thread.sleep(serviceTime);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }     
            System.out.println(windowName + "完成为第" + serviceNumber + "号普通客户服务,总共耗时" + serviceTime/1000 + "秒");        
        }else{  
            System.out.println(windowName + "没有取到普通任务,正在空闲一秒");       
            try {  
                Thread.sleep(1000);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }                 
        }  
    }  
      
    private void expressService(){  
        Integer serviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();  
        String windowName = "第" + number + "号" + type + "窗口";     
        System.out.println(windowName + "开始获取快速任务!");         
        if(serviceNumber !=null){  
            System.out.println(windowName + "开始为第" + serviceNumber + "号快速客户服务");              
            int serviceTime = Constants.MIN_SERVICE_TIME;  
            try {  
                Thread.sleep(serviceTime);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }         
            System.out.println(windowName + "完成为第" + serviceNumber + "号快速客户服务,总共耗时" + serviceTime/1000 + "秒");        
        }else{  
            System.out.println(windowName + "没有取到快速任务!");                 
            commonService();  
        }  
    }  
      
    private void vipService(){  
  
        Integer serviceNumber = NumberMachine.getInstance().getVipManager().fetchNumber();  
        String windowName = "第" + number + "号" + type + "窗口";     
        System.out.println(windowName + "开始获取VIP任务!");            
        if(serviceNumber !=null){  
            System.out.println(windowName + "开始为第" + serviceNumber + "号VIP客户服务");             
            int maxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;  
            int serviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;  
            try {  
                Thread.sleep(serviceTime);  
            } catch (InterruptedException e) {  
                e.printStackTrace();  
            }         
            System.out.println(windowName + "完成为第" + serviceNumber + "号VIP客户服务,总共耗时" + serviceTime/1000 + "秒");       
        }else{  
            System.out.println(windowName + "没有取到VIP任务!");                
            commonService();  
        }     
    }  
}  
MainClass类与Constants类

MainClass类
用for循环创建出4个普通窗口,再创建出1个快速窗口和一个VIP窗口。
接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、新的VIP客户号码。
Constants类
定义三个常量:MAX_SERVICE_TIME、MIN_SERVICE_TIME、COMMON_CUSTOMER_INTERVAL_TIME


import java.util.concurrent.Executors;  
import java.util.concurrent.TimeUnit;  
import java.util.logging.Logger;  
  
public class MainClass {  
      
    private static Logger logger = Logger.getLogger("cn.itcast.bankqueue");  
      
  
    public static void main(String[] args) {  
        //产生4个普通窗口  
        for(int i=1;i<5;i++){  
            ServiceWindow window =  new ServiceWindow();  
            window.setNumber(i);  
            window.start();  
        }  
      
        //产生1个快速窗口  
        ServiceWindow expressWindow =  new ServiceWindow();  
        expressWindow.setType(CustomerType.EXPRESS);  
        expressWindow.start();  
          
        //产生1个VIP窗口       
        ServiceWindow vipWindow =  new ServiceWindow();  
        vipWindow.setType(CustomerType.VIP);  
        vipWindow.start();        
          
        //普通客户拿号  
        Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
                new Runnable(){  
                    public void run(){  
                        Integer serviceNumber = NumberMachine.getInstance().getCommonManager().generateNewNumber();  
                        /**  
                         * 采用logger方式,无法看到直观的运行效果,因为logger.log方法内部并不是直接把内容打印出出来,  
                         * 而是交给内部的一个线程去处理,所以,打印出来的结果在时间顺序上看起来很混乱。  
                         */  
                        //logger.info("第" + serviceNumber + "号普通客户正在等待服务!");  
                        System.out.println("第" + serviceNumber + "号普通客户正在等待服务!");                         
                    }  
                },  
                0,  
                Constants.COMMON_CUSTOMER_INTERVAL_TIME,   
                TimeUnit.SECONDS);  
          
        //快速客户拿号  
        Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
                new Runnable(){  
                    public void run(){  
                        Integer serviceNumber = NumberMachine.getInstance().getExpressManager().generateNewNumber();  
                        System.out.println("第" + serviceNumber + "号快速客户正在等待服务!");  
                    }  
                },  
                0,  
                Constants.COMMON_CUSTOMER_INTERVAL_TIME * 2,   
                TimeUnit.SECONDS);  
          
        //VIP客户拿号  
        Executors.newScheduledThreadPool(1).scheduleAtFixedRate(  
                new Runnable(){  
                    public void run(){  
                        Integer serviceNumber = NumberMachine.getInstance().getVipManager().generateNewNumber();  
                        System.out.println("第" + serviceNumber + "号VIP客户正在等待服务!");  
                    }  
                },  
                0,  
                Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6,   
                TimeUnit.SECONDS);  
    }  
}  

 

 

----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------

转载于:https://www.cnblogs.com/miaozy/p/3767398.html

ParaView: 从 2 或 3 个标量创建向量 阅读详情

相关推荐

惊爆揭秘!异步启动永磁同步电机,调速核心技术大起底

传统的同步启动方式需要额外的同步设备,成本高且维护复杂。异步启动PMSM则巧妙地利用了鼠笼感应电机的启动原理,无需额外同步设备即可实现安全可靠的启动。其核心思想是将定子电流分解为两个正交的分量:磁链分量(id)和转矩分量(iq),分别控制这两个分量,从而实现对电机转矩的精确控制。随着电机设计技术的不断进步和控制算法的不断优化,异步启动PMSM的性能将得到进一步提升,应用范围也将更加广泛。异步启动PMSM的调速技术是其核心技术之一,直接影响着电机的性能和应用范围。

wen8789的博客 982

黑马程序员——银行调度总结

----------------------android培训、java培训、期待与您交流! ---------------------- 业务需求: 1.银地方行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 ServiceWindow类 没有把VIP窗口和快速窗口做成子类,是因为实际业务中的普通窗口可以随时被设置为VIP窗口和快速窗口。

jing9527的专栏 634

用App Inventor做个蓝牙温湿度计,手机自动连Arduino,5分钟搞定硬件数据上屏

本文详细介绍了如何使用App Inventor和Arduino快速搭建一个蓝牙温湿度监测系统,实现手机自动连接并显示实时数据。通过图形化编程和硬件组装指南,零代码基础的用户也能在5分钟内完成硬件数据上屏,适用于智能家居、教学演示等多种场景。

weixin_30813225的博客 171

黑马程序员_JAVA之 银行调度业务系统

银行调度业务系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。 异步随机生成各种类型的客户,生成各类型用户的概率比例为: VIP客户 :普通客户 :快速客户 = 1 :6 :3。

xiaoqiang9090的专栏 523

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1212

Jaspersoft Studio安装与配置全攻略:从下载到首个报表生成

本文提供Jaspersoft Studio从下载、安装到创建首个报表的完整实战指南。详细介绍了如何获取安装包、配置工作空间,并通过可视化设计器创建报表模板、添加参数与字段,最终实现数据预览与PDF导出。帮助Java开发者快速掌握这一强大的开源报表工具,提升报表开发效率。

weixin_28826521的博客 702

黑马程序员——交通管理和银行调度业务系统

交通灯管理系统

u010584273的专栏 861

攻克TypeError: Cannot read properties of undefined (reading ‘NormalModule‘)的四种实战策略

本文详细解析了`TypeError: Cannot read properties of undefined (reading 'NormalModule')`错误的四种实战解决策略。从版本一致性检查、包管理器优化到依赖替换和构建环境配置,帮助开发者快速定位和解决Webpack构建过程中的常见问题,提升开发效率。

weixin_42523670的博客 243

黑马程序员_银行调度业务系统

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------- 感觉比交通灯的复杂一些.         这个系统主要分成3个部分来做,分别是,号码管理器,号码产生的机器和服务窗口三个部分.号码管理器( NumberManager)的主要做作用是产生新的号码和取号.里面涉及多线程的安全

u011609764的专栏 648

【推荐100个unity插件】Unity URP(通用渲染管线)的基于物理的天地和预计算大气散射——UnityPhysicallyBasedSkyURP

本文介绍了Unity URP(通用渲染管线)中基于物理的天地和预计算大气散射的实现方法。该插件提供物理天空、大气散射、高度雾效、动态天空反射和环境光等功能,要求Unity 2022.3及以上版本,支持着色器模型3.5+。使用步骤包括:添加渲染器功能、配置Volume组件(天空、雾效等),并建议太阳强度设为3、曝光为0作为初始设置。插件已在GitHub和Gitee开源,附带详细配置截图和效果展示。文末推荐了多个Unity开发相关专栏,涵盖游戏开发全领域知识。作者向宇提供了博客链接,欢迎交流学习问题。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1226

Unity Sprite Atlas C++底层原理全解析 —— “像素聚合工厂”的秘密

Unity Sprite Atlas C++底层实现简析 Sprite Atlas是Unity中用于优化2D渲染性能的核心机制,其C++底层实现如同一个高效的"像素聚合工厂"。该系统通过将多个小纹理合并为一个大纹理,显著减少Draw Call次数和GPU纹理切换开销。 在数据结构上,底层采用SpriteAtlasData存储图集元数据,PackedTexture管理合并后的大纹理,SpriteFrame记录每个子精灵的位置信息,并通过哈希表实现快速查找。编辑器阶段使用最大矩形等算法优化空

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 204

黑马程序员_java 7k_银行调度业务系统

------- android培训、java培训、期待与您交流! ---------- 银行调度业务系统         ------- android培训、java培训、期待与您交流! ----------

dingtan1990的专栏 410

生存曲线绘制及图例标签添加(使用R语言)

数据应该包含两列:一个是表示个体生存时间的时间变量(通常称为"时间(time)“)和一个是表示个体是否发生事件(如死亡)的事件变量(通常称为"事件(event)”)。通过修改上述代码中的数据和参数,您可以根据自己的需求绘制生存曲线,并添加相应的图例信息和标签。生存曲线是在生存分析中常用的工具,用于描述一组个体随时间的存活概率。函数的第一个参数指定图例的位置,这里我们选择了右上角(“topright”)。包来进行生存曲线的绘制,并通过添加图例信息和标签来增强可视化效果。的数据框,包含这两列数据。

CyberXZ的博客 555

黑马程序员——7K月薪面试题破解之二_银行业务调度系统

------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1. 银行调度业务系统的题目来源与需求阐述  银行业务调度系统: 模拟实现银行业务调度系统逻辑,具体需求如下: 1、银行内有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口

yuanqiwyj的专栏 856

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

黑马程序员-银行调度系统案例

------- android培训、java培训、期待与您交流! ----------    银行调度业务系统的题目来源与需求阐述: 模拟实现银行业务调度系统逻辑,具体需求如下:   银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。   有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业

ertingkele的专栏 595

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

黑马程序员_二十五 【银行业务调度系统】

--------------------- android培训、java培训、java学习型技术博客、期待与您交流! -------------------          银行业务调度系统 银行业务调度系统也是一个非常重要的实训项目。   业务系统需求分析: 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2 .有

宋旭东--黑马程序员博客 703

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

黑马程序员_7K面试题之银行调度业务

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

a297056007的专栏 571

黑马程序员_银行业务调度系统小结

------- android培训、java培训、期待与您交流! ---------- 视频包括了以下内容:     01. 3G之android面试经验漫谈     02. 银行调度业务系统的题目来源与需求阐述     03. 对银行调度业务系统进行面向对象分析设计     04. 编写表示号码管理器的类     05. 编写表示号码机器的类     06. 编写表示业务窗口的类的

qq237759458的专栏 275

黑马程序员——银行业务调度系统

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------   ---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

Johnny_1314的专栏 684

黑马程序员-银行业务

------- android培训、java培训、期待与您交流! ---------- 对银行调度业务系统进行面向对象分析设计   1.      有三种对应类型的客户,VIP客户,普通客户,快速客户,异步随即生成各种类型的客户,各类型客户在其对应窗口俺顺序依次办理业务 2.      号码管理器对象,要不断的产生新号码,就相当于随即产生了客户 有三类客户,每类客户的号码编排是完全独

cydmdg的专栏 603

黑马程序员_7K银行

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------------------------------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.youkuaiyun.com

kiss072403的专栏 454

黑马程序员-----------银行业务调度系统

点击打开链接 点击打开链接 Java培训、Android培训、iOS培训、.Net培训、期待与您交流!">点击打开链接 点击打开链接

u013750380的专栏 402

黑马程序员 十八、银行业务系统等

Java帮帮-IT资源分享网 NumberManager 类、NumberMachine 类、CustomerType 枚举类、ServiceWindow 类、MainClass 类与 Constants 类  黑马程序员——面试题之银行业务系统   1、需求 模拟实现银行业务调度系统逻辑,具体需求如下:  银行内有 6 个业务窗口,1 - 4 号窗口为普通窗口,

Java帮帮 986

黑马程序员-----银行业务系统系统

银行业务调度系统                 --------- android培训、java培训、java学习型技术博客、期待与您交流! ------------ 一.需求 Ø 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 Ø 有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。 Ø 异步随机生

a15868717540的专栏 680

黑马程序员-7k面试题-银行业务调度系统

-------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------- 银行业务调度系统需求 模拟实现银行业务调度系统逻辑,具体需求如下: 第一,银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 第二,有三种对应类型的客户:VIP客户,普通客户,快速客

Android--我的选择 528

黑马程序员_银行业务调度系统

---------------------- android培训、java培训、期待与您交流! ----------------------   BankQueue   根据面向对象的分析与设计思想,有三种对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。各类型客户在其对应窗口按顺序依次办理业务,准确地说,应该是窗口依

lzjtu1224的专栏 412
上一篇: 黑马程序员___交通灯管理系统
alg89136
博客等级 码龄12年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值