学生成绩管理系统-MySQL版-Part10-成绩分段分析
本文已被浏览5114次
这 学生成绩管理 的这个部分是个痛。。。。。。
这里的这个功能完全是为了迎合课本上那个功能,针对成绩单中的各科成绩进行统计各个分数段的人数,并计算出所占百分比。
本人觉得这个功能写的实在是糟糕,功能单一,界面丑陋,简直不堪入目哦。。。。。。
这个功能还是很简单的,分别用WHERE语句对每个字段进行计数即可。然后再进行显示,这块比较头疼的是一个结果输出的分页问题,每页显示3个,要支持PageUp和PageDown的上下翻页功能。做这个功能的时候还是费了一些周折的。
这么渣的功能一定不是我写的(′д` )…彡…彡
//引入头文件 #include <stdio.h> #include <windows.h> #include <mysql.h> #include <string.h> #include <conio.h> //继承变量 extern MYSQL mysql; extern MYSQL_RES *result; extern MYSQL_ROW row; extern MYSQL_FIELD *field; //函数原型 void ChangeColorScreen(const char *color); void ChangeWindowSize(int Width,int Height); void ChangeWindowTitle(const char *title); void CS(); void Pause(int mode); void JR_SetColor(int textcolor,int bgcolor); void strrpl(char* pDstOut, char* pSrcIn, const char* pSrcRpl, const char* pDstRpl); int Sum_ints(int number); int Get_Score_Table(int Index,char* str); int Analysis_Score_TraceReport(int TableIndex); struct SA { int PeoSum[5]; double Percent[5]; char FieldName[20]; }; //功能主入口 int Analysis_Score() { char sql[100],temp[100],select[10]; int lines,item=1,i; ChangeWindowTitle("导出数据"); sprintf(sql,"Show Tables like 'scm_class_%%'"); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); lines=mysql_num_rows(result); ChangeWindowSize(40,lines+14); printf("╔═════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 分析成绩 ║n"); printf("╟─────────────────╢n"); if(lines==0) { printf("║ 当前数据库中没有可用成绩单! ║n"); printf("║ 按任意键返回主菜单! ║n"); printf("╟─────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════╝n>"); Pause(0); return 0; } printf("║ 请选择希望生成分析报告的成绩单: ║n"); while((row=mysql_fetch_row(result))) { strrpl(temp,row[0],"scm_class_",""); printf("║ [%d] %s",item,temp); for(i=strlen(temp)+Sum_ints(item)-1; i<28; i++) { printf(" "); } printf("║n"); item++; } printf("╟─────────────────╢n"); printf("║ [B] 返回上级菜单 ║n"); printf("╟─────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════╝n>"); fflush(stdin); gets(select); if(atoi(select)>0&&atoi(select)<item) { Analysis_Score_TraceReport(atoi(select)); } else if(strcasecmp(select,"B")==0) { return 0; } else { printf("请输入有效数据!"); Sleep(1000); } Analysis_Score(); return 0; } //输出结果 int Analysis_Score_TraceReport(int TableIndex) { char TableName[20]; char sql[1000]; int FieldNum=0,i,j,k; int Tags[6]= {0,60,70,80,90,100}; MYSQL_ROW Fields[1000]; struct SA Analysis_Result[1000]; char action; Get_Score_Table(TableIndex,TableName); sprintf(sql,"show columns from %s where Field!='ID' AND Field!='学号' AND Field!='姓名' AND Field!='平均分' AND Field!='总分'",TableName); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); while((Fields[FieldNum]=mysql_fetch_row(result))) FieldNum++; for(i=0; i<FieldNum; i++) { //查询人数 strcpy(Analysis_Result[i].FieldName,Fields[i][0]); for(j=0; j<5; j++) { sprintf(sql,"select ID From %s Where %s>%d AND %s<%d",TableName,Fields[i][0],Tags[j],Fields[i][0],Tags[j+1]); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); Analysis_Result[i].PeoSum[j]=mysql_num_rows(result); } k=0; for(j=0; j<5; j++) { k+=Analysis_Result[i].PeoSum[j]; } for(j=0; j<5; j++) { Analysis_Result[i].Percent[j]=(double)Analysis_Result[i].PeoSum[j]/k*100; } } ChangeWindowSize(33,21); for(i=0; i<FieldNum; i++) { for(j=0; j<(27-strlen(Analysis_Result[i].FieldName))/2; j++) printf("="); printf("科目:%s",Analysis_Result[i].FieldName); for(; j<27-strlen(Analysis_Result[i].FieldName); j++) printf("="); JR_SetColor(0,10); printf("n优秀(100~90):t%d人t%.2lf%%t",Analysis_Result[i].PeoSum[4],Analysis_Result[i].Percent[4]); JR_SetColor(0,11); printf("n良好(90~80):t%d人t%.2lf%%t",Analysis_Result[i].PeoSum[3],Analysis_Result[i].Percent[3]); JR_SetColor(0,14); printf("n中等(80~70):t%d人t%.2lf%%t",Analysis_Result[i].PeoSum[2],Analysis_Result[i].Percent[2]); JR_SetColor(0,13); printf("n及格(70~60):t%d人t%.2lf%%t",Analysis_Result[i].PeoSum[1],Analysis_Result[i].Percent[1]); JR_SetColor(0,12); printf("n不及格(60~0):t%d人t%.2lf%%tn",Analysis_Result[i].PeoSum[0],Analysis_Result[i].Percent[0]); JR_SetColor(15,1); if((i+1)%3==0&&i+1!=FieldNum) { k=FieldNum/3*3; k=k==FieldNum?k/3:k/3+1; printf("按任意键看下一页,PgUp看上一页,B返回(%d/%d)>",(i+1)/3,k); fflush(stdin); action=getch(); if(action==-32) { action=getch(); } switch(action) { case 73: i-=6; if(i<0) i=-1; break; case 98: ChangeColorScreen("1f"); return 0; break; default: break; } CS(); } else if(i+1==FieldNum) { k=FieldNum/3*3; k=k==FieldNum?k/3:k/3+1; printf("按任意键返回上级菜单,PgUp看上一页(%d/%d)>",k,k); fflush(stdin); action=getch(); if(action==-32) { action=getch(); } switch(action) { case 73: i=(k-2)*3-1; if(i<0) i=-1; break; default: break; } CS(); } } ChangeColorScreen("1f"); return 0; }
都不忍心发截图了Orz…..
评论
您需要 先登录 才可以回复.