Java学习:创建简单的名片管理系统

名片管理系统

  • 实现可退的多级菜单系统
  • 功能:添加名片、查询名片、修改名片、删除名片、保存名片、读取名片
  • 要求:数据要持久化保存到磁盘上

一、创建名片实体类

  • net.zwh.p03.t07包里创建Card实体类
    在这里插入图片描述
  • Card实体类代码
package net.zwh.p03.t07;

/**
 * 名片实体类
 */

public class Card {
    private String id;
    private String name;
    private String workUnit;  // 工作单位
    private String post;  // 职务
    private String telephone;

    public Card() {
    }

    /**
     * 有参构造方法
     *
     * @param id
     * @param name
     * @param workUnit
     * @param post
     * @param telephone
     */
    public Card(String id, String name, String workUnit, String post, String telephone) {
        this.id = id;
        this.name = name;
        this.workUnit = workUnit;
        this.post = post;
        this.telephone = telephone;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWorkUnit() {
        return workUnit;
    }

    public void setWorkUnit(String workUnit) {
        this.workUnit = workUnit;
    }

    public String getPost() {
        return post;
    }

    public void setPost(String post) {
        this.post = post;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    @Override
    public String toString() {
        return "Card{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", workUnit='" + workUnit + '\'' +
                ", post='" + post + '\'' +
                ", telephone='" + telephone + '\'' +
                '}';
    }
}

二、创建名片管理类

  • 在net.zwh.p03.t07包里创建CardManagement类
    在这里插入图片描述

1. 创建主菜单

package net.zwh.p03.t07;

import java.util.Scanner;

/**
 * 功能:名片管理系统
 */
public class CardManagement {
    public static void main(String[] args) {
        // 声明部分
        int mc1;
        Scanner sc = new Scanner(System.in);
        boolean isRunning = true; // 循环控制变量

        while (isRunning) {
            // 绘制一级菜单
            System.out.println("  名片管理系统");
            System.out.println("================");
            System.out.println("   1. 登录");
            System.out.println("   0. 退出");
            System.out.println("================");
            System.out.print("输入菜单编号[1,0]:");
            mc1 = sc.nextInt();
            // 根据用户选择进行相应的操作
            switch (mc1) {
                case 1:
                    // 调用登录方法
                    login();
                    break;
                case 0:
                    System.out.println("谢谢使用~再见~");
                    isRunning = false; // 结束循环
                    break;
                default:
                    System.out.println("输入的菜单编号有误!");
            }
        }
    }
}

  • 程序报错,因为在菜单项1里要调用的登录方法login()尚未定义
    在这里插入图片描述

2. 创建登录方法

  • CardManagement类创建login()方法
/**                                                                    
 * 登录方法                                                                
 */                                                                    
private static void login() {                                          
    String username, password;                                         
    Scanner sc = new Scanner(System.in);                               
                                                                       
    System.out.print("用户名:");                                          
    username = sc.next();                                              
    System.out.print("密  码:");                                         
    password = sc.next();                                              
                                                                       
    if (username.equals("zl") && password.equals("202111")) {      
        System.out.println("登录成功~");                                   
        // 调用名片管理方法                                                    
        cardManagement();                                              
    } else {                                                           
        System.out.println("用户名或密码有误,登录失败~");                          
    }                                                                  
}                                                                      

  • 程序报错,因为在login()方法要调用的名片管理方法cardManagement()尚未定义
    在这里插入图片描述

3. 创建名片管理方法

  • 在CardManagement类创建cardManagement()方法
 /**
     * 名片管理方法
     */
    private static void cardManagement() {
        int mc2;
        Scanner sc = new Scanner(System.in);
        boolean isRunning = true; // 循环控制变量

        while (isRunning) {
            // 绘制二级菜单
            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("  6. 保存名片");
            System.out.println("  7. 返回上级");
            System.out.println("=======================");
            System.out.print("输入菜单编号[1,2,3,4,5,6,7]:");
            mc2 = sc.nextInt();

            switch (mc2) {
                case 1:
                    System.out.println("执行添加名片功能~");
                    break;
                case 2:
                    System.out.println("执行修改名片功能~");
                    break;
                case 3:
                    System.out.println("执行查询名片功能~");
                    break;
                case 4:
                    System.out.println("执行删除名片功能~");
                    break;
                case 5:
                    System.out.println("读取名片文件到名片数组列表~");
                    break;
                case 6:
                    System.out.println("将名片数组列表写入名片文件~");
                    break;
                case 7:
                    isRunning = false; // 结束二级菜单循环
                    break;
                default:
                    System.out.println("输入的菜单编号有误!");
            }
        }
    }

  • 运行查看
    在这里插入图片描述

5. 添加名片方法

  • CardManagement类创建addCard()方法
    在这里插入图片描述

  • 思路:输入名片信息,基于名片信息构建名片对象,将名片对象添加到名片数组列表

  • 在类的声明部分创建名片列表对象(思考为什么要这样做)
    在这里插入图片描述

  • 编写addCard()方法代码

/**                                                            
 * 添加名片方法                                                      
 */                                                            
private static void addCard() {                                
    // 声明变量                                                    
    String id;                                                 
    String name;                                               
    String workUnit;                                           
    String post;                                               
    String telephone;                                          
    Scanner sc = new Scanner(System.in);                       
                                                               
    // 输入名片信息                                                  
    System.out.print("编号:");                                   
    id = sc.next();                                            
    System.out.print("姓名:");                                   
    name = sc.next();                                          
    System.out.print("单位:");                                   
    workUnit = sc.next();                                      
    System.out.print("职位:");                                   
    post = sc.next();                                          
    System.out.print("手机:");                                   
    telephone = sc.next();                                     
                                                               
    // 创建名片对象                                                  
    Card card = new Card(id, name, workUnit, post,telephone);  
                                                               
    // 将名片对象添加名片数组列表                                           
    cards.add(card);                                           
}                                                              

  • 修改cardManagement()方法
    在这里插入图片描述
  • 运行程序,测试效果
    在这里插入图片描述

6.创建保存名片方法

  • CardManagement类创建saveCards()方法
    在这里插入图片描述
  • 思路:遍历名片数组列表,将每一个名片对象的属性拼接成一个有分隔符的字符串,写入名片文件
 /**
     * 创建保存名片方法
     *
     * 任务:检测编号,无重复
     */

    private static void saveCards() {
        // 创建文件字符输出流
        try {
            FileWriter fw = new FileWriter("cards.txt");
            // 用增强for循环遍历名片数组列表
            for (Card card : cards) {
                // 输出名片对象
                System.out.println(card);
                // 创建名片字符缓冲对象
                StringBuffer buffer = new StringBuffer();
                // 添加名片字段信息(以空格作为分隔符)
                buffer.append(card.getId() + " ");
                buffer.append(card.getName() + " ");
                buffer.append(card.getWorkUnit() + " ");
                buffer.append(card.getPost() + " ");
                buffer.append(card.getTelephone());
                // 将名片信息写入名片文件(必须添加换行符)
                fw.write(buffer.toString() + "\n");                
            }
            // 关闭文件字符输出流
            fw.close();
            // 提示用户写入成功
            System.out.println("名片信息写入成功~");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }                                                 
  • 对每一个名片对象都会写入磁盘文件,这个方法不好,需要优化。
  • 将所有名片数据分行放到一个字符串缓冲对象里,这样只需要写一次磁盘文件,效率才能提高
    在这里插入图片描述
/**
     * 创建保存名片方法
     *
     * 任务:检测编号,无重复
     */

    private static void saveCards() {
        try {
            // 创建文件字符输出流
            FileWriter fw = new FileWriter("cards.txt");
            
            // 创建名片容器字符串缓冲对象
            StringBuffer cardsBuffer = new StringBuffer();
            // 用增强for循环遍历名片数组列表
            for (Card card : cards) {
                // 输出名片对象
                System.out.println(card);
                // 创建名片字符缓冲对象
                StringBuffer buffer = new StringBuffer();
                // 添加名片字段信息(以空格作为分隔符)
                buffer.append(card.getId() + " ");
                buffer.append(card.getName() + " ");
                buffer.append(card.getWorkUnit() + " ");
                buffer.append(card.getPost() + " ");
                buffer.append(card.getTelephone());
                // 将名片信息添加到名片容器字符串缓冲对象
                cardsBuffer.append(buffer.toString() + "\n");
            }
            // 将名片容器字符串缓冲对象里的数据一次性写入文件
            fw.write(cardsBuffer.toString());
            // 关闭文件字符输出流
            fw.close();
            // 提示用户写入成功
            System.out.println("名片信息写入成功~");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 修改cardManagement()方法,添加调用saveCards()方法

在这里插入图片描述

  • 运行测试,查看效果
    在这里插入图片描述

7.创建读取名片文件方法

  • CardManagement类创建readCardFile()方法
    在这里插入图片描述
  • 思路:行读取名片文件,将每行数据按空格拆分成名片字段信息,基于名片字段信息创建名片对象,然后将每个名片对象添加到名片数组列表
 /**
     * 读取名片文件, 保存到名片数组列表
     */
    private static void readCardFile() {
        try {
            // 创建文件字符输入流
            FileReader fr = new FileReader("cards.txt");
            // 创建缓冲字符输入流
            BufferedReader br = new BufferedReader(fr);
            // 定义行变量
            String nextLine = "";
            // 通过循环读取名片文件
            while ((nextLine = br.readLine()) != null) {
                // 拆分行字符串得到字段数组
                String[] fields = nextLine.split(" ");
                // 创建名片对象
                Card card = new Card();
                // 用字段数组设置对象属性
                card.setId(fields[0]);
                card.setName(fields[1]);
                card.setWorkUnit(fields[2]);
                card.setPost(fields[3]);
                card.setTelephone(fields[4]);
                // 输出名片对象
                System.out.println("添加\n" + card + "\n到名片数组列表");
                // 将名片对象添加到名片数组列表
                cards.add(card);
            }
            // 关闭缓冲字符输入流
            br.close();
            // 关闭文件字符输入流
            fr.close();
        } catch (FileNotFoundException e) {
            System.err.println("温馨提示:名片文件不存在~");
        } catch (IOException e) {
            System.err.println("");
        }
    }
  • 添加调用方法
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述

8. 创建查询方法

  • CardManagement类创建searchCard()方法
    在这里插入图片描述

  • 思路:我们可以再做一个子菜单,包含两个选项:按编号查询和按姓名查询。还可以让用户输入待查的编号和姓名, 这样会有4种情况:

  • 输入编号和姓名全为空字符串,此时查询全部名片;
  • 输入编号不为空,但是姓名为空,此时按编号查询;
  • 输入编号为空字符串,但姓名不为空,此时按姓名查询;
  • 输入编号和姓名都不为空,此时按编号和姓名查询
  • 添加调用searchCard()方法
    在这里插入图片描述
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中实现备份与欢迎名片管理系统可以使用以下步骤: 1. 创建名片类(Card):定义一个名片类,包含姓名、电话、邮箱等相关信息的属性,以及对应的getter和setter方法。可以选择在该类中添加其他操作名片的方法,如打印名片信息等。 2. 创建名片管理类(CardManager):定义一个名片管理类,用于添加、删除、修改、查询名片等操作。该类应该包含一个名片的集合,并提供相应的方法来实现上述操作。 3. 实现备份功能:可以使用文件操作和IO流来实现备份功能。将名片集合以某种格式(如CSV格式)保存到文件中,并在需要时读取文件,将数据导入名片集合。 4. 实现欢迎功能:通过Java的控制台输出(System.out.println)来实现简单的欢迎功能。在程序启动时打印欢迎信息,并提供相应的选项供用户选择,执行相应的操作。 5. 完善界面交互:可以使用图形用户界面(GUI)来优化用户交互体验。使用Java的Swing或JavaFX等库来创建界面,添加按钮和文本框等组件,实现更友好的用户界面。 6. 异常处理:在系统开发中,需要考虑一些潜在的异常情况,如输入类型错误、文件读写错误等。为了确保程序的健壮性,可以添加异常处理机制,捕获并处理这些异常情况。 总结:以上是使用Java实现备份与欢迎名片管理系统的基本步骤。当然,实际开发过程中还有更多细节需要考虑,如数据验证、搜索功能、数据持久化等等,开发者可以根据具体需求进行完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值