实现一个简单的数据管理系统
一.创建一个User类
代码例如:
public class User {
int id;
String userName;
String password;
public String toString() {
String info = "User{id=" + id + ",userName=" + userName
+ ",password=" + password + "}";
return info;
}
}
这段代码定义了一个名为 User
的类,它有三个属性:id
(整数类型)、userName
(字符串类型)、password
(字符串类型)。类中还包括一个 toString()
方法,该方法用于返回一个描述该对象的字符串。
这段代码的功能是创建一个用户对象,并且提供一种方便的方式来获取用户对象的描述信息。 toString()
方法会返回一个包含用户属性的字符串,其中包括用户的 id、用户名和密码。
二.创建一个管理系统dmpManage
代码如下:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class dmpManage {
//属性:
//最大数据量 maxSize
final int maxSize = 100;
//存储数组
User[] userList = new User[maxSize];
//实时的数据个数 size
int size;
public void loadDataFromFile() {
try (BufferedReader reader = new BufferedReader(new FileReader("userdata.txt"))) {
String line;
while ((line = reader.readLine()) != null && size < maxSize) {
String[] parts = line.split(",");
int id = Integer.parseInt(parts[0]);
String userName = parts[1];
String password = parts[2];
User user = new User();
user.id = id;
user.userName = userName;
user.password = password;
userList[size++] = user;
}
} catch (IOException e) {
System.err.println("读取文件时出错: " + e.getMessage());
}
} // 让Java 读取文件,并将文件中的数据解析并加载到程序中。
public void lunch() {
Scanner sc = new Scanner(System.in);
boolean shouldExit = false; // 添加标志以判断是否退出程序
while (!shouldExit) {
System.out.println("----欢迎使用数据录入管理系统----");
System.out.println("请输入需要使用功能指令: " +
"\n 增加-add 查询-get 删除-remove 更新-update 退出-exit");
String action = sc.nextLine();
if (action.equals("add")) {
add(sc);
} else if (action.equals("get")) {
get(sc);
} else if (action.equals("remove")) {
remove(sc);
} else if (action.equals("update")) {
update(sc);
} else if (action.equals("exit")) {
shouldExit = true; // 设置退出标志
} else {
System.err.println("~~输入无效请重新输入~~");
}
}
// 当退出循环时,调用 DataWriter.writeData 方法
DataWriter.writeData(userList, size);
}
public void add(Scanner sc) {
//- 检测是否具有空闲空间(后续扩展为扩容机制)
if (size >= maxSize) {
System.out.println("当前系统负载已满,无法存入数据");
return;
}
//- 需要用户输入用户名 add admin admin123
System.out.println("请输入用户名:");
String name = sc.nextLine();
//- 检测用户名是否重复
//- 输入密码
System.out.println("请输入密码:");
String pwd = sc.nextLine();
//- 再将账号密码存入一个新的用户对象中
User user = new User();
user.userName = name;
user.password = pwd;
//- 再将用户对象设置好id存入userList中
user.id = size;
userList[size] = user;
//- size++;
size++;
System.out.println("add ok~");
}
public void get(Scanner sc) {
System.out.println("请输入选择需要查询依据类型: id | name | all ");
String action = sc.nextLine();
if (action.equals("id")) {
System.out.println("请输入需要查询的ID:");
int id = sc.nextInt();
sc.nextLine();//吸收多余回车符号
// 将userList中每个已存入的用户的id进行一次比较
for (int i = 0; i < size; i++) {
// 取出
User user = userList[i];
// 判断
if (user.id == id) {
System.out.println(user.toString());
System.out.println("get ok~");
return;// 结束查找
}
}
System.out.println("~未找到有效数据~");
} else if (action.equals("name")) {
System.out.println("请输入需要查询的用户名:");
String name = sc.nextLine();
// 将userList中每个已存入的用户的 name进行一次比较
for (int i = 0; i < size; i++) {
// 取出
User user = userList[i];
// 判断
if (user.userName.equals(name)) {
System.out.println(user.toString());
System.out.println("get ok~");
return;// 结束查找
}
}
System.out.println("~未找到有效数据~");
} else if (action.equals("all")) {
String allInfo = "";
for (int i = 0; i < size; i++) {
User user = userList[i];
allInfo += user.toString() + "\n";
}
System.out.println(allInfo);
System.out.println("get ok~");
} else {
System.out.println("~输入有误!");
}
}
public void remove(Scanner sc) {
System.out.println("请输入选择需要删除依据类型: id | name ");
String action = sc.nextLine();
if (action.equals("id") || action.equals("name")) {
System.out.println("请输入需要删除的" + (action.equals("id") ? "ID" : "用户名") + ":");
String input = sc.nextLine();
boolean found = false;
for (int i = 0; i < size; i++) {
User user = userList[i];
if ((action.equals("id") && user.id == Integer.parseInt(input)) ||
(action.equals("name") && user.userName.equals(input))) {
found = true;
// 移动数组元素来删除用户
for (int j = i; j < size - 1; j++) {
userList[j] = userList[j + 1];
}
size--;
break;
}
}
if (found) {
System.out.println("remove ok~");
} else {
System.out.println("~未找到有效数据~");
}
} else {
System.out.println("~输入有误!");
}
}
public void update(Scanner sc) {
System.out.println("请输入需要更新的用户的ID:");
int id = sc.nextInt();
sc.nextLine(); // 吸收多余回车符号
// 遍历 userList 寻找对应 ID 的用户
for (int i = 0; i < size; i++) {
User user = userList[i];
if (user.id == id) {
// 找到用户后,提示用户输入新的用户名和密码
System.out.println("请输入新的用户名:");
String newName = sc.nextLine();
System.out.println("请输入新的密码:");
String newPwd = sc.nextLine();
// 更新用户信息
user.userName = newName;
user.password = newPwd;
System.out.println("更新成功!");
return; // 结束更新操作
}
}
System.out.println("~未找到对应ID的用户~");
}
public void exit(Scanner sc) {
System.out.println("感谢使用数据录入管理系统,再见!");
System.exit(0); // 退出进程
}
}
我们简要分析一下每个函数的作用:
-
loadDataFromFile()
方法:- 作用:从文件中加载用户数据到程序中的
userList
数组中。 - 实现:使用
BufferedReader
逐行读取文件内容,然后将每行数据解析为User
对象,并将其存储在userList
数组中。
- 作用:从文件中加载用户数据到程序中的
-
lunch()
方法:- 作用:启动数据录入管理系统,接受用户输入的指令,并根据指令执行相应的操作。
- 实现:使用一个循环来接受用户输入的指令,根据不同的指令调用相应的方法来执行对应的操作,直到用户输入 "exit" 指令退出系统。
-
add(Scanner sc)
方法:- 作用:向管理系统中添加新的用户数据。
- 实现:接受用户输入的用户名和密码,并创建一个新的
User
对象,将其添加到userList
数组中。
-
get(Scanner sc)
方法:- 作用:根据用户指定的条件查询用户数据。
- 实现:根据用户输入的查询条件(ID、用户名或者查询所有用户),遍历
userList
数组,并逐一比较用户信息,找到符合条件的用户并输出。
-
remove(Scanner sc)
方法:- 作用:根据用户指定的条件删除用户数据。
- 实现:根据用户输入的删除条件(ID 或者用户名),在
userList
数组中找到对应的用户,并移除该用户数据。
-
update(Scanner sc)
方法:- 作用:根据用户指定的 ID 更新用户数据。
- 实现:接受用户输入的 ID,然后遍历
userList
数组,找到对应的用户并提示用户输入新的用户名和密码,最后更新用户信息。
-
exit(Scanner sc)
方法:- 作用:退出数据录入管理系统。
- 实现:输出退出信息并调用
System.exit(0)
来终止程序执行。
这些方法共同构成了一个简单的数据录入管理系统,使用户能够方便地进行数据的录入、查询、更新和删除操作。
这里还用了一个自定义函数DataWriter
代码如下:
import java.io.FileWriter;
import java.io.IOException;
public class DataWriter {
public static void writeData(User[] userList, int size) {
try {
FileWriter writer = new FileWriter("userdata.txt");
for (int i = 0; i < size; i++) {
User user = userList[i];
writer.write(user.id + "," + user.userName + "," + user.password + "\n");
}
writer.close();
System.out.println("用户数据已成功写入文件 userdata.txt");
} catch (IOException e) {
System.err.println("写入文件时出现错误: " + e.getMessage());
}
}
}
这段代码定义了一个 DataWriter
类,其中包含了一个名为 writeData
的静态方法,用于将用户数据写入到名为 "userdata.txt" 的文件中。
这个方法接受两个参数:
userList
:一个User
类型的数组,包含了需要写入文件的用户数据。size
:一个整数,表示用户数据在userList
数组中的实际数量。
writeData
方法的功能是将用户数据按照一定的格式写入到文件中。具体实现如下:
- 创建一个
FileWriter
对象,用于向文件中写入数据。 - 遍历
userList
数组,对于每个用户对象,将其 id、用户名和密码以逗号分隔的格式写入到文件中,并在每行末尾添加换行符。 - 最后关闭文件写入流,并在写入成功时打印提示信息,写入失败时打印错误信息。
这个方法用于与之前的数据加载功能相对应,将程序中的用户数据写入到文件中,以便下次程序运行时能够重新加载这些数据。
三.创建一个程序入口dmpStart
代码如下
public class dmpStart {
public static void main(String[] args) {
dmpManage dataManage = new dmpManage();
// 尝试从文件中加载数据
dataManage.loadDataFromFile();
dataManage.lunch();
}
}
这段代码定义了一个名为 dmpStart
的类,其中包含了一个 main
方法,是程序的入口点。
在 main
方法中:
- 创建了一个名为
dataManage
的dmpManage
类的对象,用于管理数据。 - 调用
dataManage
对象的loadDataFromFile()
方法,尝试从文件中加载数据。 - 调用
dataManage
对象的lunch()
方法,启动数据录入管理系统。
这个类的主要作用是启动数据录入管理系统,并尝试从文件中加载数据。通过这个入口点,程序可以开始执行数据管理功能,接受用户的指令,执行相应的操作。
四.运行试例
运用add,和get,添加和查看数据,用exit退出并保存数据