logo资料库

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

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
1.问题的描述和分析
1.1问题描述
1.2 问题分析
2.概要设计
2.1系统模块划分
2.2 ADT(抽象数据类型)描述
3.详细设计
3.1 ADT基本操作算法设计
3.2 功能模块设计
4.运行和调试
4.1 运行和测试
4.2 调试记录与收获
南通大学计算机学院 《数据结构课程设计报告书》 题目:校园十大优秀青年评比 专业: 计算机科学与技术 班级: 姓名: 学号: 指导教师: 开始日期: 2013.1.14 完成日期: 2013.1.16 1
数据结构课程设计 1.问题的描述和分析 1.1 问题描述 新一届校园十大青年评比开始了!每一位在校学生可通过网上评比系统,为 自己认为优秀的学生提名与投票。请开发一个用于该需求的系统,满足下列 基本功能: (1)提名优秀学生与投票。 (2)查看提名学生的基本信息。 (3)显示各提名学生的票数。 (4)显示排行榜。 一.基本要求:. (1)采用散列存储,存放提名学生的相关信息。 (2)设计哈希函数和冲突解决方法。 (3)提名学生至少包括以下信息:姓名、票数、个人基本信息(如:班级、专 业、年级、突出事迹等)。 (4)设计输入提名学生信息的界面。 (5)完成基本功能。 (6)界面友好,操作简单。 (7)设计足够多的测试用例。 (8)查看指定学生的票数。 (9)按序显示各提名学生票数。 二.较高要求 (1)限制每人的投票次数。 (2)按软件要求,扩充其他功能。 (3)实现数据的后效验,即不接收非法数据。 1.2 问题分析 (1)用哈希表存储提名学生相关信息。 每位选手即学生的基本信息含有多个属性,为此可根据学生信息建立结构 体,如下:struct student{ char name[20];//姓名的拼音 int studentnum;//学号 int number;//票数 int Class;//班级 char major[30];//专业 char grade[10];//年级 char achievement[200];//突出事迹 }; 2 / 22
数据结构课程设计 (2)设计哈希函数,并用开放定址线性探测法处理冲突。哈希函数根据姓名拼 音的 ascll 码来设计,hash(key)=key%hashlength,其中 k 为姓名所有拼音的 ascll 码值的累加和,hashlength 为表长。因此需储存学生姓名的拼音。 (3)设计一个投票系统类:votesystem 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(char*name);//插入 int vote(char*name);//投票 void display();//显示哈希表 void showvote(int k); //按哈希表下标显示票数 void showrank();//显示排行榜 }; (4)加入用户登录系统,所以同时构造用户 user 的结构体; 结构体中需要有用户姓名和用户权限次数的数据。 struct user{ char username[20]; int root; user(){root=4;} }; 2.概要设计 2.1 系统模块划分 3 / 22
数据结构课程设计 评比系统 界面模块 用户登录 模块 选手信息 查询得票 投票模块 前十排行 退出系统 模块 模块 模块 模块 图 2-1 系统模块图 2.2 ADT(抽象数据类型)描述 1. 为了满足程序功能的设计,定义了两个结构体; 分别是学生选手 student 和登录用户 user; 2. 定义了投票系统类 class votesystem; 3.详细设计 3.1 ADT 基本操作算法设计 3.1.1 struct student{ char name[20];//姓名的拼音 int studentnum;//学号 int number;//票数 int Class;//班级 char major[30];//专业 char grade[10];//年级 char achievement[200];//突出事迹 }; struct user{ char username[20]; int root; 4 / 22
数据结构课程设计 user(){root=4;} }; user store[20]; 3.1.2 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(char*name);//插入 int vote(char*name);//投票 void display();//显示哈希表 void showvote(int k); //按哈希表下标显示票数 void showrank();//显示排行榜 }; 3.2 功能模块设计 3.2.1 评比界面模块 (1)界面设计 (2)处理流程设计 评比系统选择界面:由于选择结构比较单一,故在选择时没有选择使用 switch 语句,使用简单的 if 语句; while(choice!=2) { system("cls"); 5 / 22
数据结构课程设计 cout<<"***欢迎来到校园十大优秀青年评比系统***"< <=============="< <=============="<>choice; if(choice==1) {…… } else cout<<"退出成功!"; 3.2.2 用户登录模块 (1)界面设计 (2)处理流程设计 while(choose!=5)//不是选择 5 的情况下继续运行,否则退出 { cout<<"****************************\n" <<" 校园十大优秀青年评比系统\n" <<"1、 提名选手信息\n" <<"2、 查询选手得票\n" <<"3、 =======>投票\n" <<"4、 前十排行榜单\n" <<"5、 退出投票系统\n" <<"****************************\n" <<"感谢使用本系统!O(∩_∩)O"<>choose; if(choose==3)//每次投票后限制次数减一 6 / 22
数据结构课程设计 store[i].root--; switch(choose) { char a[2]; case 1: case 2: L.display();break; cout<<"请输入选手姓名的拼音(如:zhangjing ):"<>t; if(t==1) { 7 / 22 case 3: 操作 "<
数据结构课程设计 L.inserthash(name); cout<<"选手提名成功\n"; cout<<"剩余投票次数为:"<<(store[i].root-1)<
分享到:
收藏