当前位置: 首页 > 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…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...