📄 ѧ
字号:
#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 + -