【java养成】:案例(模拟银行新用户现金业务办理、USB接口程序设计、身份证校验位和身份提取)

 

案例1:模拟银行新用户现金业务办理


实验内容:

1)   银行新用户开户

2)   欢迎用户光临和欢迎用户下次光临

3)   存钱

4)   取钱


案例代码:

Bank类:

package cn.Bank;

public class Bank {
	static String Name;
	private String name;
	private String pswd;
	private double balance;
	private double turnover;

	// 静态方法
	static void welcome() {
		System.out.println("欢迎来到" + Name + "------------");
	}

	public Bank(String name, String pswd, double turnover) {
		super();
		this.name = name;
		this.pswd = pswd;
		this.balance = turnover - 10;
		this.turnover = turnover;
		System.out.println(name + "开户成功,余额" + balance);
	}

	// 存钱
	public void Save_money(double turnover) {
		balance = balance + turnover;
		System.out.println(name + "您好,您已存入" + turnover + "元,当前余额是" + balance + "元。");
	}

	// 取钱
	public void Withdraw_money(String pswd, double turnover) {
		if (this.pswd != pswd) {
			System.out.println("您输入的密码有误");
			return;
		}
		// 钱是否够
		if (this.balance < turnover) {
			System.out.println("您的余额不足");
		} else {
			balance = balance - turnover;
			System.out.println(name + "您好,您的帐户已取出" + turnover + "元,您的帐户余额是" + balance + "元");
		}
	}

	// 欢迎下次光临
	static void welcomeNext() {
		System.out.println("欢饮下次光临" + Name + "------------");
	}
}

Test类:

package cn.Bank;

public class Test {

	public static void main(String[] args) {
		Bank.Name = "中国人民银行";
		Bank.welcome();
		Bank bank = new Bank("李小小", "123456", 100);
		bank.Save_money(100);
		bank.Withdraw_money("123456", 50);
		bank.Withdraw_money("654321", 200);
		bank.Withdraw_money("123456", 50);
		Bank.welcomeNext();
	}
}

运行结果示例:


案例2:USB接口程序设计


实验内容:

1)   模拟往计算机的USB接口的插入设备;

2)   模拟开机时各USB接口的设备开始工作;

3)   模拟关机时各USB接口的设备停止工作。


案例代码:

Computer类:

package cn.usb;

public class Computer {
	private USB[] usbArr = new USB[4];

	public void add(USB usb) {
		for (int i = 0; i < usbArr.length; i++) {
			if (usbArr[i] == null) {
				usbArr[i] = usb;
				break;
			}
		}
	}

	public void powerOn() {
		for (int i = 0; i < usbArr.length; i++) {
			if (usbArr[i] != null) {
				usbArr[i].turnOn();
			}
		}
		System.out.println("电脑开机成功");
	}

	public void powerOff() {
		for (int i = 0; i < usbArr.length; i++) {
			if (usbArr[i] != null) {
				usbArr[i].turnOff();
			}
		}
		System.out.println("电脑关机成功");
	}

}

KeyBoard类:

package cn.usb;

public class KeyBoard implements USB {

	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
		System.out.println("键盘启动了");
	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		System.out.println("键盘关闭了");
	}
}

Microphone类:

package cn.usb;

public class Microphone implements USB {

	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
		System.out.println("麦克风启动了");
	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		System.out.println("麦克风关闭了");
	}

}

Mouse类:

package cn.usb;

public class Mouse implements USB {

	@Override
	public void turnOn() {
		// TODO Auto-generated method stub
		System.out.println("鼠标启动了");
	}

	@Override
	public void turnOff() {
		// TODO Auto-generated method stub
		System.out.println("鼠标关闭了");
	}
}

USB类:

package cn.usb;

public interface USB {
	void turnOn();

	void turnOff();
}

Test类:

package cn.usb;

public class Test {
	public static void main(String[] args) {
		Computer c = new Computer();
		c.add(new Mouse());
		c.add(new Microphone());
		c.add(new KeyBoard());
		c.powerOn();
		System.out.println("----------------");
		c.powerOff();
	}
}

运行结果示例:


 

案例3:身份证校验位和身份提取


实验内容:

1)从键盘上输入身份证的前17份

2) 计算身份证的检验码

        十七位数字id[17]本体码加权求和公式: S=Sum (Ai*Wi) ,i=0.....16。

        其中,Ai表示身份证号码第i位的数字

        wi表示第i位的加权因子,分别为{7 ,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}

        先对前17位数字按位权求和,计算除以11的余数: y= S%11

        通过模得到对应的末位校验码v[11]={'1' ,'0','x','9','8','7','6','5','4', '3','2’}

3)判断性别

        通过第17位数除以2的余数判断性别(1为男,0为女)


案例代码:


package cn.idcard;

import java.time.LocalDate;
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入身份证号的前17位:");
		String s = sc.nextLine();
		int[] a = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
		char[] b = { '1', '0', 'x', '9', '8', '7', '6', '5', '4', '3', '2' };
		int sum = 0, n;
		for (int i = 0; i <= 16; i++) {
			n = s.charAt(i) - '0';
			sum = sum + n * a[i];
		}
		char c = b[sum % 11];
		System.out.println("末尾校验位为:" + c);
		String yString = s.substring(6, 10);
		String mString = s.substring(10, 12);
		String dString = s.substring(12, 14);
		int y = Integer.parseInt(yString);
		int m = Integer.parseInt(mString);
		int d = Integer.parseInt(dString);
		LocalDate localDate = LocalDate.of(y, m, d);
		System.out.println("出生年月日为:" + localDate.toString());
		int age = 2022 - y;
		int i = s.charAt(16) - '0';
		String sex = (i % 2) == 1 ? "男" : "女";
		System.out.println("您的年龄为:" + age + "性别为:" + sex);
	}
}

运行结果示例:


 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值