GDPU 天码行空11

(一)实验目的

1、掌握JAVA中IO中各种类及其构造方法;
2、重点掌握IO中类所具有的IO操作方法;
3、熟悉软件中登录模块的开发方法;
4、掌握IO中读写常用方法。
5、进一步熟悉正则规则的使用方法。

(二)实验内容和步骤

1、游戏中有一个用户注册与登录模块,用于用户注册和登录。请编写一个用户注册和登录程序,通过选择注册、登录和退出进入相应处理。当选择注册时,新用户可以输入用户名和密码,显示该用户在xxxx年xx月xx日xx时xx分注册成功,并将用户名和密码保存到文件中,选择登录时,通过比对用户输入的用户各和密码是否与已经保存的文件中的用户名和密码提示用户登录成功或失败,当失败时,提示用户重新输入,并提示剩余的可输入次数,登录输入有三次机会,三次输入均错误则锁定账户并提示用户与管理员联系。选择退出时程序退出。(进阶:如能完成上述功能,可以增加下述功能:增加一个验证码,验证码为随机生成的1-100的数字;用户名必须为字母,密码可以是字母也可以是数字,长度必须在6-22位之间;在注册时,要求用户输入两次密码,并对两次输入的密码进行比对,两次相同时通过,不同时提示两次密码输入不一致,请重新输入。)

💖 UserAuthentication.java

import java.io.*;
import java.nio.file.*;
import java.time.*;
import java.util.Scanner;public class UserAuthentication {private static final String USER_FILE = "users.txt";private static final int MAX_ATTEMPTS = 3;public static void main(String[] args) {ensureUserFileExists();Scanner scanner = new Scanner(System.in);while (true) {System.out.println("请选择操作:");System.out.println("1. 注册");System.out.println("2. 登录");System.out.println("3. 退出");System.out.print("请输入你的选择(1/2/3): ");int choice = scanner.nextInt();switch (choice) {case 1:registerUser(scanner);break;case 2:loginUser(scanner);break;case 3:System.out.println("程序退出。");scanner.close();System.exit(0);default:System.out.println("无效的选择,请重新输入。");}}}private static void ensureUserFileExists() {Path path = Paths.get(USER_FILE);if (!Files.exists(path)) {try {Files.createFile(path);} catch (IOException e) {System.out.println("创建用户文件失败。");e.printStackTrace();}}}private static void registerUser(Scanner scanner) {System.out.print("请输入用户名: ");String username = scanner.next();if (!username.matches("[a-zA-Z]+")) {System.out.println("用户名必须为字母。");return;}System.out.print("请输入密码: ");String password1 = scanner.next();System.out.print("请再次输入密码: ");String password2 = scanner.next();if (!password1.equals(password2)) {System.out.println("两次密码输入不一致,请重新输入。");return;}if (password1.length() < 6 || password1.length() > 22) {System.out.println("密码长度必须在6-22位之间。");return;}// 检查用户名是否已存在if (isUsernameExists(username)) {System.out.println("用户名已存在,请选择其他用户名。");return;}// 写入用户信息到文件writeUserInfoToFile(username, password1, LocalDateTime.now());System.out.println("注册成功,用户名: " + username + " 在 " + LocalDateTime.now() + " 注册成功。");}private static boolean isUsernameExists(String username) {try (BufferedReader reader = Files.newBufferedReader(Paths.get(USER_FILE))) {String line;while ((line = reader.readLine()) != null) {String[] parts = line.split(",");if (parts.length > 0 && username.equals(parts[0])) {return true;}}} catch (IOException e) {System.out.println("读取用户文件失败。");e.printStackTrace();}return false;}private static void writeUserInfoToFile(String username, String password, LocalDateTime registrationTime) {String userInfo = username + "," + password + "," + registrationTime + "\n";try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(USER_FILE), StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {writer.write(userInfo);} catch (IOException e) {System.out.println("写入用户信息失败。");e.printStackTrace();}}private static void loginUser(Scanner scanner) {System.out.print("请输入用户名: ");String username = scanner.next();System.out.print("请输入密码: ");String password = scanner.next();if (verifyUser(username, password)) {System.out.println("登录成功。");} else {System.out.println("用户名或密码错误,登录失败。");}}private static boolean verifyUser(String username, String password) {try (BufferedReader reader = Files.newBufferedReader(Paths.get(USER_FILE))) {String line;while ((line = reader.readLine()) != null) {String[] parts = line.split(",");if (parts.length > 1 && username.equals(parts[0]) && password.equals(parts[1])) {return true;}}} catch (IOException e) {System.out.println("读取用户文件失败。");e.printStackTrace();}return false;}
}

⭐ 运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/321106.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git可视化工具tortoisegit 的下载与使用

一、tortoisegit 介绍 TortoiseGit 是一个非常实用的版本控制工具&#xff0c;主要用于与 Git 版本控制系统配合使用。 它的主要特点包括&#xff1a; 图形化界面&#xff1a;提供了直观、方便的操作界面&#xff0c;让用户更易于理解和管理版本控制。与 Windows 资源管理器…

纯血鸿蒙APP实战开发——折叠屏扫描二维码方案

折叠屏扫描二维码方案 介绍 本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan&#xff0c;其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusCha…

嵌入式C语言教程:实现声音监测系统

声音监测在许多应用中都十分重要&#xff0c;如噪声控制、安全系统、和智能家居控制。 本教程将介绍如何在STM32微控制器上使用模数转换器&#xff08;ADC&#xff09;和声音传感器实现实时声音监测系统。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32F746NG&…

ECHARTS学习

坐标轴 option {xAxis: {type: category,data: [A, B, C]},yAxis: {type: value},series: [{data: [120, 200, 150],type: line}] }; 1、坐标轴的默认类型type是数值型&#xff0c;而xAxis指定了类目型的data&#xff0c;所以Echarts也能识别出这是类目型的坐标轴&#xff0c;…

使用Matplotlib库绘制了一个图形

前言 本文学习的用Matplotlib绘制一个正弦函数曲线&#xff0c;大家跟我来 第一步&#xff1a;编辑代码 import numpy as np import matplotlib.pyplot as plt xnp.linspace(0,10,1000) #用NumPy中的linspace函数生成一个包含1000个在0到10之间均匀分布的数值的数组&#xf…

【自动化测试】使用MeterSphere进行接口测试

一、接口介绍二、接口测试的过程三、接口自动化测试执行自动化流程 四、接口之间的协议HTTP协议 五、 接口测试用例设计接口文档 六、使用MeterSphere创建接口测试创建接口定义设计接口测试用例 一、接口介绍 自动化测试按对象分为&#xff1a;单元测试、接口测试、UI测试等。…

LeetCode 每日一题 Day 144-157

2385. 感染二叉树需要的总时间 给你一棵二叉树的根节点 root &#xff0c;二叉树中节点的值 互不相同 。另给你一个整数 start 。在第 0 分钟&#xff0c;感染 将会从值为 start 的节点开始爆发。 每分钟&#xff0c;如果节点满足以下全部条件&#xff0c;就会被感染&#xf…

分类规则挖掘(三)

目录 四、贝叶斯分类方法&#xff08;一&#xff09;贝叶斯定理&#xff08;二&#xff09;朴素贝叶斯分类器&#xff08;三&#xff09;朴素贝叶斯分类方法的改进 五、其它分类方法 四、贝叶斯分类方法 贝叶斯 (Bayes) 分类方法是以贝叶斯定理为基础的一系列分类算法的总称。贝…

本地运行AI大模型简单示例

一、引言 大模型LLM英文全称是Large Language Model&#xff0c;是指包含超大规模参数&#xff08;通常在十亿个以上&#xff09;的神经网络模型。2022年11月底&#xff0c;人工智能对话聊天机器人ChatGPT一经推出&#xff0c;人们利用ChatGPT这样的大模型帮助解决很多事情&am…

解决问题:Docker证书到期(Error grabbing logs: rpc error: code = Unknown)导致无法查看日志

问题描述 Docker查看日志时portainer报错信息如下&#xff1a; Error grabbing logs: rpc error: code Unknown desc warning: incomplete log stream. some logs could not be retrieved for the following reasons: node klf9fdsjjt5tb0w4hxgr4s231 is not available报错…

KIE关键信息抽取——SDMG-R

https://arxiv.org/pdf/2103.14470https://arxiv.org/pdf/2103.14470 1.概述 背景:传统的关键信息提取方法依赖于模板匹配,这使它们难以泛化到未见过的模板,且对文本识别错误不够鲁棒。SDMG-R方法:提出一种端到端的双模态图推理方法,通过构建双模态图(视觉和文本特征),…

ROS服务器通信

目录 一、角色 二、流程 注意 三、例子描述 四、srv文件 编译配置文件 vscode配置 五、Server.cpp编写例子 编写CMakeList 六、观察server的效果 七、Client编写例子 编写CMakeList 八、观察Client的结果 九、Client优化&#xff08;动态输入&#xff09; 了解argc…

Go Web 开发 Demo【用户登录、注册、验证】

前言 这篇文章主要是学习怎么用 Go 语言&#xff08;Gin&#xff09;开发Web程序&#xff0c;前端太弱了&#xff0c;得好好补补课&#xff0c;完了再来更新。 1、环境准备 新建项目&#xff0c;生成 go.mod 文件&#xff1a; 出现报错&#xff1a;go: modules disabled by G…

[论文阅读] 测试时间自适应TTA

最初接触 CVPR2024 TEA: Test-time Energy Adaptation [B站]&#xff08;1:35:00-1:53:00&#xff09;https://www.bilibili.com/video/BV1wx4y1v7Jb/?spm_id_from333.788&vd_source145b0308ef7fee4449f12e1adb7b9de2 实现&#xff1a; 读取预训练好的模型参数设计需要更…

Re69:读论文 LaMDA: Language Models for Dialog Applications

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;LaMDA: Language Models for Dialog Applications ArXiv网址&#xff1a;https://arxiv.org/abs/2201.08239 本文介绍谷歌提出的对话大模型LaMDA&#xff0c;主要关注对各项指标&#x…

一文带你了解 Oracle 23ai 新特性 Vector 的基础用法

Oracle Database 23ai 来了&#xff0c;虽然目前只是云上可商用&#xff0c;但是 OP 有 FREE 版本可以进行开发。 本文将介绍 Oracle 23ai 的新特性之一&#xff1a; AI 向量搜索&#xff0c;的部分内容。 向量数据类型 23ai 新增向量数据类型&#xff0c;可以用于表示一系列的…

【LeetCode刷题】875. 爱吃香蕉的珂珂

1. 题目链接 875. 爱吃香蕉的珂珂 2. 题目描述 3. 解题方法 简单的用我自己的理解来解释一下这道题的意思。 所以也就是说找到一个速度k&#xff0c;看还有没有比k更小的速度能吃完数组中的香蕉&#xff0c;如果有则继续寻找&#xff0c;没有则是k这个速度。就好比上面的解释…

成人职场英语口语柯桥外语培训之Big deal不是“大事”!别再翻译错啦!

关于deal&#xff0c; 其实有很多容易被人误解的表达&#xff0c; 小编今天就来给大家一一盘点~ 1, deal n. deal 作名词的时候意思是“交易&#xff1b;买卖”。 ❖ She got a new car for $1000! That was really a good deal! 她一千美金买了辆车&#xff01;真是158575…

图片编辑工具-Gimp

一、前言 GIMP&#xff08;GNU Image Manipulation Program&#xff09;是一款免费开源的图像编辑软件&#xff0c;具有功能强大和跨平台的特性。 GIMP作为一个图像编辑器&#xff0c;它提供了广泛的图像处理功能&#xff0c;包括但不限于照片修饰、图像合成以及创建艺术作品…

新的循环体和define

目录 do while讲解 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; 定义&#xff1a;宏&#xff08;define&#xff09; 练习&#xff1a; 结果&#xff1a; 分析&#xff1a; define的优缺点 优点&#xff1a; 缺点&#xff1a; 作业&#xff1a; 大家假期…