`

集合实现控制台登录注册案例

阅读更多


学习完集合框架以后做了一个用集合去实现控制台的注册登录的操作,这个案例是用集合去存储用户的注册的信息,所以存在每次运行程序都要进行一个注册的操作,这也是程序目前唯一的一个bug了。但是写完这个例子,还是让我受益颇多的,对于程序中真是的开发如何去进行分析。

首先要对这个案例分析有几个类:

1、实体类

2、用户操作类

3、在实体类与用户操作类之间的dao接口,也就是用户操作接口

4、游戏类,在成功进行登录之后可以玩游戏,这个游戏是一个猜数字游戏,随机生成一个1-100之间的数字,用户输入猜的数字

5、测试类,测试程序能否正常运行的类

其次是分包:

按照实际开发的操作我分了一下几个包:

cn.itheima.pojo.User:实体类

cn.itheima.dao.UserDao:用户操作接口

cn.itheima.dao.impl.UserDaoImpl:用户操作接口实现类

cn.itheima.game.GuessNumber:游戏类

cn.itheima.test.UserTest:测试类

最后代码实现:

从实体类开始,实体类相对比较简单,就是对外提供setXXX和getXXX方法来访问数据

User类:

package cn.itheima.pojo;

public class User {
	private String username;  //用户名
	private String password;  //密码
	
	public User(){}
	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;
	}
	
}


接口:

 

 

package cn.itheima.dao;

import cn.itcast.pojo.User;

public interface UserDao {
	/**
	 * 登录功能
	 * 
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @return
	 */
	public abstract boolean isLogin(String username, String password);
	/**
	 * 注册功能
	 * @param user 用户
	 */
	public abstract void regist(User user);

}


接口实现类:

 

 

package cn.itheima.dao.impl;

import java.util.ArrayList;

import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;

public class UserDaoImpl implements UserDao {
	
	private static ArrayList<User> array = new ArrayList<User>();//定义保存用户的集合对象
	
	public boolean isLogin(String username , String password){
		boolean flag = false;
		//遍历集合匹配用户名和密码
		for(User u : array){
			if(u.getUsername().equals(username) && u.getPassword().equals(password)){
				flag = true;
				break;
			}
		}
		return flag;
	}
	
	public void regist(User user){
		array.add(user);
	}

}


游戏类:

 

package cn.itheima.game;

import java.util.Scanner;

public class GuessNumber {
	public static void start(){
		Scanner sc = new Scanner(System.in);
		int randomNum = (int)(Math.random()*100+1);
		int count = 0;
		while(true){
			count++;
			System.out.println("请输入你猜的数字:");
			int num = sc.nextInt();
			
			if(num > randomNum){
				System.out.println("您猜的数据大了");
			}else if(num < randomNum){
				System.out.println("您猜的数据小了");
			}else{
				System.out.println("恭喜您,"+count+"次就猜中了");
				break;
			}
			
		}
	}
}


最后是测试类

 

package cn.itheima.test;

import java.util.Scanner;

import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.game.GuessNumber;
import cn.itcast.pojo.User;

public class UserTest {

	public static void main(String[] args) {
		while(true){
			System.out.println("--------------欢迎光临--------------");
			System.out.println("1登录");
			System.out.println("2注册");
			System.out.println("3退出");
			
			Scanner sc = new Scanner(System.in);
			String choiceString = sc.nextLine();
			
			int choiceNum = Integer.valueOf(choiceString);
			UserDao ud = new UserDaoImpl();
			switch(choiceNum){
				case 1 : 
					System.out.println("--------------登录界面--------------");
					System.out.println("请输入用户名:");
					String username = sc.nextLine();
					System.out.println("请输入密码:");
					String password = sc.nextLine();
					
					User user = new User();
					user.setUsername(username);
					user.setPassword(password);
					boolean flag = ud.isLogin(username, password);
					if(flag){
						System.out.println("登录成功,可以开始玩游戏了");
						System.out.println("你要玩游戏吗?y/n");
						while(true){
							String resultString = sc.nextLine();
							if("y".equals(resultString)){
								GuessNumber.start();
								System.out.println("您还要玩吗?y/n");
							}else{
								break;
							}
						}
//						break;
						System.out.println("谢谢使用,程序已退出");
						System.exit(0);
					}else{
						System.out.println("用户名或密码错误,请重新输入");
					}
					
					break;
				case 2 :
					System.out.println("--------------注册界面--------------");
					System.out.println("请输入用户名:");
					String newUsername = sc.nextLine();
					System.out.println("请输入密码:");
					String newPassword = sc.nextLine();
					
					User newUser = new User();
					newUser.setUsername(newUsername);
					newUser.setPassword(newPassword);
					
					
					ud.regist(newUser);
					
					break;
				case 3 : 
				default : 
					System.out.println("谢谢光临,下次再来");
					System.exit(0);
					break;
				
			}
		}
	}

}


注意的地方:因为是使用集合去实现数据的存储,所以需要在用户接口实现类中,讲保存用户数据的集合对象加上静态,这是因为在测试类中使用了循环,每次循环都会产生一个新的对象,进而成员变量就无法共享了,为了实现数据的共享,就使用静态修饰集合。

总结:这个例子使用了基本的流程控制语句以及面向对象当中静态关键字的特点,以及集合和泛型的使用,并且实际开发当中需要分包,凡是接口放在dao包下,接口实现类放在dao.impl包下,实现类放在test下,实体类放在pojo下。

 

 

分享到:
评论

相关推荐

    Java(控制台)学生管理系统.rar

    在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个实现对学生信息的添加、删除、修改和查询功能。系统首页即每个功能具体要求如下。 系统首页 相应功能实现后都回到首页,提示用户选择功能。 1、...

    基于Java的控制台图书购买系统

    本系统数据存储在map集合中,采用单例模式保证了操作集合的一致...功能实现了图书的添加,入库,出库等操作,用户实现了购买,查看图书功能。整体设计采用有单例模式、静态工厂模式等,适合有基础的同学下载参照学习。

    C#中List集合与字典Dictionary的理解和运用

    一个关于C#中集合List和字典Dictionary的理解运用的控制台案例

    使用Java实现一个基于内存的英文全文检索搜索引擎【100012394】

    使用统一的测试文档集合、统一的搜索测试案例对代码进行功能测试,构建好的索引和基于统一的搜索测试案例的检索结果最后输出到文本文件里作为实验报告附件提交。 本实验只需要基于控制台实现,实验报告里需要提供...

    EMS学生管理系统案例

    模拟实现一个基于文本界面的《EMS学生信息管理系统》 熟悉Java中的集合和IO知识,进一步掌握编程技巧和调试技巧 制作一个可以永久存储数据的EMS学生信息管理系统,功能有: **1.添加学生信息** **2.删除学生信息...

    C# Winform数据库应用设计(附开发案例

    c#编程集合资料,不错的应用设计,另附一些开发案例的下载地址,欢迎大家下载学习。 学习完本课程之后,我们需要达到以下目标: (1) 掌握基本的C#语法,熟练运用C#编写基本的程序逻辑。 (2) 能够创建C#控制台...

    Java经典编程300例(完整版+源码

    本书提供了大量的源程序、素材,提供了相关的模块库、案例库、素材库、题库等多种形式辅助学习资料,还提供迅速及时的微博、qq、论坛等技术支持。 本书内容详尽,实例丰富,非常适合作为零基础学习人员的学习用书...

    本科毕业设计开题报告(食得客快餐店订餐系统的设计与实现)

    (4)登录管理模块:实现对登录信息的管理功能。 (5)购物车模块:实现购物车中的添加、删除、清空条目等功能。 四、拟解决的主要问题 本系统开发的技术难点主要有两个方面:一是业务逻辑的理解;二是数据库逻辑...

    flink1.12入门到精通视频课程

    10-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-匿名内部类版 11-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-Lambda版 12-[掌握]-Flink入门案例-代码实现-2-DataStream流批一体-On-Yarn 13-[掌握...

    Java虚拟机

    4.3.1 JConsole:Java监视与管理控制台 4.3.2 VisualVM:多合一故障处理工具 4.4 本章小结 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 高性能硬件上的程序部署策略 5.2.2 集群间同步导致的内存...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 139 6.3.2 常量池 / 141 6.3.3 访问标志 / 147 6.3.4 类索引、父类索引与接口索引集合 / 148 6.3.5 字段表集合 / 149 6.3.6 方法表集合 / 153 6.3.7 属性表集合 / 155 6.4 Class文件结构的发展 / 168 6.5 ...

    JAVA银行管理系统设计.docx

     案例难度 案例覆盖技能点 使用JDBC操作数据库、常用数据库操作对象的使用、ArrayList的使用、加深对集合框架的理解、异常的处理、scanner的使用 推荐案例完成时间 1天 适用课程和对象 JAVA面向对象编程基础 第...

    p0:翻新专案0

    汽车代理商描述汽车经销店应用程序是基于控制台的应用程序,可促进汽车的购买。 员工可以将汽车添加到该批次中并管理这些汽车的报价,而客户可以查看该批次中的汽车并进行报价。目的我们希望看到您可以在截止日期...

    C#6.0学习笔记——从第一行C#代码到第一个项目设计(第一个包)

    全书共包括21章,分别介绍了以下内容: 开发环境搭建、语法基础、面向对象编程、类型转换、字符串处理与数学运算、控制台应用程序、变体的应用、集合与泛型、调试与单元测试、Lambda表达式、LINQ查询语句、Windows...

    C#6.0学习笔记——从第一行C#代码到第一个项目设计(第二个包)

    全书共包括21章,分别介绍了以下内容: 开发环境搭建、语法基础、面向对象编程、类型转换、字符串处理与数学运算、控制台应用程序、变体的应用、集合与泛型、调试与单元测试、Lambda表达式、LINQ查询语句、Windows...

    学通Java的24堂课

    1.1.4 java项目成功案例 6 1.1.5 怎样学好java 8 1.2 环境搭建 8 1.2.1 jdk下载 8 1.2.2 jdk安装 10 1.2.3 配置环境变量 11 1.3 编写第一个java程序 14 1.3.1 在记事本中输入代码 14 1.3.2 保存代码为源代码...

    JAVA 范例大全 光盘 资源

    JAVA 范例大全 光盘 资源 ...21.1 登录界面的设计与代码实现 705 21.2 功能选择界面的设计 708 21.3 学生信息系统界面的设计 716 21.4 教师信息系统界面的设计 727 21.5 领导信息系统界面的设计... 738

Global site tag (gtag.js) - Google Analytics