校园十大优秀青年评比数据结构课程设计报告书.doc
《校园十大优秀青年评比数据结构课程设计报告书.doc》由会员分享,可在线阅读,更多相关《校园十大优秀青年评比数据结构课程设计报告书.doc(22页珍藏版)》请在沃文网上搜索。
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
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 校园 优秀青年 评比 数据结构 课程设计 报告书
