当前位置: 首页 > news >正文

微信投票-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-5】  微信投票

【任务介绍】

  1.任务描述

如今微信聊天已经普及到几乎每一个人,在聊天中,经常会有人需要帮忙在某个APP中投票。本案例要求编写一个模拟微信投票的程序,通过在控制台输入指令,实现添加候选人、查看当前投票和投票的功能。每个功能的具体要求如下。

  1. 用户输入指令1代表”添加候选人”,可以在本地文件中添加被选举人。
  2. 用户输入指令2代表”查看当前投票”,将本地文件中的数据打印到控制台。
  3. 用户输入指令3 代表”投票”功能,在控制台输入被投票人的名字进行投票操作。
  4. 用户输入指令4代表”退出”操作。

2.运行结果

任务运行结果如图7-1所示。

图7-1 运行结果

运行过程中,本地D盘下会生成一个count.txt文件,打开后如图7-2所示。

图7-2 count.txt

 

【实现思路】

  1. 查看任务介绍和运行结果分析可知,此任务需要使用while循环实现控制台中操作指令的多次输入,使用switch语句根据控制台输入的操作指令来判断执行什么操作。
  2. 输入指令1时进行添加候选人操作,先从控制台获取输入的被投票人与起始票数并暂存,再判断是否已有count.txt文件存储数据,如果有直接在文件后追加新的数据,如果没有需要新建文件夹在存入数据。这里需要使用到StringBuffer的字符串拼接来实现存入count.txt文件的特定格式,例如:“姓名:票数,”,这样方便我们读取和修改票数。
  3. 输入指令2时查看当前投票,使用字符流读取count.txt文件并在控制台打印即可。
  4. 输入指令3时进行投票操作,从控制台输入被投票人姓名,投票成功后,被投票人的票数加一,先取出count.txt的内容存入String类型中,根据“,”拆分为String数组(editMessage),再获取控制类中输入的被投票人姓名,使用for循环判断是否存在此人的投票,如果存在,则取出此人的票数加一,最后将修改后的数据使用StringBuffer替换到String数组(editMessage)并覆盖原有的count.txt文件
  5. 输入指令4,直接退出系统,可以通过代码”System.exit(0);”实现。

【实现代码】

投票小功能的代码实现如文件7-1所示。

文件7-1  vote.java

  1. package chapter0705;
  2. import java.io.BufferedOutputStream;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.FileWriter;
  8. import java.util.Scanner;
  9. public class vote {
  10.     private static String message = "";
  11.     public static void main(String[] args) throws Exception {
  12.         Scanner sc = new Scanner(System.in);
  13.         System.out.println("1:添加候选人 2:查看当前投票  3:投票  4:退出");
  14.            while (true) {
  15.                System.out.print("请输入操作指令:");
  16.                int command = sc.nextInt();
  17.                switch (command) {
  18.                case 1:
  19.                    System.out.println("请输入需要被投票的人:");
  20.                    String name=sc.next();
  21.                    System.out.println("请输入"+name+"的起始票数:");
  22.                    int num=sc.nextInt();
  23.                    addvote(name,num);// 1:添加投票人
  24.                    break;
  25.                case 2:
  26.                    String me = readvote();// 2:查看投票
  27.                    System.out.println(me);
  28.                    break;
  29.                case 3:
  30.                    editvote();// 3:投票
  31.                    break;
  32.                case 4:
  33.                    System.out.println("您已退出系统,谢谢使用!");
  34.                    System.exit(0);
  35.                    break;
  36.                default:
  37.                    System.out.println("您输入的指令错误!");
  38.                    break;
  39.                }
  40.            }
  41.     }
  42.     /*
  43.      * 查看投票
  44.      */
  45.     public static String readvote() throws Exception{
  46.         FileInputStream in = new FileInputStream("D:\\count.txt");
  47.         byte[] b = new byte[in.available()];
  48.         in.read(b);
  49.         message =new String(b);
  50.         in.close();
  51.         return message;
  52.     }
  53.     /*
  54.      * 添加投票
  55.      */
  56.     public static void addvote(String name,int num) throws
  57.              FileNotFoundException {
  58.         String SEPARATE_FIELD = "\n";// 换行
  59.         BufferedOutputStream out = null;
  60.         StringBuffer sbf = new StringBuffer();// 拼接内容
  61.         File file=new File("D:\\count.txt");   //判断文件是否存在
  62.         try {
  63.               // 当已存在count.txt文件,则在文件内容后追加
  64.            if (file.canExecute()) {
  65.                // 创建输出流,用于追加文件
  66.                out = new BufferedOutputStream(new
  67.                          FileOutputStream("D:\\count.txt", true));
  68.            } else {// 不存在当天文件,则新建文件
  69.                // 创建输出流,用于保存文件
  70.                out = new BufferedOutputStream(new
  71.                           FileOutputStream("D:\\count.txt"));
  72.            }
  73.            sbf.append(name).append(":");
  74.            sbf.append(num).append(","+SEPARATE_FIELD);
  75.            String str = sbf.toString();
  76.            byte[] b = str.getBytes();
  77.            for (int i = 0; i < b.length; i++) {
  78.                out.write(b[i]);// 将内容写入本地文件
  79.            }
  80.         } catch (Exception e) {
  81.            e.printStackTrace();
  82.         } finally {
  83.            try {
  84.                if (out != null)
  85.                    out.close();// 关闭输出流
  86.            } catch (Exception e2) {
  87.                e2.printStackTrace();
  88.            }
  89.         }
  90.     }
  91.     /*
  92.      * 投票 将控制台输入的姓名的票数加一后保存
  93.      */
  94.     private static void editvote() throws Exception {
  95.         FileWriter out = null;
  96.           // count.txt文字根据“,”拆分成数组
  97.         String[] editMessage = message.split(",");
  98.         Scanner sc = new Scanner(System.in);
  99.         System.out.println("请输入要投票人的姓名");
  100.         String inputMessage = sc.next();
  101.          //for循环拆分后的数组
  102.         for (int i = 0; i < editMessage.length; i++) {
  103.               //当数组中有有包含输入的名字时  
  104.            if(editMessage[i].contains(inputMessage)) {  
  105.                //取出输入名字现在的票数
  106.         String a  =
  107.                editMessage[i].substring(editMessage[i].indexOf(":")+1,
  108.                editMessage[i].length());
  109.                //将取出的票数强转为int类型
  110.                int b = Integer.parseInt(a);
  111.                //将票数+1
  112.                b++;
  113.                //new出一个StringBuffer用于后面的字符拼接
  114.                StringBuffer sb = new StringBuffer();
  115.                //取出原文件中的姓名和:
  116. String c=editMessage[i].substring(0,editMessage[i].indexOf(":")+1);
  117.                //使用StringBuffer拼接姓名和选票
  118.                sb.append(c);
  119.                sb.append(b);
  120.                sb.append(",");
  121.                //将拼接后的字符强转为String类型
  122.                String s = sb.toString();
  123.                //修改好的字符替换原有的字符
  124.                System.out.println("投票后的票数:");
  125.                System.out.println(s);
  126.                editMessage[i] = s;
  127.            }
  128.         }
  129. //editMessage是数组,我们需要将editMessage数组拼接为StringBuffer类型。
  130.         StringBuffer sb1 = new StringBuffer();
  131.         for (int i = 0; i < editMessage.length; i++) {
  132.            sb1.append(editMessage[i]);
  133.         }
  134.         out = new FileWriter("D:\\count.txt");//覆盖原有文件
  135.         //sb1StringBuffer类型,需要使用toString()方法
  136.         out.write(sb1.toString());// 写入暂存的内容
  137.         out.close();
  138.     }
  139. }

在文件7-1中,第十行代码创建了文件内容的全局变量。第14~40行代码是循环主体,用于循环接收用户的指令,当16行代码获取指令后,通过switch语句判断应该执行的操作,第45-52行代码是查看投票功能,第56-90行代码是添加投票功能,使用StringBuffer拼接字符串再存入本地文件。第94-139行代码是投票功能,先将count.txt的内容使用split方法拆分为数组,在循环查询出需要增加投票的人,将票数加一后暂存,再将修改好的字符替换原有的count.txt文件。

相关文章:

微信投票-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-5】 微信投票 【任务介绍】 1.任务描述 如今微信聊天已经普及到几乎每一个人&#xff0c;在聊天中&#xff0c;经常会有人需要帮忙在某个APP中投票。本案例要求编写一个模拟微信投票的程序&#xff0c;通过在控制台输入指令&#xff0c;实现添加候选人、查看当前投票…...

duboo+zookeeper分布式架构入门

分布式 dubbo Zookeeper 分布式系统就是若干独立计算机的集合&#xff08;并且这些计算机之间相互有关联&#xff0c;就像是一台计算机中的C盘F盘等&#xff09;&#xff0c;这些计算对于用户来说就是一个独立的系统。 zookeeper安装 下载地址&#xff1a;Index of /dist/z…...

黑盒测试用例设计方法-等价类划分法

目录 一、等价类的作用 二、等价类的分类 三、等价类的方法 四、等价类的原则 五、按照测试用例的完整性划分等价类 六、等价类步骤 七、案例 一、等价类的作用 为穷举测试设计测试点。 穷举&#xff1a;列出所有的可能情况&#xff0c;对其一一判断。 测试点&#x…...

4.OCR文本识别Connectionist Temporal Classification(CTC)算法

文章目录1.基础介绍2.Connectionist Temporal Classification(CTC)算法2.1 什么是Temporal Classification2.2 CTC问题描述2.2关于对齐2.3 前向后向算法2.4 推理时3.pytorch中的CTCLOSS参考资料欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f3…...

误删了Ubuntu/Linux的一些默认用户目录怎么办?

用户目录&#xff1a;指位于 $HOME 下的一系列常用目录&#xff0c;例如 Documents&#xff0c;Downloads&#xff0c;Music&#xff0c;还有 Desktop等。本文不是讲如何恢复原有目录及其重要文件&#xff0c;适用于仅恢复目录功能一&#xff1a;仅恢复个别目录如误删了Desktop…...

ArXiv简介以及论文提交

arXiv网站简介 arXiv是一个收集物理学、数学、计算机科学、生物学与数理经济学的论文预印本的网站。其中arXiv发音同“archive”&#xff0c;因为“X”代表希腊字母 &#xff0c;国际音标为[kai]。它于1991年8月14日成立&#xff0c;现由美国康奈尔大学维护。 ——维基百科 对…...

pytorch学习

目录如下&#xff1a; pytorch常用操作 pytorch 常用操作 pytorch 的 detach()函数 1. 什么是detach()函数 我们在将输出特征矩阵进行存储的时候&#xff0c;经常需要将torch.Tensor类型的数据转换成别的如numpy类型的数据&#xff0c;但是Tensor类型的数据是会自动计算梯度…...

【OC】块初识

Block简介 Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能&#xff1a;带有自动变量的匿名函数。 匿名函数 所谓匿名函数就是不带有名称的函数。C语言的标准不允许存在这样的函数。例&#xff1a; int func(int count);它声明了名称为func的函数。下面的源代…...

3-2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG

文章目录1. 在vmware添加多块20G的硬盘&#xff0c;并创建分区2. 创建一个至少有两个PV组成的大小为20G的名为testvg的VG&#xff0c;要求PE大小为16M&#xff0c;而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录3. 新建用户archlinux,要求其家目录为/users/archlinu…...

【密码学】 一篇文章讲透数字证书

【密码学】 一篇文章讲透数字证书 数字证书介绍 数字证书是一种用于认证网络通信中参与者身份和加密通信的证书&#xff0c;人们可以在网上用它来识别对方的身份。 我们在上一篇博客中介绍了数字签名的作用和原理&#xff0c;数字签名可以防止消息被否认。有了公钥算法和数字签…...

Linux 操作系统原理 — 内存管理 — 虚拟地址空间(x86 64bit 系统)

目录 文章目录目录虚拟地址格式与内核页表&#xff08;四级页表&#xff09;虚拟地址格式与内核页表&#xff08;四级页表&#xff09; 在 x86 64bit 系统中&#xff0c;可以描述的最长地址空间为 2^64&#xff08;16EB&#xff09;&#xff0c;远远超过了目前主流内存卡的规格…...

C语言深入知识——(2)指针的深入理解

1、字符指针 &#xff08;1&#xff09;字符指针的普通用法 char a A; char* pa &a;但是一般来说字符指针很少这么用……更多是拿来存储一个字符串 &#xff08;2&#xff09;字符串的两种存储以及区别 现在有了两种存储数组的方法 ①一个是使用char类型数组存储②另外…...

Git使用笔记

分支branch切换到另一个分支git checkout 你要切换到的分支的名字git checkout master将本地的这个分支branch1和gitee上的branch1进行合并&#xff08;本地的branch1有的&#xff0c;gitee上branch1没有的增加上去&#xff09;git merge branch1git merge 分支的名字查看本地是…...

数据库管理-第五十八期 倒腾PDB(20230226)

数据库管理 2023-02-26第五十八期 倒腾PDB1 克隆本地PDB2 没开归档总结第五十八期 倒腾PDB 其实本周过的不大好&#xff0c;连着两天熬夜&#xff0c;一次是割接一次是处理ADG备库的异常&#xff0c;其实本周有些内容是以前处理过的问题&#xff0c;到了周末还肚子痛。哎… 1…...

我看谁还敢说不懂git

文章目录一、Git介绍1.1、Git的作用1.2、Git的理念1.3、Git的特点1.4、Git对比SVN二、Git的概念2.1、Git基础概念三、Git的基本操作3.1、使用Git管理一个代码仓库的流程3.2、Git常用命令介绍四、Git状态的变化五、Git安装和配置5.1、Git的安装5.2、Git的配置六、Git的高级操作6…...

Scratch少儿编程案例-算法练习-实现加减乘除练习题

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】

离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计一、DWS层设计要点二、DWS层设计分析 - 1d/nd1.DWS层设计一&#xff1a;不考虑用户维度2.DWS层设计二&#xff1a;考虑用户维度2.DWS层设计三 &#xff1a;考虑用户商…...

python网络数据获取

文章目录1网络爬虫2网络爬虫的类型2.1通用网络爬虫2.1.12.1.22.2聚焦网络爬虫2.2.1 基于内容评价的爬行策略2.2.2 基于链接结构的爬行策略2.2.3基于增强学习的爬行策略2.2.4基于语境图的爬行策略2.3增量式网络爬虫深层网页爬虫3网络爬虫基本架构3.1URL管理模块3.2网页下载模块3…...

[Datawhale][CS224W]图机器学习(六)

目录一、简介二、概述三、算法四、PageRank的缺点五、Python实现迭代法参考文献一、简介 PageRank&#xff0c;又称网页排名、谷歌左侧排名、PR&#xff0c;是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。 佩奇排名本质上是一种以网页之间的超链接个…...

aws ecr 使用golang实现的简单镜像转换工具

https://pkg.go.dev/github.com/docker/docker/client#section-readme 通过golang实现一个简单的镜像下载工具 总体步骤 启动一台海外区域的ec2实例安装docker和awscli配置凭证访问国内ecr仓库编写web服务实现镜像转换和自动推送 安装docker和awscli sudo yum remove awsc…...

【20230225】【剑指1】分治算法(中等)

1.重建二叉树class Solution { public:TreeNode* traversal(vector<int>& preorder,vector<int>& inorder){if(preorder.size()0) return NULL;int rootValuepreorder.front();TreeNode* rootnew TreeNode(rootValue);//int rootValuepreorder[0];if(preo…...

「JVM 高效并发」Java 线程

进程是资源分配&#xff08;内存地址、文件 I/O 等&#xff09;的基本单位&#xff0c;线程是执行调度&#xff08;处理器资源调度&#xff09;的基本单位&#xff1b; Loom 项目若成功为 Java 引入纤程&#xff08;Fiber&#xff09;&#xff0c;则线程的执行调度单位可能变为…...

ADAS-可见光相机之Cmos Image Sensor

引言 “ 可见光相机在日常生活、工业生产、智能制造等应用有着重要的作用。在ADAS中更是扮演着重要的角色&#xff0c;如tesla model系列全车身10多个相机&#xff0c;不断感知周围世界。本文着重讲解下可见光相机中的CIS(CMOS Image Sensor)。” 定义 光是一种电磁波&…...

【ESP 保姆级教程】玩转emqx MQTT篇③ ——封装 EmqxIoTSDK,快速在项目集成

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-26 ❤️❤️ 本篇更新记录 2023-02-26 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

Python自动化测试面试题-编程篇

前言 随着行业的发展&#xff0c;编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题&#xff0c;主要考察以下几点。 基本编码能力及思维逻辑基本数据结构&#xff08;顺序表、链表、队列、栈、二叉树&#xff09;基本算法&#xf…...

CIT 594 Module 7 Programming AssignmentCSV Slicer

CIT 594 Module 7 Programming Assignment CSV Slicer In this assignment you will read files in a format known as “comma separated values” (CSV), interpret the formatting and output the content in the structure represented by the file. Q1703105484 Learning …...

链路追踪——【Brave】第一遍小结

前言 微服务链路追踪系列博客&#xff0c;后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。 Brave 何为Brave&#xff1f; github地址&#xff1a;https://github.com/openzipkin/brave Brave是一个分布式追踪埋点库。 #mermaid-svg-riwF9nbu1AldDJ7P {font-family:"…...

Vision Transformer(ViT)

1. 概述 Transformer[1]是Google在2017年提出的一种Seq2Seq结构的语言模型&#xff0c;在Transformer中首次使用Self-Atttention机制完全代替了基于RNN的模型结构&#xff0c;使得模型可以并行化训练&#xff0c;同时解决了在基于RNN模型中出现了长距离依赖问题&#xff0c;因…...

104-JVM优化

JVM优化为什么要学习JVM优化&#xff1a; 1&#xff1a;深入地理解 Java 这门语言 我们常用的布尔型 Boolean&#xff0c;我们都知道它有两个值&#xff0c;true 和 false&#xff0c;但你们知道其实在运行时&#xff0c;Java 虚拟机是 没有布尔型 Boolean 这种类型的&#x…...

QML 颜色表示法

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 如果你经常需要美化样式(最常见的有:文本色、背景色、边框色、阴影色等),那一定离不开颜色。而在 QML 中,颜色的表示方法有多种:颜色名、十六进制颜色值、颜色相关的函数,一起来学习一下吧。 老规矩…...

客厅装修风格/乐陵seo优化

小试牛刀 WiFi 远控 wendu 废话 少说 直接上代码 DH11三根线 信号线 接2 WiFi 模块 r-------t t--------r en&vcc------3.3v剩下的 共地的啦 double Fahrenheit(double celsius) { return 1.8 * celsius 32; } //摄氏温度度转化为华氏温度 double Kelvin(doubl…...

wamp做的网站上传/西安网站建设优化

生成客户端程序&#xff0c;访问已有的服务器 生成cs文件E:\>WSDL http://localhost/asp/WebService1/Service1.asmx生成dll文件E:\>CSC /out:MyWs.dll /t:library /r:System.Web.Services.dll Service1.cs 根据wsdl生成服务器的接口&#xff0c;供别人调用 wsdl.exe /si…...

科讯cms怎么做网站地图/深圳搜索优化排名

如何快速清理 docker 资源 原文:如何快速清理 docker 资源如果经常使用 docker&#xff0c;你会发现 docker 占用的资源膨胀很快&#xff0c;其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源&#xff0c;具体点说就是删除那…...

app下载安装官方网站/什么是软文营销

WinCE中触摸屏驱动开发详解 收藏 1.触摸屏驱动程序的模型 1.1 分层触摸屏驱动层序结构 本触摸屏驱动采用分层驱动程序结构&#xff0c;其驱动模型如下图所示&#xff0c;这种结构将驱动程序代码区分为上层模型设备驱动层(MDD),下层是依赖平台的驱动层(PDD)。其中MDD层通常无需修…...

滨海做网站的价格/教你如何建立网站

没有区别 都是存在session里在jsp里面有内置session引用 直接用第二种方法就可以了...

广东网页空间网站平台/什么平台可以免费打广告

如果想跟我一起讨论的话,就快加入我的知识星球吧。星球里有一千多位同样爱好安全技术的小伙伴一起交流! 常用工具: Nmap使用详解Sqlmap使用详解Metasploit Framework(MSF)的使用MSF中kiwi模块的使用MSF中mimikatz模块的使用Msfvenonm生成后门木马...