名片管理系统(构建可进不可退的多级从菜单名单系统)
文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.
名片管理系统(构建可进不可退的多级从菜单名单系统)相关推荐
- Java——名片管理系统
目录 任务1.确定给定日期是一年的第几天 任务 2.构建可进不可退的多级菜单系统 任务1.确定给定日期是一年的第几天 要求输入年.月.日,最好能判断用户输入的是否是合法日期 比如2022年3月31日, ...
- SSM框架超市进销存出库入库仓库管理系统(idea开发javaweb-javaee-j2ee-springboot) 退货管理 销售管理 供应商管理 客户管理 员工管理 以及库存统计和盘存统计
0.效果展示 1.概述 2.搭建环境 本文以实现一个超市进销存出库入库仓库管理系统为目标,从环境搭建到编码实现全过程讲述 我们使用javaweb.J2EE来构建超市进销存出库入库仓库管理系统,环境使用 ...
- Java学习:创建简单的名片管理系统
创建简单的名片管理系统 一.创建名片实体类 二.创建名片管理类 1. 创建主菜单 2. 创建登录方法 3. 创建名片管理方法 5. 添加名片方法 6.创建保存名片方法 7.创建读取名片文件方法 8. ...
- AI 风投的下一个拐点是进还是退?
2020 年 1 月 17 日 13:23 过去几年,人工智能和机器学习的大火有目共睹.毋庸置疑,一些初创企业只要业务规划或营销资料中带有"人工智能"或"认知技术&quo ...
- 中央空调“国进外退”,格力、美的、海尔三大白如何角逐新市场?
文/螳螂财经(ID:TanglangFin) 作者/易牟 "国进外退!" 只要稍微关注中央空调行业的人,都会发现市场格局的变动,那就是"国进外退"趋势明显,国内 ...
- day7 地址 名片管理系统
1 无限循环 (while True) break 退出 人为设计的 ,并且有退除的出口 死循环 bug 错误 2.引用 数字型 第二种情况 字符串型小于20位 大于20位 注意: 数字型和 ...
- 【Java面向对象编程——名片管理系统】
文章目录 (一)编程实现 1.创建名片实体类 2.创建名片管理类 (1)创建主菜单 (2)创建登录方法 (3)创建名片管理方法 (4)创建添加名片方法 (5)创建保存名片方法 (6)创建读取名片文件方 ...
- python名片管理器实验报告_名片管理系统——实验报告.doc
名片管理系统--实验报告 网上名片管理系统 数据库和表的建立:(在MySQL中创建数据库test,并在test数据库中建立card.user和recycle表格,其中card和recycle具有相同的 ...
- 任务七、名片管理系统
这里写目录标题 任务七:名片管理系统 (一)编程实现 1.创建名片实体类 2.创建名片管理类 (1)创建主菜单 2.创建登录方法 3.创建名片管理方法 4.创建添加名片方法 5.创建保存名片方法 6. ...
最新文章
- csv格式用什么打开可以编辑_如何用EXCEL/WPS整理航信版(金税盘/白盘)客户(商品)编码表...
- Python学习笔记__13.2章 requests
- 【Linux 内核】编译 Linux 内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 )
- Makefile文件生成
- Python 第三方模块之 numpy.random
- JavaScript进阶(三)之对象
- 包邮送几本Python和R语言的数据分析挖掘书籍
- C++学生信息管理系统7.0
- html下载文件和上传文件(图片)(java后台(HttpServlet))打开保存路径和选择文件录取+(乱码UTF-8)+包...
- Linux 如何限制用户的磁盘使用量 -- quota
- Proteus20个应用技巧
- 系统集成项目管理工程师成绩合格标准
- python实现超市商品销售管理系统_python实现超市商品销售管理系统
- 小甲鱼 c语言 20课 二维数组
- 提升机类设备电动机保护器的保护范围及优化
- 一款全国产USB3.0网卡方案介绍
- (详细)华为荣耀3C H30-TL00的Usb调试模式在哪里开启的步骤
- 让实时操作系统助力电力电子系统设计
- nofollow、noopener和noreferrer标签的区别
- 关于scf文件与找回丢失的显示桌面图标