初学java写的第一个小项目
简单地ATM系统
package test.ATM.Account;
public class account {
private String name;
private String gender;
private String CardId;
private double money;
private double limit;
private String password;
public account() {
}
public account(String name, String gender, String cardId, double money, double limit, String password) {
this.name = name;
this.gender = gender;
CardId = cardId;
this.money = money;
this.limit = limit;
this.password = password;
}
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 String getCardId() {
return CardId;
}
public void setCardId(String cardId) {
CardId = cardId;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public double getLimit() {
return limit;
}
public void setLimit(double limit) {
this.limit = limit;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package test.ATM;
import test.ATM.Account.account;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Atm {
ArrayList<account> user = new ArrayList<>();
Scanner s = new Scanner(System.in);
int flag = 1;
account acc2;
public void Start() {
while (true) {
System.out.println("-----欢迎您进入波哥银行系统-----");
System.out.println("请选择您要进行的操作:");
System.out.println("1、登陆账户");
System.out.println("2、注册账户");
int a = s.nextInt();
switch (a) {
case 1:
account acc1 = entry();
if (acc1 != null) {
account users = acc1;
//展示用户的全部信息,然后设计方法让用户进行相关的操作
// ShowAllInformation(entry()); 这里虽然函数的返回值是一个account类型的对象,但是当我们把这个函数一些出来就代表我们会对其进行调用,从而多出了许多步骤,比如我们再次进入函数又要重新输入银行卡号等信息,所以我们考虑直接用一个变量来接受他
ShowAllInformation(users);
while (true) {
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("6、注销账户");
System.out.println("7、查看账户当前的信息");
int com = s.nextInt();
switch (com) {
case 1:
System.out.println("请输入您要存储的金额:");
double money = s.nextDouble();
save(acc1, money);
System.out.println("恭喜您存入成功!");
break;
case 2:
System.out.println("请输入您要取走的金额:");
money = s.nextDouble();
if (entry().getMoney() < money) {
System.out.println("余额不足,请重试~~o.0");
} else
CashOut(acc1, money);
break;
case 3:
System.out.println("请输入您要转账的对象的账号");
String id = s.next();
if (!judgeId(id)) {
// amount acc2 = InquireById(id); 这样写是不对的,在JAVA中if语句中的变量的作用域仅限于该语句中
acc2 = InquireById(id);
} else {
System.out.println("抱歉,系统中查不到该用户的信息哦~~");
break;
}
// System.out.println("您确定要给"+ acc2.getName()+"用户转账吗");
System.out.println("您确定要给" + acc2.getName() + "用户转账吗");
System.out.println("请输入yes或者no");
String command = s.next();
if (command.equals("yes")) {
System.out.println("请输入您要转账的金额");
double mon = s.nextDouble();
if (InquireById(id).getMoney() > mon) {
transfer(users, acc2, mon);
} else {
System.out.println("自己都没钱了就别想着转给别人咯~~~");
}
} else {
System.out.println("好的,将取消您的转账业务~~");
}
break;
case 4:
System.out.println("请输入您之前的密码");
String OldPassword = s.next();
if (users.getPassword().equals(OldPassword)) {
System.out.println("请输入您的新密码");
String NewPassword = s.next();
System.out.println("请再次确认您的密码");
String NewPassword2 = s.next();
if (NewPassword.equals(NewPassword2)) {
System.out.println("密码修改成功!");
users.setPassword(NewPassword);
}
} else {
System.out.println("密码输入错误,修改失败!");
}
break;
case 5:
flag = 0;
break;
case 6:
if (remove(users)) {
flag = 0;
break;
} else {
break;
}
case 7:
ShowAllInformation(users);
break;
}
if (flag == 0) {
System.out.println("恭喜您,退出成功!");
break;
}
}
}
break;
case 2:
CreatAccount();
break;
}
}
}//1、怎么让一段代码进入while死循环
public void save(account acc, double money) {
acc.setMoney(acc.getMoney() + money);
}
public boolean remove(account acc) {
System.out.println("即将进行的是销户操作,您确定要进行吗?确定请输入:yes 否则输出:no");
String com = s.next();
switch (com) {
case "yes":
if (acc.getMoney() == 0) {
user.remove(acc);
System.out.println("销户成功!");
return true;
} else {
System.out.println("账户中还有余额,无法进行销户操作!");
return false;
}
case "no":
System.out.println("好的,账户将继续为您保留!");
return false;
default:
System.out.println("请进行正确的输入!");
break;
}
return false;
}
public void transfer(account acc , account acc1 , double money){ //acc是转钱的,acc1是接受钱的
acc.setMoney(acc.getMoney() - money);
acc1.setMoney(acc1.getMoney() + money);
}
public account InquireById(String id){
for (int i = 0; i < user.size(); i++) {
if(user.get(i).getCardId().equals(id)){
account acc = user.get(i);
return acc;
}
}
return null;
}
public void CashOut(account acc ,double money ){
acc.setMoney(acc.getMoney() - money);
}
public void ShowAllInformation(account acc){
System.out.println("用户昵称:"+acc.getName());
System.out.println("用户性别:"+acc.getGender());
System.out.println("用户卡号:"+acc.getCardId());
System.out.println("账户余额:"+acc.getMoney());
System.out.println("用户限额:"+acc.getLimit());
}
public account entry(){
account acc = null;
if(user.size() == 0){
System.out.println("不好意思喔,波哥银行暂时还没有用户喔,请您先去开户!");
return acc;
}
System.out.println("请输入您的银行卡号:");
Scanner s = new Scanner(System.in);
String a = s.next();
for (int i = 0; i < user.size(); i++) {
System.out.println(user.get(i).getCardId());
if(user.get(i).getCardId().equals(a)){
System.out.println("请输入您的密码:");
String password = s.next();
if(user.get(i).getPassword().equals(password)){
System.out.println("恭喜您登入成功!");
return user.get(i);
}
else{
System.out.println("密码错误!请重试!");
return acc;
}
}
}
System.out.println("抱歉,波哥银行查不到此账户的信息!请重试!");
return acc;
}
public void CreatAccount(){
account users = new account();
System.out.println("请输入您要创建的账户名字:");
String a = s.next();
users.setName(a);
while (true) {
System.out.println("请输入您的性别:");
String gender = s.next();
if(gender.equals("男") || gender.equals("女")) {//不能写成gender == "男"或者gender == "女" , 会被JAVA编译器当成是gender的地址!!!
users.setGender(gender);
break;
}
else{
System.out.println("性别只能是男或者是女哦,请重新输入~~~~");
}
}
while (true) {
System.out.println("请输入您的密码:");
String password = s.next();
System.out.println("请再次输入您的密码:");
String newpassword = s.next();
if(password.equals(newpassword)){
System.out.println("恭喜您!密码设置成功!");
users.setPassword(password);
break;
}
else{
System.out.println("您两次输入的密码不一致哦~~~请确认后再次输入!");
}
}
System.out.println("请选择您的每次最大取现额度:");
double lim = s.nextDouble();
users.setLimit(lim);
System.out.println("现在将为您随机生成卡号~~");
String card = CreatCardId();
// users.setCardId(CreatCardId());
// System.out.println("恭喜您!卡号生成成功!您的卡号为:"+CreatCardId());//这样写是不对的,因为调用了两次CreatCardId函数,且它的返回值不一样,所以考虑用一个中间变量来保存第一次的值
System.out.println("恭喜您!卡号生成成功!您的卡号为:"+card);
users.setCardId(card);
System.out.println("恭喜,您已经成功完成了开户");
user.add(users);
}
public String CreatCardId(){
while (true) {
Random s = new Random();
String CardId = "";
for (int i = 0; i < 8; i++) {
int k = s.nextInt(10);
CardId = CardId + k;
}
if(judgeId(CardId)){
return CardId;
}
}
}
public boolean judgeId(String CardId){
for (int i = 0; i < user.size(); i++) {
if(user.get(i).getCardId().equals(CardId)){
return false;
}
}
return true;
}
}
代码如上,这是我在b站上看到的一个项目,由于一直没有机会找到那种适合我这种新手练练手的项目所以就在网上找了个简单的项目来练练手,不然真感觉像没学一样,首先这是我花了基本上两天才敲出来的,只是在网上找了这个项目的一些要求,然后开干,由于有了学习c语言的基础,其实感觉这种项目像是死题目,就是感觉只有一些输入输出语句,然后再加上一些java中一些基本的语法,就是写起来思路基本上非常简单,就是根据项目的要求将他转化成为函数也就是方法就行了,感觉与c语言最大的不同就是要有那种抽象事物的思维也可能就是所谓的面向对象的思想,还有就是最大的不同就是语法确实也有很多小细节不一样,就比如对字符串的处理,变量的作用域等等,这些都是一些小改变就比如你在if语句中定义的一个变量,他出了这个语句就没有用了,即你无法再去使用它了,当时把我坑了好久,一直在报错……找了我半条命,主要还是对这些小语法不太熟悉,再有就是在对那种要用到返回值的函数,我们得先用一个变量将他保存起来,不然后面一直用的话会导致你经常莫名其妙地就进函数了,再然后就是写下这段代码给我很大的感受就是我的英语是真的差好多单词都是查阅资料的,但是有一说一,当这个项目真的完成的时候,你去使用它的时候,真的是满满的成就感,比起写c语言的算法题好了一万倍!其实这个也确实没咋用到啥高深的东西,就是用来熟悉熟悉语法的吧,然后就这样吧,继续加油。