0
点赞
收藏
分享

微信扫一扫

JAVA---微信投票

岛上码农 2022-04-21 阅读 75
java

【介绍】

1.任务描述
如今微信聊天已经普及到几乎每一个人,在聊天中,经常会有人需要帮忙在某个APP中投票。
要求:编写一个模拟微信投票的程序,通过在控制台输入指令,实现添加候选人、查看当前投票和投票的功能。每个功能的具体要求如下。
(1) 用户输入指令1代表”添加候选人”,可以在本地文件中添加被选举人。
(2) 用户输入指令2代表”查看当前投票”,将本地文件中的数据打印到控制台。
(3) 用户输入指令3 代表”投票”功能,在控制台输入被投票人的名字进行投票操作。
(4) 用户输入指令4代表”退出”操作。
2.运行结果

在这里插入图片描述
在这里插入图片描述

【思路】

(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);”实现。

package chapter;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.Scanner;
 class vote {
 private static String message = "";
 public static void main(String[] args) throws Exception {
  Scanner sc = new Scanner(System.in);
  System.out.println("1:添加候选人 2:查看当前投票  3:投票  4:退出");
  while (true) {
   System.out.print("请输入操作指令:");
   int command = sc.nextInt();
   switch (command) {
    case 1:
     System.out.println("请输入需要被投票的人:");
     String name=sc.next();
     System.out.println("请输入"+name+"的起始票数:");
     int num=sc.nextInt();
     addvote(name,num);// 1:添加投票人
     break;
    case 2:
     String me = readvote();// 2:查看投票
     System.out.println(me);
     break;
    case 3:
     editvote();// 3:投票
     break;
    case 4:
     System.out.println("您已退出系统,谢谢使用!");
     System.exit(0);
     break;
    default:
     System.out.println("您输入的指令错误!");
     break;
   }
  }
 }
 /*
  * 查看投票
  */
 public static String readvote() throws Exception{
  FileInputStream in = new FileInputStream("D:\\count.txt");
  byte[] b = new byte[in.available()];
  in.read(b);
  message =new String(b);
  in.close();
  return message;
 }
 /*
  * 添加投票
  */
 public static void addvote(String name,int num) throws
  FileNotFoundException {
  String SEPARATE_FIELD = "\n";// 换行
  BufferedOutputStream out = null;
  StringBuffer sbf = new StringBuffer();// 拼接内容
  File file=new File("D:\\count.txt");   //判断文件是否存在
  try {
   // 当已存在count.txt文件,则在文件内容后追加
   if (file.canExecute()) {
    // 创建输出流,用于追加文件
    out = new BufferedOutputStream(new
     FileOutputStream("D:\\count.txt", true));
   } else {// 不存在当天文件,则新建文件
    // 创建输出流,用于保存文件
    out = new BufferedOutputStream(new
     FileOutputStream("D:\\count.txt"));
   }
   sbf.append(name).append(":");
   sbf.append(num).append(","+SEPARATE_FIELD);
   String str = sbf.toString();
   byte[] b = str.getBytes();
   for (int i = 0; i < b.length; i++) {
    out.write(b[i]);// 将内容写入本地文件
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    if (out != null)
     out.close();// 关闭输出流
   } catch (Exception e2) {
    e2.printStackTrace();
   }
  }
 }
 /*
  * 投票 将控制台输入的姓名的票数加一后保存
  */
 private static void editvote() throws Exception {
  FileWriter out = null;
  // 将count.txt文字根据“,”拆分成数组
  String[] editMessage = message.split(",");
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入要投票人的姓名");
  String inputMessage = sc.next();
  //for循环拆分后的数组
  for (int i = 0; i < editMessage.length; i++) {
   //当数组中有有包含输入的名字时
   if(editMessage[i].contains(inputMessage)) {
    //取出输入名字现在的票数
    String a  =
     editMessage[i].substring(editMessage[i].indexOf(":")+1,
      editMessage[i].length());
    //将取出的票数强转为int类型
    int b = Integer.parseInt(a);
    //将票数+1
    b++;
    //new出一个StringBuffer用于后面的字符拼接
    StringBuffer sb = new StringBuffer();
    //取出原文件中的姓名和:
    String c=editMessage[i].substring(0,editMessage[i].indexOf(":")+1);
    //使用StringBuffer拼接姓名和选票
    sb.append(c);
    sb.append(b);
    sb.append(",");
    //将拼接后的字符强转为String类型
    String s = sb.toString();
    //修改好的字符替换原有的字符
    System.out.println("投票后的票数:");
    System.out.println(s);
    editMessage[i] = s;
   }
  }
//editMessage是数组,我们需要将editMessage数组拼接为StringBuffer类型。
  StringBuffer sb1 = new StringBuffer();
  for (int i = 0; i < editMessage.length; i++) {
   sb1.append(editMessage[i]);
  }
  out = new FileWriter("D:\\count.txt");//覆盖原有文件
  //sb1是StringBuffer类型,需要使用toString()方法
  out.write(sb1.toString());// 写入暂存的内容
  out.close();
 }
}

举报

相关推荐

微信投票系统平台大全

0 条评论