文3

文章目录

  • 任务七、名片管理系统
      • 1.日期前推和日期后推
      • 2.计算你活过的时间
      • 3.名片管理系统
    • (一) 编程实现
    • 构建名片实体类
    • 创建名片管理类
        • 1.创建主菜单
        • 2.创建登录方法
        • 3.创建名片管理方法
        • 4. 创建添加名片方法
        • 5.创建保存名片的方法
        • 6. 创建读取名片文件的方法
      • 7.创建查看查询名片方法
        • 8..创建修改名片的方法
        • 9. 创建删除名片的方法
    • 任务八
      • 1.数组列表
      • 2.
      • 3.

任务七、名片管理系统

1.日期前推和日期后推

-当前日期100天前是哪年哪月哪日星期几,当前日期100天后是哪年哪月哪日星期几

2.计算你活过的时间

-计算你活了多少秒、多少分、多少小时、多少天要求利用Calendar类来完成任务

3.名片管理系统

1.实现可进可退的多级菜单系统
2.功能:添加名片、查询名片、修改名片、删除名片
3.要求:数据要持久化保存在磁盘上

(一) 编程实现

构建名片实体类

nrt.lixin. p03.t07包里创建Card实体类

package net.lixin.p03.t07;/*** 功能:名片实体类* 作者:李信* 日期:2022年05月26日*/
public class Card {private String id;private String name;private String worUnit;private String post;private String telephone;/*** @param id* @param name* @param worUnit* @param post* @param telephone*/public Card(String id, String name, String worUnit, String post, String telephone) {this.id = id;this.name = name;this.worUnit = worUnit;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 getWorUnit() {return worUnit;}public void setWorUnit(String worUnit) {this.worUnit = worUnit;}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 + '\'' +", worUnit='" + worUnit + '\'' +", post='" + post + '\'' +", telephone='" + telephone + '\'' +'}';}}

创建名片管理类

net.lixin.p03.t07包里创建CardManagement

1.创建主菜单
/*** 功能* 作者:李信* 日期:2022年05月26日*/
public class CardManagement {//创建名片数组列表对象public static void main(String[] args) {//声明部分int mc1;Scanner sc = new Scanner(System.in);boolean isRuning=true;//绘制一级菜单while (isRuning){System.out.println("名片管理系统");System.out.println("================");System.out.println("1.登录");System.out.println("0.退出");System.out.println("==================");System.out.println("输入菜单选项[1,0]");mc1 = sc.nextInt();//根据用户选择执行相应操作switch (mc1) {case 1://调用登陆方法login();break;case 0:System.out.println("谢谢使用再见");isRuning=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.println("用户名");username = sc.next();System.out.println("密码");password = sc.next();if (username.equals("李信") && password.equals("1234526")) {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 isRuningn = true;//循环控制变量//绘制二级菜单while (isRuningn) {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.println("输入菜单编号[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:isRuningn = false;//结束二级菜单循环break;default:System.out.println("输入的菜单编号有误!");}}}
}

现在一个可进可退的菜单系统就建好了,让我们来测试一下吧!

4. 创建添加名片方法

-在CardManagement类创建addCard()方法

-思路:输入名片信息,基于名片信息构建名片对象,将名片对象添加到名片数组列表
-在类的声明部分创建名片列表对象(思考为什么要这样做)
在最前面添加如下图字段

-编写addCard()方法代码

   /*** 添加名片方法*/private static void  addCard() {//声明变量String id;String name;String worUnit;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("单位");worUnit=sc.next();System.out.print("职位");post=sc.next();System.out.print("电话号码");telephone=sc.next();//创建名片对象Card card = new Card(id,name, worUnit,post,telephone);//将名片对象添加到名片数组列表中cards.add(card);}}

-修改cardManagement()方法,需要调用addCard()方法

-运行程序,查看结果

5.创建保存名片的方法

-在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.getWorUnit()+" ");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.getWorUnit() + " ");buffer.append(card.getPost() + " ");buffer.append(card.getTelephone());//将名片信息添加到名片容器字符串缓冲对象cardsbuffer.append(buffer.toString());}//将名片容器字符串缓冲对象里的数据写入名片文件fw.write(cardsbuffer.toString()+" \n");//关闭文件字符输出流fw.close();//提示用户写入成功System.out.println("恭喜你,名片数据成功写入文件~");}catch (IOException e){e.printStackTrace();}}


-修改cardManagement方法,添加调用saveCards()方法
-查看保存的文件

6. 创建读取名片文件的方法

-在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(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()方法

7.创建查看查询名片方法

-在cardManagement()类里创建findCard()方法

-思路:我们可以在做一个子菜单,包含两个选项:按编号查询和按姓名查询,但是我们不想再做子菜单,让用户输入待查的编号和姓名,这样会有四种情况:输入的编号和姓名全部为空字符串,此时查询全部名片;输入的编号不为空字符串但是姓名为空字符串,此时按编号查询名片;输入的编号为空字符串但是姓名不为空字符串,此时按姓名查询;输入的编号和姓名都不能为空字符串,此时按编号和姓名查询名片

 /*** 查询名片方法*/private static void  findCard() {String id, name;Scanner sc = new Scanner(System.in);System.out.print("编号:");id = sc.nextLine();// 单行输入,敲回车确认,不能使用next()方法System.out.print("姓名:");name = sc.nextLine();//单行输入,敲回车确认//判断用户按那种方式查询名片if (id.equals("")) {if (name.equals("")) {//查询全部名片//遍历名片数组for (Card card : cards) {System.out.println(card.getId() + ""+ card.getName() + "" + card.getWorUnit() + ""+ 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.getWorUnit() + ""+ 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.getWorUnit()+""+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.getWorUnit()+""+card.getPost()+""+card.getTelephone());break;//跳出循环}}//根据found值提示用户if (!found){System.out.println("温馨提示,查无此人");}}}}
}

-修改cardManagement()方法,添加调用findCard()方法
-运行程序,查看结果

文3

-测试名片中有同名的情况,修改card.txt

-运行程序,查看结果

8…创建修改名片的方法

-在cardManagement类里创建modifyCard()方法

-思路:按编号查询到名片后,可以对每个字段进行修改,如果该字段没有输入非空值,那嘛表明该字段不做任何修改

 /*** 修改名片方法*/private static void modifyCard(){String id,name, worUnit, 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.getWorUnit()+""+card.getPost()+""+card.getTelephone());break;//跳出循环}}//判断是否找到名片if (found){System.out.println("说明:不输入信息,直接敲回车,表明不修改字段值");System.out.println("姓名");name=sc.nextLine();System.out.println("单位");worUnit=sc.nextLine();System.out.println("职业");post=sc.nextLine();System.out.println("电话号码");telephone=sc.nextLine();//采用传统for循环遍历名片数组列表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 (!worUnit.equals(" ")){card.setWorUnit(worUnit);}if (!post.equals(" ")){card.setPost(post);}if (!telephone.equals(" ")){card.setTelephone(telephone);}//用修改后的名片对象去更新名片数组列表对应的元素cards.set(i,card);//显示修改的数组列表对应的元素System.out.println(cards.get(i));break;//跳出循环·}}}else {System.out.println("温馨提示~查无此人~");}}
}

-修改caedmanagement()方法,添加调用modifyCard()方法

-运行程序,查看结果

=-查看名片文件,看看第一条记录记录名字是否改成了“蒋欣”

9. 创建删除名片的方法

-在cardManagement()类里创建deleteCard()方法

-修改cardManagement()方法,添加调用deleteCard()方法

任务八

1.数组列表

2.

3.

名片管理系统(构建可进不可退的多级从菜单名单系统)相关推荐

  1. Java——名片管理系统

    目录 任务1.确定给定日期是一年的第几天 任务 2.构建可进不可退的多级菜单系统 任务1.确定给定日期是一年的第几天 要求输入年.月.日,最好能判断用户输入的是否是合法日期 比如2022年3月31日, ...

  2. SSM框架超市进销存出库入库仓库管理系统(idea开发javaweb-javaee-j2ee-springboot) 退货管理 销售管理 供应商管理 客户管理 员工管理 以及库存统计和盘存统计

    0.效果展示 1.概述 2.搭建环境 本文以实现一个超市进销存出库入库仓库管理系统为目标,从环境搭建到编码实现全过程讲述 我们使用javaweb.J2EE来构建超市进销存出库入库仓库管理系统,环境使用 ...

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

    创建简单的名片管理系统 一.创建名片实体类 二.创建名片管理类 1. 创建主菜单 2. 创建登录方法 3. 创建名片管理方法 5. 添加名片方法 6.创建保存名片方法 7.创建读取名片文件方法 8. ...

  4. AI 风投的下一个拐点是进还是退?

    2020 年 1 月 17 日 13:23 过去几年,人工智能和机器学习的大火有目共睹.毋庸置疑,一些初创企业只要业务规划或营销资料中带有"人工智能"或"认知技术&quo ...

  5. 中央空调“国进外退”,格力、美的、海尔三大白如何角逐新市场?

    文/螳螂财经(ID:TanglangFin) 作者/易牟 "国进外退!" 只要稍微关注中央空调行业的人,都会发现市场格局的变动,那就是"国进外退"趋势明显,国内 ...

  6. day7 地址 名片管理系统

    1 无限循环  (while  True)   break 退出 人为设计的 ,并且有退除的出口 死循环 bug  错误 2.引用 数字型 第二种情况 字符串型小于20位 大于20位 注意: 数字型和 ...

  7. 【Java面向对象编程——名片管理系统】

    文章目录 (一)编程实现 1.创建名片实体类 2.创建名片管理类 (1)创建主菜单 (2)创建登录方法 (3)创建名片管理方法 (4)创建添加名片方法 (5)创建保存名片方法 (6)创建读取名片文件方 ...

  8. python名片管理器实验报告_名片管理系统——实验报告.doc

    名片管理系统--实验报告 网上名片管理系统 数据库和表的建立:(在MySQL中创建数据库test,并在test数据库中建立card.user和recycle表格,其中card和recycle具有相同的 ...

  9. 任务七、名片管理系统

    这里写目录标题 任务七:名片管理系统 (一)编程实现 1.创建名片实体类 2.创建名片管理类 (1)创建主菜单 2.创建登录方法 3.创建名片管理方法 4.创建添加名片方法 5.创建保存名片方法 6. ...

最新文章

  1. csv格式用什么打开可以编辑_如何用EXCEL/WPS整理航信版(金税盘/白盘)客户(商品)编码表...
  2. Python学习笔记__13.2章 requests
  3. 【Linux 内核】编译 Linux 内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 )
  4. Makefile文件生成
  5. Python 第三方模块之 numpy.random
  6. JavaScript进阶(三)之对象
  7. 包邮送几本Python和R语言的数据分析挖掘书籍
  8. C++学生信息管理系统7.0
  9. html下载文件和上传文件(图片)(java后台(HttpServlet))打开保存路径和选择文件录取+(乱码UTF-8)+包...
  10. Linux 如何限制用户的磁盘使用量 -- quota
  11. Proteus20个应用技巧
  12. 系统集成项目管理工程师成绩合格标准
  13. python实现超市商品销售管理系统_python实现超市商品销售管理系统
  14. 小甲鱼 c语言 20课 二维数组
  15. 提升机类设备电动机保护器的保护范围及优化
  16. 一款全国产USB3.0网卡方案介绍
  17. (详细)华为荣耀3C H30-TL00的Usb调试模式在哪里开启的步骤
  18. 让实时操作系统助力电力电子系统设计
  19. nofollow、noopener和noreferrer标签的区别
  20. 关于scf文件与找回丢失的显示桌面图标

热门文章

  1. OGC入门学习专栏(2) - 传感网实现-SWE(持续更新)
  2. 获取get请求中的参数
  3. centos7系统关机命令_centos关机与重启命令
  4. 秒杀(小米网抢购系统开发实践--“米粉节”背后的故事)
  5. 读《小强升职记》总结
  6. BroadcastRecever
  7. 有道笔记不能连接网络/IE不能上网 - 解决办法
  8. ks 曲线_R语言计算KS值、绘制KS曲线
  9. 部署-GPS授时系统:GPS授时系统
  10. android 图片空白,图片显示上下有空白的解决办法