java 面向对象的 入门小案例

1 篇文章 0 订阅
1 篇文章 0 订阅

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  进入不同的 功能
		每个功能 
			有的设置死循环,重复判断 输入的账号密码,
			有的创建 用户对象 

代码详解:

/**
 *  用户信息类 (vo)
 */
class User{
	/*
	 * 封装用户属性
	 * 如果 同时 只能一个人在线 这不用定义 state 属性
	 */
	private String name;  //账号
	private String password;  //密码
	private int nums;		//会员号
	
	// private int state;   //状态
	
	public User() {}  //默认构造方法
	public User(String name,String password,int nums) {
		this.name = name;
		this.password = password;
		this.nums = nums;
	}
	// getter and setter 方法
	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;   		//记录元素个数
	
	/**
	 *  创建一个 构造方法 ,初始化 系统存贮 用户信息的 数组大小
	 *  默认为 10,输入小于0的数 也会为10
	 */
	public Operation() {
		users = new User[10];
	}
	public Operation(int size) {
		if (size>0) {
			users = new User[size];   //创建 数组的大小
		}else {
			users = new User[10];
		}
	}
	
	/**
	 *  注册方法
	 *  添加方法,如果添加的数超出数组的范围,就扩建数组,实现动态数组
	 *  向user的数组中添加数据(判断账号是否已经存在)
	 *  记录元素个数,
	 *  判断添加的 账号是否已经存在,只有账号不存在才会添加成功
	 *  会员号 重复概率极低,暂放弃 考虑
	 *  注册成功 后打印 一下 注册后的信息
	 */
	public void add(User user) {
		if(count>=users.length) {       //判断数组有没有被 填满
			users = Arrays.copyOf(users, users.length*3/2+1);   //扩建原来的2/3
		}
		for (int i=0;i<count;i++) {         //遍历,循环查找,是否存在重复账号
			if (users[i].getName().equals(user.getName())) {    //判断用户名是否存在
				System.out.println("你输入的账号重复,请重新输入!!");
				return;   		 //结束方法
			}
		}
		users[count] = user;          	//添加数组
		count++; 						//更新count
		// 打印注册后的信息
		System.out.println("注册成功!!");
		System.out.println("用户名\t密码\t会员号");
		System.out.println(user.getName()+"\t"+user.getPassword()+"\t"+user.getNums());
	}
	
	/**
	 * 登陆方法
	 * 传入 一个 用户对象
	 * 遍历用户数组 (users),查找账号
	 * 如果账号密码 对应 ,返回这个用户对象
	 * 没找到,返回null
	 */
	public User landing(User user) {
		//int state=0;        //记录登陆状态
		for (int i=0;i<count;i++) {    //   遍历
			if (users[i].getName().equals(user.getName())) {   //找到对应的账号
				if(users[i].getPassword().equals(user.getPassword())) {  //匹配密码是否正确
					//state=1;
					System.out.println("登陆成功,欢迎用户"+users[i].getName());
					return users[i];   //返回这个 用户对象
				}
			}
		}
		System.out.println("账号密码不正确,请重新输入");
		return null;
	}
	
	/**
	 *  抽奖方法
	 *  传入用户对象 和 幸运号码(num)
	 *  查看 对象的会员号  和幸运数字 是否 匹配
	 */
	public void extract(User user,int num) {
		if (user.getNums()==num) {
			System.out.println("今天的幸运数字为:"+num+" ,你的会员号为:"+user.getNums()+",恭喜你中奖了");
		}else {
			System.out.println("今天的幸运数字为:"+num+" ,你的会员号为:"+user.getNums()+",今天不是你的幸运日!!!");
		}
	}
	
	/**
	 *  删除 账号功能
	 *  循环遍历 数组 ,先匹配到账号
	 *  如果密码也匹配到,把删除位置以后的元素 往前挪一位,users[count] == null;把最后的元素释放
	 *  count -1
	 *  
	 */
	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--;              //  count-1
					System.out.println("删除用户成功");
					return;
				}
			}
		}
		System.out.println("你输入的账号密码不匹配,请重新输入!!!");  //没有匹配到
	}
	
	/**
	 *  修改密码的方法
	 *  用第一个方法匹配账号密码,成功返回下标,失败返回-1
	 *  再用第二个方法,传入下标和新密码       
	 *  把 新传入的密码 赋值给对应用户对象的密码属性 
	 */
	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("*********************************");
	}
}
//package LuckyDaw;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
 * @author 
 * user:
 * LuckyDraw.java
 * time:2018年10月25日
 * 
 *   项目介绍: 一共有三个类 --> 用户类,管理类,测试类(含主方法)
 *   功能介绍 :  
 *   1.注册
 *   2.登陆
 *   3.抽奖
 *   4.查询
 *   5.修改密码
 *   6.删除用户
 *   7.退出
 * 		
 * 	类介绍:
 * 用户类:  有账号,密码,会员号 三个私有属性
 * 		    有构造方法,getter and setter方法    输出打印信息的方法
 * 管理类:有自定义数组大小的构造方法
 * 		添加、注册方法,  实现 动态数组
 * 	          登陆方法(规定出错次数),
 * 		抽奖方法,只有登陆过的人才能抽奖
 * 		查询方法
 * 		修改密码方法,两个  ,第一个方法匹配账号密码 ,成功的话返回用户对象的下标,失败的话返回-1
 * 					如果但会下标,第二个方法传入下标和新密码,进行修改 密码操作
 * 		删除用户的方法 ,把删除位置以后的元素 往前挪一位,最后的元素释放
 * 		打印输出所有的方法
 * 测试类:实例化对象的准备幸运数字  ,死循环,保持可以 一直在主菜单状态
 * 		用switch  进入不同的 功能
 */
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:
				/*
				 *  登陆成功 返回一个用户对象 userLanding
				 *  登陆胜败返回 null
				 *  如果登录失败三次 则结束程序
				 */
				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:
				/*
				 *  修改密码功能 ,一共用到了两个方法
				 *  Modify1: 查看账号密码是否匹配 ,成功的话返回下标,失败返回-1
				 *  Modify2: 匹配成功后带着下标和新密码 去找 用户对象
				 */
				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);  //匹配账号密码,成功返回下标,失败返回-1
					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("程序结束");
		
	}
}
  • 14
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值