【面向对象课程设计java】文本文件内容的增删改查

对于文件内容的增删改查,我们的核心思想是将文件内容读取到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");

清楚了增删改查之后,我们可以以此为基础,稍加修改,便可完成我们的系统程序,即不包括界面的程序。


好哒,本次分享就到这里~下次我将分享界面设计~

大家有什么不清楚的可以私信或者在评论里提问,我看见了一定会回复滴

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值