基于控制台的会员管理系统


此代码使用集合进行账户信息的储存,共有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方法进行了字符串的比较。


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链表,所以menu类中方法都用ArrayList arr作为形参。

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创建菜单实现后续功能。


文章作者: 尘风
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 尘风 !
  目录