黑马程序员项目实践

------- <a href="http://www.itheima.com" target="blank">android培训</a><a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

黑马程序员项目实践

交通灯管理系统

1.       面向对象的分析与设计:

l  每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减少一辆车。

Ø  设计一个Road类来表示路线,每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12Road实例对象。

Ø  每条路线上随机增加新的车辆,增加到一个集合中保存。

Ø  每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。

l  每条路线每隔一秒都会检查控制本路线的灯是否为绿,一个灯由绿变红时,应该将下一个方向的灯变绿。

Ø  设计一个Lamp类来表示一个交通灯,每个交通灯都维护一个状态:亮(绿)或不亮(红),每个交通灯要有变亮和变黑的方法,并且能返回自己的亮黑状态。

Ø  总共有12条路线,所以,系统中总共要产生12个交通灯。右拐弯的路线本来不受灯的控制,但是为了让程序采用统一的处理方式,故假设出有四个右拐弯的灯,只是这些灯为常亮状态,即永远不变黑。

Ø  除了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对应的灯则随之一同变化,因此Lamp类中要有一个变量来记住自己相反方向的灯,在一个Lamp对象的变亮和变黑方法中,将对应方向的灯也变亮和变黑。每个灯变黑时,都伴随者下一个灯的变亮,Lamp类中还用一个变量来记住自己的下一个灯。

Ø  无论在程序的什么地方去获得某个方向的灯时,每次获得的都是同一个实例对象,所以Lamp类改用枚举来做显然具有很大的方便性,永远都只有代表12个方向的灯的实例对象。

Ø  设计一个LampController类,它定时让当前的绿灯变红。

2.       Road类的编写

l  每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。

l  Road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车(用一个“路线名_id”形式的字符串进行表示)。

l  Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。

3.       Lamp类的编写

l  系统中有12个方向上的灯,在程序的其他地方要根据灯的名称就可以获得对应的灯的实例对象,综合这些因素,将Lamp类用java5中的枚举形式定义更为简单。

l  每个Lamp对象中的亮黑状态用lighted变量表示,选用S2NS2WE2WE2N这四个方向上的Lamp对象依次轮询变亮,Lamp对象中还要有一个oppositeLampName变量来表示它们相反方向的灯,再用一个nextLampName变量来表示此灯变亮后的下一个变亮的灯。这三个变量用构造方法的形式进行赋值,因为枚举元素必须在定义之后引用,所以无法再构造方法中彼此相互引用,所以,相反方向和下一个方向的灯用字符串形式表示。

l  增加让Lamp变亮和变黑的方法:lightblackOut,对于S2NS2WE2WE2N这四个方向上的Lamp对象,这两个方法内部要让相反方向的灯随之变亮和变黑,blackOut方法还要让下一个灯变亮。

l  除了S2NS2WE2WE2N这四个方向上的Lamp对象之外,其他方向上的Lamp对象的nextLampNameoppositeLampName属性设置为null即可,并且S2NS2WE2WE2N这四个方向上的Lamp对象的nextLampNameoppositeLampName属性必须设置为null,以便防止lightblackOut进入死循环。

4.       LampControl类的编写

l  整个系统中只能有一套交通灯控制系统,所以,LampController类最好是设计成单例。

l  LampController构造方法中要设定第一个为绿的灯。

l  LampController对象的start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。

5.       MainClass类的编写

l  for循环创建出代表12条路线的对象。

l  接着再获得LampController对象并调用其start方法。

 

 

银行业务调度系统

1.       面向对象的分析与设计

l  有三种对应类型的客户:VIP客户,普通客户,快速客户,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。

Ø  首先,经常在银行办理业务的人更有利于理解本系统,例如,我经常陪老婆跑银行,对银行的这个业务算是比较熟悉了,我知道每一个客户其实就是由银行的一个取号机器产生号码的方式来表示的。所以,我想到要有一个号码管理器对象,让这个对象不断地产生号码,就等于随机生成了客户。

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

l  各类型客户在其对应窗口按顺序依次办理业务,准确地说,应该是窗口依次叫号。

Ø  各个窗口怎么知道该叫哪一个号了呢?它一定是问的相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码。

Ø  如果我不是多次亲身经历银行的这种业务,再加之积累了大量面向对象的应用开发经验,我也不知道能否轻松进行这种设计,能否发掘出其中隐含的对象信息,我真说不出具体的经验是什么,就是日积月累出来的一种感觉。难道这就是传说中的:“只可意会,不可言传?”

 

2.       NumberManager

a)         定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合。

b)         定义一个产生新号码的方法和获取马上要为之服务的号码的方法,这两个方法被不同的线程操作了相同的数据,所以,要进行同步。

3.       NumberMachine

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

b)         NumberMachine类设计成单例。

 

4.       CustomerType枚举类

a)         系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。

b)         重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。

5.       ServiceWindow

a)         定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法。

b)         定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息。

 

 

6.       MainClass

a)         for循环创建出4个普通窗口,再创建出1个快速窗口和一个VIP窗口。

b)         接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、新的VIP客户号码。

7.       Constants

a)         定义三个常量:MAX_SERVICE_TIMEMIN_SERVICE_TIMECOMMON_CUSTOMER_INTERVAL_TIME

 

<think>好的,我现在需要处理用户关于黑马程序员相关项目和课程的查询。首先,用户提到了几个引用来源,这些引用涉及JavaWeb综合案例、前端课程、静态页面生成方法、数据库操作以及购物车功能实现等内容。我需要将这些信息整合起来,提供一个结构清晰的回答。 首先,检查用户提供的引用内容。引用[1]提到了JavaWeb综合案例,包括前后端完整版,有学习视频和代码库链接。引用[2]讲的是生成课程静态页面的方法,涉及Freemarker模板引擎的使用。引用[3]是关于前端课程的笔记,包含HTML5的标签使用。引用[4]是JavaWeb中的数据库更新语法。引用[5]涉及底部导航和购物车功能的实现。 接下来,用户想了解黑马程序员项目或课程介绍,需要分点回答,确保结构清晰。根据引用内容,可以分成综合项目实战、前端开发课程、后端技术课程、数据库操作以及实战案例解析这几个部分。 需要确保每个部分引用正确的来源。例如,在综合项目实战部分,引用[1]和[2]提到的JavaWeb案例和静态页面生成方法。前端课程部分引用[3],后端技术引用[2],数据库部分引用[4],实战案例引用[5]。 同时,用户的问题中要求生成相关问题,需要根据回答内容提出相关问题。例如,关于JavaWeb综合案例的技术细节、前端课程内容、Freemarker的应用、数据库操作优化以及购物车功能实现等。 需要检查回答是否符合系统级指令:使用正确的中文回答,数学公式格式正确(虽然这里可能不需要),生成相关问题,引用标识正确。此外,回答需要结构清晰,分点明确,引用来源准确。 最后,确保所有引用标识正确对应,例如[^1]、[^2]等,并且在回答末尾列出相关问题,使用户可以进一步探索。整个过程需要自然流畅,信息准确,满足用户的需求。</think>### 黑马程序员项目及课程内容解析 #### 一、综合项目实战:JavaWeb 品牌管理系统 1. **项目概述** 该项目基于JavaWeb技术栈,包含前后端完整功能模块,涵盖商品管理、用户权限、购物车等核心业务。代码库提供完整的MVC架构实现和数据库操作示例[^1]。 2. **关键技术点** - **静态页面生成**:通过`generateCourseHtml`方法使用Freemarker模板引擎动态生成课程页面,结合数据模型渲染模板并输出静态文件[^2]。 - **数据库交互**:使用SQL语句(如`UPDATE`)实现数据更新操作,示例代码演示了条件更新逻辑[^4]。 - **前端交互**:通过JavaScript实现商品加入购物车功能,结合页面路由切换提升用户体验[^5]。 --- #### 二、前端开发课程重点 1. **HTML5 基础与语义化标签** - 使用`<strong>`、`<em>`、`<del>`等标签实现文本样式与语义化表达[^3]。 - 掌握`<div>`与`<span>`布局容器,结合CSS实现响应式设计。 2. **实战案例** - 底部Tab Bar实现:定义页面路径、文本及图标样式,支持多页面切换[^5]。 --- #### 三、后端技术课程亮点 1. **JavaWeb 技术栈** - 学习Servlet、JSP、Filter等核心组件,搭建MVC架构。 - 综合案例涵盖用户登录、数据分页、文件上传等企业级功能[^1]。 2. **模板引擎应用** - Freemarker配置与模板加载,实现动态内容静态化(如课程详情页)。 --- #### 四、数据库操作实践 - **SQL语法示例**: ```sql UPDATE 表名 SET 列名1=值1, 列名2=值2 WHERE 条件; -- 演示条件更新 ``` --- #### 五、实战案例解析 - **购物车功能**: 通过商品详情页的JS逻辑实现添加商品到购物车,结合本地存储或后端接口保存数据[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值