用c语言实现一个简单的投票系统

用c语言实现一个简单的投票系统

8.21
太宰
#include <stdio.h>
#include<string.h>
void main()
{
	int i,n,t,max;
	char s[10];
	struct person
	{
	char name[7];
	int	poll[7];
	}person[7]={
					{"小甲鱼",0},
					{"马云", 0},
					{"马化腾",0},
					{"王光迪",0},
					{"特朗普",0},
					{"大司马",0},
					{"卢本伟",0}
				};
		
	printf("欢迎进入全球七大优秀人物投票系统:<>\n");
	printf("候选人目前有:小甲鱼,马云,马化腾,王光迪,特朗普,大司马,卢本伟\n");
	for(i=0;i<10;i++)
	{
		
		printf("第%d位投票,请写下支持的候选人名字:",i+1);
		gets(s);
		for(t=0;t<7;t++)
		{
			if(strcmp(s,person[t].name)==0)
			*(person[t].poll)+=1;
			continue;
		}		
	}
	max=*(person[0].poll);
	for(n=0;n<7;n++)
	{
		printf("%s得票数为:%d\n",person[n].name,*(person[n].poll));
		if(*(person[n+1].poll)>max)
		{
		max=*(person[n].poll);
		}
			
	}
	printf("本次选举的冠军为:%s",person[n].name);

}
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
首先,盲签名是一种加密技术,可以在不暴露签名者身份的情况下进行数字签名。在电子投票系统中,盲签名可以用于保护投票者的隐私,从而确保投票的公正性和安全性。 下面是一个基于盲签名的电子投票系统的基本实现思路: 1. 定义数据结构 首先,需要定义一些数据结构来存储投票信息,包括: - 投票者信息,包括姓名、身份证号、投票密码等; - 投票选项信息,包括选项名称、选项编号等; - 投票结果信息,包括投票者选择的选项编号、盲签名等。 可以使用结构体来定义这些数据结构。 2. 实现盲签名算法 实现盲签名算法可以使用RSA加密算法。具体步骤如下: - 选取两个大素数p和q,并计算N=pq和φ(N)=(p-1)(q-1); - 选择一个整数e,使得1<e<φ(N),且e与φ(N)互质; - 计算d,使得de≡1(mod φ(N)),即d为e的模φ(N)的乘法逆元; - 投票者生成投票密码,并将其盲化,得到一个盲值; - 投票者将盲值发送给选票服务器; - 选票服务器使用RSA加密算法将盲值进行签名,并将签名结果返回给投票者; - 投票者使用RSA加密算法将签名结果解密,并得到盲签名。 3. 实现投票功能 投票功能分为两个步骤,首先是选择投票选项,然后进行盲签名。 选择投票选项时,投票者可以从多个选项中选择一个,并将选项编号发送给选票服务器。 进行盲签名时,投票者将投票密码进行盲化,并发送给选票服务器。选票服务器使用RSA加密算法将盲值进行签名,并将签名结果返回给投票者。投票者使用RSA加密算法将签名结果解密,并得到盲签名。 4. 实现结果统计功能 结果统计功能可以使用哈希算法来实现。具体步骤如下: - 将所有投票结果的盲签名进行哈希,得到一个哈希值; - 将哈希值与选项编号进行比较,得到每个选项的得票数。 实现代码可以参考下面的示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_VOTERS 100 #define MAX_OPTIONS 10 typedef struct { char name[20]; char id[20]; char password[20]; char blind_password[20]; char blind_signature[20]; } Voter; typedef struct { int id; char name[20]; } Option; typedef struct { int option_id; char blind_signature[20]; } Result; void generate_blind_password(char* password, char* blind_password) { // TODO: 实现盲化算法 } void generate_blind_signature(char* blind_password, char* blind_signature) { // TODO: 实现盲签名算法 } void vote(Option* options, int num_options, Voter* voter, Result* result) { // 选择投票选项 int option_id; printf("选择投票选项:\n"); for (int i = 0; i < num_options; i++) { printf("%d. %s\n", options[i].id, options[i].name); } scanf("%d", &option_id); // 进行盲签名 generate_blind_password(voter->password, voter->blind_password); generate_blind_signature(voter->blind_password, voter->blind_signature); // 保存投票结果 result->option_id = option_id; strcpy(result->blind_signature, voter->blind_signature); printf("投票成功!\n"); } void count_results(Option* options, int num_options, Result* results, int num_results) { // 计算哈希值 int hash = 0; for (int i = 0; i < num_results; i++) { hash += atoi(results[i].blind_signature); } // 统计得票数 for (int i = 0; i < num_options; i++) { int count = 0; for (int j = 0; j < num_results; j++) { if (results[j].option_id == options[i].id) { count++; } } printf("%s: %d\n", options[i].name, count); } } int main() { // 初始化投票选项 Option options[MAX_OPTIONS]; options[0].id = 1; strcpy(options[0].name, "选项1"); options[1].id = 2; strcpy(options[1].name, "选项2"); int num_options = 2; // 初始化投票者 Voter voters[MAX_VOTERS]; voters[0].name = "张三"; voters[0].id = "123456"; voters[0].password = "123456"; int num_voters = 1; // 进行投票 Result results[MAX_VOTERS]; int num_results = 0; for (int i = 0; i < num_voters; i++) { vote(options, num_options, &voters[i], &results[num_results]); num_results++; } // 统计投票结果 count_results(options, num_options, results, num_results); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

请对长亭晚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值