登录

在这个站点登录

保存我的登录记录

<<忘记密码?

还没有账号?点此注册>>

Jerry

学生成绩管理系统-MySQL版-Part10-成绩分段分析

分享到:

本文已被浏览2750

这 学生成绩管理 的这个部分是个痛。。。。。。

这里的这个功能完全是为了迎合课本上那个功能,针对成绩单中的各科成绩进行统计各个分数段的人数,并计算出所占百分比。

本人觉得这个功能写的实在是糟糕,功能单一,界面丑陋,简直不堪入目哦。。。。。。

这个功能还是很简单的,分别用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…..

 手机扫描左边的二维码,立刻将文章收入手机!
 微信扫描左边二维码,点击右上角即可分享到朋友圈!
严禁任何非授权的采集与转载,转载须经站长同意并在文章显著位置标注本文连接,站长保留追究法律责任的权利.

评论

 您需要 先登录 才可以回复.