对于文件内容的增删改查,我们的核心思想是将文件内容读取到ArrayList<>()中,在ArrayList<>()中进行数据的增删改查,系统结束运行时将ArrayList<>()中的内容写入文本文件中。
没错,实际操作就像它听起来那么简单。
那么,如何将文件内容读取到ArrayList<>()(也叫列表)中呢?请看这篇博客,给你解释的明明白白:
java超好用的文本文件读写方法_小和尚0421的博客-CSDN博客
(哈哈,写了两千多字结果忘保存了,我老倒霉蛋了)
下面我以活动文件内容的增删改查,即活动管理为例,向大家介绍具体操作
注:为了方便操作,我在Main中定义了公共静态的ArrayList<Activity>
public static ArrayList<Activity> activities = new ArrayList<>();
一、添加活动
核心操作:使用ArrayList<>()自带的add(): Main.activities.add(newAct);//其中newAct是新的活动
但是,在添加活动之前,我们首先要检验某些数据是否合法,例如输入的时间
那么,如何校验时间呢?有一个十分方便快捷地方法:使用正则表达式
具体操作如下:
public boolean checkTime(String s){
String dateFormat = "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}";
//规定了合法的时间输入格式为:yyyy-mm-ddThh-mm-ss
if(s.matches(dateFormat)){
return true;
}else{
return false;
}
}
当然了,如果大家想使用别的输入格式,修改dataFormat即可。至于怎么修改,可自行查找正则表达式有关的资料。
校验合法后,我们就可以向ArrayList<Activity>(),也就是Main.activities中添加活动了。
具体代码如下:
public void addActivity() throws IOException {
Scanner input = new Scanner(System.in);
System.out.println();
System.out.print("请输入活动名称:");
String actName = input.next();
System.out.print("请输入活动内容:");
String content = input.next();
System.out.print("请输入活动时间(格式为yyyy-MM-ddThh:mm:ss,日期和时间用T隔开):");
String actTime = input.next();
System.out.print("请输入活动地点:");
String spot = input.next();
System.out.print("请输入报名截止日期(格式为yyyy-MM-ddThh:mm:ss,日期和时间用T隔开):");
String deadTime = input.next();
System.out.print("请输入上限人数(最大上限人数为1000):");
//注意,这里我们应该多加几条语句,校验用户输入的上限人数是否大于1000,如果是则提示超出人数上限。
int num = input.nextInt();
if(!checkTime(actTime) || !checkTime(deadTime)){
System.out.println("添加失败!时间格式有误");
return;
}
Activity newAct = new Activity(Main.user.getRealName(), actName, content, actTime, spot, deadTime, 1000, 0);
Main.activities.add(newAct);
}
二、查询活动
查询活动的方法比较简单,根据用户输入的活动名称,我们只需遍历列表:若找到则返回该活动在列表中的下标,否则返回-1
具体代码如下:
public int search(String name){
int i = 0;
for(i = 0; i < Main.activities.size(); i++){
if(Main.activities.get(i).getActivityName().equals(name)){
return i;
}
}
return -1;
}
三、删除活动
核心方法:ArrayList<>()中自带的remove()
该方法的实现也比较简单,根据用户输入的活动名在列表中找到该活动,删除即可
具体代码如下:
public void deleteAct() throws FileNotFoundException {
System.out.println("----------------------------------");
System.out.println("请输入需要删除的活动名称");
Scanner s = new Scanner(System.in);
String name = s.next();
s.close();
int no = search(name);
if(no >= 0){
Main.activities.remove(no);
}
}else{
System.out.println("该活动不存在!");
}
}
四、修改活动信息
核心操作:使用Activity类中的get()和set()方法
修改活动信息的整体思路和删除活动大致相同:都是现在列表中找到该活动,如果该活动存在则修改,否则提示用户该活动不存在。
具体代码如下:
public void reviseActivity() throws FileNotFoundException {
System.out.println("----------------------------------");
System.out.println("请输入需要修改信息的活动名称");
Scanner input = new Scanner(System.in);
String name = input.next();
int no = search(name);
if(no >= 0){
System.out.println("活动发起人\t\t活动名称\t\t活动内容\t\t活动时间\t\t活动地点\t\t报名截止日期\t\t上限人数\t\t已报名人数");
System.out.println("------------------------------------------------------------------------------------------");
System.out.println(Main.activities.get(no).toString());//先打印出原活动的信息,让用户更加方便地修改信息
System.out.println("-------------------------------------------");
System.out.println();
System.out.println("----------------2 修改活动名称------------------");
System.out.println("----------------3 修改活动内容---------------------");
System.out.println("----------------4 修改活动时间-----------------");
System.out.println("----------------5 修改活动地点-----------------");
System.out.println("----------------6 修改报名截止日期-----------------");
System.out.println("----------------7 修改上限人数-----------------");
System.out.println("----------------8 结束修改-----------------");
System.out.println("请输入:");
int choice= input.nextInt();
while(choice != 8) {
switch (choice) {
case 2:
System.out.print("请输入活动名称:");
String actName = input.next();
if (no2 >= 0) {
Main.registeredPeople.get(no2).setActivityName(actName);
}
Main.activities.get(no).setActivityName(actName);
break;
case 3:
System.out.print("请输入活动内容:");
String content = input.next();
Main.activities.get(no).setActivityContent(content);
break;
case 4:
System.out.print("请输入活动时间格式为yyyy-MM-ddThh:mm:ss,日期和时间用T隔开):");
String actTime = input.next();
if (checkTime(actTime)) {
Main.activities.get(no).setActivityTime(actTime);
} else {
System.out.println("修改失败!时间格式有误");
}
break;
case 5:
System.out.print("请输入活动地点:");
String spot = input.next();
Main.activities.get(no).setSpot(spot);
break;
case 6:
System.out.print("请输入报名截止日期(格式为yyyy-MM-ddThh:mm:ss,日期和时间用T隔开):");
String deadTime = input.next();
if (checkTime(deadTime)) {
Main.activities.get(no).setDeadTime(deadTime);
} else {
System.out.println("修改失败!时间格式有误");
}
break;
case 7:
System.out.print("请输入上限人数:");
int num = input.nextInt();
Main.activities.get(no).setMaxNum(num);
break;
}
System.out.println("----------------2 修改活动名称------------------");
System.out.println("----------------3 修改活动内容---------------------");
System.out.println("----------------4 修改活动时间-----------------");
System.out.println("----------------5 修改活动地点-----------------");
System.out.println("----------------6 修改报名截止日期-----------------");
System.out.println("----------------7 修改上限人数-----------------");
System.out.println("----------------8 结束修改-----------------");
System.out.println("请输入:");
choice = input.nextInt();
}
}else{
System.out.println("该活动不存在!");
}
}
注:本篇文章还未设计界面设计,有关界面设计会在之后的文章分享~
完成所有操作之后,还有一件十分重要的事:
将ArrayList<>()中的数据,即Main.activities写入文本文件中。
具体语句可以加在返回操作中,例如:
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("请输入:");
int c1 = input.nextInt();
ManageActivity manageActivity;
while(c1 != 5){
switch (c1){
case 1:
manageActivity = new ManageActivity();
manageActivity.addActivity();
break;
case 2:
manageActivity = new ManageActivity();
manageActivity.reviseActivity();
break;
case 3:
manageActivity = new ManageActivity();
manageActivity.deleteAct();
break;
case 4:
manageActivity = new ManageActivity();
System.out.println("----------------------------------");
System.out.println("请输入需要查询的活动名称");
String name = input.next();
int index = ManageActivity.search(name);
if(index >= 0 && Main.activities.get(index).getRegisteredNum() != 0) {
manageActivity.searchData(name);
}else{
System.out.println("活动发起人\t\t活动名称\t\t活动内容\t\t活动时间\t\t活动地点\t\t报名截止日期\t\t上限人数\t\t已报名人数\t\t已报名人员");
System.out.println("------------------------------------------------------------------------------------------------------------");
System.out.println(Main.activities.get(index).toString() + "\t\t暂无");
}
break;
}
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("请输入:");
c1 = input.nextInt();
}
write(Main.activities, "activities.txt");
清楚了增删改查之后,我们可以以此为基础,稍加修改,便可完成我们的系统程序,即不包括界面的程序。
好哒,本次分享就到这里~下次我将分享界面设计~
大家有什么不清楚的可以私信或者在评论里提问,我看见了一定会回复滴