java基础的项目
334,零钱通
思路:
(1) 先完成显示菜单,并可以选择菜单,给出对应提示
(2) 完成零钱通明细,简单的话可以使用String拼接
(3)完成收益入账 完成功能驱动程序员增加新的变化和代码
(4)消费
(5)退出
(6)用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
(7)在收益入账和消费时,判断金额是否合理,并给出相应的提示
代码:
- package com.extend_.smallchange;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Scanner;
- public class SmallChangeSys {
- public static void main(String[] args) {
- //定义相关的变量
- boolean loop = true;
- Scanner scanner = new Scanner(System.in);
- double money = 0;
- double balance = 0;
- Date date = null;//date是java.util.Date类型,表示日期
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
- //定义新变量,保存消费的原因
- String note = "";
- String detail = "------------零钱通明细----------";
- int key = 0;
- do{
- System.out.println("============零钱通菜单===========");
- System.out.println("\t\t\t1 零钱通明细");
- System.out.println("\t\t\t2 收益入账");
- System.out.println("\t\t\t3 消费");
- System.out.println("\t\t\t4 退 出");
- System.out.println("请选择(1-4):");
- key = scanner.nextInt();
- //使用switch分支控制
- switch (key)
- {
- case 1:
- System.out.println(detail);
- System.out.println();
- break;
- case 2:
- System.out.println("收益入账金额:");
- money = scanner.nextDouble();
- //找出不正确的金额条件,然后给出提示,直接break,退出菜单
- if(money <= 0)
- {
- System.out.println("收益入账金额 需要 大于 0");
- break;
- }
- balance += money;
- date = new Date();//获取当前日期
- //拼接收益入账信息到 details
- detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
- break;
- case 3:
- System.out.println("消费金额:");
- money = scanner.nextDouble();
- if(money <= 0 || money > balance)
- {
- System.out.println("你的消费金额 应该在 0-" + balance);
- break;
- }
- System.out.println("消费说明:");
- note = scanner.next();
- balance -= money;
- date = new Date();
- detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
- break;
- case 4:
- //用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
- //(1),定义一个变量choice,接收用户的输入
- //(2),使用while + break,来处理接收到的输入时 y或者n
- //(3),退出while后,再判断choice是y还是n,就可以决定是否退出
- //(4),建议一段代码,完成一个小功能,尽量不要混在一起
- String choice = "";
- while(true)//要求用户必须输入y/n,否则就一直循环
- {
- System.out.println("你确定要退出吗?y/n");
- choice = scanner.next();
- if("y".equals(choice) || "n".equals(choice))
- {
- break;
- }
- }
- //当用户退出while,进行判断
- if(choice.equals("y"))
- {
- loop = false;
- }
- break;
- default:
- System.out.println("选择有误,请重新选择");
- }
- }while(loop);
- System.out.println("---------退出了零钱通项目---------");
- }
- }
运行结果:
341,零钱通OOP版
SmallChangeSysOOP类代码
- package com.extend_.smallchange.oop;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Scanner;
- /**
- *该类是完成零钱通的各个功能的类
- * 使用OOP(面向对象编程)
- * 将各个功能对应一个方法
- */
- public class SmallChangeSysOOP {
- //定义相关的变量
- boolean loop = true;
- Scanner scanner = new Scanner(System.in);
- double money = 0;
- double balance = 0;
- Date date = null;//date是java.util.Date类型,表示日期
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");//可以用于日期格式化
- //定义新变量,保存消费的原因
- String note = "";
- String detail = "------------零钱通明细----------";
- int key = 0;
- //先完成显式菜单,并可以选择
- public void mainMenu()
- {
- System.out.println("显示零钱通菜单...");
- do{
- System.out.println("============选择零钱通菜单===========");
- System.out.println("\t\t\t1 零钱通明细");
- System.out.println("\t\t\t2 收益入账");
- System.out.println("\t\t\t3 消费");
- System.out.println("\t\t\t4 退 出");
- System.out.println("请选择(1-4):");
- key = scanner.nextInt();
- //使用switch分支控制
- switch (key)
- {
- case 1:
- this.detail();
- System.out.println();
- break;
- case 2:
- this.income();
- break;
- case 3:
- this.pay();
- break;
- case 4:
- this.exit();
- break;
- default:
- System.out.println("选择有误,请重新选择");
- }
- }while(loop);
- }
- //完成零钱通明细
- public void detail()
- {
- System.out.println(detail);
- }
- //完成收益入账
- public void income()
- {
- System.out.println("收益入账金额:");
- money = scanner.nextDouble();
- //找出不正确的金额条件,然后给出提示,直接return,退出菜单
- if(money <= 0)
- {
- System.out.println("收益入账金额 需要 大于 0");
- return;//退出方法,不再执行后面的代码
- }
- balance += money;
- date = new Date();//获取当前日期
- //拼接收益入账信息到 details
- detail += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t" + balance;
- }
- //消费
- public void pay()
- {
- System.out.println("消费金额:");
- money = scanner.nextDouble();
- if(money <= 0 || money > balance)
- {
- System.out.println("你的消费金额 应该在 0-" + balance);
- return;
- }
- System.out.println("消费说明:");
- note = scanner.next();
- balance -= money;
- date = new Date();
- detail += "\n" + note + "\t-" + money + "\t" + sdf.format(date) + "\t" + balance;
- }
- //退出
- public void exit()
- {
- //用户输入4退出时,给出提示"你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
- //(1),定义一个变量choice,接收用户的输入
- //(2),使用while + break,来处理接收到的输入时 y或者n
- //(3),退出while后,再判断choice是y还是n,就可以决定是否退出
- //(4),建议一段代码,完成一个小功能,尽量不要混在一起
- String choice = "";
- while(true)//要求用户必须输入y/n,否则就一直循环
- {
- System.out.println("你确定要退出吗?y/n");
- choice = scanner.next();
- if("y".equals(choice) || "n".equals(choice))
- {
- break;
- }
- }
- //当用户退出while,进行判断
- if(choice.equals("y"))
- {
- loop = false;
- }
- }
- }
SmallChangeSysApp类代码
- package com.extend_.smallchange.oop;
- /*
- * 这里我们直接调用SmallChangeSysOOP 对象,显示主菜单即可
- */
- public class SmallChangeSysApp {
- public static void main(String[] args) {
- new SmallChangeSysOOP().mainMenu();
- }
- }
运行结果和334结果一样。
362,房屋出租设计
1,程序框架。
2,House类代码
按Alt + 7可以看到 House类的结构
- package com.hspedu.houserent.domain;
- /*
- * House的对象表示一个房屋信息
- * */
- public class House {
- //编号 房主 电话 地址 月租 状态(未出租/已出租)
- private int id;//编号
- private String name;//房主
- private String phone;//电话
- private String address;//地址
- private int rent;//月租
- private String state;//状态(未出租/已出租)
- //构造器和setter,getter
- public House(int id, String name, String phone, String address, int rent, String state) {
- this.id = id;
- this.name = name;
- this.phone = phone;
- this.address = address;
- this.rent = rent;
- this.state = state;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPhone() {
- return phone;
- }
- public void setPhone(String phone) {
- this.phone = phone;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public int getRent() {
- return rent;
- }
- public void setRent(int rent) {
- this.rent = rent;
- }
- public String getState() {
- return state;
- }
- public void setState(String state) {
- this.state = state;
- }
- //为了方便的输出对象信息,我们实现toString
- //编号 房主 电话 地址 月租 状态(未出租/已出租)
- @Override
- public String toString() {
- return id +
- "\t\t" + name +
- "\t" + phone +
- "\t\t" + address +
- "\t" + rent +
- "\t" + state ;
- }
- }
3,HouseService类代码
- package com.hspedu.houserent.service;
- import com.hspedu.houserent.domain.House;
- /*
- * HouseService.java ----(业务层)
- * 定义House[],保存House对象
- * 1,响应HouseView的调用
- * 2,完成对房屋信息的各种操作(增删改查crud)
- * */
- public class HouseService {
- private House[] houses;//保存House对象
- private int houseNums = 1;//记录当前有多少个房屋信息
- private int idCounter = 1;//记录当前的id增长到哪个值
- //构造器
- public HouseService(int size)
- {
- //new houses
- houses = new House[size];//当创建HouseService对象,指定数组大小
- //为了配合测试列表信息,这里初始化一个House对象
- houses[0] = new House(1,"jack","112","海淀区",2000,"未出租");
- }
- //find方法,返回House对象或者null
- public House findById(int findId)
- {
- //遍历数组
- for(int i = 0; i < houseNums; i++)
- {
- if(findId == houses[i].getId())
- {
- return houses[i];
- }
- }
- return null;
- }
- //del方法,删除一个房屋信息
- public boolean del(int delId)
- {
- //应当先找到要删除的房屋信息对应的下标
- //老韩强调,一定要搞清楚 下标和房屋的编号不是一回事
- int index = -1;
- for(int i = 0; i < houseNums; i++)
- {
- if(delId == houses[i].getId())//要删除的房屋(id),是数组下标为i的元素,元素的getId方法和delId对应
- {
- index = i;//就使用index记录i
- }
- }
- if(index == -1)//说明delId在数组中不存在,没找到
- {
- return false;
- }
- //如果数组有3个元素,houseNums-1=2,那下面的i+1=3,就刚好把最后一个元素移到前一个位置上去
- for(int i = index; i < houseNums - 1; i++)
- {
- houses[i] = houses[i+1];
- }
- houses[--houseNums] = null;//把当前存在的房屋信息的最后一个 设置null,先减1,再置空
- return true;
- }
- //add方法,添加新对象,返回boolean
- public boolean add(House newHouse)
- {
- //判断是否还可以继续添加(我们暂时不考虑数组扩容的问题)
- if(houseNums == houses.length)
- {
- System.out.println("数组已满,不能再添加了...");
- return false;
- }
- //把newHouse对象加入到,新增加了一个房屋
- houses[houseNums++] = newHouse;
- //我们程序员需要设计一个id自增长的机制,然后更新newhHouse的id
- newHouse.setId(++idCounter);
- return true;
- }
- //list方法,返回houses
- public House[] list()
- {
- return houses;
- }
- }
4,HouseView类代码
- package com.hspedu.houserent.view;
- import com.hspedu.houserent.domain.House;
- import com.hspedu.houserent.service.HouseService;
- import com.hspedu.houserent.utils.Utility;
- /*
- * 1,显示界面
- * 2,接收用户的输入
- * 3,调用HouseService完成对房屋信息的各种操作
- * */
- public class HouseView {
- private boolean loop = true;//控制显示菜单
- private char key = ' ';//接收用户选择
- private HouseService houseService = new HouseService(10);//设置数组的大小为10
- //根据id修改房屋信息
- public void update()
- {
- System.out.println("==============修改房屋信息==============");
- System.out.println("请选择待修改房屋编号(-1表示退出)");
- int updateId = Utility.readInt();
- if(updateId == -1)
- {
- System.out.println("==============你放弃修改房屋信息==============");
- return;
- }
- //根据输入得到updateId,查找对象
- //返回的是引用类型[即:就是数组的元素]
- //因此老师在后面对house.setXxx(),就会修改HouseService中数组的元素!
- House house = houseService.findById(updateId);
- if(house == null)
- {
- System.out.println("==============修改房屋信息编号不存在==============");
- return;
- }
- System.out.print("姓名(" + house.getName() + "):");
- String name = Utility.readString(8, "");//这里如果用户直接回车,表示不修改信息,默认""
- if(!"".equals(name))//如果输入的name不是空串的话,就修改
- {
- house.setName(name);
- }
- System.out.print("电话(" + house.getPhone() + "):");
- String phone = Utility.readString(12);
- if(!"".equals(phone))
- {
- house.setPhone(phone);
- }
- System.out.print("地址(" + house.getAddress() + "):");
- String address = Utility.readString(18);
- if(!"".equals(address))
- {
- house.setAddress(address);
- }
- System.out.print("租金(" + house.getRent() + "):");
- int rent = Utility.readInt(-1);
- if(rent != -1)
- {
- house.setRent(rent);
- }
- System.out.print("状态(" + house.getState() + "):");
- String state = Utility.readString(3,"");
- if(!"".equals(state))
- {
- house.setAddress(state);
- }
- System.out.println("==============修改房屋信息成功==============");
- }
- //根据id查找房屋信息
- public void findHouse()
- {
- System.out.println("==============查找房屋信息==============");
- System.out.println("请输入要查找的id:");
- int findId = Utility.readInt();
- //调用方法
- House house = houseService.findById(findId);
- if(house != null)
- {
- System.out.println(house);
- }
- else
- {
- System.out.println("==============查找房屋信息id不存在==============");
- }
- }
- //完成退出确认
- public void exit()
- {
- //这里我们使用Utility提供方法,完成确认
- char c = Utility.readConfirmSelection();
- if(c == 'Y')
- {
- loop = false;
- }
- }
- //编写delHouse() 接收输入的id,调用Service的del方法
- public void delHouse()
- {
- System.out.println("==============删除房屋信息==============");
- System.out.println("请输入待删除房屋的编号(-1退出):");
- int delId = Utility.readInt();
- if(delId == -1)
- {
- System.out.println("==============放弃删除房屋信息==============");
- return;
- }
- //注意该方法本身就有循环判断的逻辑,必须输出Y/N
- char choice = Utility.readConfirmSelection();
- if(choice == 'Y')//真的删除
- {
- if(houseService.del(delId))
- {
- System.out.println("==============删除房屋信息成功==============");
- }
- else
- {
- System.out.println("==============房屋编号不存在,删除失败==============");
- }
- }
- else
- {
- System.out.println("==============放弃删除房屋信息==============");
- }
- }
- //编写addHouse() 接收输入,创建House对象,调用add方法
- public void addHouse()
- {
- System.out.println("==============添加房屋==============");
- System.out.println("姓名:");
- String name = Utility.readString(8);
- System.out.println("电话:");
- String phone = Utility.readString(12);
- System.out.println("地址:");
- String address = Utility.readString(16);
- System.out.println("月租:");
- int rent = Utility.readInt();
- System.out.println("状态:");
- String state = Utility.readString(3);
- //创建一个新的House对象,注意id是系统分配的
- House newHouse = new House(0, name, phone, address, rent, state);
- if(houseService.add(newHouse))
- {
- System.out.println("==============添加房屋成功==============");
- }
- else
- {
- System.out.println("==============添加房屋失败==============");
- }
- }
- //编写listHouses()显示房屋列表
- public void listHouses()
- {
- System.out.println("==============房屋出租系统菜单==============");
- System.out.println("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(未出租/已出租)");
- House[] houses = houseService.list();//得到所有房屋信息
- for(int i = 0; i < houses.length; i++)
- {
- if(houses[i] == null)
- {
- break;
- }
- System.out.println(houses[i]);
- }
- System.out.println("==============房屋列表显示完毕==============");
- }
- //显示主菜单
- public void mainMenu()
- {
- do{
- System.out.println("\n==============房屋出租系统菜单==============");
- System.out.println("\t\t\t1 新 增 房 源");
- System.out.println("\t\t\t2 查 找 房 屋");
- System.out.println("\t\t\t3 删 除 房 屋 信 息");
- System.out.println("\t\t\t4 修 改 房 屋 信 息");
- System.out.println("\t\t\t5 房 屋 列 表");
- System.out.println("\t\t\t6 退 出");
- System.out.println("请输入你的选择(1-6):");
- key = Utility.readChar();//输入一个字符
- switch(key){
- case '1':
- addHouse();
- break;
- case '2':
- findHouse();
- break;
- case '3':
- delHouse();
- break;
- case '4':
- update();
- break;
- case '5':
- listHouses();
- break;
- case '6':
- exit();
- break;
- }
- }while(loop);
- }
- }
5,Utility类代码(工具类,老韩给的)
- package com.hspedu.houserent.utils;
- /**
- 工具类的作用:
- 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
- */
- import java.util.*;
- /**
- */
- public class Utility {
- //静态属性。。。
- private static Scanner scanner = new Scanner(System.in);
- /**
- * 功能:读取键盘输入的一个菜单选项,值:1——5的范围
- * @return 1——5
- */
- public static char readMenuSelection() {
- char c;
- for (; ; ) {
- String str = readKeyBoard(1, false);//包含一个字符的字符串
- c = str.charAt(0);//将字符串转换成字符char类型
- if (c != '1' && c != '2' &&
- c != '3' && c != '4' && c != '5') {
- System.out.print("选择错误,请重新输入:");
- } else break;
- }
- return c;
- }
- /**
- * 功能:读取键盘输入的一个字符
- * @return 一个字符
- */
- public static char readChar() {
- String str = readKeyBoard(1, false);//就是一个字符
- return str.charAt(0);
- }
- /**
- * 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
- * @param defaultValue 指定的默认值
- * @return 默认值或输入的字符
- */
- public static char readChar(char defaultValue) {
- String str = readKeyBoard(1, true);//要么是空字符串,要么是一个字符
- return (str.length() == 0) ? defaultValue : str.charAt(0);
- }
- /**
- * 功能:读取键盘输入的整型,长度小于2位
- * @return 整数
- */
- public static int readInt() {
- int n;
- for (; ; ) {
- String str = readKeyBoard(10, false);//一个整数,长度<=10位
- try {
- n = Integer.parseInt(str);//将字符串转换成整数
- break;
- } catch (NumberFormatException e) {
- System.out.print("数字输入错误,请重新输入:");
- }
- }
- return n;
- }
- /**
- * 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
- * @param defaultValue 指定的默认值
- * @return 整数或默认值
- */
- public static int readInt(int defaultValue) {
- int n;
- for (; ; ) {
- String str = readKeyBoard(10, true);
- if (str.equals("")) {
- return defaultValue;
- }
- //异常处理...
- try {
- n = Integer.parseInt(str);
- break;
- } catch (NumberFormatException e) {
- System.out.print("数字输入错误,请重新输入:");
- }
- }
- return n;
- }
- /**
- * 功能:读取键盘输入的指定长度的字符串
- * @param limit 限制的长度
- * @return 指定长度的字符串
- */
- public static String readString(int limit) {
- return readKeyBoard(limit, false);
- }
- /**
- * 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
- * @param limit 限制的长度
- * @param defaultValue 指定的默认值
- * @return 指定长度的字符串
- */
- public static String readString(int limit, String defaultValue) {
- String str = readKeyBoard(limit, true);
- return str.equals("")? defaultValue : str;
- }
- /**
- * 功能:读取键盘输入的确认选项,Y或N
- * 将小的功能,封装到一个方法中.
- * @return Y或N
- */
- public static char readConfirmSelection() {
- System.out.println("请输入你的选择(Y/N): 请小心选择");
- char c;
- for (; ; ) {//无限循环
- //在这里,将接受到字符,转成了大写字母
- //y => Y n=>N
- String str = readKeyBoard(1, false).toUpperCase();
- c = str.charAt(0);
- if (c == 'Y' || c == 'N') {
- break;
- } else {
- System.out.print("选择错误,请重新输入:");
- }
- }
- return c;
- }
- /**
- * 功能: 读取一个字符串
- * @param limit 读取的长度
- * @param blankReturn 如果为true ,表示 可以读空字符串。
- * 如果为false表示 不能读空字符串。
- *
- * 如果输入为空,或者输入大于limit的长度,就会提示重新输入。
- * @return
- */
- private static String readKeyBoard(int limit, boolean blankReturn) {
- //定义了字符串
- String line = "";
- //scanner.hasNextLine() 判断有没有下一行
- while (scanner.hasNextLine()) {
- line = scanner.nextLine();//读取这一行
- //如果line.length=0, 即用户没有输入任何内容,直接回车
- if (line.length() == 0) {
- if (blankReturn) return line;//如果blankReturn=true,可以返回空串
- else continue; //如果blankReturn=false,不接受空串,必须输入内容
- }
- //如果用户输入的内容大于了 limit,就提示重写输入
- //如果用户如的内容 >0 <= limit ,我就接受
- if (line.length() < 1 || line.length() > limit) {
- System.out.print("输入长度(不能大于" + limit + ")错误,请重新输入:");
- continue;
- }
- break;
- }
- return line;
- }
- }
6,主类 HouseRentApp类代码
- package com.hspedu.houserent;
- import com.hspedu.houserent.view.HouseView;
- public class HouseRentApp {
- public static void main(String[] args) {
- //创建HouseView对象,并且显示主菜单,是整个程序的入口
- new HouseView().mainMenu();
- System.out.println("====你退出了房屋出租系统====");
- }
- }
运行结果(演示部分截图):
java基础的项目的更多相关文章
- JAVA基础-----Maven项目的搭建
Maven项目的搭建 一.前言 maven官网:http://maven.apache.org/, 文章简介:本文章从三个模块来了解Maven,分别是 Maven的基本概念~, Maven项目的安装和 ...
- Java基础-新建项目、包和类
1,新建项目
- JAVA基础之项目分包
个人理解: 项目分层分包适合多人开发合作的,最好一个界面设置一个view,同时注释一定设置好,按照顺序:从前向后进行传递参数,从后向前进行传递返回值来进行判断是否真正的执行了sql语句(可以不返回), ...
- java基础小项目练习之1----3天做出飞机大战
Shoot射击游戏第一天一. 关键问题(理论):1. 简述FlyingObject.Enemy.Award.Airplane.Bee.Bullet.Hero之间的继承与实现关系2. 简述Hero类构造 ...
- Java基础学习笔记二十八 管家婆综合项目
本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...
- 自学转行JAVA,没有项目经历怎么找工作?
应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...
- Java 教程整理:基础、项目全都有
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 网上有很多 Java 教程,无论是基础入门还是开发小项目的教程都比比皆是,可是系统的很少,对于Java 学习者来说找到系 ...
- Java基础学习总结(70)——开发Java项目常用的工具汇总
要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...
- 【Java基础 项目实例--Bank项目5】Account 和 customer 对象等 继承、多态、方法的重写
延续 Java基础 项目实例--Bank项目4 实验要求 实验题目 5: 在银行项目中创建 Account 的两个子类:SavingAccount 和 CheckingAccount 实验目的: 继承 ...
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
随机推荐
- 《ASP.NET Core 微服务实战》-- 读书笔记(第6章)
第 6 章 事件溯源与 CQRS 在本章,我们来了解一下随着云平台一同出现的设计模式 我们先探讨事件溯源和命令查询职责分离(CQRS)背后的动机与哲学 事件溯源简介 事实由事件溯源而来 我们大脑就是一 ...
- NC24416 [USACO 2013 Nov G]No Change
题目链接 题目 题目描述 Farmer John is at the market to purchase supplies for his farm. He has in his pocket K ...
- image could not be accessed on a registry to record its digest
问题说明: 在管理节点执行docker stack xxx 方式运行服务,报如题错误. 问题原因: docker swarm运行需要一个镜像仓库才行,所有节点都去这个仓库统一镜像. 来看下官方的解释: ...
- Go微服务框架go-kratos实战学习08:负载均衡基本使用
微服务框架 go-kratos 中负载均衡使用 一.介绍 在前面这篇文章 负载均衡和它的算法介绍,讲了什么是负载均衡以及作用.算法介绍. go-kratos 的负载均衡主要接口是 Selector,它 ...
- 万字Java进阶笔记总结
JavaApi 字符串 String 注意:Java中"=="操作符的作用: 基本数据类型:比较的是内容. 引用数据类型比较的是对象的内存地址. StringBuffer/Stri ...
- java图书管理系统(桌面版本)
运行效果: 注册登陆界面 注册存在的账户时 登陆之后主界面如下 点击图书管理-图书更新界面如下 图书列表 项目说明: 由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时 ...
- ASP.NET Core 微信支付(三)【查询订单 APIV3】
官方参考资料 查询订单 理论实战 官方提供两种查询订单的方式,一种是根据商户自己生成的订单号查询,一种方式是根据微信生成的订单号查询.而我使用的就是第一种方式. 调用微信支付的查询订单,需要生成签名, ...
- 第131篇:如何上传一个npm包
好家伙, NPM的全称是Node Package Manager,是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准. NPM是世界上最大的软件注册表. 1.首先我们 ...
- 了解 Docker 网络
本章将会简单地讲述 Docker 中的网络,对于 CNM.Libnetwork 这些,限于笔者个人水平,将不会包含在内. Docker 的四种网络模式 Docker 有 bridge.none.hos ...
- Java static 关键字的使用 小练习
1 package com.bytezreo.statictest2; 2 3 /** 4 * 5 * @Description static 关键字的使用 小练习 6 * @author Bytez ...