名称:soso移动营业厅
项目功能分析:
个人:注册,登录,查看个人信息,修改个人信息(修改密码),充值,查看我的业务,查看业务大厅(已发布),办理业务,终止业务
管理员:查看所有人信息,查看现有业务,查看可以办理的业务,未发布项目,添加业务(添加完成之后,在未发布中),发布新业务(未发布的业务发布出去),
删除业务(不做删除,业务的上架和下架,改为未发布),修改业务价格
原有用户有2个,管理员1个:
管理员:用户名:admin, 密码:admin , 这个用户名不允许用户注册
用户一:用户名:zhang,密码:123;
用户二:用户名:lili , 密码:111;
数据库:
使用集合模拟数据库的功能,用于数据的存储(个人,业务),个人密码进行加密 *** 作(MD5)
用户对象分析:
用户编号,用户名,密码,姓名,手机号,身份z号码,arrayList<我的业务>,余额
业务类
业务编号,业务标题,业务描述(详情),业务价格,业务状态(1,正常办理,上架业务,0 业务下架 - 看不到的)
1 1元1G流量 短期流量包1天1元1个G 1 可以办理
- 1元100分钟通话 有效期一个月,100分钟的套餐仅医院 1 可以办理
Zhangsan abcabc123
Zhangsan 123 - abcabc123
2:功能的具体实现: 1:主页项目启动后进入主页,显示用户的选择项,可以注册、登录、退出
2:注册:用户选择注册功能进入注册页面,输入用户名和密码,和验证码
当集合中存在用户输入的用户名时,表示注册失败,注册失败,
密码输入时。如果两次输入的密码不一致,注册失败,
输入验证码,验证码不同,注册失败;
当注册成功时,将用户名和密码封装到集合中,-存到数据库
注意:注册时,用户无法 *** 作自己的用户编号,用户编号应该自动生成, 密码需要使用md5加密
并显示用户需要进行的 *** 作,可1:登录和0:退出
3:登录:只有当用户名和密码都正确的时候,才显示登录成功,使用成员变量保存用户信息
输入用户名和密码判断是否正确,正确则显示登录成功,失败显示登录失败。
登录成功之后判断登录的是普通用户还是管理员(admin)
普通用户成功后显示用户主页(用户可以进行的 *** 作)
如果是管理员的话显示管理员页面
失败后提示,1:注册,2:登录,0:退出 - 返回首页
4:管理员功能登录成功之后,显示管理员的功能,并显示欢迎管理员:admin
1:显示所有用户信息遍历存储用户信息的容器,
完成之后管理员可以选择返回管理员主页的 *** 作,或者退出
2:展示现有业务遍历用于存储业务的集合,
展示现有可以办理业务的具体信息
查看完成之后,管理员可以返回主页的选项
3:添加新业务按照业务实体的属性,新增业务对象,设置对应的价格,标题,描述等信息
注意,
1:业务的编号不应该手动完成,需要自动完成编号的自增。
2:添加新业务不应该对现有其他业务有影响。
3:新业务添加完成之后,在未发布的业务中(其实就是将业务的状态设置为0)
4:删除业务在删除业务之前,应该展示一下现有的所有业务,然后根据业务编号进行删除。
输入的编号必须在现有的列表中存在,否则重新输入。
删除前,需要询问管理员是否确认删除,以免后悔。
要求根据业务编号删除业务,删除业务后,查询业务时,不应该再显示,
删除业务时不应该对其他业务有影响
删除业务不是真实的删除,仅仅是一个下架 *** 作
5:修改业务价格在修改业务之前,应该展示一下现有的所有业务,然后根据业务编号进行修改。
输入的编号必须在现有的列表中存在,否则提示错误,退出。
根据编号进行价格的修改,对输入的价格进行校验等 *** 作1-100区间
修改完成之后可以返回和退出。
查询时,应该显示最新的业务信息。
6:发布业务管理员可以发布新业务,点击发布新业务的时候,需要将所有的未发布的业务展示出来
选择可以发布的业务编号(需要校验合理性)进行发布,输入不合理的话则发布失败
发布之后,可以在现有业务中进行查看
5:用户功能用户登录成功之后,显示用户的功能,并显示XXX欢迎你
1:查看个人信息根据保存在成员变量中的用户名,到用户列表中查询,
将查询到的用户信息展示给到用户查看,
并且提供返回的功能
2:修改个人信息-以修改密码为例只有在输入原密码正确的情况下,才能进行密码的修改,
密码修改需要输入2次,如果2次输入的密码不一致,则修改失败
对输入的密码进行加密 *** 作
修改成功后,查询的个人信息应该显示最新的个人信息。
提供返回的功能
3:充值可以让用户自定义输入需要充值的金额,但必须是一个合理的整数
对充值的金额进行校验只能输入1-200,不合理的金额不能进行充值,
4:查看我的业务查看当前登录用户已经办理了的业务,遍历展示即可
提供返回的功能
5:查看业务大厅将现在所有的可以办理的移动业务从集合中查询出结果之后展示给到用户
6:业务办理先将所有的业务展示给到用户查看
用户可以使用业务编号选择进行业务的办理。对用户输入的编号进行判断是否在合理的范围中
选择编号时,需要获取该业务的价格,判断用户的余额,如果余额不足提示充值,业务办理失败;
如果余额充足,首先使用余额减去业务的费用
然后将该业务添加到我的业务集合中,并且扣除相应的余额、业务办理成功
需要判断的内容:
- 业务编号是否合理
- 判断余额是否充足, 不够提供充值的入口
- 将当前业务添加到我的业务中
- 更新余额,更新我的业务
做好异常处理。
7:业务终止和业务的下架类似
package com.sky.pojo; public class Business { private int Bid;//业务标号 private String title;//业务标题 private String desc;//描述,详情 private int price;//业务价格 private String Stats;//业务状态1.正常业务0.已经下架业务 @Override public String toString() { return "Business{" + "Bid=" + Bid + ", title='" + title + ''' + ", desc='" + desc + ''' + ", price=" + price + ", Stats='" + Stats + ''' + '}'; } public Business(int bid, String title, String desc, int price, String stats) { Bid = bid; this.title = title; this.desc = desc; this.price = price; Stats = stats; } public int getBid() { return Bid; } public void setBid(int bId) { this.Bid = bId; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getStats() { return Stats; } public void setStats(String status) { this.Stats = status; } } package com.sky.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class User { private int uid; private String username; private String password; private String name; private String phone; private String cardId; private Listmybusiness; private int money; private int integrate; public User(int uid, String username, String password) { this.uid = uid; this.username = username; this.password = password; } public User(int uid, String username, String password, String name, String phone, String cardId, List mybusiness, int money, int integrate) { this.uid = uid; this.username = username; this.password = password; this.name = name; this.phone = phone; this.cardId = cardId; this.mybusiness = mybusiness; this.money = money; this.integrate = integrate; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getCardId() { return cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public List getMybusiness() { return mybusiness; } public void setMybusiness(List mybusiness) { this.mybusiness = mybusiness; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } public int getIntegrate() { return integrate; } public void setIntegrate(int integrate) { this.integrate = integrate; } @Override public String toString() { return "User{" + "uid=" + uid + ", username='" + username + ''' + ", password='" + password + ''' + ", name='" + name + ''' + ", phone='" + phone + ''' + ", cardId='" + cardId + ''' + ", mybusiness=" + mybusiness + ", money=" + money + ", integrate=" + integrate + '}'; } } package com.sky.utils; import lombok.Data; import java.security.MessageDigest; @Data public class MD5Util { public static String getMD5(String str) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); char[] charArray = str.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) { byteArray[i] = (byte) charArray[i]; } byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) { hexValue.append("0"); } hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } catch (Exception e) { e.printStackTrace(); return ""; } } } package com.sky.utils; import com.sky.pojo.Business; import com.sky.pojo.User; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Demo { static Scanner sc=new Scanner(System.in); static List users=new ArrayList<>(); static List businesses=new ArrayList<>(); static User loginUser=null; //创建用户集合,模拟数据库 static String lotonumber="67312340"; public static void main(String[] args) { // 实例类信息, bean ------ pojo , domain,entity , bean修改密码的时候,先进行验证,然后完成修改,后面的密码进行加密 // 123 -- 202cb962ac59075b964b07152d234b70 // 111 -- 698d51a19d8a121ce581499d7b701668 // String md5 = MD5Util.getMD5("123"); // System.out.println(md5);1 // 首页,主页 Business business1=new Business(1,"1元1G流量","短期流量包1天1元1个G ",1,"1"); Business business2=new Business(2,"1元100分钟通话","有效期一个月,100分钟的套餐仅医院 ",1,"1"); businesses.add(business1); businesses.add(business2); System.out.println(businesses); User user1=new User(1, "admin", "21232f297a57a5a743894a0e4a801fc3");//admin User user2=new User(2, "zhang", "202cb962ac59075b964b07152d234b70");//123 User user3=new User(3, "xiaoli", "698d51a19d8a121ce581499d7b701668");//111 User user4=new User(4,"text","698d51a19d8a121ce581499d7b701668","测试","10000","320704123422220301",businesses,99999,20000000); users.add(user1); users.add(user2); users.add(user3); users.add(user4); index(); } public static void index(){ System.out.println("欢迎来到soso请选择需要的 *** 作"); System.out.println("1.注册"); System.out.println("2.登录"); Scanner sc = new Scanner(System.in); String num = sc.next(); switch(num){ case "1": register(); break; case "2": login(); break; default: System.out.println("输入有误,程序退出"); System.exit(0); } } public static void login(){ System.out.println("输入用户名"); String myName = sc.next(); System.out.println("输入密码"); String pwd = sc.next(); String myPwd = MD5Util.getMD5(pwd); //System.out.println(myPwd); String username = null; for(User user : users){ if((myName.equals(user.getUsername()))&& (myPwd.equals(user.getPassword()))){ username = myName; System.out.println(user); break; } } System.out.println(users); System.out.println(username); if(username == null){ System.out.println("登陆失败,请重新登陆"); index();//登陆失败回到首页 }else{ if ("admin".equals(username)){ loginUser=users.get(0);//改========== adminView();//管理员视图 }else{ //获取当前用户登录对象 for (User u:users) { if(u.getUsername().equals(myName)){ //进来了u就是登录对象 loginUser=u; } } userView(); } } } private static void userView( ) { System.out.println("尊敬的SoSo用户:"+loginUser.getUsername()+"欢迎你。"); 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.终止业务"); System.out.println("8.积分抽奖"); System.out.println("9.购买积分"); String num=sc.next(); switch(num){ case"1": showInfo(); break; case"2": updatePwd(); break; case"3": addMoney(); break; case"4": myBusiness(); break; case"5": showonlineBusiness(); break; case"6": businessHandling(); break; case"7": stopBusiness(); break; case"8": loto(); break; case"9": addintegrate(); break; default: System.out.println("输入有问题,重新输入"); adminView(); } } private static Boolean isNumOk(int num,List myBusiness){ boolean boo=false; // if(num==myBusiness.get(0).getBid()) return boo; } private static void stopBusiness() { List myBusiness=getMyBusiness(); try { System.out.println("请输入终止业务id:"); int num=sc.nextInt(); //3判断编号的合理性4判断money够不够,余额和业务价格比较 if(myBusiness!=null){//找到当前用户输入编号的业务对象-remove //Boolean boo=isNumOK(num,myBusiness); for (Business b:myBusiness) { if(b.getBid()==num){ myBusiness=loginUser.getMybusiness(); myBusiness.remove(b); break; } } loginUser.setMybusiness(myBusiness); System.out.println("终止业务成功"); }else { System.out.println("还没有办理过业务"); } returnMethod(); }catch (Exception e){ System.out.println("业务办理失败!"); e.printStackTrace(); } } public static Business existBusiness(int num){ Business b=null;//Business b=null;输入错误业务、else正确存在该业务 for (Business bus:businesses) { if(bus.getBid()==num){ b=bus; break; } } return b; } private static void businessHandling() {//1展示所以可以办理的业务-遍历现有上架业务 showonlineBusiness(); System.out.println("输入需要办理的业务编号:");//2输入业务办理的编号 try { int num=sc.nextInt(); //3判断编号的合理性4判断money够不够,余额和业务价格比较 Business b=existBusiness(num); int price =b.getPrice(); int money =loginUser.getMoney(); if(money>price){ List mybusiness=loginUser.getMybusiness(); if(mybusiness==null){ mybusiness=new ArrayList (); mybusiness.add(b); loginUser.setMoney(money-price); loginUser.setMybusiness(mybusiness); System.out.println("业务办理成功!"); } }else { System.out.println("余额不足请充值"); addMoney(); }returnMethod(); //5将该业务添加到我的业务中-99%异常6更新业务,更新我的业务7返回 }catch (Exception e){ System.out.println("业务办理失败!"); e.printStackTrace(); } } public static List getMyBusiness(){ List mybusiness=loginUser.getMybusiness(); if(mybusiness==null||mybusiness.size()==0){ System.out.println("还没有办理过业务"); }else { for (Business b:mybusiness) { System.out.println(b); } } return mybusiness; //System.out.println("业务编号t业务标题t业务价格t业务描述"); } private static void myBusiness() { getMyBusiness(); returnMethod(); } private static void addMoney() { System.out.println("请输入充值的金额(1~200):"); String money=sc.next();//"100"---->100 Integer.praseInt(String,int radix) try{ int m=Integer.parseInt(money);//100a数字格式化异常 if(m>=1&&m<=200){ int oldMoney=loginUser.getMoney(); int newMoney=oldMoney+m; loginUser.setMoney(newMoney); returnMethod(); }else { System.out.println("输入金额不合理请重新操作"); addMoney(); } //登陆者是谁? //1将当前的登录对象传递过来,在用户登录的时候 //2定义一个方法,返回当前登录用户 //3定义一个全局变量-当前登录用户->登录成功 }catch (NumberFormatException e){ System.out.println("请输入正确的金额"); e.printStackTrace(); } } private static void updatePwd() { System.out.println("请输入原密码:"); String oldPwd=sc.next(); oldPwd=MD5Util.getMD5(oldPwd); if(oldPwd.equals(loginUser.getPassword())){ System.out.println("请输入新密码:"); String newPwd=sc.next(); newPwd=MD5Util.getMD5(newPwd); System.out.println("请在此输入新密码:"); String newPwd2=sc.next(); newPwd2=MD5Util.getMD5(newPwd2); if(newPwd.equals(newPwd2)){ loginUser.setPassword(newPwd); System.out.println("修改密码成功!"); index(); }else { System.out.println("两次密码不一致,请重新 *** 作"); updatePwd(); } }else { System.out.println("密码错误,请重新 *** 作"); updatePwd(); } } private static void showInfo( ) { // User u=null; // for (User user:users) { // if(user.getUsername().equals(username)){ // u=user; // break; // } // } System.out.println(loginUser); } private static void adminView() { System.out.println("欢迎你,admin"); System.out.println("1:查看所有用户");//查 System.out.println("2.展示现有业务");//查 System.out.println("3.添加业务");//新增 System.out.println("4.删除业务");//其实就是修改状态1--》0, 下架的 *** 作 System.out.println("5.修改业务价格");//修改 System.out.println("6.发布业务");//其实就是修改状态0--》1,上架的 *** 作 System.out.println("7.查看下架业务");//查 System.out.println("8.修改抽奖概率"); String num = sc.next(); switch(num){ case"1": showUsers(); break; case"2": showonlineBusiness(); break; case"3": addBusiness(); break; case"4": removeBusiness(); break; case"5": updateBusinessPrice(); break; case"6": publishBusiness(); break; case"7": showNotPublishBusiness(); break; default: System.out.println("输入有问题,重新输入"); adminView(); } } private static void showNotPublishBusiness() { for (Business b:businesses) { if(b.getStats().equals("1")){ System.out.println("业务编号:"+b.getBid()+"业务标题:"+b.getTitle()+"业务描述:"+b.getDesc()+" 业务价格:"+b.getPrice()); } } returnMethod(); } private static void publishBusiness() { System.out.println("请输入发布ID"); int id=sc.nextInt(); for (Business b:businesses) { if(id==b.getBid()){ b.setStats("1"); } } returnMethod(); } private static void updateBusinessPrice() { System.out.println("请输入业务ID"); int id=sc.nextInt(); for (Business b:businesses) { if(id==b.getBid()){ System.out.println("原来的价格是:"+b.getPrice()); } } System.out.println("请输入修改价格"); int price=sc.nextInt(); if(price>0){ for (Business b:businesses) { if(id==b.getBid()){ b.setPrice(price); } } returnMethod(); }else { System.out.println("请输入正确的价格。"); updateBusinessPrice(); } } private static void removeBusiness() { System.out.println("请输入需要下架业务ID"); int id=sc.nextInt(); for (Business b:businesses) { if(id==b.getBid()){ b.setStats("0"); } } returnMethod(); } private static void showonlineBusiness() { System.out.println("业务编号t业务标题t业务价格t业务描述"); for (Business b:businesses) { if(b.getStats().equals("1")){ System.out.println(b.getBid()+"t"+b.getTitle()+"t"+b.getPrice()+"t"+b.getDesc()); } } } private static void showUsers() { System.out.println(users); returnMethod(); } private static void addBusiness() { int id = getUserId2(); System.out.println(); System.out.println("请输入添加业务标题:"); String title=sc.next(); System.out.println("请输入业务详情:"); String desc=sc.next(); System.out.println("请输入业务价格:"); int price=sc.nextInt(); Business business=new Business(id,title,desc,price,"0"); businesses.add(business); System.out.println(business); returnMethod(); } public static void returnMethod(){ //返回的方法 System.out.println("1.返回 ,0.注销"); String num = sc.next(); if("1".equals(num)){ if("admin".equals(loginUser.getUsername())){ adminView(); }else { userView(); } }else if("0".equals(num)){ System.out.println("谢谢使用,系统已退出"); System.exit(1); }else{ System.out.println("谢谢使用,系统已退出"); System.exit(1); } } private static void register() { //注册 1.输入用户名密码 System.out.println("输入用户名"); String userName = sc.next(); System.out.println("输入密码"); String pwd = sc.next(); System.out.println("再次输入密码"); String rePwd = sc.next(); // 2.校验用户名是否存在 boolean isUsernameOK= checkUserName(userName);//为true则ok System.out.println("isUsernameOK"+isUsernameOK); // 3.校验两次密码是不是一致 boolean isPwdOk = false; if(pwd.equals(rePwd)){ isPwdOk = true;//能用 System.out.println("isPwdOk"+isPwdOk); } // 4.校验验证码 String code = getCode(); System.out.println(code); System.out.println("请输入验证码:"); String myCode = sc.next(); boolean isCodeOK = false; if(code.equals(myCode)){ isCodeOK = true; System.out.println("isCodeOK"+isCodeOK); } // 5.加密密码 if(isUsernameOK && isPwdOk && isCodeOK){ String myPwd = MD5Util.getMD5(pwd); int userId =getUserId(); User user = new User(userId,userName,myPwd); //System.out.println(user); users.add(user); index(); }else{ System.out.println("输入的内容不合理。"); index(); } } public static int getUserId(){//6.生成用户ID其实就是求最大值,list,最大值在最后 User user=users.get(users.size()-1);//从集合中获取最后一个用户对象 int uid = user.getUid(); uid++;//自增1 return uid; } public static int getUserId2(){ //其实就是求最大值,list,最大值在最后 Business business=businesses.get(businesses.size()-1);//从集合中获取最后一个用户对象 int uid = business.getBid(); uid++;//自增1 return uid;// 7.将用户名和密码封装到User中,然后将这个对象添加到集合中 } public static String getCode(){ String code = ""; for (int i = 0; i < 4; i++) { int num = (int)(Math.random()*10); code+=num; } return code; //用户名的校验,返回boolean - 如果能用的话,true,不能使用的话,返回false } public static boolean checkUserName(String userName){ boolean flag = true;// for(User user : users){//user.getUsername().equals(userName) if(userName.equals(user.getUsername())){ flag = false; break; } } return flag; } public static void addintegrate(){ System.out.println("1元钱可购买20积分,请输入充值金额:"); String money0=sc.next(); try{ int m=Integer.parseInt(money0);//100a数字格式化异常 if(m 运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)