1.问题的描述和分析
1.1 问题描述
新一届校园十大青年评比开始了!每一位在校学生可通过网上评比系统,为自己认为优秀的学生提名与投票。请开发一个用于该需求的系统,满足下列基本功能:
提名优秀学生与投票
查看提名学生的基本信息
显示各提名学生的票数
显示排行榜
1.1.1 基本要求
采用散列存储,存放提名学生的相关信息
设计哈希函数和冲突解决方法
提名学生至少包括以下信息:姓名、票数、个人基本信息(如:班级、专业、年级、突出事迹等)
设计输入提名学生信息的界面
完成基本功能
界面友好,操作简单
设计足够多的测试用例
查看指定学生的票数
按序显示各提名学生票数
1.1.2 较高要求
限制每人的投票次数
按软件要求,扩充其他功能
实现数据的后效验,即不接收非法数据
1.2 问题分析
1.2.1 用哈希表存储提名学生相关信息
每位选手即学生的基本信息含有多个属性,为此可根据学生信息建立结构体,如下:
struct student{
char name[20];//姓名的拼音
int studentnum;//学号
int number;//票数
int Class;//班级
char major[30];//专业
char grade[10];//年级
char achievement[200];//突出事迹
};
1.2.2 设计哈希函数
并用开放定址线性探测法处理冲突。哈希函数根据姓名拼音的ascll码来设计,hash(key)=key%hashlength,其中k为姓名所有拼音的ascll码值的累加和,hashlength为表长。因此需储存学生姓名的拼音。
1.2.3 设计一个投票系统类
class votesystem{
private:
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 &s){s=s++;}//开放定址线性探测法处理冲突int hashfind(char name,int&k);//查找void inserthash(charname);//插入int vote(charname);//投票
void display();//显示哈希表
void showvote(int k); //按哈希表下标显示票数
void showrank();//显示排行榜
};
1.2.4 加入用户登录系统
所以同时构造用户user的结构体;结构体中需要有用户姓名和用户权限次数的数据。
struct user{
char username[20];
int root;
user(){root=4;}
};
完整的源码和详细的文档,上传到了 WRITE-BUG技术共享平台 上,需要的请自取:
https://www.write-bug.com/article/2585.html