当涉及到开发登入注册后台系统时,Java是一个非常强大和灵活的选择。Java提供了丰富的工具和库,使得开发这样的系统变得相对简单和高效。在本文中,我将为您提供一个详细的教程,介绍如何使用Java实现一个包含远程、自动登录和注册一体化的简易登入注册后台系统。确保您已经安装了Java开发环境(JDK)并配置好了相应的开发工具。
目录
教程开始
Home类——需要运行此主类
-
定义了一个静态的布尔型变量
user
,用于表示用户是否登录或注册成功。 -
首先检测网络是否可用,如果可用则执行相应的操作。
-
如果是第一次登录,则进入登录或注册模式。
-
在登录或注册模式下,根据用户输入的数字指令执行相应的操作。
-
如果已有账号,则自动登录。
-
加载主界面菜单。
-
定义了一些辅助函数,如
shuoMing()
用于显示说明信息,zhuCe()
用于处理注册操作,denLu()
用于处理登录操作。 -
firstCheck()
函数用于检测是否第一次登录,根据是否存在特定文件来判断。 -
logOn()
函数用于已经登录过的自动登录功能。 -
initialization()
函数用于从未登录过的初始化功能。 -
isNetworkAvailable()
函数用于检测网络是否可用。
public class Home {
static boolean user;
public static void main(String[] args) {
if (isNetworkAvailable(Text.url)) {
//初始化进入程序,检测是否需要自动登入
user = firstCheck();
if (!user) {
//需要改变user为true结束登录或者注册模式,在二者都改变即可
while (!user) {
int anInt = Input.getInt();
if (anInt > 3 || anInt < 1) {
To.string("请输入正确的序号");
} else {
switch (anInt) {
case 1: denLu();break;
case 2: zhuCe();break;
case 3: shuoMing();break;
default: To.string("未知字符信息");System.exit(0);
}
}
}
}
} else {
To.string("连接失败,请检测你的网络再重新启动");
System.exit(0);
}
//前面代表已有账号,自动登入
//获取账号密码
GetMessage ges=new GetMessage();
ges.getQQMM();
while (true){
To.string("正在登录中...");
try {
String s = GetMessage.ZIDen();
if (s.contains("成功")){
new Sleep().start();
To.string(s);
break;
}else {
//登录失败直接退出
To.string(s);
System.exit(0);
}
} catch (Exception e) {
To.string("出现异常:"+e.getMessage());
}
}
//登录成功,加载主界面菜单
homeStart();//如果以后返回界面还需要使用,直接调用这个方法
}
public static void homeStart(){
Text.out(3);
new Sleep().start();
Text.Base();
}
private static void shuoMing() {
To.string(Text.shuo);
new Sleep().start();
To.string("\n请继续输入数字指令");
}
private static void zhuCe() {
GetMessage getMessage = new GetMessage();
String content = null;
try {
content = getMessage.Content();
} catch (Exception e) {
To.string("出现异常:" + e.getMessage());
System.exit(0);
}
//System.out.println(content);
if (content.contains("成功")) {
To.string("注册成功");
user=true;//结束注册
//记录本地账号密码
GetMessage setMessage=new GetMessage();
setMessage.wen();//检测根文件夹是否存在
setMessage.setMessage();
//记录运行账号密码
User.user=GetMessage.user;
User.pass=GetMessage.pass;
}
// if(content.contains("一个账号")){
// To.string(content+",明天再来吧!");
// System.exit(0);
// }
else {
To.string(content + ",请重新注册");
zhuCe();
}
}
private static void denLu() {
GetMessage getMessage = new GetMessage();
String content=null;
try {
content = getMessage.Den();
} catch (Exception e) {
To.string("出现异常:" + e.getMessage());
System.exit(0);
}
if (content.contains("成功")) {
user=true;//结束登录
//记录本地账号密码
GetMessage setMessage=new GetMessage();
setMessage.wen();//检测根文件夹是否存在
setMessage.setMessage();
//记录运行账号密码
User.user=GetMessage.user;
User.pass=GetMessage.pass;
}
else {
To.string(content + ",请重新登录");
denLu();
}
}
//检测是否第一次登陆
public static boolean firstCheck() {
File file = new File("D:\\Benmao");
//logOn()是已经登陆过自动登录功能
//initialization()是从来没有登陆过功能
return file.exists() ? logOn() : initialization();
}
private static boolean logOn() {
return true;
}
private static boolean initialization() {
To.string(Text.firstLogon + "\n" + Text.firstContent);
return false;
}
//检测是否有无网络
public static boolean isNetworkAvailable(String hostname) {
try {
InetAddress address = InetAddress.getByName(hostname);
return address.isReachable(5000); // 5秒超时
} catch (Exception e) {
return false;
}
}
}
主要实现了一个简单的登录和注册功能,根据用户的输入和状态进行相应的操作
Input类——判断指令、密码是否输入正确
-
private static Scanner scanner = new Scanner(System.in)
:创建一个静态的Scanner
对象,用于读取用户的输入。 -
public static int getInt()
:获取用户输入的整数。在循环中,尝试读取用户输入的整数,如果出现异常则提示用户重新输入,并清除输入缓冲区。 -
public static double getDouble()
:获取用户输入的小数。在循环中,尝试读取用户输入的小数,如果出现异常则提示用户重新输入,并清除输入缓冲区。 -
public static String getString()
:获取用户输入的字符串。在循环中,尝试读取用户输入的字符串,如果出现异常则提示用户重新输入,并清除输入缓冲区。 -
public static int putInt()
:获取用户输入的整数。与getInt()
方法类似,但在提示信息中指定了特定的要求。 -
public static String putString()
:获取用户输入的字符串。与getString()
方法类似,但在提示信息中指定了特定的要求。
通过Scanner
类提供了一些方法,用于获取用户输入的整数、小数和字符串。在循环中,如果用户输入的数据类型不匹配,会提示用户重新输入。
通过
Scanner
类提供了一些方法,用于获取用户输入的整数、小数和字符串。在循环中,如果用户输入的数据类型不匹配,会提示用户重新输入。
import java.util.Scanner;
public class Input {
private static Scanner scanner = new Scanner(System.in);
public static int getInt() {
while (true) {
try {
return scanner.nextInt();
} catch (Exception e) {
To.string("无效的输入方式,请重新输入");//整数
scanner.nextLine();
}
}
}
public static double getDouble() {
while (true) {
try {
return scanner.nextDouble();
} catch (Exception e) {
To.string("请输入正确的序号");//小数
scanner.nextLine();
}
}
}
public static String getString() {
while (true) {
try {
return scanner.nextLine();
} catch (Exception e) {
To.string("请输入正确的序号");//字符串
scanner.nextLine();
}
}
}
//---------------------------------------------------------------------
//以下代码是小功能使用的输入
public static int putInt() {
while (true) {
try {
return scanner.nextInt();
} catch (Exception e) {
To.string("用户名必须是纯数字");//整数
scanner.nextLine();
}
}
}
public static String putString() {
while (true) {
try {
return scanner.next();
} catch (Exception e) {
To.string("密码格式有误");
scanner.next();
}
}
}
}
To类——包装sout方法
后面感觉此步多余了
public class To {
//此处是包装sout方法
public static void string(String str){
System.out.println(str);
}
public static void string(int num){
System.out.println(num);
}
}
User类——用户类
运行中保存用户数据的一个类,感兴趣的可以自己实现多元化,如用户等级、用户介绍、用户是否为会员等等
public class User {
static int user;
static String pass;
}
Text类——文字信息
-
firstLogon
和firstContent
:定义了第一次启动程序时的提示信息和内容。 -
url
:定义了一个字符串变量,表示URL地址。 -
Server
:定义了一个字符串变量,表示服务器相关的选项。 -
shuo
:定义了一个字符串变量,表示说明信息。 -
benmao
:定义了一个字符串变量,表示笨猫编程手册的标题。 -
Base()
:定义了一个静态方法,用于输出笨猫编程手册的标题和用户账号,以及服务器选项。 -
out(int num)
:定义了一个静态方法,用于输出指定数量的空行。
public class Text {
static String firstLogon = "--你可能是第一次启动这个程序,你需要登录或者注册--";
static String firstContent = "1.登录\n2.注册\n3.使用方法";
static String url = "www.benmao.love";
static String Server = "\n 1.编程笔记 2.公用接口\n 3.聊天系统 4.远程通知\n 5.启动统计 6.用户信息\n 7.我要反馈 8.修改密码";
static String shuo = "--如果你想进行操作,请输入对应的数字即可--\n--如果出现无法避免的异常,请重新启动程序试试--\n--此程序由笨猫所写,感谢你的使用哦--";
static String benmao = "+---------登录注册系统----------+";
public static void Base() {
To.string(benmao + "\n" + "[欢迎使用,你的用户账号" + User.user + "]" + Server);
}
//输出n个空格
public static void out(int num) {
for (int i = 0; i < num; i++) {
System.out.println();
}
}
}
Sleep类——等待方式
public class Sleep extends Thread{
@Override
public void run() {
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
public void start(){
Sleep sleep=new Sleep();
Thread thread=new Thread(sleep);
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
GetMessage类——获取和处理消息
-
Content()
方法:用于处理注册操作。获取用户输入的用户名和密码,然后通过URL连接到服务器,发送注册请求,并返回服务器的响应结果。 -
Den()
方法:用于处理登录操作。获取用户输入的用户名和密码,然后通过URL连接到服务器,发送登录请求,并返回服务器的响应结果。 -
ZIDen()
方法:用于自动登录。使用之前保存的用户账号和密码,通过URL连接到服务器,发送登录请求,并返回服务器的响应结果。 -
getQQMM()
方法:用于读取本地保存的账号和密码。从文件中读取账号和密码,并保存在User
类的静态变量中。 -
setMessage()
方法:用于保存账号和密码到本地文件。将用户账号和密码写入到本地文件中。 -
wen()
方法:用于检查根文件夹是否存在,如果不存在则创建。 -
trans(int num)
方法:用于将整数转换为字符串。 -
trans(String str)
方法:用于将字符串转换为整数。
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class GetMessage {
static int user;
static String pass;
public String Content() throws Exception {
StringBuilder result = new StringBuilder();
To.string("请输入注册的用户名");
user = Input.putInt();
To.string("请输入注册的密码");
pass = Input.putString();
String anUrl = "http://www.benmao.love/userregister.php?admin=1706780680&user=" + user + "&pass=" + pass;
URL url = new URL(anUrl);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
return result.toString();
}
public String Den() throws Exception {
StringBuilder result = new StringBuilder();
To.string("请输入登录的用户名");
user = Input.putInt();
To.string("请输入登录的密码");
pass = Input.putString();
String anUrl = "http://www.benmao.love/userlogin.php?admin=1706780680&user=" + user + "&pass=" + pass;
URL url = new URL(anUrl);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
return result.toString();
}
//自动登入
public static String ZIDen() throws Exception {
StringBuilder result = new StringBuilder();
user=User.user;
pass=User.pass;
String anUrl = "http://www.benmao.love/userlogin.php?admin=1706780680&user=" + user + "&pass=" + pass;
URL url = new URL(anUrl);
URLConnection conn = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result.append(inputLine);
}
return result.toString();
}
//读取本地账号和密码
public void getQQMM(){
try (FileReader myQQ = new FileReader("D:\\Benmao\\qq.txt");
FileReader myMM = new FileReader("D:\\Benmao\\mm.txt");
BufferedReader brQQ = new BufferedReader(myQQ);
BufferedReader brMM = new BufferedReader(myMM)) {
String qq = brQQ.readLine();
String mm = brMM.readLine();
//每次调用的时候,顺带保存在运行中
//记录运行账号密码
User.user=trans(qq);
User.pass=mm;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void setMessage() {
String getQQ=trans(user);
try {
FileWriter myQQ = new FileWriter("D:\\Benmao\\qq.txt");
FileWriter myMM = new FileWriter("D:\\Benmao\\mm.txt");
myQQ.write(getQQ);
myMM.write(pass);
myQQ.close();
myMM.close();
} catch (IOException e) {
To.string("文件写入出现异常");
}
}
public void wen() {
File wj = new File("D:\\Benmao");
if (!wj.exists()) {
wj.mkdir();
}
}
//编码时转换代码
public String trans(int num){
return String.valueOf(num);
}
//编码时转换代码
public int trans(String str){
return Integer.parseInt(str);
}
}
用于处理用户的注册、登录和自动登录功能,以及保存和读取用户的账号和密码
通过这个教程,您将能够创建一个安全、高效和易于使用的登入注册后台系统。这个系统将为用户提供便捷的登录和注册体验,并具备远程登录、自动登录和注册一体化的功能。
总之,使用Java开发登入注册后台系统是一个令人兴奋和有挑战的任务。通过掌握这个教程中的知识和技巧,您将能够构建出令人满意的系统,并为用户提供出色的用户体验。
希望这个总结能够帮助您对本文的内容有一个清晰的概述。祝您在开发登入注册后台系统的过程中取得成功!