java学习 -----项目(1)

项目

写在前面的话:耳机没电,先来写写今早的感受。说实话,我并不喜欢我们的职业规划老师,满嘴荒唐言,被社会那所大缸浸染了一身社会气。课快结束时,老师问还有谁的视频没做,我把手举了起来。(我迟到+在课上睡觉)他稍带怒气的腔调说,你那部分分就别想拿了。大脑经过反应,回道:我之前给你发过一份mlt格式的文件,那个二维码生成不了。

可能是我气场原因?我也不知道,或许这就是他特有的技能,能对人快速做出分类,然后采取相应的言辞。

过程就不赘述,我临近下课的时候,我说视频课下重新做一份,因为我的部分源文件丢失了,他起身,晃着圆圆的身体,略微挤到我一些说。二维码没有也行,你课程只要能过就行对吧?

总结:想起《牧羊少年的奇妙之旅》那本书,当你想要做成一件事的时候,连风都会帮助你。环境在帮我,我更应该朝着自己的目标前行,而不是浪费这种资源。

零钱通

项目需求

  1. 完成收益入账,消费,查看明细,退出系统等功能

注:先使用过程编程,后面改成OOP版本,从中体会到OOP编程的好处

打印日期

   Data data = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");data = new Date();System.out.println(sdf.format(date));public class data01 {public static void main(String[] args) {boolean condition = true;Date date = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");Scanner sc = new Scanner(System.in);String str = "\n";int a = 0;int all_money = 0;do{System.out.println("=========零钱通=========");System.out.println("1.进账明细");System.out.println("2.添加收入");System.out.println("3.消费");System.out.println("4.退出");a = sc.nextInt();switch (a){case 1:System.out.println(str);break;case 2:int temp = sc.nextInt();if(temp <= 0){System.out.println("金额错误,将返回到主菜单");}all_money += temp;date = new Date();str += "收入\t" + + temp + "\t日期\t" +sdf.format(date) + "\t余额\t" + all_money + '\n';break;case 3:int spend = sc.nextInt();if(spend > all_money){System.out.println("花费金额错误,将返回主菜单");}all_money -= spend;date = new Date();str += "消费\t" + + spend + "\t日期\t" +sdf.format(date) + "\t余额\t" + all_money + '\n';break;case 4:condition = false;break;}}while(condition);}

个人感觉面向对象的写法没有什么难度,就直接将代码放在这里了,大家有兴趣可以拷贝下去,跑跑看。

空间留余:给oop代码空间

房屋出租系统

需求:能够实现对房屋信息的添加,修改和删除(用数组实现),并能够打印房屋明细表

  • 主菜单

    • 新增房源

    • 查找房屋

    • 删除房屋

    • 修改房屋信息

    • 房屋列表

    • 退出

  • 新增房源

    • 姓名

    • 电话

    • 地址

    • 月租

    • 状态

  • 查找房源

    • 选择查找房源的id
  • 删除房源

    • -1退出

    • y删除

    • n误触

  • 修改信息

    • 不希望修改回车
  • 房屋列表

项目设计—程序框架图

(分层模式=> 当软件比较复杂,需要模式管理)

  • 系统有哪些类【文件】

  • 明确类与类的调用关系

在这里插入图片描述

注:增删改查–> crud

  • c --> create

  • r -->read

  • u -->updata

  • d --> delete

在实际开发中,公式都会提供相应的工具类和开发库,可以提高开发效率,程序员也需要能看懂别人写的代码,并能正确的调用

  • 界面 (View)

  • 业务层(Service)

  • 工具类(Utils)

  • 数据层(domain/model)

    • 这里后续会用扩展

注:类.方法() => 因为放一个方法是static时,就是一个静态方法,静态方法可以直接通过类名调用,具体细节后面说

class A{public void cry(){}public static say(){}
}//上面那个在调用时,要new一个A对象
//下面这个在调用时,可以直接类名加对象
  • 明确完成功能

  • 思路分析

  • 代码实现

心得体会

写完一个项目,对于模式管理有一定的认知。View,Service,Domain,Utils 这些拆分。

而且学习嘛,敲代码嘛,脑袋炸毛的时候还是挺多的。

下面贴一下房屋出租系统的代码,就不解释了,若是要看源文件,可以到我gitee仓库自行下载

       public class MenuMain {public static void main(String[] args) {boolean status;Service service;View view = new View();do {status = true;view.menuMain();Scanner sc = new Scanner(System.in);int a = sc.nextInt();status =  new Service(a).option(view);}while (status);}}public class Service {int a;public Service(int a) {this.a = a;}public boolean option(View m){switch (a){case 1:m.info();return true;case 2:m.add();return true;case 3:m.fix();return true;case 4:m.del();return true;case 5:return false;}  return false;}}class Home {private int id;private String name;private String rent;private String address;public Home(String name, String rent, String address) {this.name = name;this.rent = rent;this.address = address;}public void setName(String name) {this.name = name;}public void setId(int id) {this.id = id;}public void setRent(String rent) {this.rent = rent;}public void setAddress(String address) {this.address = address;}public int getId() {return id;}public String getName() {return name;}public String getRent() {return rent;}public String getAddress() {return address;}@Overridepublic String toString() {return "\t" + id +"\t" + name +"\t\t" + rent +"\t" + address;}}class Info{public int size;Home[] home;public Info(int a) {home = new Home[a];}}public class Utils {public static void info(Home[] arr,int size){for (int i = 0; i < size; i++) {if(arr[i] == null) return;System.out.println(arr[i].toString());}}public static void add(Home[] arr,Home a){for (int i = 0; i < arr.length; i++) {if(arr[i] == null){a.setId(i+1);arr[i] = a;return;}}}public static void fix(int id,int size,Home[] arr){if(id>=1&&id<=size+1&& size!=0){System.out.println("输入修改后的信息");Scanner sc = new Scanner(System.in);String name = sc.nextLine();String address = sc.nextLine();String rent = sc.nextLine();arr[id-1]= new Home(name,address,rent);System.out.println(arr[id-1]+"修改成功");}else System.out.println("无此房源");}public static void delete(int id,int size,Home[] arr){if(id>=1&&id<=size+1&&size!=0){for(int i=id-1;i<size;i++){arr[i]=arr[i+1];}System.out.println("删除成功");}else System.out.println("删除失败");}}public class View {public void menuMain(){System.out.println("===房屋系统===");System.out.println("1.查看房源");System.out.println("2.添加房源");System.out.println("3.修改信息");System.out.println("4.删除房源");System.out.println("5.退出");System.out.println("------------");System.out.println("请输入选项:");}Info info = new Info(10);public void info(){System.out.println("\t" + "id" +"\t" + "name" +"\t" + "rent" +"\t" + "address");Utils.info(info.home,info.home.length);}public void add(){System.out.println("请分别输入 姓名 租金 地址");Scanner sc = new Scanner(System.in);String name = sc.nextLine();String address = sc.nextLine();String rent = sc.nextLine();Home home = new Home(name, address, rent);Utils.add(info.home, home);info.size++;System.out.println("添加成功,信息如下:");System.out.println("\t" + "id" +"\t" + "name" +"\t" + "rent" +"\t" + "address");System.out.println(home);}public void fix(){System.out.println("请输入需要修改的id");Scanner sc = new Scanner(System.in);int id = sc.nextInt();Utils.fix(id,info.size,info.home);}public void del(){System.out.println("请输入要删除的id");Scanner sc = new Scanner(System.in);int id = sc.nextInt();Utils.delete(id,info.size,info.home);}}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

某j vue3 ts 随笔

因为ts组件封装的缘故&#xff0c;使用某个组件就必须按照这个组件的规则使用&#xff0c;老是忘记&#xff0c;这里就记一下吧 1.ApiSelect 组件 {label: 角色,field: selectedroles,component: ApiSelect,componentProps: {mode: multiple,api: getAllRolesListNoByTenant,la…

红旗Asianux8.1+高斯GaussDB6.0安装手册

一、简介 服务器系统&#xff1a;红旗Asianux8.1&#xff08;需联网&#xff09;高斯GaussDB6.0&#xff1a;openGauss_6.0.0 极简版 二、安装准备 关闭防火墙 systemctl stop firewalld systemctl disable firewalld###查看状态 systemctl status firewalld 上传安装包 创建组…

如何实现Docker容器自动更新?从此无需再手动更新!(如何实现docker容器的自动更新、docker容器如何实现定时更新)

以下是经过优化后的完整文章内容: 文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Docker 容器自动更新的需求 📒📝 解决方案概述📝 Docker 容器自动更新📝 Docker 容器定期更新📝 实现指定容器更新或排除更新⚓️ 相关链接 ⚓️📖 介绍 📖 随着容器化技术的普…

python异常、模块和包

文章目录 异常异常简介异常处理捕获所有异常捕获指定异常捕获多个指定异常 异常else、finally异常的传递 模块模块导入自定义模块 包自定义python包安装第三方python包 综合案例 异常 异常简介 异常就是程序运行过程中出现了错误 f open(RLlearn_2.txt, "r", enc…

Python内存泄漏 —— 宏观篇

Python内存泄漏 —— 宏观篇 应该弄清楚哪些问题 内存情况如何&#xff0c;是否一直增长&#xff1f;哪些是异常对象&#xff1f;这类对象占总内存多大比例&#xff1f;异常对象为何泄漏&#xff1f;如何使其正常释放&#xff1f;如何确定异常对象正常释放了&#xff1f;如何…

Chromium CDP 开发(五):注册自己的指令(中)

引言 在前一篇文章中&#xff0c;我们已经了解了 PDL&#xff08;Protocol Description Language&#xff09;的基本功能以及如何在其中声明 CDP&#xff08;Chrome DevTools Protocol&#xff09;指令和事件的具体内容。接下来&#xff0c;我们将深入探讨如何在实际开发中进行…

回溯算法解决全排列问题

1. 问题描述 定义&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其所有可能的全排列 。 示例&#xff1a; 输入数组 [1, 2, 3] 输出结果应该为&#xff1a; leetcode 地址 2. 代码实现 package com.ztq.algorithm.BackTrack;import java.util.List; impo…

金融行业 IT 实践|某信托公司:从虚拟化到容器平台的 VMware 替代与双活建设实践

随着“VMware 替代” 在金融行业的快速推进&#xff0c;不少金融用户的替代进程已逐渐从存储、虚拟化过渡到容器平台层面&#xff0c;实现更为全面的 VMware 国产化替代与架构升级。其中&#xff0c;某信托用户在使用 SmartX 超融合&#xff08;采用 VMware 虚拟化和 Tanzu 容器…

python学习——格式化字符串

在Python中&#xff0c;格式化字符串是一种将变量插入到字符串中的方法&#xff0c;使得字符串的构建更为灵活和方便。以下是一些常见的格式化字符串的方法&#xff1a; 文章目录 1. 使用百分号 % 格式化2. 使用 str.format() 方法3. 使用 f-string (格式化字符串字面量)格式说…

【上线文档】系统上线方案模板,计算机系统上线保障计划,系统运维信息系统运行保障方案,系统上线方案模板(Word原件)

一、项目背景和目标 二、项目需求分析 2.1 功能需求 2.2 非功能需求 三、系统设计 3.1 系统架构设计 3.2 数据库设计 3.3 接口设计 3.4 用户界面设计 四、系统开发 4.1 开发环境搭建 4.2 业务逻辑开发 4.3 数据库实现 4.4 接口实现 4.5 用户界面实现 五、系统测…

MySQL索引再认识

在最近的一次MySQL测试过程中&#xff0c;我的同事幺加明遇到了一些令人困惑的现象&#xff0c;这些现象超出了我们最初的预期。一直以来&#xff0c;我们在建立索引时&#xff0c;首要考虑的原则是在区分度大的字段上建立索引。然而&#xff0c;在实际测试中&#xff0c;我们发…

SQL靶场第一关

打开sql靶场 一.判断注入类型 在网址输入?id1&#xff0c;页面正常回显 我们在输入?id1,页面报错&#xff0c;说明存在sql注入 我们再输入?id1 and 11--&#xff0c;页面正常回显 我们在输入?id1 and 12--&#xff0c;页面没有回显 这里我们知道了是字符型注入 为什么是…

ollama运行qwen2.5-coder:7b

1.linux安装 curl -fsSL https://ollama.com/install.sh | sh ollama serve # 启动ollama ollama create # 从模型文件创建模型 ollama show # 显示模型信息 ollama run # 运行模型&#xff0c;会先自动下载模型 ollama pull # 从注册仓库中拉取模…

牛客——打印日期,日期累加(C++)

目录 1.日期累加 1.1题目描述 1.2思路 1.3 2.打印日期 2.1题目描述 2.2思路 2.3代码 1.日期累加 1.1题目描述 计算一个日期加上若干天后是什么日期。输入第一行表示样例个数m&#xff0c;接下来m行每行四个整数分别表示年月日和累加的天数。输出m行&#xff0c;每行按…

Stylus 浏览器扩展开发-Cursor AI辅助

项目起源 作为一个经常需要长时间盯着屏幕的开发者&#xff0c;我一直在寻找一个简单的方法来保护眼睛。最初的想法很简单&#xff1a;将网页背景色替换成护眼的豆沙绿。虽然市面上已经有类似的扩展&#xff0c;但我想要一个更加轻量且可定制的解决方案。 这个简单的需求逐渐…

AD20 原理图库和PCB库添加

一 点击右下角 二 点击Components 三 点击File-based Libraries Preferences 四 最后点击安装即可

微信小程序uni-app+vue3实现局部上下拉刷新和scroll-view动态高度计算

微信小程序uni-appvue3实现局部上下拉刷新和scroll-view动态高度计算 前言 在uni-appvue3项目开发中,经常需要实现列表的局部上下拉刷新功能。由于网上相关教程较少且比较零散,本文将详细介绍如何使用scroll-view组件实现这一功能,包括动态高度计算、下拉刷新、上拉加载等完整…

针对边缘计算优化LoRa的TinyML信道跳变管道

论文标题&#xff1a;Optimizing LoRa for Edge Computing with TinyML Pipeline for Channel Hopping&#xff08;针对边缘计算优化LoRa的TinyML信道跳变管道&#xff09; 作者信息&#xff1a;Marla Grunewald, Mounir Bensalem 和 Admela Jukan&#xff0c;来自德国布伦瑞克…

Linux-USB驱动实验

USB 是很常用的接口&#xff0c;目前大多数的设备都是 USB 接口的&#xff0c;比如鼠标、键盘、USB 摄像头等&#xff0c;我们在实际开发中也常常遇到 USB 接口的设备&#xff0c;本章我们就来学习一下如何使能 Linux内核自带的 USB 驱动。注意&#xff01;本章并不讲解具体的 …

操作系统文件管理相关习题2

文件管理的任务和功能文件管理 任务&#xff1a;对用户文件和系统文件进行组织管理&#xff0c;以方便用户使用&#xff0c;并保证文件的安全 功能&#xff1a;文件存储空间的管理&#xff0c;目录管理&#xff0c;文件读写管理和保护 目录管理 对目录管理的要求 实现按名存…