欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    校园十大优秀青年评比数据结构课程设计报告书.doc

    • 资源ID:854528       资源大小:602.42KB        全文页数:22页
    • 资源格式: DOC        下载积分:20积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要20积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    校园十大优秀青年评比数据结构课程设计报告书.doc

    1、1.问题的描述和分析11.1问题描述11.2 问题分析22.概要设计32.1系统模块划分32.2 ADT(抽象数据类型)描述33.详细设计33.1 ADT基本操作算法设计43.2 功能模块设计44.运行和调试134.1 运行和测试134.2 调试记录与收获161.问题的描述和分析1.1问题描述新一届校园十大青年评比开始了!每一位在校学生可通过网上评比系统,为自己认为优秀的学生提名与投票。请开发一个用于该需求的系统,满足下列基本功能:(1)提名优秀学生与投票。(2)查看提名学生的基本信息。(3)显示各提名学生的票数。(4)显示排行榜。一基本要求:.(1)采用散列存储,存放提名学生的相关信息。(2

    2、)设计哈希函数和冲突解决方法。(3)提名学生至少包括以下信息:姓名、票数、个人基本信息(如:班级、专业、年级、突出事迹等)。(4)设计输入提名学生信息的界面。(5)完成基本功能。(6)界面友好,操作简单。(7)设计足够多的测试用例。(8)查看指定学生的票数。(9)按序显示各提名学生票数。二较高要求(1)限制每人的投票次数。(2)按软件要求,扩充其他功能。(3)实现数据的后效验,即不接收非法数据。1.2 问题分析(1)用哈希表存储提名学生相关信息。每位选手即学生的基本信息含有多个属性,为此可根据学生信息建立结构体,如下:struct studentchar name20;/姓名的拼音 int s

    3、tudentnum;/学号int number;/票数int Class;/班级char major30;/专业char grade10;/年级char achievement200;/突出事迹;(2)设计哈希函数,并用开放定址线性探测法处理冲突。哈希函数根据姓名拼音的ascll码来设计,hash(key)=key%hashlength,其中k为姓名所有拼音的ascll码值的累加和,hashlength为表长。因此需储存学生姓名的拼音。(3)设计一个投票系统类:votesystemclass votesystemprivate:student *st;int count;/当前元素个数int

    4、hashlength;/哈希表长public:votesystem() st=NULL;count=0;hashlength=0;votesystem() delete st;count=0;void HashTable(int n);/初始化哈希表int Hash(char *name);/哈希函数void collision(int &s)s=s+;/开放定址线性探测法处理冲突int hashfind(char *name,int&k);/查找void inserthash(char*name);/插入int vote(char*name);/投票void display();/显示哈希表

    5、void showvote(int k); /按哈希表下标显示票数void showrank();/显示排行榜;(4)加入用户登录系统,所以同时构造用户user的结构体;结构体中需要有用户姓名和用户权限次数的数据。struct userchar username20;int root;user()root=4;2.概要设计2.1系统模块划分选手信息模块评比系统界面模块用户登录模块查询得票模块投票模块前十排行模块退出系统模块图2-1 系统模块图2.2 ADT(抽象数据类型)描述1.为了满足程序功能的设计,定义了两个结构体;分别是学生选手student和登录用户user;2.定义了投票系统类cla

    6、ss votesystem;3.详细设计3.1 ADT基本操作算法设计3.1.1struct studentchar name20;/姓名的拼音 int studentnum;/学号int number;/票数int Class;/班级char major30;/专业char grade10;/年级char achievement200;/突出事迹;struct userchar username20;int root;user()root=4;user store20;3.1.2class votesystemprivate:student *st;int count;/当前元素个数int

    7、hashlength;/哈希表长public:votesystem() st=NULL;count=0;hashlength=0;votesystem() delete st;count=0;void HashTable(int n);/初始化哈希表int Hash(char *name);/哈希函数void collision(int &s)s=s+;/开放定址线性探测法处理冲突int hashfind(char *name,int&k);/查找void inserthash(char*name);/插入int vote(char*name);/投票void display();/显示哈希表

    8、void showvote(int k); /按哈希表下标显示票数void showrank();/显示排行榜;3.2 功能模块设计3.2.1 评比界面模块(1)界面设计(2)处理流程设计评比系统选择界面:由于选择结构比较单一,故在选择时没有选择使用switch语句,使用简单的if语句;while(choice!=2) system(cls);cout*欢迎来到校园十大优秀青年评比系统*endl;char username20;cout投票=endl退出=choice;if(choice=1)else cout退出成功!;3.2.2 用户登录模块(1)界面设计(2)处理流程设计while(ch

    9、oose!=5)/不是选择5的情况下继续运行,否则退出cout*n 校园十大优秀青年评比系统n1、 提名选手信息n2、 查询选手得票n投票n4、 前十排行榜单n5、 退出投票系统n*n感谢使用本系统!O(_)Oendlchoose;if(choose=3)/每次投票后限制次数减一storei.root-;switch(choose)char a2;case 1:L.display();break;case 2:cout请输入选手姓名的拼音(如:zhangjing ):endl;cin.getline(a,2);cin.getline(name,20);int f;f=L.hashfind(na

    10、me,k);if(f) L.showvote(k),coutendl;else cout选手尚未提名!n;break;case 3:if(storei.root=0)/当限制次数使用全部后,3操作不可继续操作cout【每人限投3票,您的投票次数已经用完】。endl;break;elsecout请输入选手姓名的拼音(如:zhangjing ):endl;cin.getline(a,2);cin.getline(name,20);f=L.hashfind(name,k);if(f) L.vote(name);cout投票成功!剩余投票次数为:(storei.root-1)endl;else cou

    11、t无此记录!n;cout 1、提名该学生n 2、返回系统界面nt;if(t=1) L.inserthash(name);cout选手提名成功n;cout剩余投票次数为:(storei.root-1)endl;break;case 4:L.showrank();break;case 5:cout已登出,感谢您的使用! endl;break;default:cout操作无效,请重新选择!n;break;3.2.3选手信息模块(1)界面设计(2)处理流程设计此处利用了类votesystem中定义的函数display;显示哈希表保存的下标对应储存位置中的数据;void votesystem:displ

    12、ay()/【显示哈希表】for(int i=0;ihashlength;i+)if(sti.name0!=0)coutsti.studentnum sti.name sti.number票 sti.majorsti.gradesti.Class班 sti.achievementtendl;3.2.4查询得票模块(1)界面设计(2)处理流程设计利用类中定义的函数showvote,表现出选手得票数;得票数储存在用哈希表下表表示位置的student类型的数组中;void votesystem:showvote(int k) /【按哈希表下标显示票数】cout现得票数:stk.number;3.2.5

    13、 投票模块(1)界面设计(2)处理流程设计投票模块的功能是整个系统中最主要的,其中需要考虑的有进行姓名插入时调用的哈西函数,使其排序更合理;同时调用的collision。用以解决冲突。int votesystem:Hash(char *name)/【哈希函数】char *p=name;int key=0;while(*p)key+=int(*p);p+;return key%hashlength;查找函数用以检验表中是否会产生冲突,并解决;int votesystem:hashfind(char *name,int&k)/【查找】k=Hash(name);/哈希函数定位while(stk.na

    14、me0!=0&strcmp(stk.name,name) collision(k);/处理冲突if(!strcmp(stk.name,name) return 1;/【找到】else return 0;投票函数同时调用了查找,哈西函数;int votesystem:vote(char*name)/记录已存在时调用hashfind函数 【投票】int s;int f;f=hashfind(name,s);/定位if(f) sts.number+;return 1;/投票成功else return 0;/投票失败3.2.6 前十排行模块(1)界面设计(2)处理流程设计选择4选项后,调用的类中的sh

    15、owrank函数;利用循环去其前十名,并且其中使用的插入排序法使数据中的票数按降序排列;再输出。void votesystem:showrank() /【显示排行榜】int a11;/定义一个数组存放前十名在哈希表中的下标for(int i=0;i10;i+) ai=-1; for( i=0;i=0;k-)/利用插入法进行排序if(ak-1) if(stak.numbersti.number)ak+1=ak;else break;ak+1=i;cout学号t姓名t得票数tendl;for(i=0;i-1;i+)/输出前十名coutstai.studentnumtstai.name tstai.

    16、numbertendl;3.2.7退出系统模块(1)界面设计(2)处理流程设计当在用户界面选择5退出后,此时会清除屏幕上的信息同时回到系统界面;等待新的用户使用。当在系统界面登出后,则程序运行结束;4.运行和调试4.1 运行和测试通过不同的用户登录,输入下面的数据;测试数据:学号姓名拼音 票数班级专业年级突出事迹11113042030lu yu 12软件二全国大学生广告艺术大赛一等奖1113042039cai zhi tong12软件二全国大学生街舞大赛一等奖1113042041wang yong xi 12软件二全国多媒体课件设计大赛一等奖1113042042sun qian ping 12

    17、网络二全国大学生摄影比赛一等奖1113042045ma jing chao 22计二全国三好学生1113042046xu yang 12软外二中国名校大学生辩论赛一等奖1113042047guo peng 12网络二中国大学生数学建模竞赛一等奖1113022053Zhangjing42计二全国优秀短篇小说奖1113042049li hong 22计二全国物理竞赛一等奖1113042050liu han 22网络二国家一等奖学金1113042051wang jian 12软件二全国软件设计大赛一等奖1113042059chen wan 12网合二全国大学生创业大赛一等奖(1) 对不存在的记录提名

    18、,(2) 选择“1”,查询选手信息;(3)选择“2”,定位查询选手票数;(4)选择“3”,若选手已经提名;则直接记录;(5)选择“4”查询前十名榜单;(6)选择“5”,退出用户系统时,回到系统界面,同时清除之前信息,等待其他用户登录;4.2 调试记录与收获通过一周的课程设计,我再一次复习了数据结构的知识,在设计过程中虽然遇到了不少问题,但经过一次又一次的思考,一点又一点的纠正终于实现了投票系统的基本功能并且完成了系统的功能的添加。我认为,在这学期的课程设计中,不仅培养了独立思考和操作的能力,在各种其它能力上也都有了提高,比如,我们在查找大量资料的过程中渐渐地培养了搜索信息的能力。更重要的是,在

    19、设计中,我们学会了很多学习方法。在此次课程设计中,在收获知识的同时,还收获了阅历,收获了成熟。然而,这个程序还有不完善的地方,让我清楚地认识到了自己能力的欠缺。我再次确信要更加努力,更加完善提高编程能力,为将来步入社会奠定基础。 源代码:#include#include#include#includestdio.h#includewindows.hstruct studentchar name20;/姓名的拼音 int studentnum;/学号int number;/票数int Class;/班级char major30;/专业char grade10;/年级char achievemen

    20、t200;/突出事迹;struct userchar username20;int root;user()root=4;user store20;class votesystemprivate:student *st;int count;/当前元素个数int hashlength;/哈希表长public:votesystem() st=NULL;count=0;hashlength=0;votesystem() delete st;count=0;void HashTable(int n);/初始化哈希表int Hash(char *name);/哈希函数void collision(int

    21、&s)s=s+;/开放定址线性探测法处理冲突int hashfind(char *name,int&k);/查找void inserthash(char*name);/插入int vote(char*name);/投票void display();/显示哈希表void showvote(int k); /按哈希表下标显示票数void showrank();/显示排行榜;void votesystem:HashTable(int n)/【初始化哈希表】hashlength=n;st=new studenthashlength;for(int i=0;ihashlength;i+)sti.name

    22、0=0;int votesystem:Hash(char *name)/【哈希函数】char *p=name;int key=0;while(*p)key+=int(*p);p+;return key%hashlength;int votesystem:hashfind(char *name,int&k)/【查找】k=Hash(name);/哈希函数定位while(stk.name0!=0&strcmp(stk.name,name) collision(k);/处理冲突if(!strcmp(stk.name,name) return 1;/【找到】else return 0;void vote

    23、system:inserthash(char *name)/【插入】int s;char a2;hashfind(name,s);cout提名学生信息格式如下:nt学号: 1113022053nt班级:2nt专业:计算机nt年级:二n t突出事迹:好好学习,天天向上!n;strcpy(sts.name,name); coutsts.studentnum;coutsts.Class;cout专业:t;cin.getline(a,2);cin.getline(sts.major,30);cout年级:t;cin.getline(sts.grade,10); cout突出事迹:t;cin.getli

    24、ne(sts.achievement,200);sts.number=1;/提名即为投一票count+;/当前人数加1int votesystem:vote(char*name)/记录已存在时调用hashfind函数 【投票】int s;int f;f=hashfind(name,s);/定位if(f) sts.number+;return 1;/投票成功else return 0;/投票失败void votesystem:display()/【显示哈希表】for(int i=0;ihashlength;i+)if(sti.name0!=0)coutsti.studentnum sti.nam

    25、e sti.number票 sti.majorsti.gradesti.Class班 sti.achievementtendl;void votesystem:showvote(int k) /【按哈希表下标显示票数】cout现得票数:stk.number;void votesystem:showrank() /【显示排行榜】int a11;/定义一个数组存放前十名在哈希表中的下标for(int i=0;i10;i+) ai=-1; for( i=0;i=0;k-)/利用插入法进行排序if(ak-1) if(stak.numbersti.number)ak+1=ak;else break;ak

    26、+1=i;cout学号t姓名t得票数tendl;for(i=0;i-1;i+)/输出前十名coutstai.studentnumtstai.name tstai.numbertendl;int main(void)/main 函数 int choice=-1;int m=0,p=0,i;votesystem L;L.HashTable(50);while(choice!=2) system(cls); /清除屏幕信息cout*欢迎来到校园十大优秀青年评比系统*endl;char username20;cout投票=endl退出=choice;if(choice=1)p+;char b2;cou

    27、t请输入您的名字:;cin.getline(b,2);cin.getline(username,20);for( i=0;ip;i+)if(strcmp(storei.username,username)=0)break if(i=p) strcpy(storep.username,username); int choose=-1,k=-1;char name20;while(choose!=5)/不是选择5的情况下继续运行,否则退出cout*n 校园十大优秀青年评比系统n1、 提名选手信息n2、 查询选手得票n投票n4、 前十排行榜单n5、 退出投票系统n*n感谢使用本系统!O(_)Oend

    28、lchoose;if(choose=3)/每次投票后限制次数减一storei.root-;switch(choose)char a2;case 1:L.display();break;case 2:cout请输入选手姓名的拼音(如:zhangjing ):endl;cin.getline(a,2);cin.getline(name,20);int f;f=L.hashfind(name,k);if(f) L.showvote(k),coutendl;else cout选手尚未提名!n;break;case 3:if(storei.root=0)/当限制次数使用全部后,3操作不可继续操作cout

    29、【每人限投3票,您的投票次数已经用完】。endl;break;elsecout请输入选手姓名的拼音(如:zhangjing ):endl;cin.getline(a,2);cin.getline(name,20);f=L.hashfind(name,k);if(f) L.vote(name);cout投票成功!剩余投票次数为:(storei.root-1)endl;else cout无此记录!n;cout 1、提名该学生n 2、返回系统界面nt;if(t=1) L.inserthash(name);cout选手提名成功n;cout剩余投票次数为:(storei.root-1)endl;break;case 4:L.showrank();break;case 5:cout已登出,感谢您的使用! endl;break;default:cout操作无效,请重新选择!n;break;else cout退出成功!;return 0; 22 / 22


    注意事项

    本文(校园十大优秀青年评比数据结构课程设计报告书.doc)为本站会员(精***)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922