学习内容:学习JavaSE(Day6)
1、对象数组
2、类的封装
1、对象数组
(1)在类中直接定义的变量是实例变量。 实例变量有默认值,即遍没有赋值也可以使用。 在方法内部声明的变量是局部变量。 局部变量是没有默认值的,在使用的时候必须有初始值。否则编译期就会报错。
(2)对象数组默认值为null,如果一个对象的值是null,那在调用该对象的属性或方法时会引发NullPointerException空指针异常
2、类的封装
(1)Java三大特性:封装,继承,多态
(2)封装的基本原则: 1.将实例变量标记为私有的(private) 2.提供公有(public)的setter和getter方法,用来控制对实例变量的存取动作。
(3)封装的作用:1.保护数据,隐藏具体实现,调用者只用关心使用。2.代码复用。3.高内聚。4.低耦合。
(4)如果一个类中只有getter setter方法,那么这个类就是实体类。
(5)引用数据类型按引用传递
Car car = new Car();
car.setBrand("保时捷");
dog.playCar(car);
System.out.println(car.getName());
public void playCar(Car car) {
car.setBrand("玛莎拉蒂");
}
(6)作业题
import java.util.*;
public class Bank {
Scanner input = new Scanner(System.in);
Account[] accounts = new Account[1000];
public void showMenu(){
System.out.println("欢迎使用自助银行服务系统,系统功能如下:");
System.out.println("1.开户 2.插卡 3.系统管理 4.退出系统");
System.out.println("请输入您要操作的选项序号:");
String no = input.next();
switch (no){
case "1":
addUser();
break;
case "2":
insertCard();
break;
case "3":
systemAdmin();
break;
case "4":
System.exit(1); //退出系统
break;
default:
System.out.println("输入错误,请输入选项序号!");
showMenu();
}
}
public void addUser(){ //开户
System.out.println("请输入开户的用户名:");
String account = input.next();
System.out.println("请输入开户的密码:");
String pwd = input.next();
Account user = new Account();
user.setAccount(account);
user.setPwd(pwd);
user.setMoney(0);
user.setStatue(1);
int flag = 0;
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null && accounts[i].getAccount().equals(user.getAccount())){
flag = 2;
break;
}else if (accounts[i] == null){
accounts[i] = user;
flag = 1;
break;
}
}
if (flag == 1){
System.out.println("开户成功!");
}else if (flag == 2){
System.out.println("开户失败!用户名不能重复!");
}else{
System.out.println("开户失败!");
}
showMenu();
}
public Account findAccountByNameAndPwd(String accName, String pwd) { //根据用户名和密码查找用户
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null) {
String name = accounts[i].getAccount();
String password = accounts[i].getPwd();
if (name.equals(accName) && password.equals(pwd)) {
return accounts[i];
}
}
}
return null;
}
public void insertCard(){ //插卡
System.out.println("请输入您的用户名:");
String account = input.next();
System.out.println("请输入您的密码:");
String pwd = input.next();
Account user = findAccountByNameAndPwd(account,pwd);
if (user != null && user.getStatue() == 1){ //插卡成功
System.out.println("验证成功!");
showSecMenu(user);
} else if (user != null && user.getStatue() == 0){
System.out.println("账户已被冻结!");
}else {
System.out.println("验证失败!用户名或密码错误!");
}
showMenu();
}
public void systemAdmin(){ //系统管理
System.out.println("请输入管理员的用户名:");
String account = input.next();
System.out.println("请输入管理员的密码:");
String pwd = input.next();
boolean flag = false;
if (account.equals("admin") && pwd.equals("123456")){
System.out.println("验证成功!");
showAdminMenu();
} else {
System.out.println("验证失败!");
}
showMenu();
}
public void showSecMenu(Account account){
System.out.println("用户功能如下:");
System.out.println("1.查询余额 2.取款 3.转账 4.存款 5.修改密码 6.退出系统");
System.out.println("请输入您要操作的选项序号:");
String no = input.next();
switch (no){
case "1":
findMoney(account);
break;
case "2":
getMoney(account);
break;
case "3":
transferMoney(account);
break;
case "4":
setMoney(account);
break;
case "5":
updatePwd(account);
break;
case "6":
break;
default:
System.out.println("输入错误,请输入选项序号!");
showSecMenu(account);
}
}
public void findMoney(Account account){ //查询余额
System.out.println("账户余额为:" + account.getMoney());
showSecMenu(account);
}
public void getMoney(Account account){ //取钱
System.out.println("请输入您想取多少钱:");
double money = input.nextDouble();
if (money > account.getMoney()){
System.out.println("余额不足!取钱失败!");
}else {
account.setMoney(account.getMoney() - money);
System.out.println("取钱成功,账户余额为:" + account.getMoney());
}
showSecMenu(account);
}
public void transferMoney(Account user){ //转账
System.out.println("请输入您想转多少钱:");
double money = input.nextDouble();
if (money > user.getMoney()){
System.out.println("余额不足!转账失败!");
}else {
System.out.println("请输入您想转到的用户名:");
String account = input.next();
boolean flag = true;
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null && account.equals(accounts[i].getAccount())){
accounts[i].setMoney(accounts[i].getMoney() + money);
user.setMoney(user.getMoney() - money);
System.out.println("转账成功,账户余额为:" + user.getMoney());
flag =false;
break;
}
}
if (flag){
System.out.println("转账失败,未找到该用户!");
}
}
showSecMenu(user);
}
public void setMoney(Account account){ //存钱
System.out.println("请输入您想存多少钱:");
double money = input.nextDouble();
if (money > 0){
account.setMoney(account.getMoney() + money);
System.out.println("存钱成功,账户余额为:" + account.getMoney());
}else {
System.out.println("输入金额不合法,存钱失败!");
}
showSecMenu(account);
}
public void updatePwd(Account account){ //修改密码
System.out.println("请输入原密码:");
String pwd = input.next();
if (pwd.equals(account.getPwd())){
System.out.println("请输入您想修改的密码:");
account.setPwd(input.next());
System.out.println("修改成功!");
}else {
System.out.println("原密码输入错误,无法修改密码!");
}
showSecMenu(account);
}
public void showAdminMenu(){
System.out.println("系统管理功能如下:");
System.out.println("1.显示所有用户 2.冻结账户 3.恢复账户 4.退出系统");
System.out.println("请输入您要操作的选项序号:");
String no = input.next();
switch (no){
case "1":
showUsers();
break;
case "2":
freezingAccount();
break;
case "3":
recoverAccount();
break;
case "4":
break;
default:
System.out.println("输入错误,请输入选项序号!");
showAdminMenu();
}
}
public void showUsers(){ //显示所有用户
System.out.println("用户名****密码****余额****状态");
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null){
System.out.println(accounts[i].getAccount() + "\t\t" + accounts[i].getPwd() + "\t\t" + accounts[i].getMoney() + "\t\t" + accounts[i].getStatue());
}
}
showAdminMenu();
}
public void freezingAccount(){ //冻结账户
System.out.println("请输入要冻结的用户名:");
String account = input.next();
boolean flag = false;
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null && accounts[i].getAccount().equals(account)){
accounts[i].setStatue(0);
flag = true;
break;
}
}
if (flag){
System.out.println("冻结成功");
}else {
System.out.println("冻结失败,未找到该用户!");
}
showAdminMenu();
}
public void recoverAccount(){ //恢复账户
System.out.println("请输入要恢复的用户名:");
String account = input.next();
boolean flag = false;
for (int i = 0; i < accounts.length; i++) {
if (accounts[i] != null && accounts[i].getAccount().equals(account)){
accounts[i].setStatue(1);
flag = true;
break;
}
}
if (flag){
System.out.println("恢复成功");
}else {
System.out.println("恢复失败,未找到该用户!");
}
showAdminMenu();
}
}
import java.util.*;
public class Account {
private String account;
private String pwd;
private double money;
private int statue; //1正常 0冻结
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public int getStatue() {
return statue;
}
public void setStatue(int statue) {
this.statue = statue;
}
}
public class BankTest {
public static void main(String[] args) {
Bank bank = new Bank();
bank.showMenu();
}
}