此代码使用集合进行账户信息的储存,共有4个类,people类是链表的单位,system类是主函数,负责函数调用,menu类是主菜单,account类有带初始信息的链表创建,账户增加,账户密码修改,金额消费,金额充值,积分计算等功能。
people类
public class people {
private int number;
private String name;
private String password;
private int money;
private int score;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public people() {
}
public people(int number, String name, String password, int money, int score) {
this.number = number;
this.name = name;
this.password = password;
this.money = money;
this.score = score;
}
}
people类设定五个属性都是私有变量,所以set方法都使用了this关键字,写了一个无惨构造方法,一个带参构造方法,带参构造方法在创建带账户信息的链表时用到了。
account类
account类是此程序的灵魂所在,包含程序的信息存储和功能实现。为了在其他类中方便调用,account方法都用static关键字修饰。
public static ArrayList<people> addarr(){
ArrayList<people> arr = new ArrayList<>();
people s1 = new people(1, "amdin1", "123456", 50, 0);
people s2 = new people(2, "amdin2", "234567", 50, 0);
people s3 = new people(3, "amdin3", "345678", 50, 0);
arr.add(s1);
arr.add(s2);
arr.add(s3);
return arr;
add方法主要是为了链表的创建,使用了people类的带参的构造方法初始化了一部分数据,初始化了3个账户。
public static void print(ArrayList<people> arr) {
System.out.println("会员详细信息");
System.out.println("------------------------------------------------");
System.out.println("编号" + "\t" + "姓名" + "\t\t" + "密码" + "\t\t" + "余额" + "\t" + "积分" + "\t");
for (people s : arr) {
//people s = arr.get();
System.out.println(s.getNumber() + "\t" + s.getName() + "\t" + s.getPassword() + "\t" + s.getMoney() + "\t" + s.getScore() + "\t");
}
}
print方法提供了会员信息的查看功能,为了美观使用了制表符\t,在循环部分,为了简便,使用了增强for。
public static void write(ArrayList<people> arr) {
System.out.println("请输入账户信息:");
Scanner sc = new Scanner(System.in);
System.out.println("请输入编号");
int number = sc.nextInt();
System.out.println("请输入密码");
String password = sc.nextLine();
System.out.println("请输入姓名");
String name = sc.nextLine();
System.out.println("请输入余额");
int money = sc.nextInt();
System.out.println("请输入积分");
int score = sc.nextInt();
people h = new people();
h.setNumber(number);
h.setName(name);
h.setPassword(password);
h.setMoney(money);
h.setScore(score);
arr.add(h);
}
write方法提供了通过键盘输入账户信息的功能。用Scanner通过键盘输入信息,用people类的set方法将输入的信息存入people类的对象h中,然后用add方法将people类对象h添加到存储账户信息的ArrayList
public static void accounting(ArrayList<people> arr) {
System.out.println("请输入姓名:");
Scanner sc = new Scanner(System.in);
String usename = sc.nextLine();
System.out.println("请输入密码:");
String word = sc.nextLine();
for (int i = 0; i < arr.size(); i++) {
people m = arr.get(i);
if (usename.equals(m.getName())) {
if (word.equals(m.getPassword())) {
System.out.println("请输入消费金额");
int cost = sc.nextInt();
int balance = m.getMoney() - cost;
m.setMoney(balance);
} else
System.out.println("密码错误。");
break;
}
}
}
//修改密码
public static void correction(ArrayList<people> arr) {
System.out.println("请输入姓名:");
Scanner sc = new Scanner(System.in);
String usename = sc.nextLine();
System.out.println("请输入密码:");
String word = sc.nextLine();
for (int i = 0; i < arr.size(); i++) {
people m = arr.get(i);
if (usename.equals(m.getName())) {
if (word.equals(m.getPassword())) {
System.out.println("请输入新密码");
String nextword = sc.nextLine();
m.setPassword(nextword);
} else
System.out.println("密码错误。");
break;
}
}
}
//充值功能
public static void addmoney(ArrayList<people> arr){
System.out.println("请输入姓名:");
Scanner sc = new Scanner(System.in);
String usename = sc.nextLine();
System.out.println("请输入密码:");
String word = sc.nextLine();
for (int i = 0; i < arr.size(); i++) {
people m = arr.get(i);
if (usename.equals(m.getName())) {
if (word.equals(m.getPassword())) {
System.out.println("请输入充值金额");
int cost = sc.nextInt();
int balance = m.getMoney() + cost;
m.setMoney(balance);
System.out.println("充值成功");
} else
System.out.println("密码错误。");
break;
}
}
}
accounting,corrrection.addmoney方法放到一起是因为它们3个方法框架基本是一样,不同只有第二个if判断里的内容,前面通过相同的判断决定是否有进行操作的权限。确定有操作权限以后,通过第二个if判断里的内容实现不同的功能,这3个功能可以合成一个减少代码量,同时避免输一次账h=号密码只能进行一个功能的弊端。
用scanner通过键盘输入账号密码后,用for循环找到相同的账号比较,相同了在进行密码比较,决定是否赋予操作权限。由于账号密码设定都是字符串,所以通过eaqul方法进行了字符串的比较。
menu类
import java.util.ArrayList;
import java.util.Scanner;
public class menu {
account n=new account();
public void majormenu(ArrayList<people> arr) {
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("-------------------------");
System.out.println("请输入数字,选择功能");
System.out.println("请输入选项:");
Scanner sc =new Scanner(System.in);
int i=sc.nextInt();
switch (i){
case 1:vipmenu(arr);
break;
case 2:System.out.println(" 2.商品管理");
break;
case 3:System.out.println(" 3.点餐系统");
break;
case 4: System.exit(0);
break;
case 5: n.write(arr);
break;
}
}
public void vipmenu(ArrayList<people> arr){
System.out.println("-------------------------");
System.out.println(" 1.查看会员信息");
System.out.println(" 2.余额充值");
System.out.println(" 3.修改密码");
System.out.println(" 4.返回上一级菜单");
System.out.println("-------------------------");
System.out.println("请输入数字,选择功能");
Scanner sc =new Scanner(System.in);
int j=sc.nextInt();
switch (j) {
case 1:
n.print(arr);
vipmenu(arr);
case 2:
n.addmoney(arr);
vipmenu(arr);
case 3:
n.correction(arr);
vipmenu(arr);
case 4:
majormenu(arr);
}
}
}
为了方便调用account类中的方法,提前创建了一个account类的对象n,majormenu是主菜单方法,实现了会员管理,退出系统,增加账户的功能。vipmenu是会员管理功能,集成了相关功能。为了让account类中方法操作ArrayList
system类
import java.util.ArrayList;
import java.util.Scanner;
public class system {
public static void main(String[] args) {
account n=new account();
ArrayList<people> arr=n.addarr();
menu i=new menu();
i.majormenu(arr);
}
}
作为主函数,为了方便使用其他类的方法,先创建了account类和menu类的对象。system类中先用account类中的add方法创建了存储账户信息的链表,然后调用majormenu创建菜单实现后续功能。