小练习---电子银行系统

要求:

  要实现开户、取款、存款、转账的功能;

分析:

  ①用户对象-User:身份证号,姓名,性别,年龄;

  ②账户对象-Account:账号,密码,余额;

方法:
①根据身份证找到用户对象
②自动生成账号
  规则自己定义:比如随机数
③开户方法
  要求:
  首先根据身份证,看看用户是否存在;
  如果不存在,注册用户(添加到用户数组),然后生成账户信息,执行开户;
  如果存在,直接生成账户信息,执行开户;
  开户:创建账户对象,放到用户的账户数组中;
  开户成功后,输出所有用户和用户的账户信息;
④登录
  根据账号和密码登录;
  登录成功后,可以执行取款、存款、转账操作
⑤取款方法
⑥存款方法
⑦转账方法

在Myeclipse中完成,新建4个类

User

package ebank;

public class User {
	private String cardId;
	private String name;
	private String gender;
	private int age;

	private Account[] acts = new Account[5];

	private int count = 0;

	public User() {
		super();
	}

	public User(String cardId, String name, String gender, int age) {
		super();
		this.cardId = cardId;
		this.name = name;
		this.gender = gender;
		this.age = age;
	}

	public String getCardId() {
		return cardId;
	}

	public void setCardId(String cardId) {
		this.cardId = cardId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Account[] getActs() {
		return acts;
	}

	public void setActs(Account[] acts) {
		this.acts = acts;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public void addAct(Account act){
		if(count<acts.length){
			acts[count] = act;
			count++;
		}else{
			System.out.println("账户已满!");
		}
	}
}

  Account

package ebank;

public class Account {
	private String actNo;
	private String passwd;
	private double balance;
	public Account() {
		super();
	}
	public Account(String actNo, String passwd, double balance) {
		super();
		this.actNo = actNo;
		this.passwd = passwd;
		this.balance = balance;
	}
	public String getActNo() {
		return actNo;
	}
	public void setActNo(String actNo) {
		this.actNo = actNo;
	}
	public String getPasswd() {
		return passwd;
	}
	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}
	public double getBalance() {
		return balance;
	}
	public void setBalance(double balance) {
		this.balance = balance;
	}

}

  AccountService

package ebank;

import java.util.Scanner;
import java.util.UUID;

public class AccountService {
	private User[] users;
	private int size;
	private int count = 0;

	public AccountService() {
		size = 10;
		users = new User[size];
	}
	public AccountService(int size) {
		this.size = size;
		users = new User[size];
	}

	public User getUserById(String cardId){
		User user = null;
		for(int i=0;i<users.length;i++){
			User u = users[i];
			if(u!=null){
				if(u.getCardId().equals(cardId)){
					user = u;
				}
			}else{
				break;
			}
		}
		return user;
	}
	public void printInfo(){
		System.out.println("身份证\t姓名\t性别\t年龄");
		for(int i=0;i<users.length;i++){
			User u = users[i];
			if(u!=null){
				System.out.println(u.getCardId()+"\t"+u.getName()+"\t"+u.getGender()+"\t"+u.getAge());
				Account[] acts = u.getActs();
				if(acts!=null){
					for(int j=0;j<acts.length;j++){
						Account a = acts[j];
						if(a!=null){
							System.out.println("\t\t账户:"+a.getActNo()+","+a.getPasswd()+","+a.getBalance());
						}else{
							break;
						}

					}
				}
			}else{
				break;
			}
		}
	}

	public String generateActNo(){
		String uuidStr = UUID.randomUUID().toString();
		String actNo = uuidStr.substring(0, 8);
		return actNo;
	}

	public void registUser(User user){
		if(count<users.length){
			users[count] = user;
			count++;
			System.out.println("开户成功!");
		}else{
			System.out.println("开户数量已满!");
		}

	}

	public Account getActByNo(String actNo){
		Account act = null;
		for(int i=0;i<users.length;i++){
			User u = users[i];
			if(u!=null){
				Account[] acts = u.getActs();
				if(acts!=null){
					for(int j=0;j<acts.length;j++){
						Account a = acts[j];
						if(a!=null){
							if(a.getActNo().equals(actNo)){
								act = a;
								break;
							}
						}else{
							break;
						}

					}
				}
			}else{
				break;
			}
		}
		return act;
	}

	public Account login(String actNo,String passwd){
		Account act = null;
		for(int i=0;i<users.length;i++){
			User u = users[i];
			if(u!=null){
				Account[] acts = u.getActs();
				if(acts!=null){
					for(int j=0;j<acts.length;j++){
						Account a = acts[j];
						if(a!=null){
							if(a.getActNo().equals(actNo)&&a.getPasswd().equals(passwd)){
								act = a;
								break;
							}
						}else{
							break;
						}

					}
				}
			}else{
				break;
			}
		}
		return act;
	}

	public void getMoney(Account act,double money){
		double balance = act.getBalance();
		if(balance>=money){
			act.setBalance(act.getBalance()-money);
			System.out.println(act.getActNo()+"成功取出"+money+"元!");
		}else{
			System.out.println("账户余额不足!");
		}
	}

	public void saveMoney(Account act,double money){
		act.setBalance(act.getBalance()+money);
		System.out.println(act.getActNo()+"成功存入"+money+"元!");
	}

	public void transfer(Account outAct,Account inAct,double money){
		double balance = outAct.getBalance();
		if(balance>=money){
			outAct.setBalance(outAct.getBalance()-money);
			inAct.setBalance(inAct.getBalance()+money);
			System.out.println(outAct.getActNo()+"成功转出"+money+"元到"+inAct.getActNo()+"!");
		}else{
			System.out.println("账户余额不足!");
		}
	}

	public void run(){
		System.out.println("欢迎来到风云银行!");
		Scanner sc = new Scanner(System.in);

		Account loginAct = null;
		while(true){
			System.out.println("请输入你的操作:(1.开户,2.登录,3.退出)");
			String comd = sc.next();
			if(comd.equals("1")||comd.equals("开户")){
				System.out.println("请输入身份证号码:");
				String cardId = sc.next();
				User user = getUserById(cardId);
				if(user!=null){
					String actNo = generateActNo();
					Account act = new Account(actNo, "000000", 0.0);
					user.addAct(act);

					printInfo();
				}else{
					System.out.println("请依次输入用户信息(姓名,性别,年龄)");
					String name = sc.next();
					String gender = sc.next();
					int age = sc.nextInt();

					user = new User(cardId, name, gender, age);
					String actNo = generateActNo();
					Account act = new Account(actNo, "000000", 0.0);
					user.addAct(act);

					registUser(user);
					printInfo();

				}
			}else if(comd.equals("2")||comd.equals("登录")){
				System.out.println("请依次输入账号和密码:");
				String actNo = sc.next();
				String passwd = sc.next();
				loginAct = login(actNo, passwd);
				if(loginAct!=null){
					while(true){
						System.out.println("1.存款,2.取款,3.转账,4.余额,5.back");
						String oper = sc.next();
						if(oper.equals("1")||oper.equals("存款")){
							System.out.println("请输入存款金额:");
							double money = sc.nextDouble();
							saveMoney(loginAct, money);
						}else if(oper.equals("2")||oper.equals("取款")){
							System.out.println("请输入取款金额:");
							double money = sc.nextDouble();
							getMoney(loginAct, money);
						}else if(oper.equals("3")||oper.equals("转账")){
							System.out.println("请输入转入账号:");
							String inActNo = sc.next();
							Account inAct = getActByNo(inActNo);
							if(inAct!=null){
								System.out.println("请输入转账金额:");
								double money = sc.nextDouble();
								transfer(loginAct, inAct, money);
							}else{
								System.out.println("转入账号不存在!");
							}
						}else if(oper.equals("4")||oper.equals("余额")){
							System.out.println(loginAct.getActNo()+"账户余额为:"+loginAct.getBalance()+"元!");
						}else if(oper.equals("5")||oper.equals("back")){
							break;
						}else{
							System.out.println("命令不合法!");
						}
					}
				}else{
					System.out.println("登录失败,请检查账号和密码后,重新登录!");
				}
			}else if(comd.equals("3")||comd.equals("退出")){
				System.out.println("谢谢使用,系统退出!");
				System.exit(0);
			}else{
				System.out.println("命令不合法!");
			}
		}
	}

}

  App

package ebank;

public class App {
		public static void main(String[] args){
			AccountService as = new AccountService();
			as.run();
		}
}

  

时间: 2024-08-09 17:33:48

小练习---电子银行系统的相关文章

高通小尺寸电子价签显示方案 — 支持12/16/24点阵字库

电子货架标签系统是高通智能科技在零售业的成功商业化应用产品之一.其主要功能是替代传统纸质价格标签的电子显示装置,通过有线或者无线网络与商场计算机数据库相连,并将商超等零售业的商品价格通过电子货架标签上的屏显示出来.电子货架标签系统成功地将货架纳入了计算机程序,摆脱了手动更换价格标签的状况,实现了收银台与货架之间的价格一致性. 目前,高通电子货架标签基于硬件与软件的开发已完全成熟,并自主研发了电子价签字库,使显示更加专业.规范且效果丰富多样化: 一.212x104分辨率:12.16.24点阵字库:

第五章 电子星球

                   第五章         电子星球   山高高兮.路长长,岁月悠悠兮.转眼空.   镇楼竹: 1. 秀竹一枝自宛然, 莫愁风雨损华年. 几番颠扑呈贞骨, 露重霜寒节更坚. 2. 纤纤凤竹长漓边, 不共山花斗野妍. 时对清流摇倩影, 溪流常伴乐怡然. 3. 坚节何愁风雨多, 晴天朗日更婆娑. 生凉不荫趋炎客, 惹得骚人为咏歌.   咏经典物理.戏现代理论物理: 在山泉水洁如冰, 溅玉飞珠迸有声. 流入大江清浊混, 滔滔何日见澄明.     一.   批驳现代理论

2.4G电子货架标签

近年来中国零售呈现出一个态势:线下线上开始联手,传统的线下零售商开始发展电子商务和移动平台.而商业智能零售的概念在其中更是起到了重要的作用,"电子货架标签"(Electric Shelf Label,简称ESL)这一新鲜事物也已渐渐走入公众视野. 行业发展数字技术正在快速改变零售行业的方方面面.这样做,也使得线上.线下购物的鸿沟越来越小.电子货架标签等新技术不仅可以提供重要商品信息,还能提供一次宝贵.个性化的真正无缝的体验.目前,各大超市也必定能从数字化中获利.大型商家一周可以花费大量

我国服务器与IBM的差距到底有多大?

随着国内金融机构业务向电子化.网络化迈进,金融机构信息技术(IT)系统建设成为了一座金矿.统计数据显示,银行.证券.保险几大金融机构每年的IT设备.软件及服务采购订单超过千亿元,单是银行业IT解决方案市场规模2015年便有望突破千亿元. 然而,这座金矿几乎被海外巨头垄断,其中,IOE--即IBM.甲骨文(Oracle)和EMC三家公司在高端机型和软件服务上盘踞制高点.国产品牌华为.浪潮.用友等公司虽努力从侧面介入,也占领了一定的市场,但欲取而代之还任重道远. 千亿元采购订单 尽管IBM服务器恐遭

Delphi指针运用理解

现在是面向对象漫天飞的年代了,大家都在在谈面向对象编程.Java对指针“避而不谈”,C#虽然支持指针运用,但是也淡化处理. 然而,指针还是好完全掌握为妙,省得在开发过程碰钉子,至于对指针的运用在于开发人员的存乎于心,运用得当.指针运用的不好,不要怪开发语言及其机制.下面谈到的是在Delphi中指针的运用,至于其他语言,指针的思想是相通的. 指针是一种数据类型,和编程语言中其它的类型一样,是一种类型的区分,比如 Integer 是带符号的整型,在32位X86机中,是用4个字节表示,而指针也是用4个

大话测试数据(三)

本篇是大话测试的第三篇,如果你对测试数据感兴趣,又是第一次看到这篇,请先翻看大话测试数据一  和大话测试数据二 获取细化的测试数据 举个栗子: 接着第二篇的一个小例子“电子对账单”来说吧. 细化的数据就是我们要从逻辑角度识别它的内容和规约.所谓内容,就是数据的是什么?所谓规约就是数据必须符合什么样的规定.我们先来看看信用卡账单长什么样子: 从业务上,它可以分为两部分:行用卡账户信息,和交易明细.账户信息部分如下面截图. 我们可以说,信用卡账户信息的内容有下面几项:卡号,本期应还,本期最低还,还款

解密小米:到底想做什么?

即使估值已经超过450亿美元,小米依然是一家很饥渴的公司. 这家公司的创始人兼首席执行官雷军在最近的一个月中,带着他的自拍杆多次出现在了全球媒体的镜头中,46岁的他看上去意得志满.3月15日,他在朋友圈中贴出了李克强总理答记者问的一段话——“最近互联网上流行的一个词叫风口,我想站在‘互联网+’的风口上顺势而为,会使中国经济飞起来.” 雷军成功地将他的“风口”和“顺势而为”理论输出到了国家领导层.他的另一个身份是全国人大代表,根据耶鲁大学Rory Truex的调查,如果一家公司的CEO当上全国人大

嵌入式前景怎么样

嵌入式前景怎么样?如果你足够了解嵌入式,你会发现嵌入式技术在我们日常生活中应用了很多,比如电子产品,尤其是我们生活中拥有的智能手机.智能电视.智能机器人等等都是利用了嵌入式技术研发出来的,单从这方面来看,嵌入式前景就相当不错. 来说一下嵌入式的前景具体怎么样吧 嵌入式开发领域:嵌入式可以说是当下最有前途的IT应用领域,小到电子词典.手机,大到航空航天设备都是典型的嵌入式系统,因此,通过嵌入式技术人才的职业发展空间是非常大的,前景自然是不错的. 嵌入式人才需求:目前国内的嵌入式人才是季度匮乏的,据

使用hdmi高清相机进行低延时直播的方法

  现在很多厂家推出的4G直播编码器,可以将专业相机所拍摄的现场进行直播,并通过微信分享.直播编码器需要与第三方云平台合作.我们这里讲解一下如何使用第三方云平台进行微信直播.   使用第三方云平台是奥点云.奥点云的微信直播功能可以统计在线人数和观看用户的微信账号,便于后续进行用户管理和进一步营销.   使用的编码器是西安小风车电子出品的编码器,这个编码器有一个特点是可以实现低延时预览,它先将视频数据通过udp方式推送到自己的云平台fastcloud,然后根据要求,将udp视频流数据转码成rtmp