Git Product home page Git Product logo

hit-voting-system's Introduction

HIT-Lab3-944613709

哈工大-软件构造-lab3

针对三个应用场景设计的投票系统

说明

1.1 开发的三个应用场景

**1.**简要介绍三个应用:

商业表决(BusinessVoting):

面向某个商业公司,其内部成员提出某

个商业提案(例如“关于投资 xx 项目的提案”),公司董事会的各位董事对其进 行实名表决(支持、反对、弃权),各董事在表决中的权重取决于其所持有的公 司股票的比例,根据该持股比例对投票结果进行计算,若“支持”票的比例超过 23,则该提案通过,否则该提案不通过。

img

那么,“支持”所占的比例为51% + 10% = 61% < 23,故该提案表决未通过。

代表选举(Election):

针对某次活动(例如哈工大学生代表大会),需

要从一群候选人中选出若干人,作为代表参加活动。在该选举中,提前确定一部

分候选人,投票人从已确定的候选人中选取,不可提名新的候选人。计划选出的

代表数量是提前确定的。投票人针对每个候选人匿名选择“支持、反对、弃权”

之一,但选择“支持”的人数不能高于计划选出的代表数量,否则为非法票。

所有投票人的权重均相等。全体投票人投票之后,首先判定各张选票的合法性,

在去除非法选票之后,针对所有候选人,根据其所得到的支持票数量排序,前

个候选人当选;若有多个候选人的支持票数量相等而无法自然排出前名,则仅

有那些明确可进入前名的人当选——这意味着最终选出的人数可能小于。

例如,计划从5个提前确定的候选人(A,B,C,D,E)中选出3个代表,

投票人数为6,各自的选票如下

imgimg

可以看出,投票人 1、2、4、5、6 的选票都是有效选票,但投票人 3 投了 4

票“支持”,超过了法定当选人数 3,故其选票无效。对有效选票进行统计,候

选人-所得支持票的数目分别为:1、2、5、3、3,候选人、、的票数排名

前三,故成功选出了 3 位代表。如果本次选举希望选出 2 个代表,那么因为和

的得票相同,则只能选出,而和无法当选

聚餐点菜(DinnerOrder):

一群人去餐馆就餐,需要从该餐馆提供的菜

单中选择若干道菜,点菜的数量要大于等于就餐总人数,且小于总人数+5。每个 人针对菜单上的每一道菜实名表达自己的喜好(喜欢、不喜欢、无所谓),选择 这三个选项的数目无限制。不同人的身份不同,其偏好的影响力会有所不同(例 如家庭聚餐时,老人的权重更大、子女的权重更小,见下表黄色部分)。所有人 表达观点之后,根据影响力加权计票(喜欢、不喜欢、无所谓分别得分 2、0、1), 取总得分最高的前道菜。若因为有多道菜得分相等而无法自然排出前名,则除 了那些明确可进入前名的菜之外,在其他得分相等的菜中随机选取一部分,凑足个菜。

例如,4 个人去吃饭,从菜单的 6 道菜中选择 4 道菜,各自偏好如下表所示:

img

针对菜品,有 2 个“喜欢”票、1 个“不喜欢”票,1 个“无所谓”票,其

总得分为4 × 1 + 1 × 2 + 2 × 0 + 2 × 2 = 10。用相同的计算方式得到其他菜的得

分,最终计算排名结果为:,故选择四道菜。

如果最终六道菜的总得分分别为17、12、8、8、8、6,那么前两道菜一定可

以排入前 4 名,但第 3~5 道菜得分都是8,无法区分,此时从中随机选出 2 道菜,

形成了最终入选的 4 道菜

三个应用在各维度上的异同

商业表决 代表选举 聚餐点菜
候选对象类型 商业提案〔例如“关于投资xx项目的 提案”) 有资格参选的学生(候选人) 菜品
候选对象数量m ≥1 ≥1
拟追选出的候选对 象数量k 0(表决未通过)或者1(表决通过) 提前确定,k ≤m 提前确定,n≤k ≤n+5≤m.n为投票 人数量
投票人类型 股东 学生 就餐者
投票人数量n 提前确定 提前确定 提前确定
投票类型 支持反对弃权(可看作1一1O分) 支持反对t弃权(可看作1一10分) 喜欢不喜欢无所谓〔可看作201分)
实名与否 实名 匿名 实名
一个投票人在投票 时,不同投票选项 的数量限制 无限制 支持票数量≤k 无限制
投票人权重 有,取决于股东所占的股权大小 无,所有投票人的权重一样 有,就餐者的不同身份具有不同的影响力
检查合法性 表5中给出的合法性检查条件 除了表5中给出的合法性检查条件,还需 要检查一个投票人投的支持票总数是否小 于等于k 表5中给出的合法性检查条件
计票规则 考虑投票人权重,计算提案得“支持” 票的比率 计算每个候选人得到的“支持”票总数 根据各就餐者的权重,加权求和计算得到 每个菜品的总得分
诏选规则 若超过23支持票,则提案通过;否 则,提案不通过 根据支持票数量排序,前k个候选人当 选;若有多个候选人的支持票数量相等而 无法自然排出前k名,则仅有那些明确可 进入前k名的人当选 根据支持票数量排序,取前k个菜品,若 因为有多道菜得分相等而无法自然排出前 k名,则除了那些明确可进入前k名的菜之 外,在其他得分相等的菜中随机选取一部 分,凑足k个菜。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.