学生成绩管理系统-MySQL版-Part10-成绩分段分析
本文已被浏览5551次
这 学生成绩管理 的这个部分是个痛。。。。。。
这里的这个功能完全是为了迎合课本上那个功能,针对成绩单中的各科成绩进行统计各个分数段的人数,并计算出所占百分比。
本人觉得这个功能写的实在是糟糕,功能单一,界面丑陋,简直不堪入目哦。。。。。。
这个功能还是很简单的,分别用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…..
评论
您需要 先登录 才可以回复.