【java养成】:案例:学生管理系统、斗地主洗牌

2023-11-12


案例学习:学生管理系统

     学生管理系统(参考书籍)

  1. 系统首页:用于显示系统的所有操作,并根据用户在控制台的输入选择需要使用的功能。
  2. 查询功能:用户选择该功能后,在控制台打印所有学生的信息。
  3. 添加功能:用户选择该功能后,要求用户在控制台输入学生学号、姓名、年龄和居住地的基本信息。在输入学号时,判断学号是否被占用,如果被占用则添加失败,并给出相应的提示,反之则添加成功
  4. 修改功能:用户选择该功能后,提示用户在控制台输入需要修改的学生的学号、姓名、年龄和居住地学生信息,并使用输入的学生学号判断是否有此人,如果有则修改原有的学生信息,反正则提示需要修改的学生信息不存在。
  5. 退出功能:用户选择该功能后,程序正常关闭。

案例代码:

StudentMethod类:

package cn.itcast.studentpack;

public class StudentMethod {

	private long sno;
	private String name;
	private int age;
	private String address;

	public StudentMethod() {
	}

	public StudentMethod(long sno, String name, int age, String address) {
		this.sno = sno;
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public long getSno() {
		return sno;
	}

	public void setSno(long sno) {
		this.sno = sno;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
}

StudentTest类:

/**
 * @author LHB 学生管理系统 编写一个模拟学生管理系统程序,可以实现对学生信息的添加、删除、修改和查询功能,
 *         要求使用List集合存储自定义的对象集合,并熟练使用List集合的中常用方法实现相关的操作。
 */
package cn.itcast.studentpack;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class StudentTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		List<StudentMethod> list = new ArrayList<>();

		while (true) {
			printInfo();
			switch (sc.nextInt()) {
			case 1:
				showStudent(list);
				break;
			case 2:
				addStudent(list);
				break;
			case 3:
				deleteStudent(list);
				break;
			case 4:
				updateStudent(list);
				System.out.println("修改学生");
				break;
			case 5:
				System.out.println("退出系统");
				System.exit(0);
				break;
			default:
				System.out.println("输入有误,请重新输入!");
				break;
			}
		}
	}

	public static void printInfo() {
		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("请输入你的选择:");
	}

	private static void addStudent(List<StudentMethod> list) {
		StudentMethod s = new StudentMethod();
		Scanner sc = new Scanner(System.in);
		long sno;
		while (true) {
			System.out.print("学号:");
			sno = sc.nextLong();
			boolean flag = false;
			for (StudentMethod stu : list) {
				if (sno == stu.getSno()) {
					flag = true;
					break;
				}
			}
			if (flag) {
				System.out.println("学号重复了!请重新输入:");
			} else {

				System.out.print("姓名:");
				String name = sc.next();
				System.out.print("年龄:");
				int age = sc.nextInt();
				System.out.print("地址:");
				String address = sc.next();

				s.setSno(sno);
				s.setName(name);
				s.setAge(age);
				s.setAddress(address);
				list.add(s);
				System.out.println("添加完成!\n");
				break;
			}
		}
	}

	private static void deleteStudent(List<StudentMethod> list) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要删除的学生的学号:");
		long sno = sc.nextLong();
		int idx = -1;
		for (int i = 0; i < list.size(); i++) {
			StudentMethod stu = list.get(i);
			if (sno == stu.getSno()) {
				idx = i;
				break;
			}
		}
		if (idx != -1) {
			System.out.println("删除成功!\n");
			list.remove(idx);
		} else {
			System.out.println("没有此位同学的信息!请重新选择!");
		}
	}

	private static void updateStudent(List<StudentMethod> list) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要修改的学生的学号:");
		long sno = sc.nextLong();
		int idx = -1;
		for (int i = 0; i < list.size(); i++) {
			StudentMethod s = list.get(i);
			if (s.getSno() == sno) {
				idx = i;
				break;
			}
		}
		if (idx != -1) {
			StudentMethod s = new StudentMethod();
			System.out.println("修改姓名:");
			String name = sc.next();
			s.setName(name);
			System.out.println("修改年龄:");
			int age = sc.nextInt();
			s.setAge(age);
			System.out.println("修改地址:");
			String address = sc.next();
			s.setAddress(address);

			list.set(idx, s);
			System.out.println("修改完成!\n");
		} else {
			System.out.println("没有此同学的信息,请重新操作!\n");
		}

	}

	private static void showStudent(List<StudentMethod> list) {
		boolean empty = isEmpty(list);
		if (empty) {
			System.out.println("不好意思,目前没有学生信息可供查询,请回去重新选择你的操作!\n");
			return;
		} else {
			for (StudentMethod student : list) {
				System.out.println(student.getSno() + ", " + student.getName() + ", " + student.getAge() + ", "
						+ student.getAddress());
			}
			System.out.println();
		}
	}

	private static boolean isEmpty(List<StudentMethod> list) {
		if (list.isEmpty())
			return true;
		else
			return false;
	}
}

案例学习:斗地主洗牌

斗地主洗牌(参考书籍)

        编写一个斗地主的洗牌发牌程序,按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有54张牌,牌面由花色和数字组成(包括J、Q、K、A字母)组成,花色有♠、♥、♦、♣ 四种,分别表示黑桃、红桃、方块、梅花,小☺、大☻分别表示小王和大王。斗地主游戏共有三位玩家参与,首先将这54张牌的顺序打乱每人轮流摸一次牌,剩余3张留作底牌,然后在控制台打印三位玩家的牌和三张底牌。

案例代码:

playcards类:

/**
 * @author LHB  斗地主
 *
 */
package cn.cards;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class playcards {
	public static void main(String[] args) {
		// 花色
		ArrayList<String> color = new ArrayList<String>();
		color.add("♠");
		color.add("♥");
		color.add("♦");
		color.add("♣");
		// 排序
		ArrayList<String> number = new ArrayList<String>();
		for (int i = 3; i <= 10; i++) {
			number.add(i + "");
		}
		number.add("J");
		number.add("Q");
		number.add("K");
		number.add("A");
		number.add("2");
		HashMap<Integer, String> map = new HashMap<Integer, String>();
		int index = 0;
		for (String thisNumber : number) {
			for (String thisColor : color) {
				map.put(index++, thisColor + thisNumber);
			}
		}
		// 大小王
		map.put(index++, "小☺");
		map.put(index++, "大☻");
		ArrayList<Integer> cards = new ArrayList<Integer>();
		for (int i = 0; i <= 53; i++) {
			cards.add(i);
		}
		Collections.shuffle(cards);
		ArrayList<Integer> iPlayer = new ArrayList<Integer>();
		ArrayList<Integer> iPlayer2 = new ArrayList<Integer>();
		ArrayList<Integer> iPlayer3 = new ArrayList<Integer>();
		ArrayList<Integer> iSecretCards = new ArrayList<Integer>();
		for (int i = 0; i < cards.size(); i++) {
			if (i >= 51) {
				iSecretCards.add(cards.get(i));
			} else {
				if (i % 3 == 0) {
					iPlayer.add(cards.get(i));
				} else if (i % 3 == 1) {
					iPlayer2.add(cards.get(i));
				} else {
					iPlayer3.add(cards.get(i));
				}
			}
		}
		Collections.sort(iPlayer);
		Collections.sort(iPlayer2);
		Collections.sort(iPlayer3);
		ArrayList<String> sPlayer = new ArrayList<String>();
		ArrayList<String> sPlayer2 = new ArrayList<String>();
		ArrayList<String> sPlayer3 = new ArrayList<String>();
		ArrayList<String> sSecretCards = new ArrayList<String>();
		for (Integer key : iPlayer) {
			sPlayer.add(map.get(key));
		}
		for (Integer key : iPlayer2) {
			sPlayer2.add(map.get(key));
		}
		for (Integer key : iPlayer3) {
			sPlayer3.add(map.get(key));
		}
		for (Integer key : iSecretCards) {
			sSecretCards.add(map.get(key));
		}
		// 显示
		System.out.println("玩家1:" + sPlayer);
		System.out.println("玩家2:" + sPlayer2);
		System.out.println("玩家3:" + sPlayer3);
		System.out.println("底牌:" + sSecretCards);
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【java养成】:案例:学生管理系统、斗地主洗牌 的相关文章

  • Java - 因内存不足错误而关闭

    关于如何最好地处理这个问题 我听到了非常矛盾的事情 并且陷入了以下困境 OOME 会导致一个线程崩溃 但不会导致整个应用程序崩溃 我需要关闭整个应用程序 但不能 因为线程没有剩余内存 我一直认为最佳实践是让它们离开 这样 JVM 就会死掉
  • 获取文件的锁

    我想在对特定文件开始 threo read 时获取文件上的锁定 以便其他应用程序无法读取已锁定的文件并希望在线程终止时释放锁定文件 您可以获得一个FileLock https docs oracle com javase 8 docs ap
  • 带有 Android 支持库 v7 的 Maven Android 插件

    我使用 maven android plugin 构建我的 android 应用程序 它依赖于 android 支持库 v4 和 v7 由于我没有找到如何从developer android com下载整个sdk 因此我无法使用maven
  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • (Java) App Engine 中的静态文件无法访问

    The 示例文档 http code google com appengine docs java gettingstarted staticfiles html表示您只需将文件放在 war 或子目录 中 并且应该可以从主机访问它们 只要它
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • Spring数据中的本机查询连接

    我有课 Entity public class User Id Long id String name ManyToMany List
  • 如何通过注解用try-catch包装方法?

    如果应该在方法调用中忽略异常 则可以编写以下内容 public void addEntryIfPresent String key Dto dto try Map
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 如何停止执行的 Jar 文件

    这感觉像是一个愚蠢的问题 但我似乎无法弄清楚 当我在 Windows 上运行 jar 文件时 它不会出现在任务管理器进程中 我怎样才能终止它 我已经尝试过 TASKKILL 但它对我也不起作用 On Linux ps ef grep jav
  • Java - 从 XML 文件读取注释

    我必须从 XML 文件中提取注释 我找不到使用 JDOM 或其他东西来让它们使用的方法 目前我使用 Regex 和 FileReader 但我不认为这是正确的方法 您可以使用 JDOM 之类的东西从 XML 文件中获取注释吗 或者它仅限于元
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有

随机推荐

  • 十万个为什么!

    目录 1 noqa 在Python评论中意味着什么 1 noqa 在Python评论中意味着什么 import sys sys path append r C dev import some module noqa 答案 将 noqa添加到
  • libreadline.so.6 required but libreadline.so.7 is the current version

    There is an issue talking about this on Github https github com electron userland electron builder issues 993 This error
  • fabric,peer channel create报错:Error: got unexpected status: BAD_REQUEST -- error authorizing update:

    hyperledger fabric的cli在peer channel create 时报错 Error got unexpected status BAD REQUEST error authorizing update error va
  • sudo: vim: command not found

    sudo rm var lib dpkg lock sudo apt get update sudo apt get install vim
  • Maven将依赖包、jar/war包及配置文件输出到指定目录

    写在前面 1 使用 maven dependency plugin 插件将依赖包导出到指定文件夹 2 使用 maven war plugin 插件将war打包到指定路径 3 使用 maven jar plugin 插件移除配置文件将其不打包
  • cmd命令和dos命令_在Windows MS-DOS命令行教程中,带有示例的CMD / C是什么意思?

    cmd命令和dos命令 MS DOS is an operating system and shell used to run commands and provide a command line interface in Windows
  • linux内核中用到的设计模式,Linux内核设计模式–Reference Counts

    这是翻译版 英文原址 设计模式最早来源于建筑学 后被计算机科学引用 简单来说 一个设计模式描述了某类设计问题 并且针对此类问题给出了一个被实践证明有效的解决方案 Linux内核的开发中也遇到过很多设计问题 并且针对这些问题 内核开发者给出了
  • 类型保护

    1 自定义类型保护 function isString value number string value is string const number Math random 10 return number lt 5 首先定义一个函数
  • java.util.zip.ZipException: invalid LOC header (bad signature)

    java util zip ZipException invalid LOC header bad signature maven项目打包时 jar包本身损坏 需要将本地repository中的jar相关文件清除 重新从remote rep
  • 依赖

    添加构建依赖项 概览 implementation与api AndroidStudio升级3 0 gradle随之升级3 0 0 build gradle默implementation而非之前compile gradle 3 0 0 有依赖
  • anaconda 2023.7 安装、配置、开机启动和基本操作 (windows+linux 详细)

    包括notebook的开机启动 启动脚本 配置等 2023年8月13日更新教程 anaconda是conda中的一种 也可以选用其它的conda anaconda会把python pip等直接安装上 不用额外装配了 省心 conda对于需要
  • 文件外发控制如何实现?这个秘密武器请拿走

    你担心敏感文件没有经过授权就外流了吗 你担心文件发给他人后就完全失去控制了吗 你担心图纸外发泄密后 没有任何手段进行追溯吗 你担心重要文档发给别人参考后 被对方肆意转载或复制使用吗 你担心文件过大 其实对方根本就没有收到吗 以上这些问题 都
  • 权限系统与RBAC模型概述[绝对经典]

    0 前言 一年前 我负责的一个项目中需要权限管理 当时凭着自己的逻辑设计出了一套权限管理模型 基本原理与RBAC非常相似 只是过于简陋 当时google了一些权限管理的资料 从中了解到早就有了RBAC这个东西 可惜一直没狠下心来学习 更详细
  • 编程猫创作工具:新版Kitten新体验

    在少儿编程图形化工具方面 Scratch是老牌的创作工具 最为流行 用的人也最多 但是Scratch界面不友好 本地化功能欠缺 网络访问慢等问题也日渐显著 编程猫自主研发的图形化编程创作工具 源码编辑器应运而生 Kitten以更丰富的素材
  • js 判断是不是浮点

    true 非浮点 false 浮点 isNotFloat theFloat gt if theFloat theFloat theFloat trim else return true 判断是否为浮点数 let len theFloat l
  • 测试数据设计方案

    一 测试覆盖率 测试方法及技巧的应用 真正业务场景的满足 测试数据的设计覆盖 1 测试数据设计方法一 构造测试数据时 需要看数据的开源 数据的来源一般来讲有3个 一个是根据被测系统需求的分析 针对正常业务 异常情况 边界情况等来构建完整的数
  • 思科交换机65系列配置

    65系列 enable 进入配置模式 enable set ip http server enable 开启http服务 enable enable enable set system name sike swtest 配置交换机名称 en
  • Mac 上安装并启动 MySQL 服务

    目录 背景 步骤 步骤 1 官网下载 dmg 文件并安装 步骤 2 在系统设置里启动 MySQL 服务 步骤 3 更改 root 密码 步骤 3 1 停止 MySQL 服务 步骤 3 2 在安全模式下启动 MySQL 服务 步骤 3 3 更
  • 三款免费杀毒软件+clamAV

    第一款 antivir PE 完全免费 http www free av com 软件厂商 H BEDV Datentechnik GmbH 软件主页 http www free av com 厂商邮件 virus free av com
  • 【java养成】:案例:学生管理系统、斗地主洗牌

    案例学习 学生管理系统 学生管理系统 参考书籍 系统首页 用于显示系统的所有操作 并根据用户在控制台的输入选择需要使用的功能 查询功能 用户选择该功能后 在控制台打印所有学生的信息 添加功能 用户选择该功能后 要求用户在控制台输入学生学号