java 面向对象的 入门小案例
大富翁案例的说明文档
项目案例: 大富翁游戏系统
功能: 有注册功能,登陆功能,抽奖功能,查询功能,修改密码功能,
删除账号功能,退出功能
思路:
需要建立一个用户类,每次新建注册用户时new一下即可。
需要建立一个管理类,具备增删改查的方法。
需要建立一个测试类,在主方法中循环显示主菜单页面。
各个类的具体说明:
User类:
定义私有的nama(账号)、私有的password(密码)、私有的会员号、
并向外面提供一系列公共的getter and setting方法,来调用本类的属性。
建立默认的构造方法和带参的构造方法,方遍直接赋值。
可能用到的知识点:
private:封装
把属性封装起来,拒绝外面的直接赋值和调用,并且向外面提供公共的方法来设置和调用 本类属性。
构造方法:
方法名和类名相同,没有声明返回类型的方法,(不可被继承)
分为无参的构造方法(默认的构造方法,一般要保留),
带参的构造方法,方遍直接赋值。(在实例化对象时直接赋值)。
在定义一个公共的打印方法,方便输出本类信息。
Operation类:(管理类)
在类中创建一个存储用户对象的数组,数组类型与元素类型相同 User[] user = null;
创建一个构造方法,传入一个数组的大小,user = new User[size];
如果没有传入数,或者传入数小于0,则给他一个默认大小。
定义一个count=0,记录数组中元素的个数,并切可以作为下标遍历数组
注册的方法:
先判断元素个数,如果数组满了,就新建一个更大的数组,把数据拷贝过来即可
传入一个用户,遍历用户数组,查看已有用户的账号是否存在,如果存在,给出提示,重新输入
如果不存在,则存储起来,count++;
登陆的方法:
传入一个用户,或者转入账号密码;遍历数组,如果匹配到账号,查看密码相同,则返回数组中这个用户对象
如果没有匹配到,则返回一个空对象
抽奖方法:
可以在实验类中直接比较,也可以在本方法中比较,
修改密码的方法
用第一个方法匹配账号密码,成功返回下标,失败返回-1
再用第二个方法,传入下标和新密码
把 新传入的密码 赋值给对应用户对象的密码属性
删除的方法
循环遍历 数组 ,先匹配到账号
如果密码也匹配到,把删除位置以后的元素 往前挪一位,users[count] == null;把最后的元素释放
count -1
测试类:
实例化对象的准备幸运数字 ,死循环,保持可以 一直在主菜单状态
用switch 进入不同的 功能
每个功能
有的设置死循环,重复判断 输入的账号密码,
有的创建 用户对象
代码详解:
class User{
private String name;
private String password;
private int nums;
public User() {}
public User(String name,String password,int nums) {
this.name = name;
this.password = password;
this.nums = nums;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setNums(int nums) {
this.nums = nums;
}
public int getNums() {
return nums;
}
public void print() {
System.out.println("name:"+name+" , pasword:"+password+" , membersNum:"+nums);
}
}
class Operation{
private User[] users =null;
private int count=0;
public Operation() {
users = new User[10];
}
public Operation(int size) {
if (size>0) {
users = new User[size];
}else {
users = new User[10];
}
}
public void add(User user) {
if(count>=users.length) {
users = Arrays.copyOf(users, users.length*3/2+1);
}
for (int i=0;i<count;i++) {
if (users[i].getName().equals(user.getName())) {
System.out.println("你输入的账号重复,请重新输入!!");
return;
}
}
users[count] = user;
count++;
System.out.println("注册成功!!");
System.out.println("用户名\t密码\t会员号");
System.out.println(user.getName()+"\t"+user.getPassword()+"\t"+user.getNums());
}
public User landing(User user) {
for (int i=0;i<count;i++) {
if (users[i].getName().equals(user.getName())) {
if(users[i].getPassword().equals(user.getPassword())) {
System.out.println("登陆成功,欢迎用户"+users[i].getName());
return users[i];
}
}
}
System.out.println("账号密码不正确,请重新输入");
return null;
}
public void extract(User user,int num) {
if (user.getNums()==num) {
System.out.println("今天的幸运数字为:"+num+" ,你的会员号为:"+user.getNums()+",恭喜你中奖了");
}else {
System.out.println("今天的幸运数字为:"+num+" ,你的会员号为:"+user.getNums()+",今天不是你的幸运日!!!");
}
}
public void delete(String name,String password) {
for (int i=0;i<count;i++) {
if (users[i].getName().equals(name)) {
if(users[i].getPassword().equals(password)) {
for(int j=i;j<count;j++) {
users[i] = users[i+1];
}
users[count]=null;
count--;
System.out.println("删除用户成功");
return;
}
}
}
System.out.println("你输入的账号密码不匹配,请重新输入!!!");
}
public int Modify1(String name,String password) {
for (int i=0;i<count;i++) {
if (users[i].getName().equals(name)) {
if(users[i].getPassword().equals(password)) {
return i;
}
}
}
System.out.println("你输入的 账号密码不匹配,请重新输入!!");
return -1;
}
public void Modify2(int i,String password1) {
users[i].setPassword(password1);
System.out.println("修改密码成功!!");
}
public void print() {
for (int i=0;i<count;i++) {
users[i].print();
}
}
public void printMenu() {
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(" \t 其他数字退出系统");
System.out.println("*********************************");
}
}
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class LuckyDraw {
public static void main(String[] args) {
Operation o = new Operation(10);
Scanner input = new Scanner(System.in);
Random ran = new Random();
int num = ran.nextInt(8999)+1000;
o.printMenu();
System.out.print("请输入你的选择:");
int n = input.nextInt();
User userLanding = null;
int lodNum = 0;
flog:
while(n!=0) {
switch(n) {
case 1:
String str = "y";
while ("y".equals(str)) {
System.out.println("大富翁系统 ->注册");
System.out.print("请输入账号:");
String name = input.next();
System.out.print("请输入密码:");
String pasword = input.next();
int nums = ran.nextInt(8999)+1000;
User u = new User(name,pasword,nums);
o.add(u);
System.out.println("还需要继续注册吗?(y/n)");
str = input.next();
}
break;
case 2:
System.out.println("大富翁系统 ->登陆");
System.out.print("请输入账号:");
String name = input.next();
System.out.print("请输入密码:");
String pasword = input.next();
userLanding = o.landing(new User(name,pasword,0));
lodNum++;
if (lodNum>=3) {
break flog;
}
break;
case 3:
System.out.println("大富翁系统 ->抽奖");
if (userLanding != null) {
o.extract(userLanding, num);
}else {
System.out.println("请登陆后再抽奖");
}
break;
case 4:
System.out.println("大富翁系统 ->查询");
o.print();
break;
case 5:
String str2 = "y";
while("y".equals(str2)) {
System.out.println("大富翁系统 ->修改密码");
System.out.println("请输入账号:");
String name1 = input.next();
System.out.println("请输入密码:");
String password1 = input.next();
int passwordIndex = o.Modify1(name1, password1);
if (passwordIndex>=0) {
while(true) {
System.out.println("请输入新密码:");
String password3 = input.next();
System.out.println("请再次输入新密码:");
String password4 = input.next();
if (password3.equals(password4)) {
o.Modify2(passwordIndex, password4);
break;
}else {
System.out.println("两次密码不相同");
}
System.out.println("是否要重新输入新密码(y/n)");
String str3 = input.next();
if("y".equals(str3)) {
continue;
}else {
break;
}
}
}
System.out.println("是否继续修改密码:(y/n)");
str2 = input.next();
}
break;
case 6:
String str1 = "y";
while("y".equals(str1)) {
System.out.println("大富翁系统 ->删除账号");
System.out.println("请输入账号:");
String name1 = input.next();
System.out.println("请输入密码:");
String password1 = input.next();
o.delete(name1, password1);
System.out.println("是否继续删除用户:(y/n)");
str1 = input.next();
}
break;
default:
n = 0;
break flog;
}
o.printMenu();
System.out.print("请输入你的选择:");
n = input.nextInt();
}
System.out.println("程序结束");
}
}