c语言课程设计电子投票系统设计
时间: 2024-12-31 20:10:22 浏览: 10
### C语言实现电子投票系统课程设计
#### 设计思路概述
为了构建一个完整的电子投票系统,需考虑多个方面,包括数据结构的选择、输入处理逻辑以及最终的结果展示。该方案旨在创建一个简易版的电视大赛观众投票及排名系统[^3]。
#### 数据结构定义
首先定义用于存储每位参赛者信息的数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20]; // 存储选手名字
int id; // 存储选手编号
unsigned int votes; // 记录得票数量
} Contestant;
```
#### 动态内存分配初始化数组
根据给定的最大可能候选人数量动态申请空间,并初始化这些候选人的基本信息:
```c
int num_contestants;
// 获取用户输入的有效整数值
void get_valid_int(int *value, const char* prompt);
Contestant* initialize_contestants() {
printf("请输入参赛选手的人数 (1-9): ");
get_valid_int(&num_contestants, "人数应介于1至9之间");
Contestant *contestants = malloc(num_contestants * sizeof(*contestants));
for (int i = 0; i < num_contestants; ++i) {
contestants[i].id = i + 1;
contestants[i].votes = 0;
printf("请输入第%d位选手的名字: ", i + 1);
scanf("%s", contestants[i].name);
}
return contestants;
}
```
#### 投票环节管理
提供简单的命令行界面供观众进行实时投票操作,直到接收到终止信号为止:
```c
void start_voting(Contestant *contestants) {
int vote_choice;
while (1) {
printf("\n请选择要投给哪位选手 ('%d' 到 '%d', 输入 '0' 结束投票):\n",
1, num_contestants);
get_valid_int(&vote_choice, "");
if (!vote_choice) break;
if ((vote_choice >= 1 && vote_choice <= num_contestants)) {
contestants[vote_choice - 1].votes++;
continue;
}
printf("无效选项,请重新选择。\n");
}
}
```
#### 排序算法应用
利用希尔排序方法对所有参赛者的得分情况进行升序排列,以便后续确定获奖名单:
```c
void shell_sort(Contestant *arr, size_t length) {
int gap, i, j;
Contestant temp;
for (gap = length / 2; gap > 0; gap /= 2)
for (i = gap; i < length; ++i)
for (j = i - gap; j >= 0 && arr[j].votes < arr[j + gap].votes; j -= gap) {
temp = arr[j];
arr[j] = arr[j + gap];
arr[j + gap] = temp;
}
}
```
#### 输出结果并清理资源
最后按照排序后的顺序打印出各参赛者的成绩排行情况,并释放之前分配过的堆内存在离开前完成必要的善后工作:
```c
void display_results(const Contestant *const contestants) {
puts("\n比赛结果如下:");
for (size_t idx = 0; idx != num_contestants; ++idx)
printf("#%-2zu %s : 得票总数=%u\n", idx + 1,
contestants[idx].name, contestants[idx].votes);
}
void cleanup_resources(void *ptr) {
free(ptr);
}
```
#### 主函数集成以上组件
将各个部分组合起来形成完整的工作流:
```c
int main() {
Contestant *contestants = NULL;
contestants = initialize_contestants();
start_voting(contestants);
shell_sort(contestants, num_contestants);
display_results(contestants);
cleanup_resources(contestants);
return EXIT_SUCCESS;
}
```
阅读全文