超市会员系统

时间:2022-11-13 23:05:13

需求:

超市会员系统

超市会员系统超市会员系统
//用户类
public class User {
    private String name;// 用户名
    private String id;// 账号
    private String code;// 密码
    private int integral;// 积分
    private int protect;// 密保问题
    private String code2;// 密保问题的答案,只能设置一次

    public User() {
        super();
    }

    public User(String name, String id, String code, int integral,int protect,String code2) {
        super();
        this.name = name;
        this.id = id;
        this.code = code;
        this.integral = integral;
        this.protect = protect;
        this.code2 = code2;
    }

    public int getProtect() {
        return protect;
    }

    public void setProtect(int protect) {
        this.protect = protect;
    }

    @Override
    public String toString() {
        return "用户名:" + name + ", 账号:" + id + ", 积分:" + integral;
    }

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public int getIntegral() {
        return integral;
    }

    public void setIntegral(int integral) {
        this.integral = integral;
    }

    public String getCode2() {
        return code2;
    }

    public void setCode2(String code2) {
        if (this.code2 == null) {
            this.code2 = code2;
        }
    }
用户类
超市会员系统超市会员系统
 1 import java.util.Random;
 2 import java.util.Scanner;
 3 
 4 //用户注册
 5 public class Register {
 6     static Scanner input = new Scanner(System.in);
 7 
 8     public static void register() {
 9         System.out.println("………………………………注册………………………………");
10         System.out.println("请输入用户名:");
11         String name = Rights.getName();
12         System.out.println("请输入注册密码:");
13         String code = Rights.getCode();
14         while(getYZM()) {
15             System.out.println("验证码输出错误!");
16         }
17         String id = getID();
18         System.out.println("请选择一个密码问题,可用于密码找回!");
19         System.out.println("1、我的父亲叫什么\n2、我的母亲叫什么\n3、初中学校叫什么");
20         int num = Rights.getInt();
21         while(num<1||num>3) {
22             System.out.println("没有该选项,请重新选择!");
23             num = Rights.getInt();
24         }
25         
26         System.out.println("请输入你的答案:");
27         String answer = input.next();
28         ShopSys.map.put(name, new User(name,id,code,100,num,answer));
29         System.out.println("注册成功,您的卡号是:"+id+",首次注册送你100积分!");
30     }
31     public static void main(String[] args) {
32         register();
33     }
34 
35     
36     
37     
38     //生成随机9位数卡号
39     public static String getID() {
40         Random rd = new Random();
41         StringBuffer sbf = null;
42         while(true) {
43             sbf = new StringBuffer();
44             for(int i =0; i<9;i++) {
45                 int num = rd.nextInt(9);
46                 sbf.append(num);
47             }
48             if(ShopSys.map.get(sbf)==null) {
49                 return sbf.toString();
50             }
51         }
52     }
53     
54     // 输入验证码
55     public static boolean getYZM() {
56         String code = "";
57         String str = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASFGHJKLZXCVBNM";
58         String[] strs = str.split("");
59         for (int i = 0; i < 6; i++) {
60             code += strs[(int) (Math.random() * strs.length)];
61         }
62         System.out.println("验证码  》》》》     " + code);
63         System.out.println("请输入验证码:");
64         String s = input.next();
65         if (s.equalsIgnoreCase(code)) {
66             return false;
67         }
68         return true;
69     }
70 
71 }
注册类
超市会员系统超市会员系统
 1 import java.util.Scanner;
 2 
 3 //用户登入
 4 public class SignIn {
 5     static Scanner input = new Scanner(System.in);
 6 
 7     /**
 8      * 1、积分累计,要求必须是数字且大于0否则重新输入
 9      */
10 
11     public static void addScore(String id) {
12 
13         System.out.println("请输入您此次消费金额(每消费1元加1积分):");
14         int score = Rights.getInt();
15         ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() + score);
16         System.out.println("积分累计成功!");
17     }
18 
19     /**
20      * 2、积分兑换 每10积分抵用0.1元 不足10积分不提用且不会扣除输入抵用后剩余的不足10的积分
21      * 只能输入大于0的整数,输入小于10积分提示积分太少不能抵用,输入大于剩余积分提示积分不足
22      */
23 
24     public static void conversion(String id) {
25 
26         System.out.println("请输入您需要兑换使用的积分(每10积分抵用0.1元,不足10积分不做抵用):");
27         int num = Rights.getInt();
28         if (num < 10) {
29             System.out.println("兑换积分不能小于10!");
30         } else {
31             if (ShopSys.map.get(id).getIntegral() - num > 0) {
32                 ShopSys.map.get(id).setIntegral(ShopSys.map.get(id).getIntegral() - num / 10 * 10);
33                 System.out.println("积分兑换成功,您已用会员卡积分抵用了" + (num / 10) * 0.1D + "元!");
34                 return;
35             } else {
36                 System.out.println("对不起,你当前积分不足!!!");
37             }
38         }
39 
40     }
41 
42     /**
43      * 4、修改密码 密码设置与注册密码一致,且新密码不能与旧密码一致
44      */
45 
46     public static void alterCode(String id) {
47         System.out.println("………………………………………………更改密码………………………………………………");
48         System.out.println("请输入新密码:");
49         String newCode = Rights.getCode();
50 
51         while (true) {
52             if (newCode.equals(ShopSys.map.get(id).getCode())) {
53                 System.out.println("新密码不能与旧密码一致!请重新输入:");
54                 newCode = Rights.getCode();
55             } else {
56                 ShopSys.map.get(id).setCode(newCode);
57                 System.out.println("密码修改成功,请重新登入!");
58                 return;
59             }
60         }
61     }
62 
63     // 5、退出(返回上一层)
64 
65     public static void signIn(String id) {
66         System.out.println("………………………………登入后………………………………");
67 
68         System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出");
69         String str;
70 
71         start: for (str = input.next();; str = input.next()) {
72             switch (str) {
73             case "1":
74                 addScore(id);
75                 break;
76             case "2":
77                 conversion(id);
78                 break;
79             case "3":
80                 System.out.println("个人信息:\n" + ShopSys.map.get(id));
81                 break;
82             case "4":
83                 alterCode(id);
84                 break start;
85             case "5":
86                 System.out.println("正在退出登入。。。。。。");
87                 break start;
88             default:
89                 System.out.println("没有该选项,请重新输入:");
90                 continue start;
91             }
92             System.out.println("1、积分累计\n 2、积分兑换\n3、积分查询\n4、修改密码\n5、退出");
93         }
94 
95         System.out.println("已退出登入!");
96 
97     }
98 
99 }
登录类
超市会员系统超市会员系统
  1 import java.util.Scanner;
  2 
  3 //确保进行正确的操作
  4 public class Rights {
  5     static Scanner input = new Scanner(System.in);
  6 
  7     // 设置密码 要求长度在6~16之间 只能包含数字、大小写英文字母、特殊符号,不能有空格、中文
  8     // 33~126 :数字0~9、大小写字母、特殊符号的ASCII码
  9 
 10     // 控制台输入的要求
 11     public static boolean getStr(String code) {
 12         StringBuffer sbf = new StringBuffer();
 13         boolean boo = false;
 14         char[] chars = code.toCharArray();// 存储密码的每个字符
 15         for (int i = 0; i < chars.length; i++) {
 16             if ((int) (chars[i]) < 33 || (int) (chars[i]) > 126) {
 17                 sbf.append(chars[i]);
 18                 boo = true;
 19             }
 20         }
 21         if (boo) {
 22             System.out.println("不能输入以下中文、中文字符或空格:");
 23             for (int i = 0; i < sbf.length(); i++) {
 24                 System.out.print("\"" + sbf.charAt(i) + "\"   ");
 25             }
 26             System.out.println("\n请重新输入:");
 27             return false;
 28         } else {
 29             return true;
 30         }
 31     }
 32 
 33     // 判断密码强度
 34     public static void safetyCode(char[] c) {
 35         int b, b1, b2, b3;
 36         b = b1 = b2 = b3 = 0;
 37         for (int i = 0; i < c.length; i++) {
 38 
 39             // (byte)数字0~9 48~57 大小字母 65~90 小写英文字母 97~122
 40             if ((int) (c[i]) >= 48 && (int) (c[i]) <= 57) {
 41                 b1 = 1;
 42             } else if ((int) (c[i]) >= 97 && (int) (c[i]) <= 122) {
 43                 b2 = 1;
 44             } else if ((int) (c[i]) >= 65 && (int) (c[i]) <= 90) {
 45                 b3 = 1;
 46             } else {
 47                 b = 1;
 48             }
 49 
 50         }
 51 
 52         int num = b + b1 + b2 + b3;
 53 
 54         switch (num) {
 55         case 1:
 56             System.out.println("当前输入的密码强度为1级!");
 57             break;
 58         case 2:
 59             System.out.println("当前输入的密码强度为2级!");
 60             break;
 61         case 3:
 62             System.out.println("当前输入的密码强度为3级!");
 63             break;
 64         case 4:
 65             System.out.println("当前输入的密码强度为4级!");
 66             break;
 67         }
 68 
 69     }
 70 
 71     // 获取密码
 72     public static String getCode() {
 73         String code = input.nextLine();
 74         while (true) {
 75             if (code.length() < 6 || code.length() > 16) {
 76                 System.out.println("密码长度必须在6~16之间!请重新输入:");
 77                 code = input.nextLine();
 78             } else if (!getStr(code)) {// 不能输入非法字符
 79                 code = input.nextLine();
 80             } else {
 81                 break;
 82             }
 83         }
 84         return code;
 85 
 86     }
 87 
 88     public static void main(String[] args) {
 89         getName();
 90     }
 91 
 92     // 只能输入数字
 93     public static int getInt() {
 94 //        System.out.println("请选择:");
 95         int num;
 96         while (!input.hasNextInt()) {
 97             String s = input.next();
 98             System.out.println("输入错误,请输入一个整字:");
 99         }
100         num = input.nextInt();
101         return num;
102     }
103 
104     // 获取从控制台输入的空格符,并且提示不能输入空格
105 
106     // 获取用户名
107     public static String getName() {
108         String userName = input.nextLine();
109         while (true) {
110             if (userName.length() < 3 || userName.length() > 6) {
111                 System.out.println("用户名长度应在3~6之间,请重新输入:");
112             } else if ((int) (userName.charAt(0)) >= 48 && (int) (userName.charAt(0)) <= 57) {
113                 System.out.println("用户名不能以数字开头,请重新输入:");
114             } else if (ShopSys.map.get(userName) != null) {
115                 System.out.println("该用户名已存在,请重新输入:");
116             } else if (!getStr(userName)) {
117 
118             } else {
119                 break;
120             }
121             userName = input.nextLine();
122         }
123         return userName;
124 
125     }
126 }
保证输入正确
超市会员系统超市会员系统
  1 import java.util.*;
  2 
  3 //超市会员管理系统
  4 public class ShopSys {
  5     static Scanner input = new Scanner(System.in);
  6     // 存储会员
  7     static Map<String, User> map = new HashMap<String, User>();
  8     static long time1 = 0;// 输入错误3次的时间
  9     static long tiem2 = 0;// 输入密码时间
 10     static int num;// 输错密码的次数
 11     static final long time = 15;// 锁死账号的时间
 12     static final int nums = 5;// 限制输错的次数,输错次数上限将不能登入
 13     static {
 14         map.put("zt1", new User("zt1", "457891536", "123456", 100, 2, "天堂"));
 15         map.put("zt2", new User("zt2", "512378561", "123456", 1000, 3, "从不看书"));
 16         map.put("zt3", new User("zt3", "289651760", "123456", 0, 1, "游戏人生"));
 17     }
 18     
 19     //运行
 20     public static void main(String[] args) {
 21         operation();
 22     }
 23 
 24     public static void operation() {
 25         System.out.println("******************************XX超市会员管理系统****************************************");
 26         System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码");
 27         String s;
 28         start: for (s = input.next();; s = input.next()) {
 29             switch (s) {
 30             case "1":
 31                 dr();
 32                 break;
 33             case "2":
 34                 Register.register();
 35                 break;
 36             case "3":
 37                 System.out.println("正在退出系统。。。。。");
 38                 break start;
 39             case "4":
 40                 comeback();
 41                 break;
 42             default:
 43                 System.out.println("没有该选项,请重新输入:");
 44                 continue start;
 45             }
 46             System.out.println("1、登入\t\t2、注册\t\t3、退出\t\t4、找回密码\n请选择:");
 47         }
 48         System.out.println("程序退出!");
 49     }
 50 
 51     // 密保:找回密码
 52     public static void comeback() {
 53         System.out.println("请输入需要找到密码的账号:");
 54         String id = input.next();
 55         if (map.get(id) != null) {
 56             System.out.print("您的密码问题的:");
 57             switch (map.get(id).getProtect()) {
 58             case 1:
 59                 System.out.println("1、我最喜欢的电影");
 60                 break;
 61             case 2:
 62                 System.out.println("2、对我最想去的地方");
 63                 break;
 64             case 3:
 65                 System.out.println("3、我最爱看的一本书");
 66                 break;
 67             }
 68             System.out.println("请输入您的答案:");
 69             String code2 = input.next();
 70 
 71             if (code2.equals(map.get(id).getCode2())) {
 72                 System.out.println("密保验证成功!");
 73                 System.out.println("您的密码为:" + map.get(id).getCode() + ",请牢记!");
 74             } else {
 75                 System.out.println("密保验证错误,密码找回失败!");
 76             }
 77 
 78         } else {
 79             System.out.println("密码找回失败,该用户名不存在!");
 80         }
 81 
 82     }
 83 
 84     // 登入
 85     public static void dr() {
 86         tiem2 = new Date().getTime();
 87         String id;
 88         // 先判断输错次数,再判断时间是否还在锁死时间内,最后就剩被已锁死状态
 89         if (num < nums) {
 90             boo();
 91         } else if ((tiem2 - time1) / 1000 > time) {
 92             // 时间已过,清除输错次数
 93             num = 0;
 94             boo();
 95         } else {
 96             System.out.println("您已输错" + num + "次,请" + (time - (tiem2 - time1) / 1000) + "秒后重试");
 97         }
 98 
 99     }
100 
101     // 判断是否登入成功
102     public static void boo() {
103         System.out.println("**********************登入*********************");
104         System.out.println("请输入账号:");
105         String name = input.next();
106         System.out.println("请输入密码:");
107         String code = input.next();
108         if (map.get(name) != null) {
109             // 输对登入成功,输错则次数+1
110             if (name.equals(map.get(name).getName()) && code.equals(map.get(name).getCode())) {
111                 System.out.println("登入成功!");
112                 SignIn.signIn(name);
113             } else {
114                 num++;
115                 System.out.println("密码输入错误,您当前已输错" + num + "次,输错" + nums + "次将暂时不能登入!");
116 
117                 // 输错3次,记录当时的时间
118                 if (num == nums) {
119                     time1 = new Date().getTime();
120                 }
121             }
122         } else {
123             System.out.println("没有该账号!");
124         }
125     }
126 }
界面类