基于C++的校园十大青年投票系统

邱丑丑

发布日期: 2019-06-08 14:20:56 浏览量: 434
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1.问题的描述和分析

1.1 问题描述

新一届校园十大青年评比开始了!每一位在校学生可通过网上评比系统,为自己认为优秀的学生提名与投票。请开发一个用于该需求的系统,满足下列基本功能:

  • 提名优秀学生与投票

  • 查看提名学生的基本信息

  • 显示各提名学生的票数

  • 显示排行榜

1.1.1 基本要求

  • 采用散列存储,存放提名学生的相关信息

  • 设计哈希函数和冲突解决方法

  • 提名学生至少包括以下信息:姓名、票数、个人基本信息(如:班级、专业、年级、突出事迹等)

  • 设计输入提名学生信息的界面

  • 完成基本功能

  • 界面友好,操作简单

  • 设计足够多的测试用例

  • 查看指定学生的票数

  • 按序显示各提名学生票数

1.1.2 较高要求

  • 限制每人的投票次数

  • 按软件要求,扩充其他功能

  • 实现数据的后效验,即不接收非法数据

1.2 问题分析

1.2.1 用哈希表存储提名学生相关信息

每位选手即学生的基本信息含有多个属性,为此可根据学生信息建立结构体,如下:

  1. struct student{
  2. char name[20];//姓名的拼音
  3. int studentnum;//学号
  4. int number;//票数
  5. int Class;//班级
  6. char major[30];//专业
  7. char grade[10];//年级
  8. char achievement[200];//突出事迹
  9. };

1.2.2 设计哈希函数

并用开放定址线性探测法处理冲突。哈希函数根据姓名拼音的ascll码来设计,hash(key)=key%hashlength,其中k为姓名所有拼音的ascll码值的累加和,hashlength为表长。因此需储存学生姓名的拼音。

1.2.3 设计一个投票系统类

  1. class votesystem{
  2. private:
  3. student *st;
  4. int count;//当前元素个数
  5. int hashlength;//哈希表长
  6. public:
  7. votesystem() {st=NULL;count=0;hashlength=0;}
  8. ~votesystem() {delete []st;count=0;}
  9. void HashTable(int n);//初始化哈希表
  10. int Hash(char *name);//哈希函数
  11. void collision(int &s){s=s++;}//开放定址线性探测法处理冲突
  12. int hashfind(char *name,int&k);//查找
  13. void inserthash(char*name);//插入
  14. int vote(char*name);//投票
  15. void display();//显示哈希表
  16. void showvote(int k); //按哈希表下标显示票数
  17. void showrank();//显示排行榜
  18. };

1.2.4 加入用户登录系统

所以同时构造用户user的结构体;结构体中需要有用户姓名和用户权限次数的数据。

  1. struct user{
  2. char username[20];
  3. int root;
  4. user(){root=4;}
  5. };

2.概要设计

2.1 系统模块划分

2.2 ADT(抽象数据类型)描述

为了满足程序功能的设计,定义了两个结构体;分别是学生选手student和登录用户user;

定义了投票系统类class votesystem;

3.详细设计

3.1 ADT基本操作算法设计

  1. struct student{
  2. char name[20];//姓名的拼音
  3. int studentnum;//学号
  4. int number;//票数
  5. int Class;//班级
  6. char major[30];//专业
  7. char grade[10];//年级
  8. char achievement[200];//突出事迹
  9. };
  10. struct user{
  11. char username[20];
  12. int root;
  13. user(){root=4;}
  14. };
  15. user store[20];
  16. class votesystem{
  17. private:
  18. student *st;
  19. int count;//当前元素个数
  20. int hashlength;//哈希表长
  21. public:
  22. votesystem() {st=NULL;count=0;hashlength=0;}
  23. ~votesystem() {delete []st;count=0;}
  24. void HashTable(int n);//初始化哈希表
  25. int Hash(char *name);//哈希函数
  26. void collision(int &s){s=s++;}//开放定址线性探测法处理冲突
  27. int hashfind(char *name,int&k);//查找
  28. void inserthash(char*name);//插入
  29. int vote(char*name);//投票
  30. void display();//显示哈希表
  31. void showvote(int k); //按哈希表下标显示票数
  32. void showrank();//显示排行榜
  33. };

3.2 功能模块设计

3.2.1 评比界面模块

评比系统选择界面:由于选择结构比较单一,故在选择时没有选择使用switch语句,使用简单的if语句;

3.2.2 用户登录模块

3.2.3 选手信息模块

此处利用了类votesystem中定义的函数display;显示哈希表保存的下标对应储存位置中的数据;

3.2.4 查询得票模块

利用类中定义的函数showvote,表现出选手得票数;得票数储存在用哈希表下表表示位置的student类型的数组中;

3.2.5 投票模块

投票模块的功能是整个系统中最主要的,其中需要考虑的有进行姓名插入时调用的哈西函数,使其排序更合理;同时调用的collision。用以解决冲突。

3.2.6 前十排行模块

选择4选项后,调用的类中的showrank函数;利用循环去其前十名,并且其中使用的插入排序法使数据中的票数按降序排列;再输出。

3.2.7 退出系统模块

当在用户界面选择5退出后,此时会清除屏幕上的信息同时回到系统界面;等待新的用户使用。当在系统界面登出后,则程序运行结束;

4.调试记录与收获

通过一周的课程设计,我再一次复习了数据结构的知识,在设计过程中虽然遇到了不少问题,但经过一次又一次的思考,一点又一点的纠正终于实现了投票系统的基本功能并且完成了系统的功能的添加。

我认为,在这学期的课程设计中,不仅培养了独立思考和操作的能力,在各种其它能力上也都有了提高,比如,我们在查找大量资料的过程中渐渐地培养了搜索信息的能力。更重要的是,在设计中,我们学会了很多学习方法。在此次课程设计中,在收获知识的同时,还收获了阅历,收获了成熟。然而,这个程序还有不完善的地方,让我清楚地认识到了自己能力的欠缺。我再次确信要更加努力,更加完善提高编程能力,为将来步入社会奠定基础。

上传的附件 cloud_download 投票系统.7z ( 349.16kb, 1次下载 )
error_outline 下载需要8点积分

发送私信

精品资源尽在此

41
文章数
0
评论数
最近文章
eject