⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ѧ

📁 学生课程管理系统,一个学习数据结构过程中的必备程序。
💻
字号:
#include<cstdio>#include<cstring>#include<cstdlib>#include<cctype>#include<string>#include<iostream>#include<algorithm>#define MAXSTD 30 // 开始学生数#define MAXCLS 5 // 课程数#define NOTFOUND     if( ( pos = findStd() ) == -1 ){printf( "NOT FOUND!\n" );return -1;} // 自定义宏,处理没有找到学生的情况using namespace std;struct STUDENT{    int id;    string name;    int grd[ 5 ];};//用于存储学生信息的结构体STUDENT stdt[ MAXSTD * 10 ]; int nSt;void prtStd( int pos ) // 打印一个学生信息{    printf( "The %d th student %s: " , pos + 1 , stdt[ pos ].name.c_str() );}void prtGrd( int wh , int pos ) // 打印某学生某门课程成绩{    printf( " class %d grade %d.\n\n" , wh  + 1  , stdt[ pos ].grd[ wh ] );}void prtAllStd( int crs ) // 打印所有学生某科成绩{    int i , j;    for( i = 0; i < nSt; ++i ){        prtStd( i );        if( crs >= 0 && crs <=5 ){            printf( "couse %d's score is %d \n" , crs + 1 , stdt[ i ].grd[ crs ] );        }        else if ( crs == 6 ){            for( j = 0; j < 5; ++j )                printf( "couse %d's score is %d\n" , crs + 1 , stdt[ i ].grd[ crs ] );            printf( "\n" );        }        }    }void addAStu( int i ) // 添加一个学生{    int j;    printf( "Enter %dth student's id: " , i + 1 );    cin >> stdt[ i ].id;    printf( "\n" );    printf( "Enter %dth student's name: " , i + 1 );    cin >> stdt[ i ].name;    printf( "\n" );    for( j = 0; j < MAXCLS; ++j ){        printf( "Enter %dth student's %dth course: " , i + 1 , j + 1 );        cin >> stdt[ i ].grd[ j ];        printf( "\n" );    }}void initial_std() // 初始化,读入30个学生的成绩{    int i , j ,  k;        printf( "Enter %d students' information:" , MAXSTD );    nSt = MAXSTD;    for( i = 0; i < MAXSTD; ++i ){        addAStu( i );        printf( "\n" );    }//    for( i = 0; i < MAXSTD; ++i ){//        printf( "%d %s %d %d \n" , stdt[ i ].id , stdt[ i ].name.c_str() , stdt[ i ].grd[ 0 ] );//    }    }int findStd_NAME( string nm ) // 用名字找一个学生{    int i , j , k;    for( i = 0; i < nSt; ++i )        if( nm == stdt[ i ].name ) return i;    return -1;}int findStd_ID( int id ) // 用id找一个学生{    int i , j , k;    for( i = 0; i < nSt; ++i )        if( id == stdt[ i ].id ) return i;    return -1;}int findStd() //查找学生{    int i , j  , k;    int tmpId;    string tmpNm;    char ch;    printf( "Enter id or name( I / N ) ?\n" );    while( 1 ){        ch = getchar();        switch( toupper( ch ) ){        case 'I':            printf( "Enter id: " );            cin >> tmpId;            printf( "\n" );            return findStd_ID( tmpId );            break;        case 'N':            printf( "Enter name: ");            cin >> tmpNm;            printf( "\n" );            return findStd_NAME( tmpNm );            break;        }    }    return -1;}int addStd() // 所有学生录入完毕后添加一个学生{    addAStu( nSt );    nSt++;    return 0;}int deviseStd() // 修改学生信息{    int i , j , k , pos;    NOTFOUND        addAStu( pos );    return 0;}int deletPos( int pos ) // 删除学生信息{    int i , j , k;    for( i = pos; i < nSt - 1; ++i )        stdt[ i ] = stdt[ i + 1 ];    nSt--;}int deletStd() // 定位并删除学生信息{    int i ,  j , k , pos;    if( ( pos = findStd() ) == -1 ){        printf( "NOT FOUDND!\n" );        return -1;    }    deletPos( pos );    return 0;}int findSbj() // 查找一门课程{    int rst;    printf( "Which subject do you want?\n" );    cin >> rst;    return rst;}int findClass( int wh ) // 查询某学生的某门课程{    int i , j , k , pos;    NOTFOUND        prtStd( pos );    prtGrd( wh , pos );    return 0;}int findAllClass() // 查询所有课程{    int i , j , k , pos;    NOTFOUND        prtStd( pos );    printf( "\n" );    for( i = 0; i < MAXCLS; ++i )        prtGrd( i , pos );    return 0;}int findAvrg() // 查询学生某科平均分{    int i , j ,  k , pos;    double pt;    NOTFOUND        prtStd( pos );    for( pt = .0 , i = 0; i < MAXCLS; ++i )        pt += stdt[ pos ].grd[ i ];    printf( "average grade %lf\n" , pt / 5.0 );    return 0;    }int findGrdInterval( int wh , int a , int b ) // 查找成绩在某区间的学生{    int i ,  j , k;    printf( "These students satisfy your requirement: \n" );    for( i = 0; i < nSt; ++i )        if( stdt[ i ].grd[ wh ] >= a && stdt[ i ].grd[ wh ] <= b ){            prtStd( i );            printf( "\n" );        }        printf( "\n" );    return 0;}int sort_GRD( int wh ) // 将所有学生按成绩排序{    int i , j  , k;    STUDENT tmpStd[ MAXSTD * 10 ];    memcpy( tmpStd , stdt , sizeof( stdt ) );    for( i = 0; i < nSt; ++i )        for( j = 0; j < nSt - 1; ++j )            if( stdt[ j ].grd[ wh ] < stdt[ j + 1 ].grd[ wh ] )                swap( stdt[ j ] , stdt[ j + 1 ] );    prtAllStd( wh );    memcpy( stdt , tmpStd , sizeof( tmpStd ) );    return 0;}int avrgGrd( int wh ) // 某门课程的所有学生的平均分{    int i , j  , k;    double avrg;    for( avrg = .0 , i = 0; i < nSt; ++i )        avrg += stdt[ i ].grd[ wh ];    printf( "average grade %lf\n" , avrg / nSt );}int minGrd( int wh ) // 某门课程所有学生的最低成绩{    int i , j  , k;    int minGrd;    for( minGrd = 0x7fffffff , i = 0; i < nSt; ++i )        minGrd = min( minGrd , stdt[ i ].grd[ wh ] );    printf( "min grade is : %d\n " , minGrd );    return 0;}int maxGrd( int wh ) // 某门课程所有学生的最高成绩{    int i , j  , k;    int maxGrd;    for( maxGrd = 0 , i = 0; i < nSt; ++i )        maxGrd = max( maxGrd , stdt[ i ].grd[ wh ] );    printf( "max grade is : %d\n" , maxGrd );    return 0;}int failStdNum() // 所有挂过科的学生{    int i , j  , k;    int rst;    bool flg;    for( rst = 0 , i = 0; i < nSt; ++i ){        flg = false;        for( j = 0; j < MAXCLS; ++j )            if( stdt[ i ].grd[ j ] <= 60 ) { flg = true; break;}        if( flg ) ++rst;    }    printf( "There %d students who faild .\n" , rst );    return 0;}void searchStd() // 查询处理主函数{    int i , j , k;    int chs;    int sbj;    int a , b;    do{        printf( "What do you want to search ? \n" );        printf( "1.find a student's a given subject's  score .\n" );        printf( "2.find a student's totol score\n" );        printf( "3.find a student's average score.\n" );        printf( "4.find some students whose score is in a given interval.\n" );        printf( "5.sort by some subject\n" );        printf( "6.find average score.\n" );        printf( "7.find highest score.\n" );        printf( "8.find lowest score.\n " );        printf( "9.find the number of students who failed.\n" );        printf( "10.exit\n" );        cin >> chs;        switch( chs ){        case 1: findClass( sbj = findSbj() );break;        case 2: findAllClass(); break;        case 3:findAvrg(); break;        case 4:            printf( "Please enter the interval ( two numbers: )\n" );            cin >> a >> b;            findGrdInterval( sbj = findSbj() , a , b );            break;        case 5: sort_GRD( sbj = findSbj() );break;        case 6: avrgGrd( sbj = findSbj() );break;        case 7:maxGrd( sbj = findSbj() );break;        case 8:minGrd( sbj = findSbj() );break;        case 9:failStdNum();break;        case 10: return;        }    } while( 1 );}int main(){    int i , j , k , chs;    int flg;    int pos;    initial_std();    do{//主循环体,等待用户输入选择相应操作        printf( "What do you want?\n" );        printf( "1.Add a student\n" );        printf( "2.Modify a student\n" );        printf( "3.delete a student\n" );        printf( "4.search \n" );        printf( "5.exit\n" );        cin >> chs;        flg = 1;        switch( chs ){        case 1: addStd(); break;        case 2: deviseStd(); break;        case 3: deletStd();break;        case 4: searchStd(); break;        case 5: flg = 0; break;        }    }        while ( flg );    return 0;}     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -