版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目二
开发停车计费功能(基本数据类型)Java程序设计项目概述停车计费功能是智慧停车场系统中的核心功能,本项目需要编写Java应用程序实现“停车计费”这一功能,具体需求如下:(1)入场车辆停车费用按时间计算,15分钟内免费,未满1小时按1小时计算,一天内30元封顶;若停车时长超过1天,则按30元/天的费用计算。(2)在车辆出场时,显示该车辆的停车时长和应缴纳的金额。(3)对停车计费功能进行单元测试,要求测试用例能够达到语句覆盖级别的测试。本项目将引入Java基本数据类型和表达式的相关知识,它们在Java语言中具有非常重要的地位,是构建Java程序的基础和核心。通过停车管理系统实际功能的开发和实现,你将了解到Java基本数据类型的分类、变量的定义方法以及各类运算符的含义、表达式的使用方法等。项目概述-思维导图Java程序设计学习目标01知识目标:系统掌握Java基本数据类型的分类、特性及使用场景,熟悉变量声明与初始化的语法规范;深入理解算术、关系、逻辑等各类运算符的含义、优先级与结合性,清晰认知自动类型转换与强制类型转换的规则,夯实Java基础语法的理论根基。02能力目标:能够熟练运用String类的常用方法完成字符串的拼接、截取、查找等基础操作,根据实际开发需求精准选择适配的数据类型;可结合基础语法独立编写结构规范、逻辑正确的简单Java程序,具备将基础语法知识转化为实际代码的实践应用能力。03素养目标:在基础语法学习与代码编写中培养严谨的逻辑思维和细致的编码习惯,通过代码调试与问题排查锤炼耐心专注的职业素养;树立规范编码、注重细节的专业意识,培养分析问题与解决基础编程问题的核心能力,为后续复杂程序设计积累良好的职业素养。任务1实现停车计费功能目录任务2显示车辆缴费信息任务3测试停车计费功能实现停车计费功能任务11.1任务描述本任务需要编写Java程序实现停车计费的功能:入场车辆停车费用按时间计算,15分钟内免费,未满1小时按1小时计算,一天内30元封顶;若停车时长超过1天,则按30元/天的费用计算。完成本任务之前,我们需要掌握Java语言的基本数据类型及变量的定义,还需要掌握各类运算符的含义、表达式的计算和使用方法。1.2必备知识1注释2标识符与关键字3数据类型4常量与变量5运算符6类型转换代码基础:注释与标识符01代码注释(Comments)写给开发者的“备忘录”,编译器自动忽略,提升代码可读性的关键。单行注释//用于简短说明,适合对变量、单行逻辑或临时思路进行快速注解,轻便灵活。多行注释/*...*/跨越多行的注释块,常用于文件头部版权声明、函数功能的详细描述或临时屏蔽代码。文档注释/**...*/特殊的结构化注释,可被工具解析生成标准API文档(如Javadoc),是团队协作的规范标配。02标识符(Identifiers)程序中自定义的“名字”(变量/类/方法),是代码的“身份证”与“名片”。📐核心命名规则(硬性要求)•组成:只能由字母、数字、下划线(_)和美元符($)构成
•限制:严禁以数字开头,不可使用语言关键字(如if,class,int)
•区分:严格区分大小写(如User和user是两个不同标识符)✨最佳命名规范(软性建议)•见名知意:拒绝拼音或无意义符号(如userName而非mz)
•驼峰命名:小驼峰(变量/方法:getUserAge)、大驼峰(类:UserInfo)
•常量规范:全大写字母+下划线分隔(如MAX_CONNECTION)Java程序设计Java关键字详解Java关键字是语言预先定义并赋予特殊含义的“保留字”,不可作为标识符使用,是构建Java程序语法规则的基础。01访问控制符:用于定义类、方法和变量的可见范围,实现封装特性。核心包括public(公共访问)、protected(受保护访问)、private(私有访问),严格限定了代码的访问权限边界。02结构与修饰符:构建程序的骨架与特性,支撑面向对象设计。如class(定义类)、static(静态成员)、new(实例化对象)、extends(实现继承),是定义代码结构的核心要素。03基本数据类型:标识数据的存储类型与取值范围,是数据处理的基础。包含int(整型)、long(长整型)、float/double(浮点型)、boolean(布尔型),决定了数据的存储方式与运算规则。04程序控制流:控制程序的执行路径与逻辑走向,实现分支与循环。包括if/else(条件判断)、for/while(循环迭代)、switch(多分支选择),是实现复杂业务逻辑的关键工具。Java程序设计Java基本数据类型类型类别具体类型名占用位数核心特点整型byte,short,int,long8/16/32/64用于存储整数数值,取值范围逐级扩大浮点型float(单精度),double(双精度)32/64存储小数,double精度更高、范围更广字符型char16采用Unicode编码,存储单个字符或数字布尔型(boolean)1仅存储true/false,用于逻辑判断常量与变量01常量(Constants)程序运行期间值保持恒定、不可修改的量。通常使用final关键字修饰,适用于数学常数、配置参数等固定值,命名规范为字母全大写。//定义圆周率常量(全大写规范)
finaldoublePI=3.1415926;
//定义固定的应用版本号
finalStringVERSION="2.0.1";02变量(Variables)程序运行期间值可动态改变的存储单元,用于暂存数据。必须遵循“先声明类型,后使用”的原则,是程序中数据流转和运算的基础载体。//1.声明变量类型
intuserScore;
//2.赋值与更新
userScore=95;userScore+=5;💡核心区别:常量是“只读锁死”的固定值(如数学常数),变量是“可擦写”的临时容器(如实时温度),二者共同构成了程序的数据基石。01算术运算符算术运算符用于计算,含基本运算,有优先级等规则03赋值运算符赋值运算符分简单、复合两类,复合赋值可简化程序02关系运算符关系运算符用于比较操作数,结果为布尔型,有优先级等规则04位运算符位运算符仅用于整数,对其二进制比特位操作,含移位列等类型[5]运算符逻辑运算符运算布尔表达式,带短路功能且有优先级逻辑运算符条件运算符即三元运算符,按条件返回对应表达式的值条件运算符表达式中运算符有优先级,数字越小优先级越高运算符优先级[5]运算符Java程序设计运算符优先级优先级等级运算类别与说明核心符号关键规则1(最高)括号与成员访问:改变运算顺序的基础,优先执行内部逻辑。()[].优先执行2-4级算术运算:包括一元运算与二元运算,遵循数学运算习惯。/%+-先乘除后加减5-12级比较与逻辑:用于条件判断,结果通常为布尔值true/false。>==&&||先比较后逻辑13-14(最低):赋值与扩展赋值=+=-=*=最后执行Java类型转换机制01自动类型转换(Implicit)无需人工干预,由编译器自动完成的“安全升级”。仅发生在两种类型兼容,且目标类型取值范围大于源类型(小转大)的场景。转换优先级:byte→short→char→int→long→float→double💡记忆口诀:范围小的类型自动“晋升”为范围大的类型02强制类型转换(Explicit)需显式通过`(目标类型)`声明,用于“大范围转小范围”。此过程可能导致**精度丢失**或**数据溢出**,属于风险操作。语法与示例:intnum=(int)10.99;执行结果:num=10(小数部分被直接截断,而非四舍五入)核心差异总结:自动转换是Java保障安全的默认行为;强制转换是打破安全规则的主动操作。开发中应尽量避免不必要的强制转换,若必须使用,请务必确认数据值不会超出目标类型的范围,防止程序运行时出现逻辑错误。1.3任务实施智慧停车场系统入场车辆停车费用按时间计算,15分钟内免费,未满1小时按1小时计算,一天内30元封顶;若停车时长超过1天,则按30元/天的费用计算。因此,我们需要编写一个类Car来实现车辆信息的存储以及停车费用的计算功能。(1)车辆信息包括车牌号、停车时长(单位:分钟)、收费单价,需要用不同数据类型的变量来存储。其中车牌号用String类型存储,停车时长用long类型进行存储、收费单价用double类型进行存储。(2)编写getParkHour()函数,来计算当前车辆的停车费用;(3)停车费用的计算涉及到不同的几种情况,因此需要用到条件判断语句来实现。Java程序设计1.3任务实施:Car.java核心代码publicclassCar{privateStringlicensePlate;//车牌属性privatefinaldoubleFEE=5.0;//每小时单价常量privatelongparkTime;//停车时长(分钟)privateintgetParkHour(){//计算计费小时数if(parkTime<=15)return0;//15分钟内免费inth=(int)(parkTime/60);//基础小时数returnparkTime%60>0?h+1:h;//不足1小时按1小时计}publicdoublegetFee(){//计算停车费用returnFEE*getParkHour();//单价*计费时长}}▍计费逻辑与核心方法解析01计费时长的智能计算
通过`getParkHour()`方法实现核心计费规则:15分钟内停车免费;超出后不足1小时按1小时计算(向上取整)。该方法将原始停车分钟数转换为实际计费的小时数,是实现精准计费的基础算法。02费用计算与面向对象封装
`getFee()`方法通过调用时长计算方法并乘以单价常量得到最终费用。类中属性(车牌、时长)私有化,仅通过方法暴露业务逻辑,体现了Java封装特性,保障数据安全与代码可维护性。1.4任务拓展本任务实现了根据停车时长来计算停车费的功能,停车时长则是根据车辆的入场时间和出场时间计算得到的,那么系统在存储车辆的入场时间和离场时间时应使用什么数据类型?请查阅相关的资料,给出具体的解决方案。显示车辆缴费信息任务22.1任务描述
本任务需要实现如下功能:车辆出场时,显示该车辆的停车时长和应缴纳的金额。具体要求如下:首先需要显示当前车辆的车牌;当车辆15分钟内离场时,显示“免费时段,无须缴费!”;其余收费的情况,显示“停车时长XX小时XX分钟;请缴费XX元”(如果未满1小时,则只需显示”停车时长XX分钟;请缴费XX元”)。我们可以考虑在类Car中增加一个成员方法display,用于车辆离场时,显示该车辆应缴纳的费用。在完成本任务之前,我们首先需要学习下Java编程中非常重要的数据类型——字符串。2.2必备知识1创建字符串
2字符串连接3子串[1]创建字符串我们可以通过以下两种方式来创建字符串:Stringstr1=“park”;//方式1:使用字符串字面量,声明字符串变量str1Stringstr2=newString(“park”);//方式2:使用String类的构造器,构造对象str2[1]创建字符串publicclassEx208{publicstaticvoidmain(String[]args){Stringstr1="park";Stringstr2=newString("park");System.out.println(str1==str2);//输出falseSystem.out.println(str1.equals(str2));//true}}[2]连接字符串给定两个字符串,如“yan”和“haiming”,我们可以使用以下两种方法连接这两个字符串生成一个长的字符串。StringfName=“yan”;StringlName=“haiming”;Stringname1=fName+lName;//方法1:使用“+”操作符连接字符串Stringname2=fName.concat(lName);//方法2:使用concat()方法连接字符串[3]子串packagechapter2;importjava.util.Scanner;publicclassEx209{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("请输入身份证号码(18位):");StringidCard=scanner.nextLine();//检查身份证号码长度if(idCard.length()!=18){System.out.println("身份证号码长度不正确,请输入18位身份证号码!");return;}//提取出生日期部分StringbirthDateString=idCard.substring(6,14);//输出出生日期System.out.println("出生日期为:"+birthDateString.substring(0,4)+"-"+birthDateString.substring(4,6)+"-"+birthDateString.substring(6,8));}}Java程序设计2.3任务实施:添加display()方法publicvoiddisplay(){System.out.println("车牌:"+licensePlate);if(parkTime<=15){System.out.println("免费时段,无须缴费!");}else{if(parkTime<60){System.out.println("停车时长:"+parkTime+"分钟");}else{System.out.println("停车时长:"+parkTime/60+"小时"+parkTime%60+"分钟");}System.out.println("请缴费:"+getFee());}}▍代码功能与逻辑解析01信息分级展示与条件判断
方法首先输出车牌信息,随后通过if-else结构进行条件判断:若停车时长≤15分钟,直接提示免费;若超出则进入费用计算分支,实现了根据业务规则动态输出不同信息的逻辑。02时长格式化与费用关联
针对停车时长做精细化展示:不足1小时显示分钟数,超过1小时则自动拆分为“小时+分钟”格式;最后调用getFee()方法计算并展示费用,实现了数据格式化展示与业务计算的紧密结合。2.4任务拓展String类中常用的方法有很多,如查找字符串中给定字符的位置indexOf(intch)、获取字符串中指定位置上的字符charAt(intindex)、判断是字符串是否以指定的字符串开始startsWith(Stirngprefix)等。请查阅相关资料,总结String类中常用的方法有哪些,并选择你认为最常用的方法填写到表2-1中(可以自己添加行)。方法声明功能描述intlength()返回字符串的长度
测试停车计费功能任务33.1任务描述对于类Car中的getParkHour方法,使用Junit单元测试框架对其进行测试,要求达到100%的语句覆盖。3.2必备知识1测试驱动开发
2单元测试Java程序设计代码路径分析代码路径覆盖是单元测试的核心目标。针对停车场计费核心方法getParkHour,需基于其多层条件判断逻辑,设计针对性测试用例,确保免费、常规计费、单日封顶及跨天计费等所有业务分支均被验证,消除逻辑漏洞。核心分支拆解•场景1:≤15分钟,触发“免费停车”逻辑。•场景2:未满1小时按1小时计,叠加基础时长。•场景3:6-24小时内,执行“单日6小时封顶”。•场景4:超24小时,按“天租+剩余时长”计算。测试覆盖策略等价类划分将输入划分为有效等价类(如5分钟、4小时)和无效等价类,确保每个类别至少覆盖一次,验证逻辑的正确性。边界值分析重点测试临界点:15分钟(免费上限)、6小时(封顶阈值)、24小时(跨天节点),防范边界逻辑的溢出或误判。3.3任务实施Java程序设计与测试创建测试类IntelliJIDEA提供了智能的测试类生成功能,无需手动编写样板代码。通过简单的右键向导,即可自动创建规范的单元测试类框架,并快速关联业务类中的待测试方法,极大简化了单元测试的准备工作。01.定位与触发将光标精准定位到待测试类的类名上(如示例中的Car类),右键呼出上下文菜单。依次选择「GoTo」->「Test」选项,快速唤起IDE的测试类生成向导,这是开启自动化创建的关键第一步。02.配置与生成在弹出的「CreateTest」对话框中,选择测试框架(如JUnit4),并勾选需要生成测试方法的目标成员(如业务方法getFee)。确认类名、包路径后点击OK,IDEA将自动生成标准的测试类文件及空的测试方法骨架。3.3任务实施Java单元测试实践编写测试用例:验证计费逻辑@TestpublicvoidgetFee(){//场景1:免费时段(0-15分钟)car.setParkTime(10);Assert.assertEquals(0,car.getFee(),0);//场景2:1-6小时(每小时5元)car.setParkTime(16);Assert.assertEquals(5,car.getFee(),0);//场景3:7-24小时(封顶30元)car.setParkTime(7*60);Assert.assertEquals(30,car.getFee(),0);//场景4:超过24小时(累加计算)car.setParkTime(25*60);Assert.assertEquals(35,car.getFee(),0);}▍测试逻辑与断言解析01全场景边界值测试覆盖
针对计费规则的关键节点设计用例:覆盖“15分钟免费”的临界值、“1小时起算”的阶梯点、“24小时封顶”的上限值以及“跨天计费”的特殊场景,确保所有业务规则分支都能被执行验证。02断言校验确保结果准确
使用Assert.assertEquals方法进行结果断言,对比“预期费用”与“实际计算费用”。若断言通过,证明计费算法逻辑符合预期;若失败,则直接定位到具体的计费逻辑漏洞,是保障代码质量的关键手段。3.3任务实施首先将鼠标的光标移动到类Car这个位置,然后点击鼠标右键.3.3任务实施点击鼠标右键后会显示一个菜单栏,在菜单栏中点击”GoTo”按钮,再点击“Test”按钮。3.3任务实施点击“Test”后在弹出的界面中点击“CreateNewTest...”。3.3任务实施点击“Test”后在弹出的界面中点击“CreateNewTest...”。3.3任务实施在弹出的对话框中,选中下图所框选出的选项。3.3任务实施完成以上步骤后,IntellijIdea会自动生成测试类CarTest。publicclassCarTest{@BeforepublicvoidsetUp()throwsException{}@AfterpublicvoidtearDown()throwsException{}@TestpublicvoidgetFee(){}}3.3任务实施@TestpublicvoidgetFee(){car.setParkTime(0);Assert.assertEquals(0,car.getFee(),0);car.setParkTime(1);Assert.assertEquals(0,car.getFee(),0);car.setParkTime(15);Assert.assertEquals(0,car.getFee(),0);car.setParkTime(16);Assert.assertEquals(5,car.getFee(),0);car.setParkTime(60);Assert.assertEquals(5,car.getFee(),0);car.setParkTime(61);Assert.assertEquals(10,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年专业月嫂保姆服务协议
- Unit 7 A Day to Remember (Period 1)Section A (1a-Pronunciation) (2)同步练2025-2026学年人教版英语七年级下册
- 2026年国企行政岗位测试题及答案
- 2026年夫妻之间的问题测试题及答案
- 2026年《人鸦》测试题及答案
- 2026年面试应聘心理测试题及答案
- 2026年霍乱应急演练测试题及答案
- 2026年数学命题的测试题及答案
- 2026年党纪处分测试题及答案
- 护理服务质量评价标准
- 上清所登记托管结算业务培训参考试题
- 摩托莫里尼X-CAPE650 维修手册维修说明书
- 2025年商场突发事件应对培训
- 检验科保密制度培训
- 超声造影技术在肝脏疾病中的应用
- 2026年军事基础理论知识考试题库及答案
- 2026年公务员考试时事政治考题库及完整答案1套
- GB/T 6074-2025板式链、连接环和槽轮尺寸、测量力、抗拉载荷和动载载荷
- 《自主移动机器人 》课件 第6章 里程估计 1 概述及运动里程估计
- 安全与保密管理措施及方案
- 2025年劳动关系协调员-劳动关系协调师(二级)考试历年参考题库含答案解析
评论
0/150
提交评论