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

下载本文档

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

文档简介

-19-1课题概述1.1课题任务【问题描述】在一次投票选举中,要从n个候选人中选出1个优胜者。每个候选人有一张选票,只能投给一位候选者,超过半数选票的候选人为优胜者。用一个长度为n的选举向量v表示收集到的n张选票。投票选举问题要求根据选举向量v计算选举产生的优胜者。【设计要求】设计算法实现投票选举问题的程序。(1)采用STL的向量等数据结构。(2)实现STL的向量类deque。(3)应用STL的向量类实现投票选举问题。1.2课题原理本实验采用向量来保存选举人的姓名,选举号码和选举票数,通过对票数的计算和排序,选出票数最多的人来作为优胜者。1.3相关知识本实验主要运用C++中STL的向量及队列deque等数据结构,运用C++中的类等相关知识。2需求分析2.1课题调研投票选举采用对票数的计算来选出优胜者,通过对不记名的选票,来计算票数,投票软件运用算法对选票进行计算,直接自动生成选票结果。2.2用户需求分析本程序采用简单的界面,可以让使用者对如何使用一目了然,界面简单、大方。STL中的deque向量类保存投票信息,只需输入每个候选人的号码和候选人所投的号码,最终结果将自动生成,便于使用者的使用。3方案设计3.1总体功能设计本软件要实现对每个候选人的编号功能,每个候选人的投票功能,以及最终优胜候选人的输出功能。3.2数据结构设计(1)候选人的类classPeople{public: stringname; intid; intnumber;};(2)建立一个向量保存选举人信息vector<People>V(N);(3)建立两个队列保存选票deque<int>D1,D2;3.3函数原型设计voidLuru()候选人的姓名编号录入voidToupiao()每个候选人的投票录入voidJipiao(intx)每一票的记录voidJieguo()投票的结果统计3.4主算法设计 本程序通过对选票的计算,先把选票记录在一个队列中,通过选票号码与选举人号码的比对,来保存选举人的票数个数,再用一个队列保存选举人的票数,对票数进行排序,找出最大的选举票数,最后与队列中的选举人票数进行比对,相等的即为优胜者。3.5用户界面设计主界面分别有录入选举人,选举人投票,选票人结果,退出系统四个功能,进入录入选举人窗口输入选举人姓名和编号。选举人投票窗口输入每位选举人所选人员的编号。选票人结果窗口显示超过选举人半数的优胜者,被选举人所获票数未达到半数没有优胜者。退出系统即退出本软件。4方案设计4.1开发环境与工具本程序在window7下实现和运行,并使用VisualC++6.0编译的。4.2程序设计关键技术本程序采用了STL中的向量和度列等数据结构来编程实现的,其中关键的是对选票的统计、计算和排序,首先用队列保存选票数,来进行选举人的票数统计,再对选举人的票数进行排序、比对,最后输出优胜者的姓名及票数。4.3个人设计实现4.3.1张晓峰设计实现1.定义了候选人的类,包括姓名、选票号、票数。classPeople{public: stringname; intid; intnumber;};2.定义了向量Vvector<People>V(N);3.定义了两个队列保存选票数和排序选票数。deque<int>D1,D2;4.编写了处理投票统计函数,先把选票记录在一个队列中,通过选票号码与选举人号码的比对,来保存选举人的票数个数,再用一个队列保存选举人的票数,对票数进行排序,找出最大的选举票数,最后与队列中的选举人票数进行比对,相等的即为优胜者。voidJieguo()//结果{1 system("cls"); cout<<"***************选举人结果***************:"<<endl<<endl<<endl; intx,x1,x2,i,j,k; for(i=0;i<N;i++) V[i].number=0; for(j=0;j<N;j++) { x=D1.begin()[j]; Jipiao(x); } for(k=0;k<N;k++) D2.push_front(V[k].number); sort(D2.begin(),D2.end()); x1=D2.begin()[N-1]; x2=D2.begin()[N-2]; if(x1==x2) cout<<"***没有选出优胜者!"<<endl; elseif(x1<(N/2)) cout<<"***没有选出优胜者!"<<endl; else { for(j=0;j<N;j++) { if(x1==V[j].number) { cout<<"***优胜者是:"<<V[j].name<<endl; cout<<"***选票数是:"<<V[j].number<<endl; } } } system("pause");}4.3.2曹乔家设计实现候选人信息录入函数,通过for循环来进行对各个选举人的信息录入,保存在向量中。voidLuru()//录入{ system("cls");cout<<"***************录入选举人***************:"<<endl<<endl<<endl; intj; cout<<"***一共"<<N<<"位选举人!"<<endl; cout<<endl; for(j=0;j<N;j++) { cout<<"***输入第"<<j+1<<"选举人姓名:"; cin>>V[j].name; cout<<"***输入第"<<j+1<<"选举人号码:"; cin>>V[j].id; } cout<<endl; system("pause");}候选人投票函数,当进入函数时,通过for循环来对各个投票者投票的记录,同时保存在建立的队列中。voidToupiao()//投票{system("cls"); cout<<"***************选举人投票***************:"<<endl<<endl<<endl; intj; for(j=0;j<N;j++) { cout<<"***输入第"<<j+1<<"个人的投票号码:"; intx; cin>>x; D1.push_front(x); } cout<<"***投票结束!"<<endl; system("pause");}计票函数voidJipiao(intx)//计票{ intj; for(j=0;j<N;j++) { if(x==V[j].id) V[j].number++; } }4.3.3王子骄设计实现1.主函数的编写,在主界面中输出要进行执行的命令,然后对各个函数的调用来实现整个软件运行。intmain(){ inti; do{ system("cls"); cout<<"*******欢迎使用投票选举系统*******"<<endl; cout<<"*1*录入选举人:"<<endl; cout<<"*2*选举人投票:"<<endl; cout<<"*3*选票人结果:"<<endl; cout<<"*4*退出本系统:"<<endl; cout<<"请输入:"; cin>>i; switch(i) { case1: Luru(); break; case2: Toupiao(); break; case3: Jieguo(); break; case4: break; default: cout<<"***输入错误!,请重新输入:"; } } while(i!=4); return0;}5测试与调试5.1个人测试5.1.1张晓峰测试1.选举人结果5.1.2曹乔家测试1.选举人的录入2.选举人进行投票5.1.3王子骄测试1.软件的主界面5.2组装与系统测试进入主界面时,选择进入各个副界面,进入录入选举人,把各个选举人的信息录入系统,然后进行对选举人的投票,然后进行对票数的统计、排序、对比来把优胜者的信息住处。操作名称操作流程操作结果和输出录入选举人按任意键进入录入选举人界面依次输入选举人姓名和编号,完成后按回车键。选举人投票进入选举人投票界面,按照提示进入一下操作依次输入每位投票人所投的投票号码,完成后按回车键。选票人结果显示本次投票最终结果。直接显示获胜者和票数5.3系统运行6课题总结6.1课题评价本实验主要采用了STL中向量,队列等数据结构类型,当进入选举人窗口,对选举人的信息进行录入,保存在所建立的向量中。再进入投票窗口,对各个选举人的号码进行投票,保存在建立的第一个队列中,进入结果窗口,先调用函数把保存在队列中的票数进行统计,排序,对比来计算出优胜者,然后在窗口中输出选举人的信息,或者没有选出优胜者。本程序简单易懂,操作简单。对于界面方面,不够美观,程序也不够实用。由于本程序只做了管理方面的实现,所以在采集数据方面还需要手动输入。由于开发能力和时间所限,本程序目前还需要在一定程度上进行改进和完善,根据以后运行问题以及学习的新知识,我们可以在功能方面进一步加强。6.2团队协作在此次数据结构课程实验中。我们学会了STL中的数据结构,使我们对数据结构又有了深的理解,在STL中使用向量,队列等数据结构,而且不用再对向量的建立,还有对向量和队列的功能调用,在编程过程中要学会各个成员的合作,以及各个函数的组合调用,各个成员之间的团队合作,积极配合,才能更好地完成一个完整的、成功的程序。6.3下一步工作通过这次编程实验,我们意识到了我们的知识还远远不过,在C++中的STL中运用数据结构,学习我们其他的知识,再把其它知识一起灵活运用,熟练的掌握我们现在的知识,并为以后的学习打下坚实的基础。我们还要继续学习数据结构的其他知识,为将来的编程打下基础。6.4个人设计小结6.4.1张晓峰设计小结在此次程序中我设计了主要算法,通过对向量,队列的的使用,我又了解了STL中的数据结构,对比C语言的数据结构,其调用起来比较简单,其数据结构的建立和使用系统化,避免了在C语言中调用出错等可能,使用起来相对简单,对以后编写大程序有很大的帮助。6.4.1曹乔家设计小结对于选举人的录入和投票,主要使用了向量和队列,把主要信息保存在向量和队列中,同时也对STL中的向量和队列有所了解,为我的知识面又扩大了许多,我还要继续学习数据结构的相关知识,把自己的知识学得更丰富,更牢固,为以后打下基础。6.4.1王子骄设计小结在主界面的设计中,通过对语句的输出,把主界面做的更加简单,明了,易懂,实用。同时,也学习一下STL中数据结构,相对起来觉得STL中数据结构更加简单,在建立实用非常简单,还可以减少错误,可以进行深一步的学习。7附录A课题任务分工A-1课题程序设计分工学号姓名程序设计函数原型、类功能说明20133999张晓峰classPeoplevoidJieguo()vector<People>V(N);deque<int>D1,D2;定义候选人的类处理投票统计函数20133977曹乔家voidLuru()voidToupiao()voidJipiao()人员录入函数投票函数计票函数20133992王子骄main()主函数A-2课题报告分工章节内容完成人1课题概述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个人设计实现(按组员分工).24.3.3王子骄王子骄张晓峰曹乔家王子骄5测试与调试5.1个人测试(按组员分工).组装与系统测试5.3系统运行张晓峰曹乔家王子骄张晓峰6课题总结6.1课题评价6.2团队协作6.3下一步工作6.4个人设计心得(按组员分工).26.4.3张晓峰张晓峰曹乔家王子骄附录B课题设计文档(光盘)B-1课程设计报告(电子版)B-2源程序代码(*.H,*.CPP)B-3工程与可执行文件)B-4屏幕演示录像文件(可选)附录C用户操作手册(可选)C.1运行环境说明C.2操作说明B-2源程序代码#include<iostream>#include<string>#include<vector>#include<deque>#include<iterator>#include<algorithm>#include<functional>#defineN3usingnamespacestd;classPeople{public: stringname; intid; intnumber;};vector<People>V(N);deque<int>D1,D2;voidLuru()//录入{ system("cls");cout<<"***************录入选举人***************:"<<endl<<endl<<endl; intj; cout<<"***一共"<<N<<"位选举人!"<<endl; cout<<endl; for(j=0;j<N;j++) { cout<<"***输入第"<<j+1<<"选举人姓名:"; cin>>V[j].name; cout<<"***输入第"<<j+1<<"选举人号码:"; cin>>V[j].id; } cout<<endl; system("pause");}voidToupiao()//投票{system("cls"); cout<<"***************选举人投票***************:"<<endl<<endl<<endl; intj; for(j=0;j<N;j++) { cout<<"***输入第"<<j+1<<"个人的投票号码:"; intx; cin>>x; D1.push_front(x); } cout<<"***投票结束!"<<endl; system("pause");}voidJipiao(intx)//计票{ intj; for(j=0;j<N;j++) { if(x==V[j].id) V[j].number++; } }voidJieguo()//结果{ system("cls"); cout<<"***************选举人结果***************:"<<endl<<endl<<endl; intx,x1,x2,i,j,k; for(i=0;i<N;i++) V[i].number=0; for(j=0;j<N;j++) { x=D1.begin()[j]; Jipiao(x); } for(k=0;k<N;k++) D2.push_front(V[k].number); sort(D2.begin(),D2.end()); x1=D2.begin()[N-1]; x2=D2.begin()[N-2]; if(x1==x2) cout<<"***没有选出优胜者!"<<endl; elseif(x1<(N/2)) cout<<"***没有选出优胜者!"<<endl; else { for(j=0;j<N;j++) { if(x1==V[j].number) { cout<<"***优胜者是:"<<V[j].name<<endl; cout<<"***选票数是:"<<V[j].number<<endl; } } } system("pause");}intmain(){ inti; do{ system("cls"); cout<<"*******欢迎使用投票选举系统*******"<<endl; cout<<"*1*录入选举人:"<<endl; cout<<"*2*选举人投票:"<<endl; cout<<"*3*选票人结果:"<<endl; cout<<"*4*退出本系统:"<<endl; cout<<"请输入:"; cin>>i; switch(i) { case1: Luru(); break; case2: Toupiao(); break; case3: Jieguo(); break; case4: break; default: cout<<"***输入错误!,请重新输入:"; } } while(i!=4); return0;} 基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究基于TCP/IP协议的单片机与Internet互联的研究与实现变频调速液压电梯单片机控制器的研究基于单片机γ-免疫计数器自动换样功能的研究与实现基于单片机的倒立摆控制系统设计与实现单片机嵌入式以太网防盗报警系统基于51单片机的嵌入式Internet系统的设计与实现单片机监测系统在挤压机上的应用MSP430单片机在智能水表系统上的研究与应用基于单片机的嵌入式系统中TCP/IP协议栈的实现与应用单片机在高楼恒压供水系统中的应用基于ATmega16单片机的流量控制器的开发基于MSP430单片机的远程抄表系统及智能网络水表的设计\t"_b

温馨提示

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

评论

0/150

提交评论