【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养成】:案例:学生管理系统、斗地主洗牌 的相关文章

  • Gradle 构建错误:无法从 https://repo1.maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml 加载 Maven 元数据

    我在 Android studio 中遇到 gradle 构建错误 如下所示 Error A problem occurred configuring project MyApp Could not resolve all dependen
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 十万个为什么!

    目录 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养成】:案例:学生管理系统、斗地主洗牌

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