C++课程设计投票程序.doc

上传人:文库蛋蛋多 文档编号:2384449 上传时间:2023-02-17 格式:DOC 页数:16 大小:271KB
返回 下载 相关 举报
C++课程设计投票程序.doc_第1页
第1页 / 共16页
C++课程设计投票程序.doc_第2页
第2页 / 共16页
C++课程设计投票程序.doc_第3页
第3页 / 共16页
C++课程设计投票程序.doc_第4页
第4页 / 共16页
C++课程设计投票程序.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《C++课程设计投票程序.doc》由会员分享,可在线阅读,更多相关《C++课程设计投票程序.doc(16页珍藏版)》请在三一办公上搜索。

1、各专业全套优秀毕业论文图纸C/C+程序设计课程设计课程设计题目: 投票程序 系 别: 计算机科学与工程 专 业: 信息管理与信息系统 小组成员: XXX 设 计 者: XXX 指导教师: XXX 批语:河南城建学院2014年 12 月 25 日设计题目:投票程序1一、设计要求和分工11、设计要求12、设计目标2二、数据结构设计2数据结构设计描述2三、变量的定义和作用4四、系统各模块( 函数)的组成,功能61、 输入模块:62、 统计模块:63、 输出功能:7五、各功能模块的算法处理流程图及相关说明81、 输入模块的算法处理流程图及相关说明:82、统计模块的算法处理流程图及相关说明:82、 输出

2、模块的算法处理流程图及相关说明:9六、程序设计过程中遇到的问题及解决过程101、 问题一及解决过程:102、 问题二及解决过程:103、 问题三及解决过程:11七、 课程设计总结或体会111、总结112、体会12附录:源程序12参考文献14设计题目:投票程序一、设计要求和分工1、设计要求要求在设计过程中,充分发挥自己的独立工作能力及创造能力,对每个问题都应进行分析、比较,并提出自己的见解,反对盲从,杜绝抄袭。在设计过程中必须做到:1.随时复习教科书、听课笔记及习题;2.做好准备工作,充分发挥自己的主观能动性和创造性,及时查阅相关资料;3.认真编程;4.按预定计划及时完成任务。2、设计目标设有代

3、号为a,b,c的三位亚洲小姐候选人,根据投票者在选票上对他们代号的填写顺序分别记分5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选亚洲小姐。请注意:若同一张票上写有两个相同代号,或者投票者在选票上填写的代号不是a,b,c的三位亚洲小姐候选人的代号,则显示“此票无效”;对候选人按照他们的得分排序,然后比较前两名候选人得分是否相同。如果相同,则显示“重新投票”;否则显示三个候选者得分并输出“祝贺X当选冠军”,X为最高分候选者。例如:投票人数:6输入投票内容:abccabcbacaa该票无效!rca该票无效!cba三位候选人得分:a:12b:13c:15 “祝贺X当选

4、冠军”,X为最高分候选者。二、数据结构设计数据结构设计描述开始定义结构体、相关变量和常量输入投票人数和投票内容选票代号是否重复是否含有其他人NY该票无效统计相应候选人的票数并排序输出投票结果YN判断前两名总票数是否相等重新投票输出获胜者结束三、变量的定义和作用#include #include /以上两个是包含库。struct hxr int code; int score; /定义代号、得分两个整型数据。 hxr3; /定义一个结构体存放候选人数据。main() /入口函数。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定义接收投票的变量。 struct

5、 hxr hxr3; /用hxr定义结构体数组。 printf(请输入投票总人数:n); scanf(%d,&k); /将投票人数放入标量k。 printf(请输入投票:n); getchar(); /拦截scanf的最后一个回车。 while(end=0) /while语句进行循环判定,if出现出现前两名并列第一时,返回while语句重新投票else输出冠军结束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化结构体数组。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /将投票按照x,y,z的顺序输入。 ge

6、tchar();/拦截回车,否则最后一个字符输入完毕按回车之后,回车的输入没有东西接收,就会变成下次循环的第一个字符scanf就会接收,那么二次循环的第一个字符就智能读到回车了,所以第一次结尾用getchar()拦截回车. if(x!=y&x!=z&y!=z)&(x=a| x=b|x=c)&(y=a| y=b|y=c)&(z=a| z=b|z=c) / 只有所投票中3位候选人各出现一次且所投票必须是a,b,c以内的字母此票才有效,不符合执行if下面的prinft语句。 hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2); hxr

7、2.score+=(x=c?5:(y=c?3:2); /三目运算判断三个投票人一轮投票的结果,每有人投一次就判断累加一次。 printf( score: %d %d %dn,hxr0.score,hxr1.score,hxr2.score); / 输出投入该票后,三个人累计得分。 continue; / continue 语句的用法是跳过continue下面的语句进入下一次循环! printf(此票无效n); for(i=0;i3;i+) if(temp=hxr2.score) | ( (hxr0.score=hxr2.score)&hxr0.score=hxr1.score) | (hxr1

8、.score=hxr2.score)&hxr1.score=hxr0.score) printf(重新投票n);/ 如果出现前两名并列第一,则打印“重新投票”。 else printf(祝贺%c当选冠军,%c为最高分候选者。n,j,j); / 否则输出得分最高者的名字。 end=1; getchar(); / 增加一个输入命令,防止程序直接退出看不到结果。四、系统各模块( 函数)的组成,功能1、 输入模块:main() /入口函数。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定义接收投票的变量。 struct hxr hxr3; /用hxr定义结构体数组

9、。 printf(请输入投票总人数:n); scanf(%d,&k); /将投票人数放入标量k。 printf(请输入投票:n); getchar(); /拦截scanf的最后一个回车。 while(end=0) /while语句进行循环判定,if出现出现前两名并列第一时,返回while语句重新投票else输出冠军结束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化结构体数组。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /将投票按照x,y,z的顺序输入。 getchar();/拦截回车,否则最后一个字符输

10、入完毕按回车之后,回车的输入没有东西接收,就会变成下次循环的第一个字符scanf就会接收,那么二次循环的第一个字符就智能读到回车了,所以第一次结尾用getchar()拦截回车.2、 统计模块:if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a| y=b|y=c)&(z=a| z=b|z=c) / 只有所投票中3位候选人各出现一次且所投票必须是a,b,c以内的字母此票才有效,不符合执行if下面的prinft语句。 hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2); hxr2.score+=(x=c?5:(

11、y=c?3:2); /三目运算判断三个投票人一轮投票的结果,每有人投一次就判断累加一次。 printf( score: %d %d %dn,hxr0.score,hxr1.score,hxr2.score); / 输出投入该票后,三个人累计得分。 continue; / continue 语句的用法是跳过continue下面的语句进入下一次循环! printf(此票无效n); 3、 输出功能:for(i=0;i3;i+) if(temp=hxr2.score) | ( (hxr0.score=hxr2.score)&hxr0.score=hxr1.score) | (hxr1.score=hx

12、r2.score)&hxr1.score=hxr0.score) printf(重新投票n);/ 如果出现前两名并列第一,则打印“重新投票”。 else printf(祝贺%c当选冠军,%c为最高分候选者。n,j,j); / 否则输出得分最高者的名字。 end=1; getchar(); / 增加一个输入命令,防止程序直接退出看不到结果。五、各功能模块的算法处理流程图及相关说明1、 输入模块的算法处理流程图及相关说明:开始定义结构体、相关变量和常量输入投票人数和投票内容图一,输入模块流程图说明:首先定义输入相关的变量、常量和结构体,char x,y,z;为接收投票的变量,struct hxr

13、hxr3;hxr为定义的结构体数组;输入投票人数和投票内容,投票人数标量为:k。2、统计模块的算法处理流程图及相关说明:开始选票代号是否重复是否含有其他人NY该票无效统计相应候选人的票数并排序图二,统计模块流程图说明:if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a|y=b|y=c)&(z=a| z=b|z=c) / 判断所投票中3位候选人是否各出现一次且所投票是a,b,c以内的字母,若不符合合执行if下面的prinft语句,若是,通过hxri.score+累加执行三目运算统计三个投票人投票的结果。2、 输出模块的算法处理流程图及相关说明:开始YN判断前两名总票数是否

14、相等重新投票输出获胜者结束图三,输出模块流程图说明:首先通过temp=hxri.score; j=a+i;将得分最高的人,最高得分保存在temp里,并将这个人的名字(a、b或c)保存在j里。然后用printf(people %c score %dn,a+hxri.code,hxri.score);输出3个人各自的得分情况;最后判定前两名的分数是否相等,若相等输出重新投票,否则输出“祝贺x当选冠军,x为最高分候选者。”并结束程序。六、程序设计过程中遇到的问题及解决过程1、 问题一及解决过程: 问题一:hxri.code和hxri.score未进行初始化,导致程序出错。解决过程:通过仔细检查,发现

15、问题并对结构体数组 hxri.code=i; hxri.score=0; 进行初始化。2、 问题二及解决过程: 问题二:使用if(x!=y&x!=z&y!=z)进行判定时,只对所投票中3位候选人各出现一次进行了判定,但是若输入的选票不在a,b,c三位候选人以内则无法判定为废票。解决过程:通过在原来的基础上增加限定条件进行改善,出现的问题得到了解决;修改后的代码如下: if(x!=y&x!=z&y!=z)&(x=a|x=b|x=c)&(y=a|y=b|y=c)&(z=a| z=b|z=c)3、 问题三及解决过程:问题三:三位候选人的分数如果用ifelse语句进行判断的话代码会很繁琐,而且不易进行

16、累加积分,所以很难计算三位候选人的分数。解决过程:通过查阅书籍,询问同学发现三目运算能起到与ifelse语句相的效果而且更为简洁明了,代码如下:hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2);hxr2.score+=(x=c?5:(y=c?3:2);七、 课程设计总结或体会1、总结刚开始听说课程设计的时候有些不知所措,然后了解到课程设计就是对我们前一段学习的的考察和总结,总之觉得还是升华了很多。在选定题目的时候思索了很久,不知道该选哪个题目好?其实每个题目都是有各自的难点的,最后经过思考选择了投票程序,一开始觉得这个题目应该

17、会很简单,但是随着深入了解才发现其实挺困难的。然后就有些迷茫与失落,想放弃但是还是坚持下来了。刚开始的时候一直摸不着头脑,不知从哪里写起,如何引用函数,如何定义常量、变量和数组,用什么语句,怎样进行嵌套,如何构造判断条件等等。所以就从一无所知开始了,然后就一点点的开始编写,刚开始编写的很像伪代码,越往后写完问题越多,头疼了许久后再鼓起勇气,终于在经过两天的努力下总体框架已经写好,虽然还是有诸多的问题,但是一点点的改进总能做好。但是真正的问题才刚刚开始,因为我只是停留在编写代码解决眼前的问题上,没有把思维放在问题后更深的实质和更多的情况上,虽说是摸着石头过河,但是我坚信清晰的思路和严密的逻辑会带

18、来正确的判断和结果。在代码完成总体完成后的昨天我发现这段代码并没有符合我的要求,我的要求是代码要简洁、有效而不是繁多、冗杂,代码不能有任何的语义冲突也不能有一点点的疏忽。这些都是靠不断地提高要求和不断地检验才能达成的。就在今天12月25日,这个代码我又改了五次,有很多人说其实凑合就行了,也有很多人说太简短了(在他们看来简短的代码就是简单的代码),还有人让我换一种方法,但是我知道我一点开始了就停不下来,我坚信我能够通过自己的努力把它改成很合理的代码,虽然我也担心自己做不到,但是我的灵魂已经被他深深地吸引了,从我见到她的那刻起。2、体会我知道没有哪个人是完美的,但是我会努力做到最好,我就是这样一个

19、人,不管多苦都会笑和坚持;我知道自己知识不够,但是我会问别人不过他知道多少,也不过他怎么说我,我会查任何一个我不懂得代码、函数、语句,一次次直到一个个弄明白,因为我就是这样一个人,尽管此时浑身疼痛,但是我还是在这里坐着坚持,因为这就是我不管多苦只会笑和坚持!、通过此次的课程设计我学到了很多,比如非格式输入的作用,三目运算,以及复杂的关系判断等等。我很有收获,我的付出都是值得的。附录:源程序#include #include /以上两个是包含库。struct hxr int code; int score; /定义代号、得分两个整型数据。 hxr3; /定义一个结构体存放候选人数据。main()

20、 /入口函数。 int i=0,j=0,k,temp=0,end=0; char x,y,z; /定义接收投票的变量。 struct hxr hxr3; /用hxr定义结构体数组。 printf(请输入投票总人数:n); scanf(%d,&k); /将投票人数放入标量k。 printf(请输入投票:n); getchar(); /拦截scanf的最后一个回车。 while(end=0) /while语句进行循环判定,if出现出现前两名并列第一时,返回while语句重新投票else输出冠军结束程序。 for(i=0;i3;i+) hxri.code=i; hxri.score=0; /初始化结

21、构体数组。 for(i=1;i=k;i+) scanf(%c%c%c,&x,&y,&z); /将投票按照x,y,z的顺序输入。 getchar();/拦截回车,否则最后一个字符输入完毕按回车之后,回车的输入没有东西接收,就会变成下次循环的第一个字符scanf就会接收,那么二次循环的第一个字符就智能读到回车了,所以第一次结尾用getchar()拦截回车. if(x!=y&x!=z&y!=z)&(x=a| x=b|x=c)&(y=a| y=b|y=c)&(z=a| z=b|z=c) / 只有所投票中3位候选人各出现一次且所投票必须是a,b,c以内的字母此票才有效,不符合执行if下面的prinft语

22、句。 hxr0.score+=(x=a?5:(y=a?3:2); hxr1.score+=(x=b?5:(y=b?3:2); hxr2.score+=(x=c?5:(y=c?3:2); /三目运算判断三个投票人一轮投票的结果,每有人投一次就判断累加一次。 printf( score: %d %d %dn,hxr0.score,hxr1.score,hxr2.score); / 输出投入该票后,三个人累计得分。 continue; / continue 语句的用法是跳过continue下面的语句进入下一次循环! printf(此票无效n); for(i=0;i3;i+) if(temp=hxr2.score) | ( (hxr0.score=hxr2.score)&hxr0.score=hxr1.score) | (hxr1.score=hxr2.score)&hxr1.score=hxr0.score) printf(重新投票n);/ 如果出现前两名并列第一,则打印“重新投票”。 else printf(祝贺%c当选冠军,%c为最高分候选者。n,j,j); / 否则输出得分最高者的名字。 end=1; getchar(); / 增加一个输入命令,防止程序直接退出看不到结果。参考文献C/C+程序设计张树粹主编

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号