编写一个模拟微信投票的程序,代码需要注释,并进行需求评审,设计评审
时间: 2024-02-27 08:52:14 浏览: 100
需求评审:
- 功能概述:编写一个模拟微信投票的程序,用户可以创建投票,邀请好友投票,并查看投票结果。
- 功能细节:
- 创建投票:用户可以创建一个新投票,指定投票的主题和选项。选项数量不超过10个。
- 邀请好友投票:用户可以通过微信邀请好友参与投票。
- 投票:参与投票的用户可以选择其中一个选项进行投票。
- 查看投票结果:创建投票的用户可以查看投票结果,包括每个选项的得票数量和投票的总数。
- 特殊需求:
- 系统需要记录每个用户的投票情况,以确保每个用户只能为每个投票投一次票。
- 投票结果需要实时更新,投票结束后创建投票的用户可以随时查看结果。
设计评审:
- 类设计:
- 投票选项类:包括选项名称和得票数两个属性。
- 投票类:包括投票主题、投票选项列表、投票人数、投票结果等属性,以及创建投票、邀请好友、投票、查看结果等方法。
- 用户类:包括用户ID、用户名、投票记录等属性,以及投票方法。
- 数据库设计:需要记录投票选项、投票、用户等信息,需要设计相应的数据库表结构。
- 界面设计:需要设计用户界面,包括创建投票、邀请好友、投票、查看结果等界面。
代码实现:
以下是一个简单的模拟微信投票的Java代码示例:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class WeChatVote {
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
List<Vote> votes = new ArrayList<Vote>();
Map<String, List<String>> voteRecords = new HashMap<String, List<String>>();
while (true) {
System.out.println("Please select an operation:");
System.out.println("1. Create a new vote");
System.out.println("2. Invite friends to vote");
System.out.println("3. Vote");
System.out.println("4. View vote result");
System.out.println("5. Exit");
int option = input.nextInt();
switch (option) {
case 1:
// 创建新投票
Vote vote = createVote();
votes.add(vote);
break;
case 2:
// 邀请好友投票
inviteFriends(votes, voteRecords);
break;
case 3:
// 投票
vote(votes, voteRecords);
break;
case 4:
// 查看投票结果
viewVoteResult(votes);
break;
case 5:
// 退出程序
System.exit(0);
default:
System.out.println("Invalid option. Please try again.");
}
}
}
/**
* 创建新投票
*/
private static Vote createVote() {
System.out.println("Please enter vote title:");
String title = input.next();
List<String> options = new ArrayList<String>();
while (true) {
System.out.println("Please enter option name (enter 'done' to finish):");
String option = input.next();
if (option.equalsIgnoreCase("done")) {
break;
}
options.add(option);
}
return new Vote(title, options);
}
/**
* 邀请好友投票
*/
private static void inviteFriends(List<Vote> votes, Map<String, List<String>> voteRecords) {
System.out.println("Please enter vote title:");
String title = input.next();
Vote vote = findVoteByTitle(votes, title);
if (vote == null) {
System.out.println("Vote not found. Please try again.");
return;
}
List<String> friends = new ArrayList<String>();
while (true) {
System.out.println("Please enter friend's WeChat ID (enter 'done' to finish):");
String friend = input.next();
if (friend.equalsIgnoreCase("done")) {
break;
}
friends.add(friend);
}
voteRecords.put(title, friends);
}
/**
* 投票
*/
private static void vote(List<Vote> votes, Map<String, List<String>> voteRecords) {
System.out.println("Please enter vote title:");
String title = input.next();
Vote vote = findVoteByTitle(votes, title);
if (vote == null) {
System.out.println("Vote not found. Please try again.");
return;
}
System.out.println("Please enter your WeChat ID:");
String userID = input.next();
List<String> votedUsers = voteRecords.get(title);
if (votedUsers != null && votedUsers.contains(userID)) {
System.out.println("You have already voted. Please try again.");
return;
}
System.out.println("Please select an option to vote:");
List<String> options = vote.getOptions();
for (int i = 0; i < options.size(); i++) {
System.out.println((i + 1) + ". " + options.get(i));
}
int optionIndex = input.nextInt() - 1;
if (optionIndex < 0 || optionIndex >= options.size()) {
System.out.println("Invalid option. Please try again.");
return;
}
vote.vote(optionIndex);
if (votedUsers == null) {
votedUsers = new ArrayList<String>();
}
votedUsers.add(userID);
voteRecords.put(title, votedUsers);
}
/**
* 查看投票结果
*/
private static void viewVoteResult(List<Vote> votes) {
System.out.println("Please enter vote title:");
String title = input.next();
Vote vote = findVoteByTitle(votes, title);
if (vote == null) {
System.out.println("Vote not found. Please try again.");
return;
}
List<VoteOption> results = vote.getResults();
System.out.println("Total votes: " + vote.getTotalVotes());
for (VoteOption option : results) {
System.out.println(option.getName() + ": " + option.getVotes());
}
}
/**
* 根据投票主题查找投票
*/
private static Vote findVoteByTitle(List<Vote> votes, String title) {
for (Vote vote : votes) {
if (vote.getTitle().equalsIgnoreCase(title)) {
return vote;
}
}
return null;
}
}
class Vote {
private String title;
private List<VoteOption> options;
private int totalVotes;
public Vote(String title, List<String> optionNames) {
this.title = title;
this.options = new ArrayList<VoteOption>();
for (String name : optionNames) {
this.options.add(new VoteOption(name));
}
}
public String getTitle() {
return title;
}
public List<String> getOptions() {
List<String> optionNames = new ArrayList<String>();
for (VoteOption option : options) {
optionNames.add(option.getName());
}
return optionNames;
}
public int getTotalVotes() {
return totalVotes;
}
public void vote(int optionIndex) {
options.get(optionIndex).vote();
totalVotes++;
}
public List<VoteOption> getResults() {
return options;
}
}
class VoteOption {
private String name;
private int votes;
public VoteOption(String name) {
this.name = name;
this.votes = 0;
}
public String getName() {
return name;
}
public int getVotes() {
return votes;
}
public void vote() {
votes++;
}
}
该程序实现了创建投票、邀请好友投票、投票、查看投票结果等功能。投票记录和投票结果都存储在内存中,可以根据需要进行持久化存储。程序中还考虑了每个用户只能为每个投票投一次票的情况,确保了投票结果的准确性。