类和对象综合案例——模仿电影信息系统

news/2025/2/24 7:46:00/文章来源:https://www.cnblogs.com/zhishi6/p/18566603

1.需求

2.实际操作

1.创建一个实体类

首先第一件事,就是写好一个实体类,为后面封装所有数据做准备,我们只需要私有化成员变量,然后再ptg即可



2.创建处理业务类和测试类

写好了实体类就要开始处理业务了,所以我们要再创建一个专门处理业务的类,名为MovieService

写完了业务类后别着急,再创建一个测试类。我们肯定要在测试类里创建业务类对象,然后使用业务类方法start,用于开启电影信息系统

但由于我们业务类没有写start方法,测试类会报错,这时我们点击start,然后alt +回车即可快捷创建start方法


3.开始在start方法里写处理业务的代码

1.首先我们要写一个菜单提供给用户

在菜单里也知道需要键盘录入,要录根据用户输入的数来选择哪些功能

毫无疑问,需要使用switch来判断用户输入的数以此选择不同的功能

接着在测试类使用start方法,很明显,这样写只能循环一次,不能达到我们的预期,所以我们还需要使用无限循环,直到用户输入3时,才结束系统

使用快捷键 ctrl alt t 选择我们要包裹的代码,快速包裹 这里选择while

再给while一个标号,让case3的break结束循环

4.在测试类里封装数据

写完了菜单后,就该封装所有数据了

需要注意,在实体类里,ptg有带参数的构造方法,那我们创建对象的时候就用上这个构造方法,写出实参,从而快速赋值

赋值完后,我们发现movie1 2 3都是同一个类型,并且有多个数据,这不禁让我们想起数组,但数组可以储存对象吗?

答案是可以,数组储存数字,就是int类型,那数组储存对象,不就是该对象的类型嘛

5.将数据从一个类中传递到另一个类中

封装好所有数据后就该进行使用,处理业务了。但我们的数据放在了测试类,而我们又得在业务类调用数据写代码,那我们该怎么把一个类的数据传递给另外一个类?

很简单,我们肯定要在测试类里创建业务类的对象,那我们就直接把数组(存着所有数据)放进创建好的对象的实参中

想一想为什么可以这样操作?(这里报错是还未创建构造方法)

之前我们在说方法内存图的时候说过,方法的形参也是一种变量,该变量的值根据主方法里的参数所确定,你是什么,我就是什么

所以,我们先将数组丢入创建的对象的实参中,然后再alt 回车 在业务类中创建带参的构造方法,这时数组的所有数据就已经传入到业务类里了

6.开始处理展示系统中全部电影的名称和评分

当数据进入业务类后,就可以开始写具体功能了。

功能一要展示所有电影的名称和评分,所以肯定要遍历数组,但我们可以直接在构造方法里遍历数组吗?

答案是不能,因为我们要根据用户输入的数字来确定选择哪些功能,当用户输入1时,才是打印所有电影的名称和评分,所以我们要在case1里遍历数组

我们将case1的打印改成方法,alt 回车快速生成方法

在方法里遍历数组

竟然爆红了,为什么会爆红?原因就是因为movies这个数组现在是局部变量,只能存在于构造方法里,出了括号就用不了

解决的方法也很简单,我们直接创建一个成员变量,让局部变量movies给成员变量赋值,这样就可以在类里使用数组了

遍历完数组之后,先试着打印一下数组


打印出来的竟然是一堆地址,可见,数组存储对象时,并非直接把对象的数据存入,而是存入对象的地址,然后根据地址调用数据

地址对我们来说没用,那我们该如何打印出名称和评分呢?

使用get方法即可解决



当i=1,movie=movie1,movie调用get方法

get tittle里的return tittle找到movie1的名称即东八区的先生们

谁调用的get方法,return就把值返回给谁,所以movie.gettittle=“东八区的先生们”那么此时打印的就是这个名称

7.处理电影详细信息

写完功能一,接着写功能二,功能二要放在case2里写

要根据用户输入id的数字来确定该打印什么,所以要键盘录入

但没必要再重新召唤Scanner,我们上面就写了一个

但上面的Scannner也只能在start里使用,那我们就再一次把Scanner也给提到类里

获取到用户输入的id,遍历数组,获取三个电影的id,依旧是使用get方法获取,然后进行对比即可

找到了之后就输出所有信息

使用return结束循环,如果用户输入的id不是电影的id,还需要提醒,所以再写一个提醒语句

当走完整个循环后依旧没有if到,那么就会输出打印语句,否则直接return结束循环

到此,所有代码写完,案例结束






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/840625.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF2038A - Bonus Project 题解

题目传送门 https://codeforces.com/contest/2038/problem/A 先大致捋一下题目的含义 一共有n个工程师,每个工程师完成相应的工作都有一定的奖金a,但同时也会消耗成本b,目前一共有k个工作需要做 这些工程师对他们的同事很友好,他们能接受自己的总收益为0来增长经验,但不能…

BurpSuite安装captcha-killer插件

1.本机已经安装python3.8或者更高版本,使用命令进行更新pip和安装环境模块 python3 -m pip install --upgrade pip pip3 install ddddocr aiohttp -i https://pypi.tuna.tsinghua.edu.cn/simple/ (因为本机安装了python2和python3,所以输入pip3)2.bp导入插件包,低版本导…

Perf Linux性能事件(性能计数)器 与 Flame Graph

from ふぃーる 冬コミ2日目西ふ15Perf 性能采样和计数原理 首先要清楚perf是一个面向事件的可观察性工具from jyy perf在中断来临时,获取OS在中断之前所记录的关键性能指标Perf Stat (性能计数)stat (statistics) 有统计,计数,获取信息等含义perf stat <command&…

技术债正在悄悄拖垮你的团队!

0 前言 软件开发的核心在于应对变化。在软件的生命周期中,目标是能够在合理的时间内实施必要的更改。不管这些更改是技术性的,比如紧急安全升级,还是业务需求所驱动的,比如开发新功能以在目标市场中更具竞争力——能否快速应对变化是成败的关键。 是什么让我们慢下来?通常…

HCIA-06 IP路由基础

介绍了路由的基本概念,路由条目三种生成方式:直连路由、静态路由(缺省路由)、动态路由,路由器的基本工作原理、路由表的具体内容。路由器选择最佳路由的方法:先比较匹配的掩码长度、(如果掩码长度相同)再比较优先级、(如果优先级相同)再比较度量值。路由转发选择的路…

学习笔记(四十四):自定义组件@LocalBuilder装饰器

概述: 当开发者使用@Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。 为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入@LocalBuilder装饰器。 @LocalBuilder拥有和局部@Builder相同的功…

推荐5款程序员必备的画图工具,效率提升利器!

ProcessOn ProcessOn是一款专业强大在线作图工具,提供AI生成思维导图流程图,支持思维导图、流程图、组织结构图、网络拓扑图、鱼骨图、UML图等多种图形。同时可实现人与人之间的实时协作和共享,提升团队工作效率。在线访问地址:https://www.processon.com丰富的图形素材库:…

定时器JS深入理解解读

set&clear interval&timeout 相信不论是老油条还是新手小白,你早就听过或者用过setInterval和setTimeout这俩哥们儿和他们的死敌clearInterval和clearTimeout了吧,作为项目里的“老面孔”和面试高频考点,今天GJ504b就带大家深入解读这四大活宝😀setInterval/setT…

not in 和 not exists 比较和用法

尽量不要使用not in(它会调用子查询),而尽量使用not exists(它会调用关联子查询)。查询语句使用了not in,那么对内外表都进行全表扫描,没有用到索引;而not exists的子查询依然能用到表上的索引。所以无论哪个表大,用not exists都比not in 要快。 NOT IN 查询返回空结果:…

Flash动画综合设计并发布、嵌入到网页

【作业要求】 自己选定主题,创意制作Flash动画,并与网页进行集成 【实验环境】 l 所需硬件环境为微机; l 所需软件环境为VS code 【创意内容】 因为我比较爱国,所以我选定的主题都是关于国旗的【关键步骤】 1、选好想要做的内容,找到一些视频; 2、查找关于任如何在浏览器…

洛谷P11290 【MX-S6-T2】「KDOI-11」飞船

Problem本题开启Special Judge,无需考虑精度问题Solve 一开始想到这个用DP写,但是不知道怎么定义 去"提交记录"旁边的神秘按钮得知速度可以作为第二维,且类似于背包 那么我们就可以按照背包列出定义 前i个加油站,花费时间j...... 但是这里是求最小花费,所以我们…