mysql视频 tensorflow CGLib动态代理 Eclipse插件 压制组装机 摩尔投票法 全局重载运算符 sdk vue添加class 进销存源码 click事件 软件测试实战项目 多线程实现方式 java 数据分析 oracle添加索引 oracle可视化工具 matlab中不等于怎么表示 表白网页源码 python类 python加注释 python例子 python服务器开发 数据结构java版 java程序 java获取当前时间 java遍历list集合 java游戏开发教程 h370主板 视频字幕提取器 qq免安装版 flash基础 虚拟打印机安装 vs2003 java获取时间戳 vue路由跳转 spss20安装教程 vue引入第三方js pr动态字幕 软件龙头股 华为动态照片
当前位置: 首页 > 学习教程  > 编程语言

数据结构课程设计——十佳优秀青年

2020/12/28 18:38:08 文章标签:

#include<iostream> #include<cstring> #include<iomanip> using namespace std;struct student{char name[20]; //姓名的拼音int num; //学号int number; //票数int Class; //班级char major[30]; //专业ch…

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;


struct student{
    char name[20];        //姓名的拼音
    int num;              //学号
    int number;           //票数
    int Class;            //班级
    char major[30];       //专业
    char grade[10];       //年级
    char achievement[200];//突出事迹
};

class votesystem{
private:
    student*st;
    int count;         //当前元素个数
    int size;          //哈希表长
    
    
public:

    void 	InitHashTable(int n);                  //初始化哈希表
    int 	Hash(char*name);                        //计算哈希地址
    void 	collision(int &s);                     //冲突,计算下一个地址
    int 	search(char *name,int &s);              //查找
    void 	insert(char*name);                      //插入
    int 	vote(char*name);                        //投票
    void 	display();                             //显示哈希表
    void 	showvote(int k);                       //按哈希表下标显示票数
    void 	showrank();                            //显示排行榜
};



 
void votesystem::InitHashTable(int n)  //初始化哈希表
{
    size=n;

    st=new student[size];
    for(int i=0;i<size;i++)
        st[i].name[0]='\0';
}


int votesystem::Hash(char *name)        //求哈希地址,size为表长
{
    char *p=name;
    int key=0;				
	 
    while(*p)
    {
        key += int(*p);				key为所有名字(fyx)的累计值 
        p++;
    }
    return key%size;				//返回下标 
}



void votesystem::collision(int &s)       //开放地址法解决冲突
{
    s=s+1;
}


int votesystem::search(char *name,int &s)  //查找
{
    s=Hash(name);                          //哈希表定位
    
    while(st[s].name[0] != '\0' && strcmp(st[s].name,name))
        collision(s);   //处理冲突
        
    if(!strcmp(st[s].name,name))
        return 1;       //找到
    else return 0;      //未找到
}



void votesystem::insert(char *name)//插入
{
    int s;
    char a[2];
    search(name,s);
    cout<<"提名学生信息格式如下:"<<endl; 
    cout<<"\t学号:19101010"<<endl;
    cout<<"\t班级:1"<<endl;
    cout<<"\t专业:数学师范"<<endl;
    cout<<"\t年级:二"<<endl;
    cout<<"\t突出事迹:国家二等奖学金"<<endl;
    
    strcpy(st[s].name,name);
    cout<<"学号:\t";
    cin>>st[s].num;
    cout<<"班级:\t";
    cin>>st[s].Class;
    cout<<"专业:\t";
    cin.getline(a,2);
    cin.getline(st[s].major,30);
    cout<<"年级:\t";
    cin.getline(st[s].grade,10);
    cout<<"突出事迹:\t";
    cin.getline(st[s].achievement,200); //提名即为投一票,当前元素加一
    st[s].number=1;						//提名即为投一票
    count++;
}


int votesystem::vote(char*name)      //投票,纪录已存在时调用search函数
{
    int s;
    int f;
    f=search(name,s);					//定位
    if(f) {st[s].number++; return 1;}	//投票成功
    else return 0;						//投票失败
}


void votesystem::display()           //显示排名 
{
    for(int i=0;i<size;i++)
        if(st[i].name[0]!='\0')
            cout<<st[i].num<<' '
				<<st[i].name<<' '<<st[i].grade<<"年级"<<' '
				<<st[i].major<<' '
            	<<st[i].Class<<"班"<<' '
				<<st[i].number<<"票"<<' '
				<<st[i].achievement<<endl;
}


void votesystem::showvote(int k)      //按排名表下标显示票数
{
    cout<<"现得票数:"<<st[k].number;
}


void votesystem::showrank()            //显示排行榜
{
    int k;
    int a[11];    		//定义一个数组存放前十名在哈希表中的下标
    
    for(int i=0;i<10;i++) a[i]=-1;
    
    for(int i=0;i<size;i++)  //遍历哈希表
    {
        if(st[i].name[0]!='\0')
        {
            for( k=9;k>=0;k--)//利用插入法进行排序
            {
                if(a[k]>-1)
                {
                    if(st[a[k]].number<st[i].number)
                        a[k+1]=a[k];
                    else break;
                }
            }
            a[k+1]=i;
        }
    }
    cout<<"   学号          姓名       得票数"<<endl;
    for(int i=0;i<10&&a[i]>-1;i++){
        cout<<left<<setw(15)<<st[a[i]].num<<setw(15)<<st[a[i]].name<<setw(15)<<st[a[i]].number<<endl;
    }
}




int main()
{
    int choose=-1,k=-1;		//choose赋初值-1 
    char name[40];
    votesystem L;
    L.InitHashTable(50);
    while(choose!=5)		//5--退出投票系统
    {
		cout<<"				"<<endl; 
		cout<<"				"<<endl; 

		
		
        cout<<"  校园十大优秀青年评比系统"<<endl;
        cout<<"1--提名新学生"<<endl;
        cout<<"2--查看选手信息"<<endl;
        cout<<"3--选手得票"<<endl;
        cout<<"4--给选手投票"<<endl;
        cout<<"5--前十排行榜单"<<endl;
        cout<<"6--退出投票系统"<<endl;

        cout<<endl<<endl<<endl<<endl;

        cout<<"请您的选择操作:";
        cin>>choose;			
        switch(choose)
        {
                char a[2];
                
            case 1: 
            		cout<<"输入姓名(例如:fyx)"<<endl; 
            		cin>>name;
                    L.insert(name);
                    cout<<"选手提名成功\n";
                    break;
            case 2:
                L.display();
                
                cout<<endl<<endl<<endl; 
                cout<<"信息如上"<<endl<<"END"<<endl;
				break;
				
            case 3:
                cout<<"请输入选手姓名的拼音(如:fyx):"<<endl;
                cin.getline(a,2);
                cin.getline(name,40);
                int f;
                f=L.search(name,k);
                if(f)
				{
				L.showvote(k);
                cout<<endl;
            	}
                else 
				cout<<"提名名单中无此记录";
				cout<<endl;
			
                cout<<"1--提名该学生\n"
					<<"2--返回系统界面\n"
                    <<"请选择操作:";
                    int t;
                    cin>>t;
                    if(t==1)
                    {
                        L.insert(name);
                        cout<<"选手提名成功\n";
                    }break; 
//                break;
                
            case 4:
                cout<<"请输入选手姓名拼音(如:fyx)"<<endl;
                cin.getline(a,2);
                cin.getline(name,40);
                f=L.search(name,k);
                if(f) {L.vote(name);cout<<"投票成功\n";}
                else
                {
                    cout<<"无纪录!\n";
                    cout<<"1--提名该学生\n"
                    	<<"2--返回系统界面\n"
                    	<<"请选择操作:";

                    int t;
                    cin>>t;
                    if(t==1)
                    {
                        L.insert(name);
                        cout<<"选手提名成功\n";
                    }
                }break;
            case 5:L.showrank();break;
            case 6:cout<<"投票系统已关闭!\n";
            	   cout<<"感谢使用本系统!\n";
            	   break;
            
            
            
            default:
                cout<<"操作无效,请重新选择!\n"; break;
        }

    }
    
    return 0;
}


本文链接: http://www.dtmao.cc/news_show_550056.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?