C语言课设之投票系统.docx
《C语言课设之投票系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之投票系统.docx(19页珍藏版)》请在冰点文库上搜索。
![C语言课设之投票系统.docx](https://file1.bingdoc.com/fileroot1/2023-6/18/7baf43b0-8828-401e-813b-fde717277e39/7baf43b0-8828-401e-813b-fde717277e391.gif)
C语言课设之投票系统
C语言课程设计
前言
计算机科学技术的发展,不仅极大地促进了整个科学技术的发展,而且明显地加快了经济信息化和社会信息化的进程。
因此,计算机教育在全国备受重视,计算机知识与能力已成为21世纪人才素质的基本要素之一。
如今,高等教育的计算机教育发展十分迅速。
十多年前,只有部分理工科专业开设计算机课程。
今天,几乎所有高校的所有专业都开设了程度不同的计算机课程。
人们已经认识到,计算机知识已成为当代知识分子知识结构中不可缺少的重要组成部分。
而除了掌握计算机的基础知识和操作的基本能力外,掌握一门高级编程语言,并可以熟练运用它,已成为当代大学生综合能力必要组成。
计算机技术发展如此迅猛,计算机应用如此广泛,需要学习的东西愈来愈多,而我们的总学时是有限的。
一般来说,计算机课程学习可以分为两部分:
一部分是理论课程学习,一部分是上机应用实习。
根据我们专业的性质和要求,则应侧重于上机操作运用。
为此,学校特意在暑期最后一星期安排了32个学时的上机实习。
现将一星期的实习内容及结果分析分列如下:
投票程序
一.题目要求:
设有代号为’a’,’b’,’c’的三个个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。
请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。
请注意;若同一张票上写有两个相同代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军!
”。
二.需求分析:
根据题目要求,选票数据以txt文件的形式存储,所以应提供文件的打开,关闭,输入,输出等操作,并对读取的文件进行调用。
三.总体设计
根据题目要求,可对程序进行如下设计:
四.详细设计:
1.主函数
本系统主要用主函数调用打开的选票数据和进入主菜单函数,通过调用主菜单函数实行主函数的功能。
主菜单函数
输入5
选择输入1~5的数
输入1~4的数
退出
选择输入1或2
输入2
输入1入
程序
main()
{
voidchoose();
menu();
}
voidmenu()
{voidchoose();
intn,w;
do
{puts("\t\t^^^^^^^^^^^^足球先生投票程序^^^^^^^^^^^^^^^^^^");
puts("\t\t{}");
puts("\t\t{[1.选票人数:
]}");
puts("\t\t{[2.选票信息:
]}");
puts("\t\t{[3.分数:
]}");
puts("\t\t{[4.结果:
]}");
puts("\t\t{[5.退出]}");
puts("\t\t{}");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
printf("请选择你的数字(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>5)
{
w=1;
getchar();
}
elsew=0;
}while(w==1);
switch(n)
{
case1:
innum();break;
case2:
input();break;
case3:
output();break;
case4:
choose();break;
case5:
exit(0);
}
}
2.选票人数模块
选票信息保存在“voter.txt”文件中,之前已通过只读的方式从“voter.txt”文件中打开并读取出来并保存在之前建立的结构体变量vote[NUM]中。
通过调用选票信息统计选票人数,并通过选择函数菜单返回或退出。
程序
voidinnum()
{
inti=loadvote();
printf("\n选票人数:
\t%d\n\n",i);
select();
}
3.选票信息模块
读取选票信息,用for循环语句进行票数的统计并用ifelse语句进行选择,如果出现票数一样的则选票无效,通过调用累加函数将票数统计结果统计出来。
程序
voidinput()
{
inti;
intm=loadvote();
printf("\n");
number[0].num=number[1].num=number[2].num=0;
for(i=0;i{
printf("%c%c%c",vote[i].c1,vote[i].c2,vote[i].c3);
if(vote[i].c1==vote[i].c2||vote[i].c1==vote[i].c3||vote[i].c2==vote[i].c3)
printf("\t该票无效!
\n");
else
{
add(vote[i].c1,vote[i].c2,vote[i].c3);
printf("\n");
}
}
printf("\n\n");
select();
}
4.分数统计模块
通过三人所得票数按照计分方法将三人的得分计算出来,也要用到for循环语句和ifelse语句,并分别用将三人的得分结果输出来。
程序
voidoutput()
{
intn,i;
n=loadvote();
number[0].num=number[1].num=number[2].num=0;
for(i=0;i{
if(vote[i].c1==vote[i].c2||vote[i].c1==vote[i].c3||vote[i].c2==vote[i].c3);
else
{
add(vote[i].c1,vote[i].c2,vote[i].c3);
}
}
printf("\n候选人的得分:
\t");
printf("a:
%d\n",number[0].num);
printf("b:
%d\n",number[1].num);
printf("c:
%d\n\n\n",number[2].num);
select();
}
5.选举结果模块
运用Ifelseif语句对前面三个候选人的得分情况进行比较分析,如果三个人的得分相同则显示重新投票并返回主函数main(),否则通过switchcase语句进行比较选出得分最高的人为冠军。
程序
voidchoose()
{
intc;
if(number[0].num>number[1].num&&number[0].num>number[2].num)
{
c=1;
}
elseif(number[1].num>number[0].num&&number[1].num>number[2].num)
{
c=2;
}
elseif(number[2].num>number[1].num&&number[2].num>number[0].num)
{
c=3;
}
else
{
printf("重新选票!
\n");
main();
}
switch(c)
{
case1:
printf("\n祝贺a当选冠军!
\n\n\n");select();
case2:
printf("\n祝贺b当选冠军!
\n\n\n");select();
case3:
printf("\n祝贺c当选冠军!
\n\n\n");select();
}
}
6.选择模块
选择函数的建立是为了每运行完一个模块之后都可以通过选择函数返回或退出。
voidselect()
{
intm,w;
do
{
puts("下一个");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
puts("\t\t{}");
puts("\t\t{[1.返回]}");
puts("\t\t{[2.退出]}");
puts("\t\t{}");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("请选择你的数字(1-2):
[]\b\b");
scanf("%d",&m);
if(m<1||m>2)
{
w=1;
printf("错误\n");
select();
}
elsew=0;
switch(m)
{
case1:
printf("\n\n");menu();break;
case2:
exit(0);
}
}while(w==1);
}
五.完整编写过程如下:
完整程序
#include
#include
#include
#defineNUM20
structFOOD
{
charc;
intnum;
}number[3];
structVOTE
{
charc1;
charc2;
charc3;
}vote[NUM];
voidcount(charc,intn);
voidmenu()
intloadvote()
{
FILE*fp;
inti;
if((fp=fopen("voter.txt","r"))==NULL)
{
printf("\n不能打开此文件\n");
return0;
}
for(i=0;!
feof(fp);i++)
{
fscanf(fp,"%s%s%s",&vote[i].c1,&vote[i].c2,&vote[i].c3);
}
fclose(fp);
return(i);
}
voidselect()
{
intm,w;
do
{
puts("下一个");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
puts("\t\t{}");
puts("\t\t{[1.返回]}");
puts("\t\t{[2.退出]}");
puts("\t\t{}");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf("请选择你的数字(1-2):
[]\b\b");
scanf("%d",&m);
if(m<1||m>2)
{
w=1;
printf("错误\n");
select();
}
elsew=0;
switch(m)
{
case1:
printf("\n\n");menu();break;
case2:
exit(0);
}
}while(w==1);
}
voidinnum()
{
inti=loadvote();
printf("\n选票人数:
\t%d\n\n",i);
select();
}
voidadd(charc1,charc2,charc3)
{
inti;
for(i=0;i<3;i++)
{
switch(i)
{
case0:
count(c1,5);break;
case1:
count(c2,3);break;
case2:
count(c3,2);
}
}
}
voidcount(charc,intn)
{
switch(c)
{
case'a':
number[0].num+=n;break;
case'b':
number[1].num+=n;break;
case'c':
number[2].num+=n;
}
}
voidinput()
{
inti;
intm=loadvote();
printf("\n");
number[0].num=number[1].num=number[2].num=0;
for(i=0;i{
printf("%c%c%c",vote[i].c1,vote[i].c2,vote[i].c3);
if(vote[i].c1==vote[i].c2||vote[i].c1==vote[i].c3||vote[i].c2==vote[i].c3)
printf("\t该票无效!
\n");
else
{
add(vote[i].c1,vote[i].c2,vote[i].c3);
printf("\n");
}
}
printf("\n\n");
select();
}
voidoutput()
{
intn,i;
n=loadvote();
number[0].num=number[1].num=number[2].num=0;
for(i=0;i{
if(vote[i].c1==vote[i].c2||vote[i].c1==vote[i].c3||vote[i].c2==vote[i].c3);
else
{
add(vote[i].c1,vote[i].c2,vote[i].c3);
}
}
printf("\n候选人的得分:
\t");
printf("a:
%d\n",number[0].num);
printf("b:
%d\n",number[1].num);
printf("c:
%d\n\n\n",number[2].num);
select();
}
main()
{
voidchoose();
menu();
}
voidmenu()
{
voidchoose();
intn,w;
do
{程
puts("\t\t^^^^^^^^^^^^足球先生投票序^^^^^^^^^^^^^^^^^^");
puts("\t\t{}");
puts("\t\t{[1.选票人数:
]}");
puts("\t\t{[2.选票信息:
]}");
puts("\t\t{[3.分数:
]}");
puts("\t\t{[4.结果:
]}");
puts("\t\t{[5.退出]}");
puts("\t\t{}");
puts("\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
printf("请选择你的数字(1-5):
[]\b\b");
scanf("%d",&n);
if(n<1||n>5)
{
w=1;
getchar();
}
elsew=0;
}while(w==1);
switch(n)
{
case1:
innum();break;
case2:
input();break;
case3:
output();break;
case4:
choose();break;
case5:
exit(0);
}
}
voidchoose()
{
intc;
if(number[0].num>number[1].num&&number[0].num>number[2].num)
{
c=1;
}
elseif(number[1].num>number[0].num&&number[1].num>number[2].num)
{
c=2;
}
elseif(number[2].num>number[1].num&&number[2].num>number[0].num)
{
c=3;
}
else
{
printf("重新选票!
\n");
main();
}
switch(c)
{
case1:
printf("\n祝贺a当选冠军!
\n\n\n");select();
case2:
printf("\n祝贺b当选冠军!
\n\n\n");select();
case3:
printf("\n祝贺c当选冠军!
\n\n\n");select();
}
}
六.上机操作
1.主菜单模块
2.选票人数模块
3.选票信息模块
.4.分数统计模块
5.选举结果模块
6.退出模块