数据结构设计--学生信息管理系统

这篇具有很好参考价值的文章主要介绍了数据结构设计--学生信息管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.环境

2.知识图

3.程序的功能

4.程序的源代码


1.环境

vs code

2.知识图

快排+哈希

3.程序的功能

(1)程序中的数据存储到文件中。

(2) 录入学生成绩,格式如下:

(学号(12位) 、姓名、性别、专业、班级、课程成绩(5门课程),总分)其中,总分通过程序计算求得。

(3)输出所有学生成绩。

(a)按某门课程成绩降序输出。

(b)按总分降序输出所有成绩,总分相同的再按学号升序输c)按班级升序输出所有成绩,同一个班级的按总分降序输出。

(4)可以删除某个学生的成绩(删除时按学号删除)。

(5)成绩查询

(a)根据姓名查找该生的成绩信息,若有同名,则输出所有同名学生的成绩信息。

(b)根据班级查找该班的所有成绩信息,并按总分降序输出。

(6)统计

(a)统计每个学生的平均分,按平均分降序输出。

(b)统计每个专业的平均分,按平均分降序输出。

(c)统计每个班中总分最高的前三名和总分最低的后三名,并输出。

(d)统计获得励志奖学金的学生信息。励志奖学金的获取条件为:平均分>=90分且各科成绩>=85分且在班级的排名为前三名。文章来源地址https://www.toymoban.com/news/detail-766188.html

4.程序的源代码

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;

const int N=1000;

typedef struct{
    string xuehao;//学号 
    string name;//姓名 
    string sex;//性别 
    string zhuanye;//专业 
    string banji;//班级 
    int a,b,c,d,e;//五门课的成绩 
    int sum;//总成绩 
    float ave;//平均分 
    float zy_sum; 
}stu;

stu student[N];
int n;//学生人数 

void init()//初始化 
{
    n=0;
    return ;
} 

void readfile()//录入学生成绩 
{    
    int i=0;
    init();
    ifstream infile("D:\\下载2\\student.txt");
    while(!infile.eof())    
    {
        infile>>student[i].xuehao;
        infile>>student[i].name;
        infile>>student[i].sex;
        infile>>student[i].zhuanye;
        infile>>student[i].banji;
        infile>>student[i].a;
        infile>>student[i].b;
        infile>>student[i].c;
        infile>>student[i].d;
        infile>>student[i].e;
        i++;
    }
    n=i;
    infile.close();
    for(int i=0;i<n;i++)
    {
        student[i].sum=student[i].a+student[i].b+student[i].c+student[i].d+student[i].e;
        student[i].ave=student[i].sum/5;
    }
    return ;
}

void quick_sort(stu student[],int l,int r,int op)//课程快速排序 
{
    if(l>=r) return ;
    int i=l-1,j=r+1;
    if(op==1)
    {
        int x=student[l+r>>1].a;
        while(i<j)
        {
            do i++;while(student[i].a>x);
            do j--;while(student[j].a<x);
            if(i<j)//交换学生信息 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    else if(op==2)
    {
        int x=student[l+r>>1].b;
        while(i<j)
        {
            do i++;while(student[i].b>x);
            do j--;while(student[j].b<x);
            if(i<j) 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    else if(op==3)
    {
        int x=student[l+r>>1].c;
        while(i<j)
        {
            do i++;while(student[i].c>x);
            do j--;while(student[j].c<x);
            if(i<j) 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    else if(op==4)
    {
        int x=student[l+r>>1].d;
        while(i<j)
        {
            do i++;while(student[i].d>x);
            do j--;while(student[j].d<x);
            if(i<j) 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    else if(op==5)
    {
        int x=student[l+r>>1].e;
        while(i<j)
        {
            do i++;while(student[i].e>x);
            do j--;while(student[j].e<x);
            if(i<j) 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    else if(op==6)//按总分降序输出 
    {
        int x=student[l+r>>1].sum;
        while(i<j)
        {
            do i++;while(student[i].sum>x);
            do j--;while(student[j].sum<x);
            if(i<j) 
            {
                stu student1=student[i];
                student[i]=student[j];
                student[j]=student1;
            }
        }
    }
    //递归+分治 
    quick_sort(student,l,j,op);
    quick_sort(student,j+1,r,op);
}

void score_sort()//按总分降序,冒泡,多关键字排序,总分相同的按学号升序 
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(student[j].sum<student[j+1].sum)
            {
                stu student1=student[j];
                student[j]=student[j+1];
                student[j+1]=student1;
            }
            else if(student[j].sum==student[j+1].sum)
            {
                if(student[j].xuehao>student[j+1].xuehao)
                {
                    stu student1=student[j];
                    student[j]=student[j+1];
                    student[j+1]=student1;
                }
            }
        }
    }
    return ; 
}

void bj_sort()//班级升序,同一个班级按总分降序 
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(student[j].banji>student[j+1].banji)
            {
                stu student1=student[j];
                student[j]=student[j+1];
                student[j+1]=student1;
            }
            else if(student[j].banji==student[j+1].banji)
            {
                if(student[j].sum<student[j+1].sum)
                {
                    stu student1=student[j];
                    student[j]=student[j+1];
                    student[j+1]=student1;
                }
            }
        }
    }
    return ; 
}

void dele()//按学号删除 
{
    string x;
    cout<<"输入要输出学生的学号:";
    cin>>x;
    int ans=0;
    for(int i=0;i<n;i++)
        if(student[i].xuehao==x) 
        {
            ans=i;
            break;
        }
    for(int i=ans;i<n;i++)
        student[i]=student[i+1];
    if(ans==0) cout<<"要删除的学生信息不存在!";
    else 
    {
        cout<<"已经删除!"<<endl;
        n--;//线性表长度-- 
    }
    return ; 
}

void name_search()//根据姓名查找学生信息 
{
    string x;
    cout<<"请输入查找的姓名:";
    cin>>x;
    int ans=0;
    int f=0;
    for(int i=0;i<n;i++)
    {
        if(student[i].name==x)
        {
            ++f;
            printf("第%d名学生信息:",f); 
            cout<<student[i].xuehao<<" "<<student[i].name<<" "<<student[i].sex<<" "<<student[i].zhuanye<<" "<<student[i].banji<<" "<<student[i].a<<" "<<student[i].b<<" "<<student[i].c<<" "<<student[i].d<<" "<<student[i].e<<endl;
        }
    } 
    if(f==0) cout<<"不存在该学生!"<<endl;
    return ;
} 

void bj_search()//按班级查找 
{
    string x;
    cout<<"请输入要查询的班级:"<<endl;
    cin>>x;
    stu student1[N];
    int ans=0,f=0;
    for(int i=0;i<n;i++)
    {
        if(student[i].banji==x)
        {
            f++;
            student1[ans++]=student[i];
        }
    }
    if(f==0)
    {
        cout<<"不存在该班级!";
        return ;
    }
    quick_sort(student1,0,ans-1,6);//按总分降序输出
    for(int i=0;i<ans;i++)
    {
        cout<<student1[i].xuehao<<" "<<student1[i].name<<" "<<student1[i].sex<<" "<<student1[i].zhuanye<<" "<<student1[i].banji<<" "<<student1[i].a<<" "<<student1[i].b<<" "<<student1[i].c<<" "<<student1[i].d<<" "<<student1[i].e<<endl;
    }
} 

void zy_sort()//统计每个专业的平均分,按平均分降序输出 
{
    map<string,int> h;//STL里面的哈希表,也可以手写哈希表 
    for(int i=0;i<n;i++)
    {
        h[student[i].zhuanye]++;
    }
    for(map<string,int>::iterator it=h.begin();it!=h.end();it++)
    {
        double sum=0;
        for(int i=0;i<n;i++)
        {
            if(student[i].zhuanye==it->first)
            {
                sum+=student[i].sum;
            }
        }
        sum/=it->second;//专业的平均分
        for(int i=0;i<n;i++)
        {
            if(student[i].zhuanye==it->first)
            {
                student[i].zy_sum=sum;
            }
        } 
    }
    for(int i=0;i<n-1;i++)
    {
        for(int j=0;j<n-1-i;j++)
        {
            if(student[j].zy_sum>student[j+1].zy_sum)
            {
                stu student1=student[j];
                student[j]=student[j+1];
                student[j+1]=student1;
            }
        }
    }
    return ; 
}

void bjtj()//统计每个班最高的前三名和最低的后三名 
{
    map<string,int> h;
    for(int i=0;i<n;i++)
    {
        h[student[i].banji]++;
    }
    for(map<string,int>::iterator it=h.begin();it!=h.end();it++)
    {
        stu student1[N];
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(student[i].banji==it->first)
            {
                student1[ans++]=student[i];
            }
        }
        quick_sort(student1,0,ans-1,6);//排序每个班
        cout<<it->first<<endl<<"最高的前三名学生信息:"<<endl;
        for(int i=0;i<3;i++)
            cout<<student1[i].xuehao<<" "<<student1[i].name<<" "<<student1[i].sex<<" "<<student1[i].zhuanye<<" "<<student1[i].banji<<" "<<student1[i].a<<" "<<student1[i].b<<" "<<student1[i].c<<" "<<student1[i].d<<" "<<student1[i].e<<endl;

        cout<<"最低的后三名学生信息:"<<endl; 
        for(int i=ans-1;i>=ans-3;i--)
            cout<<student1[i].xuehao<<" "<<student1[i].name<<" "<<student1[i].sex<<" "<<student1[i].zhuanye<<" "<<student1[i].banji<<" "<<student1[i].a<<" "<<student1[i].b<<" "<<student1[i].c<<" "<<student1[i].d<<" "<<student1[i].e<<endl;
    }
    return ; 
} 

void lizhi()//统计奖学金 
{
    map<string,int> h;
    int m=0;
    for(int i=0;i<n;i++)
    {
        h[student[i].banji]++;
    }
    for(map<string,int>::iterator it=h.begin();it!=h.end();it++)
    {
        stu student1[N];
        int ans=0;
        for(int i=0;i<n;i++)
        {
            if(student[i].banji==it->first)
            {
                student1[ans++]=student[i];
            }
        }
        quick_sort(student1,0,ans-1,6);//排序每个班
        for(int i=0;i<3;i++)
        {
            if(student1[i].ave>=90&&student1[i].a>=85&&student1[i].b>=85&&student1[i].c>=85&&student1[i].d>=85&&student1[i].e>=85)
            {
                m++;
                printf("第%d名学生信息:\n",m);
                cout<<student1[i].xuehao<<" "<<student1[i].name<<" "<<student1[i].sex<<" "<<student1[i].zhuanye<<" "<<student1[i].banji<<" "<<student1[i].a<<" "<<student1[i].b<<" "<<student1[i].c<<" "<<student1[i].d<<" "<<student1[i].e<<endl;
            }
        }
    }
    return ; 
}

void menu()
{
    printf("\t\t欢迎进入学生成绩管理系统\n");
    printf("\t\t==============================\n");
    printf("\t\t*选择操作                    *\n");
    printf("\t\t*1退出系统                   *\n");
    printf("\t\t*2按某门课程成绩降序输出     *\n");
    printf("\t\t*3按总分降序输出所有成绩     *\n");//总分相同,按学号升序输出 
    printf("\t\t*4按班级升序输出所有成绩     *\n");//同一个班级按总分降序 
    printf("\t\t*5按学号删除某个学生成绩     *\n");
    printf("\t\t*6按姓名查找某个学生成绩     *\n");//若有重名,输出所有同名学生的信息 
    printf("\t\t*7按班级查找该班所有成绩     *\n");//按总分降序输出
    printf("\t\t*8按照平均分降序输出成绩     *\n");
    printf("\t\t*9按专业的平均分降序输出     *\n");
    printf("\t\t*10统计每个班前三和后三名    *\n");
    printf("\t\t*11统计获得励志奖学金学生    *\n");
    printf("\t\t==============================\n");
}

void menu1()
{
    cout<<"请输入按照排序的课程的序号:";
    int op;
    cin>>op;
    quick_sort(student,0,n-1,op);
}

void print()
{
    for(int i=0;i<n;i++)
    {
        printf("第%d名学生信息:\n",i+1);
        cout<<student[i].xuehao<<" "<<student[i].name<<" "<<student[i].sex<<" "<<student[i].zhuanye<<" "<<student[i].banji<<" "<<student[i].a<<" "<<student[i].b<<" "<<student[i].c<<" "<<student[i].d<<" "<<student[i].e<<endl;
    }
}

int main()
{
    readfile();
    while(1)
    {
        menu();
        puts("");
        int op;
        cout<<"请输入一个序号:";
        cin>>op;
        switch(op)
        {
            case 1:
                cout<<"欢迎下次使用!"<<endl;
                return 0; 
                break;
            case 2:
                menu1();
                print();
                break;
            case 3:
                score_sort();
                print();
                break;
            case 4:
                bj_sort();
                print();
                break;
            case 5:
                dele();
                break;
            case 6:
                name_search();
                break;
            case 7:
                bj_search();
                break;
            case 8:
                quick_sort(student,0,n-1,6);
                print();
                break;
            case 9:
                zy_sort();
                print();
                break;
            case 10:
                bjtj();
                break;
            case 11:
                lizhi();
                break;
            default:cout<<"序号错误!";
                break; 
        }
    } 
    return 0;
}

到了这里,关于数据结构设计--学生信息管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课程设计 仓储管理系统

    【基本功能】 把货品信息表抽象成一个线性表,货品信息(包括ID、货品名、定价、数量等)作为线性表的一个元素,实现:按ID、货品名分别查找某货品信息(包括ID、货品名、定价、数量等);收录货品(如果货品在帐中已有,则只将总库存量增加。否则插入新增信息);

    2024年01月23日
    浏览(45)
  • 数据结构停车场管理系统设计

    数据结构与算法分析课程设计之数据结构停车场管理系统设计。主要应用到数据结构中的栈与队列。运用到的编程语言为C++。 目录 一  设计要求  二 思路分析 三 设计流程 先附上完整代码: 运行结果图: 1.1 问题描述 :设停车场是一个可停放n辆车的狭长通道,且只有一个

    2024年02月04日
    浏览(30)
  • 【数据结构】停车场管理系统程序设计

    说明: 该程序设计采用常见基础的数据结构栈和队列实现了一个简单停车场管理系统。在具体设计中,实现了系统页面和停车场的示意图显示,通过调用顺序栈和链队的相关函数,模拟了实际停车场的运营流程。 目录 1 任务内容 2 需求分析 2.1 功能需求 2.2 输入输出需求 3 概

    2024年02月03日
    浏览(33)
  • java课程设计(学生信息管理系统设计)+数据库

    🔍 🔎 本期带领大家一起来学习 java课程设计(学生信息管理系统设计)+数据库 的实现思路 🔍 🔎 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计学生信息管理系统,使之能提供以下功能: 1、系统以菜单方式工作 2、学生信息录入功能

    2024年02月08日
    浏览(44)
  • 学生信息管理系统的数据库设计MySQL

    1.课程设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷

    2024年02月05日
    浏览(40)
  • C语言版数据结构-课程设计-航空客运订票系统 V2.0 附源码(增加管理员功能)

    相信很多粉丝看过看过我的主页,有一个航空订票系统: 数据结构航空订票系统(附源码) 但是最近后台收到很多粉丝的要求,在上一个航空订票系统中要加上管理员的功能块,于是对上面那个课设进行了改进,新的功能流程如下: (航班信息由管理员添加和删除、顾客可

    2024年02月03日
    浏览(37)
  • 数据库课程设计——学生信息管理系统C#,SQL Sever

    目录 利用SQL Sever和 VS C#实现 一、程序流程图 二、具体实现:利用SQL Sever和 VS实现,使用C#连接数据库 1、新建一个名为MySchool的数据库​​​​​​​ 2、C#连接数据库,并实现对MySchool数据库的增、删、改、查操作 (1)主界面  (2)学生登录页面 (3)个人主页 (4)注册页

    2024年01月18日
    浏览(37)
  • 数据库课程设计——学生信息管理系统(Sqlserver,C#,Winform)

    目录 需求分析 一.登录功能 二.注册功能 三.管理员登录后跳转到功能页面: 四.学生信息管理(主界面,删除功能在主界面代码中) 五.学生信息添加和修改(设计在一个页面上,修改需要选中行) 六.课程信息管理(删除功能在主界面中)  七.课程信息添加和修改  八.成绩

    2024年02月02日
    浏览(39)
  • [Python+Django]Web学生信息管理系统数据库设计及系统实现

    本文我们完成数据的设计,并通过Django框架完成数据库构建同时利用Django框架模式实现学生信息管理系统的功能。 简单的包装下毕设应该没问题了。 Python,Mysql,Pycharm的安装本文就不做特别介绍了,有需要的同学请参考如下博文。 Python + Django4 搭建个人博客(二):准备开

    2024年02月03日
    浏览(50)
  • 用C语言实现一个学生信息管理系统,学生基本信息包括学号、姓名、三门课成绩以及个人平均成绩,有不超过70个学生的数据,要求能够建立学生基本信息(结构体数组)、按学号查询学生基本信息、计算学生个人平均成绩...

    下面是一种使用 C 语言实现学生信息管理系统的方案: 首先,定义结构体存储学生的基本信息,其中包括学号、姓名、三门课成绩和平均成绩。例如: 然后,定义结构体数组来存储最多70个学生的信息。 接下来,可以编写函数来实现各种功能。例如,可以定义函数来建立学

    2024年02月03日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包