【数据结构】B类投票选举系统_第1页
【数据结构】B类投票选举系统_第2页
【数据结构】B类投票选举系统_第3页
【数据结构】B类投票选举系统_第4页
【数据结构】B类投票选举系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、东北大学信息科学与工程学院数据结构课程设计报告题目投票选举问题课题组长张晓峰课题组成员曹乔家 王子骄专业名称计算机科学与技术班级计 1307指导教师杨雷2015 年 1 月课程设计任务书题目:投票选举问题问题描述:在一次投票选举中, 要从 n 个候选人中选出 1 个优胜者。每个候选人有一张选票,只能投给一位候选者,超过半数选票的候选人为优胜者。用一个长度为 n 的选举向量 v 表示收集到的n 张选票。投票选举问题要求根据选举向量 v 计算选举产生的优胜者。设计要求:设计算法实现投票选举问题的程序。 ( 1 ) 采用 STL 的向量等数据结构。( 2 ) 实现 STL 的向量类deque。( 3

2、) 应用 STL 的向量类实现投票选举问题。指导教师签字:年月日目录l课题 概述 l1. 1 课题任务l1. 2 课题原理l1. 3 相关知识l2 需 求 分 析 l2. 1 课题调研l2. 2 用户需求分析 l3 方案设计 l3. 1 总体功能设计 l3. 2 数据结构设计 l3. 3 函数原型设计 2 3. 4 主算法设计23. 5 用户界面设计 2 4 方案 实现 2 4. 1 开发环境与工具2 4. 2 程序设计关 键技术2 4. 3 个人设计实现 3 4.3. 1 张晓峰设计实现34. 3. 2 曹乔家设计实现44. 3. 3 王子骄设计实现55 测试与调试 65. 1 个人测试65

3、. 1. 1 张晓峰测试6 5. 1. 2 曹乔家测试6 5. 1. 3 王子骄测试7 5. 2 组装与系统测试8 5. 3 系统运行86 课题总结11 6. 1 课题评价116. 2 团队协作116. 3 团队协作116. 4 个人设计小结11 6.4. 1 张晓峰设计小结116. 4. 2 曹乔家设计小结 116. 3. 3 王子骄设计小结117 附录 A 课 题 任 务 分 工 12A- 1 课题程序设计分工12 A2 课题报告分工13 附录B 课题 设计 文档 ( 光盘 ) 1 3 Bl 课程设计报告(电子版)1 3 B2 源程序代码 ( *· H, *· CPP)

4、13B3 工程与可执行文件) 1 3B- 4 屏幕演示录像文件(可选)13 附录C 用 户 操 作 手 册 ( 可 选 ) 1 3 C. 1 运行环境说明13 C. 2 操作说明 13 1 课题概述1.1 课题任务【问题描述】在一次投票选举中, 要从 n 个候选人中选出 1 个优胜者。每个候选人 有一张选票,只 能投给一位候选者, 超过半数选票的候选人为优胜者。用一个长度为 n 的选举向量 v 表示收集到的 n 张选票。投票选举问题要求根据选举向量 v 计算选举产生的优胜者。【设计要求】设计算法实现投票选举问题的程序。(1 ) 采用 S1L 的向量等数据结构。( 2 ) 实现 S1L 的向量类

5、 deque。( 3 ) 应用 S1L 的向量类实现投票选举问题。1.2 课题原理本实验采用向量来保存选举人的姓名, 选举号码和选举票数, 通过对票数的计算和排序, 选出票数最多的人来作为优胜者。1.3 相关知识本实验主要运用 C+中 S1L 的向量及队列 deque 等数据结构, 运用 C+中的类等相关知识。- I -2.1 课题调研2 需求分析投票选举采用对票数的计算来选出优胜者 , 通过对不记名的选票, 来计算票数, 投票软件运用算法对选票进行计算, 直接自动生成选票结果。2.2 用户需求分析本程序采用简单的界面, 可以让使用者对如何使用一目了然, 界面简单、大方。S1L 中的 dequ

6、e 向量类保存投票信息,只 需输入每个候选人的号码和候选人所投的号码, 最终结果将自动生成, 便千使用者的使用。3 方案设计3.1 总体功能设计本软件要实现对每个候选人的编号功能, 每个候选人的投票功能, 以及最终优胜候选人的输出功能。3.2 数据结构设计( 1)候选人的类class People public:string name; int id;int number; ;( 2 ) 建立一个向量保存选举人信息vector<People>V(N);( 3 ) 建立两个队列保存选票deque<int>Dl ,D2;3.3 函数原型设计void Lum ( )候选人的姓

7、名编号录入 void Toupiao()每个候选人的投票录入void Jipiao(int x)每一票的记录void Jieguo()投票的结果统计3.4 主算法设计本程序通过对选票的计算, 先把选票记录在一个队列中, 通过选票号码与选举人号码的比对, 来保存选举人的票数个数, 再用一个队列保存选举人的票数, 对票数进行排序, 找出最大的选举票数, 最后与队列中的选举人票数进行比对, 相等的即为优胜 者。3.5 用户界面设计主界面分别有录入选举人, 选举人投票, 选票人结果, 退出系统四个功能, 进入录入选举人窗口输入选举人姓名和编号。选举人投票窗口输入每位选举人所选人员的编号。选票人结果窗口

8、显示超过选举人半数的优胜者, 被选举人所获票数未达到半数没有优胜者。退出系统即退出本软件。4 方案设计4. 1 开发环境与工具本程序在window7 下实现和运行, 并使用 Visual C+6.0 编译的。4. 2 程序设计关键技术本程序采用了 STL 中的向量和度列等数据结构来编程实现的, 其中关键的是对选票的统计、计算和排序, 首先用队列保存选票数, 来进行选举人的票数统计, 再对选举人的票数进行排序、比对, 最后输出优胜者的姓名及票数。- 19 -4. 3 个人设计实现4.3. 1 张晓峰设计实现l定义了候选人的类, 包括姓名、选票号、票数。class Peopl e public:s

9、tring name; inti d ;intnumber;2. 定义了向量 Vvect or <Peopl e >V (N) ;3. 定义了两个队列保存选票数和排序选票数。deque< i nt >Dl , D2 ;4. 编写了处理投票统计函数, 先把选票记录在一个队列中, 通过选票号码与选举人号码的比对, 来保存选举人的票数个数, 再用一个队列保存选举人的票数, 对票数进行排序, 找出最大的选举票数, 最后与队列中的选举人票数进行比对, 相等的即为优胜者。void J i eguo ()结果1system("cl s") ; cout«

10、',*: ', << endl << endl << en dl ; intx, xl, x2, i, j, k;for (i =O ; i <N ; i +) Vi. number=O;for (j =O; j <N ; j +)选举人 结 果x=Dl. begin O j ;Jipiao(x);fo r (k=O; k <N ; k+)D2. push _fr ont (V k . number ) ; sort (D2. begin O, D2. end O) ;xl =D2. begin() N- 1 ; x2=D2

11、. begin O N- 2 ; i f (xl =x2)cout <“ *没有选出优胜 者!” <e ndl ; else if (xl < (N/ 2) )cout <“ *没有选出优胜 者!” <e ndl ;elsefor(j=O; j<N ; j+)迁 (xl =Vj . number)c out <“ *优胜者是: V口 nam e<<en dl ;c out <“ *选票数是: V口 num be r « endl ;s ys t me (" pause") ;4.3. 2 曹乔家设计实现l

12、候选人信息录入函数, 通过 fo r 循环来进行对各个选举人的信息录入, 保存在向量中。void Lur u ()录入s ys t me (" el s") ;cout«“*": "“<< endl << endl <<e ndl ; intj;录入选举人c out <“ *一共, c out << endl ;' <<N< "位选举人!”e nd l ;for (j =O; j<N; j +)c out <“* 输入第勺,l ” 选举人姓名:

13、,cin»V j. nma e ;c out <“* 输入第勺,l <” 选举人号码:,cin> >V j. id;cout«endl;sys t me (" pause") ;2. 候选人投票函数, 当进入函数时, 通过 fo r 循环来对各个投票者投票的记录, 同时保存在建立的队列中。void Toupi ao ()投票s ys t me (" el s") ;cout<<"选举人投票*:" << endl < <endl << e ndl

14、 ; intj;for (j =O; j <N ; j+)cout <“* 输入第,勺1 “ 个人的投票号码:,intx;c i n» x ;Dl. pushfr ont (x) ;c out <“ *投票结束!”e ndl ; system(" paus e" ) ;3. 计票函数void Jipiao(int x)计票intj;for (j=O; j <N ; j+)if (x=Vj . id)V j. number + ;4.3. 3 王子骄设计实现l主函数的编写, 在主界面中输出要进行执行的命令, 然后对各个函数的调用来实现整个软件

15、运行。int main 0inti:,dosystem("els") ; cout << "cout << "cout << " cout « " cout << "cout <“ 请输入: cin»i; switch(i)ca se 1:Luru O ;*欢迎使用票投选举系统endl ;1*录入选举人: endl ;*2*选举人投票: e ndl ;*3*选票人结果: endl ;*4*退出本系统 : endl ;break; case 2:Toup

16、iao O ; break;case 3:JieguoO; break;case 4:break; default:cout <“* 输入错误!, 请重新输入:,whi l e (i !=4) ; r e t ur n O;5 测试与调试5. 1 个人测试5. 1. 1 张晓峰测试l选举人结果5. 1. 2 曹乔家测试l选举人的录入2选举 人进行投票5. 1. 3 王子骄测试l软件的主界面5. 2 组装与系统测试进入主界面时,选择进入各个副界面,进入录入选举人,把各个选举人的信息录入系统,然后进行对选举人的投票,然后进行对票数的统计、排序、对比来 把优胜者的信息住处。操作名称操作流程操作

17、结果和输出录入选举人按任意键进入录入选举人界面依次输入选举人姓名和编号,完成后按回车键。选举人投票进入选举人投票界面,按照提示进入一下操作依次输入每位投票人所投的投票号码,完成后按回车键。选票人结果显示本次投票最终结果。直接显示获胜者和票数5. 3 系统运行. C Us e式邯 nparl Docu r-1e n七Te志 nt f il已心 15 597 67 File Re cv De bug壶 罩e:<芒 嘈6. 1 课题评价6 课题总结本实验主要采用了 STL 中向量, 队列等数据结构类型, 当进入选举人窗口, 对选举人的信息进行录入, 保存在所建立的向量中。再进入投票窗口, 对各

18、个选举人的号码进行投票, 保存在建立的第一个队列中, 进入结果窗口, 先调用函数把保存在队列中的票数进行统计,排序,对比来计算出优胜者,然后在窗口中输 出选举人的信息, 或者没有选出优胜者。本程序简单易懂 , 操作简单。对千界面方面,不够美观,程序也不够实用。由千本程序只做了管理方面的实现,所以在 采集数据方面还需要手动输入。由千开发能力和时间所限,本程序目前还需要在 一定程度上进行改进和完善, 根据以后运行问题以及学习的新知识, 我们可以在功能方面进一步加强。6. 2 团队协作在此次数据结构课程实验中。我们学会了 STL 中的数据结构, 使我们对数据结构又有了深的理解, 在S T L 中使用

19、向量, 队列等数据结构, 而且不用再对向量的建立,还有对向量和队列的功能调用,在编程过程中要学会各个成员的合作, 以及各个函数的组合调用,各个成员之间的团队合作,积极配合,才能更好地完 成一个完整的、成功的程序。6. 3 下一步工作通过这次编程实验, 我们意识到了我们的知识还远远不过 , 在C + 中的S T L 中运用数据结构, 学习我们其他的知识, 再把其它知识一起灵活运用, 熟练的掌握我们现在的知识, 并为以后的学习打下坚实的基础。我 们还要继续学习数据结构的其他知识,为将来的编程打下基础。6. 4 个人设计小结6. 4. 1 张晓峰设计小结在此次程序中我设计了主要算法,通过对向量,队列

20、的的使用,我又了 解了 STL 中的数据结构, 对比 C 语言的数据结构, 其调用起来比较简单, 其数据结构的建立和使用系统化 , 避免了在C 语言中调用出错等可能, 使用起来相对简单,对以后编写大程序有很大的帮助。6. 4. 1 曹乔家设计小结对千选举人的录入和投票 , 主要使用了向 量和队列, 把主要信息保存在向量和队列中 , 同时也对 STL 中的向量和队列有所了解, 为我的知识面又扩大了许多,我还要继续学习数据结构的相关知识,把自己的知识学得更丰富,更牢固, 为以后打下基础。6. 4. 1 王子骄设计小结在主界面的设计中,通过对语旬的输出,把主界面做的更加简单,明了,易 懂, 实用。同

21、时, 也学习一下S T L 中数据结构, 相对起来觉得 STL 中数据结构更加简单, 在建立实用非常简单, 还可以减少错误, 可以进行深一步的学习。7 附录 A 课题任务分工A- 1 课题程序设计分工学号1姓名20133999张晓峰程序设计函数原型、类class People void Jieguo ()功能说明定义候选人的类处理投票统计函数vect or <Peop l e >V (N) ;deque <int >Dl , D2;20133977曹乔家vo i d Luru 0vo i d Toupi ao 0vo i d Jipiao ()人员录入函数投票函数计票函

22、数20133992王子骄main()主函数A- 2 课题报告分工立早廿下内容完成人l 课题概述1. 1 课题任务1. 2 课题原理1. 3 相关知识张晓峰2 需求分析2. 1 课题调研2. 2 用户需求分析王子骄3 方案设计3. 1 总体功能设计3. 2 数据结构设计张晓峰曹乔家3. 3 函数原型设计3. 4 主算法设计王子骄张晓峰3. 5 用户界面设计曹乔家4 方案实现4. 1 开发环境与工具4. 2 程序设计关键技术4. 3 个人设计实现(按组员分工)4. 3. 14. 3. 24. 3. 3王子骄王子骄张晓峰曹乔家王子骄5 测试与调试5. 1 个人测试(按组员分工)5. 1. 1张晓峰5

23、. 1. 2曹乔家5. 1. 3王子骄5. 2 组装与系统测试张晓峰5. 3 系统运行6 课题总结6. 1 课题评价张晓峰6. 2 团队协作6. 3 下一步工作6. 4 个人设计心得(按组员分工)6. 4. 16. 4. 26. 4. 3张晓峰曹乔家王子骄附录B 课题设计文档( 光盘)B l 课程设计报告(电子版) B2 源程序代码 (*.H, *· CPP) B3 工程与可执行文件)B- 4 屏幕演示录像文件(可选)附录C 用户操作手册(可选)C. 1 运行环境说明C. 2 操作说明B- 2 源程序代码#include<iostream> #include<str

24、ing)#include<vector> #include<deque> #include<i terator> #include<algorithm> #include<functional> #define N 3using namespace std; class People public:string name; intid;intnumber; ;vector<People>V(N);deque <i nt >D1 , D2; void Lur u ()录入system("els"

25、;); cout « "*: " << endl << endl << endl ; intj;录入选 举 人cout <“ *一共, cout<<endl;' <<N< 位选举人!” endl ;for (j=O; j<N; j+)cout <“* 输入第',< j +l <” 选举人姓名: ;cin»V j. name ;cout <“* 输入第, cin»V j. id;cout<<endl; system(&

26、quot;pause") ;' <<j +l <” 选举人号码: ;void Toupi ao ()投票system("els") ; cout«,*:*"<*<*endl << endl << endl ; intj;for (j =O; j<N; j+)*蒋 选 举 人 投 票cout <“*输入第飞 j +l <“ 个人的投票号码:;intx;cin»x;Dl. pus h fr ont (x) ;cout <“ *投票结束!” e ndl ; system("pause") ;void Jipiao(int x)计票intj;for (j =O ; j <N; j +)if (x=V j. id) Vj. number+;void J i eguo ()结果system("els"); cout<<"*:"<<endl<<endl&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论