文章目录

  • 任务:名片管理系统
    • (一)任务完整代码
    • (二)代码步骤解析
      • 1.创建Card类(名片实体类),代码编写
      • 2.创建CardManagement类(名片管理系统)
      • 3.创建添加名片方法
      • 4.保存名片到文件
      • 5.读取名片文件
      • 6.查询名片方法
      • 7.修改名片方法
    • (三)运行结果

任务:名片管理系统

  • 实现可进可退的多级菜单系统
  • 功能:添加名片,查询名片,修改名片,删除名片

(一)任务完整代码

package p011;import java.io.*;
import java.nio.file.FileVisitResult;
import java.util.ArrayList;
import java.util.Scanner;/*** 功能:名片管理系统* 日期:2022年05月26日*/
public class CardManagement {// 创建名片数组列表对象private static ArrayList<Card> cards = new ArrayList<>();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("输入的菜单编号有误!");}}}/*** 登录方法*/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("howard") && password.equals("903213")) {System.out.println("登录成功~");// 调用名片管理方法cardManagement();} else {System.out.println("用户名或密码有误,登录失败~");}}/*** 名片管理方法*/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("执行添加名片功能~");addCard();// 调用添加名片方法break;case 2:System.out.println("执行修改名片功能~");modifCard();// 调用修改名片方法break;case 3:System.out.println("执行查询名片功能~");findCard();// 调用查询名片方法break;case 4:System.out.println("执行删除名片功能~");break;case 5:System.out.println("执行读取名片文件到名片数组列表~");readCardFile();// 调用读取名片文件方法break;case 6:System.out.println("执行将名片数组列表写入名片文件~");saveCards();// 调用保存名片方法break;case 7:isRunning = false; // 结束二级菜单循环break;default:System.out.println("输入的菜单编号有误!");}}}/*** 添加名片方法*/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);}/*** 保存名片到文件*/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(buffer.toString()+"\n");}// 关闭文件字符输出流fw.close();// 提示用户写入成功System.out.println("恭喜,名片数据成功写入文件~");} catch (IOException e){e.printStackTrace();}}/*** 读取名片文件,保存到名片数组列表*/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(fields[0],fields[1],fields[2],fields[3],fields[4]);// 将名片对象添加到名片数组列表cards.add(card);// 提示用户添加成功System.out.println("添加"+card+"到名片数组列表~");}// 关闭缓冲字符输入流br.close();// 关闭文件输入流fr.close();}catch (FileNotFoundException e) {System.err.println("温馨提示:名片文件不存在~");}catch (IOException e){e.printStackTrace();}}/*** 查询名片方法*/private static void findCard(){String id,name;Scanner sc = new Scanner(System.in);System.out.print("编号:");id=sc.nextLine(); // 单行输入,敲回车确认System.out.print("姓名:");name=sc.nextLine(); // 单行输入,敲回车确认// 判断用户按那种方式查询名片if (id.equals("")) {if (name.equals("")) { // 查询全部名片// 遍历名片数组列表for (Card card : cards) {System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());}} else { // 按姓名查询名片System.out.println("~按姓名查询名片~");Boolean found = false;// 遍历名片数组列表,按姓名来找for (Card card : cards) {if (card.getName().equals(name)) {found = true; // 找到了break; // 跳出循环}}// 根据found值提示用户if (found) {// 针对同名情况for (Card card : cards) {if (card.getName().equals(name)) {System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());}}} else {System.out.println("温馨提示:查无此人~");}}} else {if (name.equals("")) { // 按编号查询名片System.out.println("~按编号查询名片~");Boolean found = false;// 遍历名片数组列表,按编号来找for (Card card : cards) {if (card.getId().equals(id)) {found = true; // 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 根据found值提示用户if (!found) {System.out.println("温馨提示:查无此人~");}} else { // 按编号和姓名查询名片System.out.println("~按编号和姓名查询名片~");Boolean found = false;// 遍历名片数组列表,按编号和姓名来找for (Card card : cards) {if (card.getId().equals(id) && card.getName().equals(name)) {found = true; // 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 根据found值提示用户if (!found) {System.out.println("温馨提示:查无此人~");}}}}/*** 修改名片方法*/private static void modifCard(){String id,name,workUnit,post,telephone;Scanner sc=new Scanner(System.in);boolean found = false;System.out.print("请输入待修改者的编号:");id = sc.nextLine();// 遍历名片列表数组for (Card card:cards){if (card.getId().equals(id)){found = true;// 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 判断是否找到if (found){System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");System.out.print("姓名:");name = sc.nextLine();System.out.print("单位:");workUnit = sc.nextLine();System.out.print("职务:");post = sc.nextLine();System.out.print("手机:");telephone = sc.nextLine();//要确定名片在名片数组列表的下标int index;for (int i = 0;i < cards.size();i++){Card card = cards.get(i);if (card.getId().equals(id)){// 按编号找到名片// 根据用户输入修改名片对象if (!name.equals("")){card.setName(name);}if (!workUnit.equals("")){card.setWorkUnit(workUnit);}if (!post.equals("")){card.setPost(post);}if (!telephone.equals("")){card.setTelephone(telephone);}// 用修改后的名片对象去更新名片数组列表对应的元素cards.set(i,card);break;// 跳出循环}}}else {System.out.println("温馨提示:查无此人~");}}
}

(二)代码步骤解析

1.创建Card类(名片实体类),代码编写

  • 有参构造方法的实现:Alt + Insert键-插入代码,然后选择Consteuctor

  • 全部选中

  • 实现后完整代码
/*** 功能:名片实体类* 日期:2022年05月26日*/
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;}@Overridepublic String toString() {return "Card{" +"id='" + id + '\'' +", name='" + name + '\'' +", workUnit='" + workUnit + '\'' +", post='" + post + '\'' +", telephone='" + telephone + '\'' +'}';}
}

2.创建CardManagement类(名片管理系统)

package p011;import java.util.Scanner;/*** 功能:名片管理系统* 日期:2022年05月26日*/
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("输入的菜单编号有误!");}}}/*** 登录方法*/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("howard") && password.equals("903213")) {System.out.println("登录成功~");// 调用名片管理方法cardManagement();} else {System.out.println("用户名或密码有误,登录失败~");}}/*** 名片管理方法*/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("输入的菜单编号有误!");}}}
}

3.创建添加名片方法

  • 回到代码顶部,创建名片数组列表对象

  • 在CardManagement类里创建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()方法,调用addCard()方法

4.保存名片到文件

  • 在CardManagement类里创建saveCards类(位于添加名片代码后面)
       /*** 保存名片到文件*/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(buffer.toString()+"\n");}// 关闭文件字符输出流fw.close();// 提示用户写入成功System.out.println("恭喜,名片数据成功写入文件~");} catch (IOException e){e.printStackTrace();}}
  • 修改cardManagement()方法,调用saveCards()方法

5.读取名片文件

  • 在CardManagement类里创建readCardFile类(位于保存名片到文件代码后面)
  • 代码实现
    /*** 读取名片文件,保存到名片数组列表*/private  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(fields[0],fields[1],fields[2],fields[3],fields[4]);// 将名片对象添加到名片数组列表cards.add(card);// 提示用户添加成功System.out.println("添加"+card+"到名片数组列表~");}// 关闭缓冲字符输入流br.close();// 关闭文件输入流fr.close();}catch (FileNotFoundException e) {System.err.println("温馨提示:名片文件不存在~");}catch (IOException e){e.printStackTrace();}}
  • 修改cardManagement()方法,调用readCardFile()方法

  • 运行结果

6.查询名片方法

  • 在CardManagement类里创建findCard类
 /*** 查询名片方法*/private static void findCard(){String id,name;Scanner sc = new Scanner(System.in);System.out.print("编号:");id=sc.nextLine(); // 单行输入,敲回车确认System.out.print("姓名:");name=sc.nextLine(); // 单行输入,敲回车确认// 判断用户按那种方式查询名片if (id.equals("")) {if (name.equals("")) { // 查询全部名片// 遍历名片数组列表for (Card card : cards) {System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());}} else { // 按姓名查询名片System.out.println("~按姓名查询名片~");Boolean found = false;// 遍历名片数组列表,按姓名来找for (Card card : cards) {if (card.getName().equals(name)) {found = true; // 找到了break; // 跳出循环}}// 根据found值提示用户if (found) {// 针对同名情况for (Card card : cards) {if (card.getName().equals(name)) {System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());}}} else {System.out.println("温馨提示:查无此人~");}}} else {if (name.equals("")) { // 按编号查询名片System.out.println("~按编号查询名片~");Boolean found = false;// 遍历名片数组列表,按编号来找for (Card card : cards) {if (card.getId().equals(id)) {found = true; // 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 根据found值提示用户if (!found) {System.out.println("温馨提示:查无此人~");}} else { // 按编号和姓名查询名片System.out.println("~按编号和姓名查询名片~");Boolean found = false;// 遍历名片数组列表,按编号和姓名来找for (Card card : cards) {if (card.getId().equals(id) && card.getName().equals(name)) {found = true; // 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 根据found值提示用户if (!found) {System.out.println("温馨提示:查无此人~");}}}}
  • 修改cardManagement()方法方法,调用findCard()方法

7.修改名片方法

/*** 修改名片方法*/private static void modifCard(){String id,name,workUnit,post,telephone;Scanner sc=new Scanner(System.in);boolean found = false;System.out.print("请输入待修改者的编号:");id = sc.nextLine();// 遍历名片列表数组for (Card card:cards){if (card.getId().equals(id)){found = true;// 找到了// 输出名片信息System.out.println(card.getId() + " "+ card.getName() + " " + card.getWorkUnit() + " "+ card.getPost() + " " + card.getTelephone());break; // 跳出循环}}// 判断是否找到if (found){System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");System.out.print("姓名:");name = sc.nextLine();System.out.print("单位:");workUnit = sc.nextLine();System.out.print("职务:");post = sc.nextLine();System.out.print("手机:");telephone = sc.nextLine();//要确定名片在名片数组列表的下标int index;for (int i = 0;i < cards.size();i++){Card card = cards.get(i);if (card.getId().equals(id)){// 按编号找到名片// 根据用户输入修改名片对象if (!name.equals("")){card.setName(name);}if (!workUnit.equals("")){card.setWorkUnit(workUnit);}if (!post.equals("")){card.setPost(post);}if (!telephone.equals("")){card.setTelephone(telephone);}// 用修改后的名片对象去更新名片数组列表对应的元素cards.set(i,card);break;// 跳出循环}}}else {System.out.println("温馨提示:查无此人~");}}
  • 修改cardManagement()方法,调用modifCard()方法

(三)运行结果

Java任务项目-名片管理系统相关推荐

  1. Java毕设项目户籍管理系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目户籍管理系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webst ...

  2. Java毕设项目门诊管理系统补录(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目门诊管理系统补录(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Web ...

  3. JAVA毕设项目后勤管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

    JAVA毕设项目后勤管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBu ...

  4. Java毕设项目信贷管理系统计算机(附源码+系统+数据库+LW)

    Java毕设项目信贷管理系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  5. Java毕设项目病房管理系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目病房管理系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webst ...

  6. Java毕设项目房地产管理系统登录(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目房地产管理系统登录(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(We ...

  7. Java毕设项目电费管理系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电费管理系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Ecli ...

  8. Java毕设项目电费管理系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目电费管理系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webst ...

  9. JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

    JAVA毕设项目固定资产管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + H ...

最新文章

  1. 为什么说OLAP产品毁了BI?
  2. GetWindowThreadProcessId 获得窗口所在进程ID和线程ID
  3. boost::mp11::mp_third相关用法的测试程序
  4. 深度学习导论(4)神经网络基础
  5. Rhel7 设置目录权限,acl权限
  6. flask mysql项目模板渲染_21. Flask 模板 - 宏、继承、包含
  7. container_of宏
  8. (键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备 解决方法...
  9. 【JAQS】jaqs与DataCore 框架安装,学习笔记(一)
  10. php日程 增删改查,使用Fullcalendar管理日程事件(增删改查拖放)
  11. [转载] Python3 String模块ascii_letters和digits
  12. 运筹说 第4期|掌握运筹学软件,走遍天下都不怕
  13. 小程序项目:基于微信小程序的校园互助平台——计算机毕业设计
  14. H5页面自定义标题、链接、描述、图片分享到微信朋友、朋友圈、QQ和QQ空间
  15. 推荐给计算机专业教师读的书
  16. 手机升级系统如何找回丢失的文件
  17. IPFS windos 搭建
  18. Grid控件 设置格子背景颜色
  19. 雨课堂知识点总结(十八)
  20. 云计算,大数据,AI三者的关系如何?

热门文章

  1. centos查oracle版本命令,Linux操作系统查看系统信息命令
  2. 安卓开发仿有道词典和谷歌翻译词典软件在线输入翻译源码下载
  3. relative会脱离文档流吗_position:absolute会使元素脱离文档流
  4. 【BUUCTF】[MRCTF2020]套娃
  5. 中国大学MOOC C语言程序设计(大连理工大学) 课后编程题 第三周题解(个人向仅供参考)
  6. 抖音创作规范_干货:抖音内容规范,运营抖音的十五条经验!
  7. 第一章 MySQL数据库的简介
  8. Freemarker讲解
  9. TCP/IP网络编程:P1->理解网络编程和套接字
  10. noip 2009 靶形数独