c语言投票系统

/设计一个投票系统
#include <stdio.h>
#include <string.h>


struct houxuan{
    char *name;
    int piaoshu;
} ;

void main(){
    printf("您已经进入投票系统:\n");
    printf("候选人如下:\n"
           "liming\n"
           "hanmeimei\n"
           "lihue\n"
           "lili\n"
           );
    struct houxuan ren[4]={{"liming",0},{"hanmeimei",0},
                           {"liahua",0},{"lili"},0};
    char result[100]="lili";

    for(int i=1;i<11;i++){
        printf("您是第%d位投票者,请输入您选择的人名:",i);
        scanf("%s",&result);
        if(strcmp(result,"liming")==0){
            ren[0].piaoshu++;
        }if(strcmp(result,"hanmeimei")==0){
            ren[1].piaoshu++;
        }if(strcmp(result,"lihua")==0){
            ren[2].piaoshu++;
        }if(strcmp(result,"lili")==0){
            ren[3].piaoshu++;
        }
    }

    printf("************ plese wait ***********\n\n\n\n");
    int max=0;
    for (int i=0;i<4;i++) {
        if(ren[i].piaoshu>max){
            max=i;
        }
        printf("%s票数是%d\n", ren[i].name, ren[i].piaoshu);
    }
    printf("获选的是:%s,其所得的票数为:%d",ren[max].name,ren[max].piaoshu);

}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
针对投票系统源代码 仅供参考 一、课程设计目的和任务 为完成对十佳运动员的选拔,故设计此程序通过众人对20位候选人的投票表决,选出其中票数最高的前十位,定为十佳运动员。这就要求本程序要能够录入20位候选人的名,包括起编号和姓名,然后程序可以接受用户的投票,并且自动作出票数统计并输出最后的票数由高到低的排序结果。 二、分析与设计 1.程序的基本功能: (1)查看十佳运动员的候选名。 (2) 接受用户的投票。 (3) 自动统计用户投票并输出排序结果。 (4) 添加一个管理员,可以录入候选者名。 (5) 退出程序。 2.系统总框图: 3.定义的函数及说明: 本程序由11个函数构成 back_sel()---用来返回用户菜 display1()------用来显示用户菜 f_read()-------用来读出候选人名 admirin_save()-----管理员输入数据并将数据存盘 admirin()------管理员录入数据界面 admir()——管理员界面登录 paixv()-----查看十佳候选人排名,票数由高到低 write()------调用此函数来写入票数 voting()------投票界面,进行对候选者的投票 select()-------首页界面选择 Main()---主函数。 4.算法设计: 本程序主要运用线性表的顺序存储结构,从而很容易的对数组进行操作。同时对于票数的统计排序方面采用比较经典的“冒泡法”来完成,从而优化了整个程序体,降低时间复杂度。
基于盲签名的隐私保护电子投票系统是一个复杂的系统,需要考虑到很多安全和隐私问题。下面是一个基于盲签名的简电子投票系统C语言代码实现,仅供参考: ```c #include <stdio.h> #include <stdlib.h> #include <gmp.h> // 定义大素数p和q mpz_t p, q; // 定义公钥和私钥 mpz_t n, e, d; // 随机生成一个大素数 void rand_prime(mpz_t prime) { gmp_randstate_t state; gmp_randinit_default(state); mpz_t r; mpz_init(r); mpz_urandomb(r, state, 1024); mpz_nextprime(prime, r); gmp_randclear(state); mpz_clear(r); } // 生成公钥和私钥 void generate_key() { mpz_t phi_n, p_minus_1, q_minus_1; mpz_inits(phi_n, p_minus_1, q_minus_1, NULL); // 生成两个大素数p和q rand_prime(p); rand_prime(q); // 计算n和phi_n mpz_mul(n, p, q); mpz_sub_ui(p_minus_1, p, 1); mpz_sub_ui(q_minus_1, q, 1); mpz_mul(phi_n, p_minus_1, q_minus_1); // 选择一个与phi_n互质的数e作为公钥 mpz_set_ui(e, 65537); while (1) { mpz_gcd(p_minus_1, e, phi_n); if (mpz_cmp_ui(p_minus_1, 1) == 0) break; mpz_add_ui(e, e, 2); } // 计算私钥d mpz_invert(d, e, phi_n); // 清空临时变量 mpz_clears(phi_n, p_minus_1, q_minus_1, NULL); } // 投票信息的盲化 void blind(mpz_t m, mpz_t r, mpz_t n, mpz_t m_blind) { mpz_powm(m_blind, r, n, n); mpz_mul(m_blind, m_blind, m); mpz_mod(m_blind, m_blind, n); } // 盲签名过程 void sign(mpz_t m_blind, mpz_t s, mpz_t d, mpz_t n) { mpz_powm(s, m_blind, d, n); } // 签名盲文的验证 int verify(mpz_t m_blind, mpz_t s, mpz_t e, mpz_t n) { mpz_t m; mpz_init(m); // 计算签名 mpz_powm(m, s, e, n); // 验证签名是否正确 int result = 0; if (mpz_cmp(m, m_blind) == 0) result = 1; // 清空临时变量 mpz_clear(m); return result; } // 投票 void vote(mpz_t m, mpz_t r, mpz_t m_blind, mpz_t s, mpz_t e, mpz_t n) { // 投票信息的盲化 blind(m, r, n, m_blind); // 盲签名 sign(m_blind, s, d, n); // 签名盲文的验证 int result = verify(m_blind, s, e, n); if (result) printf("投票成功!\n"); else printf("投票失败!\n"); } int main() { // 初始化变量 mpz_inits(p, q, n, e, d, NULL); // 生成公钥和私钥 generate_key(); // 投票信息 mpz_t m; mpz_init_set_ui(m, 1234); // 随机数r mpz_t r; gmp_randstate_t state; gmp_randinit_default(state); mpz_init(r); mpz_urandomb(r, state, 1024); // 投票信息的盲文 mpz_t m_blind; mpz_init(m_blind); // 盲签名 mpz_t s; mpz_init(s); // 投票 vote(m, r, m_blind, s, e, n); // 清空变量 mpz_clears(p, q, n, e, d, m, r, m_blind, s, NULL); gmp_randclear(state); return 0; } ``` 以上是一个基于盲签名的简电子投票系统C语言代码实现,仅供参考。实际应用中需要考虑更多的安全和隐私问题,并且需要更加完善的代码实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从今天起请叫我小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值