c语言学生成绩管理系统

功能摘要

(1)按学期、按班级完成对学生成绩的录入。
(2)按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行 排序
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
(5)能按学号删除学生纪录,成绩等。
(6)将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中(txt文 件)。
(7)添加了一个界面可显示以保存的数据里面已有的学年、班级,方便查询
(8)添加可自定义界面背景、字体颜色的功能

程序界面浏览

主界面

结构体的定义

typedef struct person                               //定义结构体  
{  
    char num[15];   //学号  
    char name[20]; //姓名  
    float chinese;    //语文成绩  
    float en;      //英语成绩  
    float  math;      //数学成绩
    float  history;      //历史成绩  
    float  physics;  //物理成绩 
	int  term;     //学期
	int  classnum; //班级 
	float sum;   //总分 
	float average; //平均分 
}person;  

界面的函数封装

减少代码的行数,方便调用,避免不停地转移光标

void no_sql()      //数据库无信息ui界面
{
	system("cls");
	toxy(45,8);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃     数据库无信息!      ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃      正在返回...        ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃                         ┃");
    toxy(45,15);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
	Sleep(1000);
}

void printf_ui(char str[],int line,char str1[],int line1,int flag)    //自定义界面输出内容
{
	if(flag==1)
	{
		system("cls");
	}
	toxy(45,8);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃                         ┃");	
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃                         ┃");	
	toxy(71,12);
	printf("┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃                         ┃");
	toxy(45,15);
	printf("┃                         ┃");
    toxy(45,16);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(45,line);
	printf("┃  %s",str);
	toxy(45,line1);
	printf("┃  %s",str1);
	toxy(56,14);
}

void printf_change(char str[],int line,char str1[],int line1,int flag)       //只改变界面某行内容
{
	if(flag==1)
	{
		system("cls");
	}
	toxy(45,line);
	printf("   %s",str);
	toxy(45,line1);
	printf("   %s",str1);
	toxy(56,14);
}


void printf_title()                             //学生界面
{	
	system("cls");
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    printf("    学年     班级     姓名      学号            语文     英语     数学    历史    物理    总分    平均分\n");  
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
}

void printf_data(struct person per[],int flag)       //成绩输出界面
{
	for(int i=0;i<flag;i++)  
    {
        printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    }
}

系统已有数据显示界面

void read_sql(struct person per[],int n)
{
	int flag=12,i,j,k;	
	toxy(75,6);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(75,7);
	printf("┃                         ┃");
	toxy(75,8);
	printf("┃   数据库中可查询数据:   ┃");
	toxy(75,9);
	printf("┃                         ┃");
	toxy(75,10);
	printf("┃     已有学年,班级:      ┃");
	toxy(75,11);
	printf("┃                         ┃");
	toxy(75,12);
	printf("┃                         ┃");
	toxy(75,13);
	printf("┃                         ┃");
	toxy(75,14);
	printf("┃                         ┃");
	toxy(75,15);
	printf("┃                         ┃");
	toxy(75,16);
	printf("┃                         ┃");
	toxy(75,17);
	printf("┃                         ┃");
	toxy(75,18);
	printf("┃                         ┃");
	toxy(75,19);
	//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(75,12);
	for(i=0;i<n;i++)
	{
		printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
		for(i=1;per[i].term!=0;i++)
		{
			k = 0;
			for(j=0;j!=i;j++)
			{
				if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
				{
					
					k = 1;
					break;
				}
			}
			if(k==0) 
			{
				toxy(75,++flag);
				printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
			}
		}	
	}
	toxy(75,++flag);
	printf("┃                         ┃");
	toxy(75,++flag);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");	
}

系统菜单自定义

void system_menu()
{	
	
	short back_Color;
	short text_Color;	
	printf_ui("系统背景字体颜色修改:",10,"  请输入字体颜色代码:",12,1);
	printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
	printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
	scanf("%d",&text_Color);
	printf_ui("系统背景字体颜色修改:",10,"  请输入背景颜色代码:",12,0);
	scanf("%d",&back_Color); 
	char command[9]="color 3A";
	if(text_Color>9&&text_Color<16) 
	{
		command[7]=text_Color-10+'A';
	}
	else
	{
		command[7]='0'+text_Color; 		//将textColor变量改为字符型	 
	}
	if(back_Color>9&&back_Color<16)
	{
		command[6]=back_Color-10+'A';
	}
	else
	{
		command[6]='0'+back_Color;		//将backColor变量改为字符型	
	}	
	system(command);
	toxy(56,14);
	Sleep(1000);
	return;
}

成绩录入功能

void add()                                      //成绩的录入与添加函数  
  {  
    FILE *fp;  
    int i=0,n=0;  
    char sign='y';                              //首先定义sign='y'  
    system("cls"); 								//清屏函数  系统中调用  
    person p[200]  ;                             
    while(sign!='n'&&sign!='N')                    //其实只有当输入N或n时才跳出循环  
      {  
		printf_ui("     学生信息添加",10,"请输入学年(格式20xx):",12,1);
		toxy(56,14);
		scanf("%d",&p[i].term);
		printf_ui("     学生信息添加",10,"      请输入班级:",12,1);
		toxy(56,14);
		scanf("%d",&p[i].classnum);
		printf_ui("     学生信息添加",10,"      请输入姓名:",12,1);
		toxy(56,14);
		scanf("%s",&p[i].name);
		printf_ui("     学生信息添加",10,"      请输入学号:",12,1);
		toxy(56,14);
		scanf("%s",&p[i].num);
		printf_ui("     学生信息添加",10,"      请输入语文:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].chinese);
		printf_ui("     学生信息添加",10,"      请输入英语:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].en);
		printf_ui("     学生信息添加",10,"      请输入数学:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].math);
		printf_ui("     学生信息添加",10,"      请输入历史:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].history);
		printf_ui("     学生信息添加",10,"      请输入物理:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].physics);
		printf_ui("      是否继续添加? ",10," 输n退出,否则继续:",12,1);
		toxy(56,14);
		scanf("\t%c",&sign);       
		p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
		p[i].average = p[i].sum / 5; 
        i++;  
        n=n+1;
		printf_ui(" ",10,"      正在保存... ",11,1); 
		Sleep(1000); 
        system( "cls ");  
   }
  
  
   if((fp=fopen("studata.txt","a"))==NULL)                    //以2进制形式进行文件尾追加//  
      {  
         no_sql();  
         system("pause");  
         return;                                         //如果文件出现错误 就返回  
       }  
        for(i=0;i<n;i++)  
        {
            fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);    //以2进制形式写入文件中//一次写入一个数组//  
        
        } 
        fclose(fp);                                       //关闭文件  
        system("pasue");  
  }  

学生成绩总览

void scan()                        //显示记录  进行全面信息浏览  
{  
	person per[200];
    FILE *fp;  
    struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
    float sum;                                         //总分  
    float s[200];  
    int i=0,n=0;  
    int j=0,k,t;  
    int m,term,flag,classnum;  
    system("cls");   
    if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
    {  
    	no_sql();
        system("pause");  
        return;  
    }
	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
    {    
        i++;
        n=n+1;
    }
    fclose(fp);
    read_sql(per,n);
	toxy(45,8);
	printf_ui("     班级成绩查询",10,"请输入学年(格式20xx):",12,0);	
	toxy(56,14);
	scanf("%d",&term);
	printf_ui("     班级成绩查询",10,"      请输入班级:",12,0);
	toxy(56,14);
	scanf("%d",&classnum);
	system("cls");	
	for(i=0;i<n;i++)
	{
	 	if(per[i].term==term&&per[i].classnum==classnum)
	 	{
	 		per[flag]=per[i];
	 		flag++;	 		
		 }
	 }     	 
    printf_title();
    printf_data(per,flag);                            
    system("pause");  
    system("cls"); 
  }  

学生信息查询

void query()                     //学生信息的不同方式查询  
{      
    system("cls");
    person p[200];
    FILE *fp1;  
    int i=0;
    int n=0;  
    char m;   
    toxy(45,2);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,3);
	printf("┃                         ┃");
	toxy(45,4);
	printf("┃      学生成绩查询       ┃");
	toxy(45,5);
	printf("┃                         ┃");
	toxy(45,6);
	printf("┃      请输入选择:        ┃");
	toxy(45,7);
	printf("┃                         ┃");
	toxy(45,8);
	printf("┃   [ 1 ].模糊查询        ┃");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃   [ 2 ].姓名查询        ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃   [ 3 ].学号查询        ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃   [ 4 ].返回            ┃");
	toxy(45,15);
	printf("┃                         ┃");
    toxy(45,16);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
	toxy(64,6); 
	scanf("%c",&m);  
    while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')  
    {  	
    	toxy(45,4);
		printf("┃      学生成绩查询       ┃");
		toxy(45,6);
		printf("┃      请输入选择:        ┃");
		toxy(64,6);
	    scanf("%c",&m);  
    }  
    if((fp1=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
    {  
    	no_sql();
		return;  
    }    
    while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
    {    
         i++;
         n=n+1;
    }         
    if(m=='1')                                                 //模糊查询  
    {  
        char s[3];                                             //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出  
        int i=0;  
        system("cls");  
		printf_ui("     学生成绩查询",10,"    请输入学生的姓:",12,1); 
        scanf("%s",s);	 
		printf_title(); 
        for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        {  
  
          if(p[i].name[0]==s[0]&&p[i].name[1]==s[1])              //比较per[i].name与所输入的前俩个字符是否相同//  
            {  
                  
                printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
        }  
    }  
       
    if(m=='2')                                               //姓名查询  
    {  
        system("cls");
        char s[20];  
        int i=0;  
        printf_ui("     学生成绩查询",10,"    请输入学生的姓名:",12,1);
        scanf("\t%s",s);
		printf_title();
		for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
    	{  

      		if((strcmp(p[i].name,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
        		{  
              
            		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
            		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        		}		
    	}
		i=0;    
        while(strcmp(p[i].name,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
        if(i==n)  
        {  
            no_sql();  
            return;  
        }  
	}   
    if(m=='3')                                                            //学号查询  
    {  
      	char s[15];  
    	int i=0;  
        toxy(45,8);
		printf_ui("     学生成绩查询",10,"    请输入学生的学号:",12,1);   
        scanf("\t%s",s);
		printf_title();
        for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
    	{  
      		if((strcmp(p[i].num,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
        		{                   
            		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
            		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        		}		
    	}
		i=0;    
        while(strcmp(p[i].num,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
        if(i==n)  
        {  
            no_sql();  
            return;  
        }   
    }  
            fclose(fp1);
			toxy(50,18); 
            system("pause"); 
}  

学生成绩排名

void date()       //查询排名 
{  	 
	person per[200];
	FILE *fp;  
	struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
	float sum,pass=60;                                         //总分  
	float s[200];  
	int i=0,n=0;  
	int j=0,k,t;  
	int term,flag,classnum,flagg; 
	char m; 
	system("cls"); 
	if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
  	{  
     	no_sql();
     	return;  
    }
    
 	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
    {    
     	i++;
     	n=n+1;
    }
    fclose(fp);
    toxy(45,2);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,3);
	printf("┃                         ┃");
	toxy(45,4);
	printf("┃      学生成绩排名       ┃");
	toxy(45,5);
	printf("┃                         ┃");
	toxy(45,6);
	printf("┃      请输入选择:        ┃");
	toxy(45,7);
	printf("┃                         ┃");
	toxy(45,8);
	printf("┃   [ 1 ].语文            ┃");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃   [ 2 ].英语            ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃   [ 3 ].数学            ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃   [ 4 ].历史            ┃");
	toxy(45,15);
	printf("┃                         ┃");
	toxy(45,16);
	printf("┃   [ 5 ].物理            ┃");
	toxy(45,17);
	printf("┃                         ┃");
	toxy(45,18);
	printf("┃   [ 6 ].总分            ┃");
	toxy(45,19);
	printf("┃                         ┃");
	toxy(45,20);	
	printf("┃   [ 7 ].各科班级平均分  ┃");
	toxy(45,21);
	printf("┃                         ┃");
	toxy(45,22);	   
    printf("┃   [ 8 ].不及格同学      ┃"); 
    toxy(45,23);
	printf("┃                         ┃");
	toxy(45,24);	   
    printf("┃   [ 0 ].返回上级        ┃"); 
    toxy(45,25);
	printf("┃                         ┃");
    toxy(45,26);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(64,6); 
	scanf("%c",&m);    
    while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')  
    {  
		toxy(45,6);
		printf("┃      请输入选择:        ┃");
		toxy(64,6); 
		scanf("%c",&m);   
    }	 
	if(m=='0') 
	{
		return; 
	}
 	read_sql(per,n);
 	printf_ui("     学生成绩排名",10,"请输入学年(格式20xx):",12,0); 
	scanf("%d",&term);
	printf_ui("     学生成绩排名",10,"      请输入班级:",12,0); 
	scanf("%d",&classnum);
 	system("cls");
 	for(i=0;i<n;i++)        //选择符合条件的班级 
 	{
 		if(per[i].term==term&&per[i].classnum==classnum)
 	{
 		per[flag]=per[i];
 		flag++; 		
	}
 	} 			  
	if(m=='2')  
  	{  
      	for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
      	{  
         	k=i;  
        	for(j=i+1;j<flag;j++)
        	{
        		if(per[j].en>per[k].en)                              //排序//比较大小//  
        		{
					k=j;
        		}
        	}
        	temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
      	}
		printf_title();  
        printf_data(per,flag);
		system("pause"); 
    }  	  
	if(m=='3')  
  	{  
  	  	for(int i=0;i<flag-1;i++)  
     	{  
          	k=i;  
       		for(j=i+1;j<flag;j++)  
        	if(per[j].math>per[k].math)  
          		k=j;  
        	temp=per[k];per[k]=per[i];per[i]=temp;  
      	}  
        printf_title();
        printf_data(per,flag);            
		system("pause"); 
    }
    if(m=='1')  
    {  
        for(int i=0;i<flag-1;i++)  
        {  
        	k=i;  
            for(j=i+1;j<flag;j++)  
            if(per[j].chinese>per[k].chinese)  
            k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
        }  
            printf_title();
        	printf_data(per,flag); 
			system("pause"); 
    } 
    if(m=='4')  
  	{  
    	for(int i=0;i<flag-1;i++)  
     	{  
          	k=i;  
       		for(j=i+1;j<flag;j++)  
        	if(per[j].history>per[k].history)  
          	k=j;  
        	temp=per[k];per[k]=per[i];per[i]=temp;  
      	}  
        printf_title();
        printf_data(per,flag);
		system("pause"); 
    }  
    if(m=='5')  
    {  
        for(int i=0;i<flag-1;i++)  
        {  
            k=i;  
           	for(j=i+1;j<flag;j++)  
            if(per[j].physics>per[k].physics)  
            k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
        }  
        printf_title();
        printf_data(per,flag);
		system("pause");  
    } 
    if(m=='6')  
    {  
		for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
        {  
            k=i;  
            for(j=i+1;j<flag;j++)
            {
            	if(per[j].sum>per[k].sum)                              //排序//比较大小//  
            	{
					k=j;
            	}
            }
            temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
        } 
        printf_title();
        printf_data(per,flag);
		system("pause");
    }  
	if(m=='7')                 //各科班级平均分  
    {  
       	for(i=0;i<flag;i++)
       	{
			s[0]=per[i].chinese+s[0]; 
			s[1]=per[i].en+s[1];
			s[2]=per[i].math+s[2];   
			s[3]=per[i].history+s[3];   
			s[4]=per[i].physics+s[4];  
		}		
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("     语文     英语     数学     历史     物理     \n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("     %.1f     %.1f     %.1f     %.1f     %.1f    \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
		system("pause");

    }
	      
	if(m=='8')
	{
		printf_title();
        for(int i=0;i<flag;i++)  
        {
        	if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
			{
            printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");        	
			}
		}
        system("pause");		
	}    
	    
		
}

学生数据删除

void delet()     //数据删除 
{  
	person p[200];
	FILE *fp;  
	char s[10];  
	int i=0,n=0;  
  	if((fp=fopen("studata.txt","r"))==NULL)                  //以2进制方式读取文件信息//  
  	{  
     	no_sql(); 
     	return;  
   	} 
	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
    {    
         i++;
         n=n+1;
    } 
	fclose(fp);
	system("cls");
	printf_ui("     学生数据删除",10,"      请输入学号:",12,1); 
	scanf("%s",s);  
	i=0;
    while(strcmp(p[i].num,s)!=0&&i<n)
    {
         i++;
    }                           //进行比较 找到所需要的信息  
        if(i==n)  
         {  
            no_sql();
            return;  
         }  
    else
	{
	system("cls");  
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//读打开原文件123.txt
    ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //从原文件读取一行
    {
        if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
        {
            fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average);    //以2进制形式写入文件中//一次写入一个数组//  
        }
 
       kk++;    
    } 
    fclose(fin);
    fclose(ftp);
    remove("studata.txt");//删除原文件
    rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
    printf_ui("      删除成功!",10,"      正在返回...",12,1); 
	Sleep(1500); 
	} 
 
}

菜单

int menu_select()                              //菜单选择系统函数  
{  
     char c;  
      do{  
        system("cls");
		char t;
		toxy(45,2);
		printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
		toxy(45,3);
		printf("┃                         ┃");
		toxy(45,4);
		printf("┃     成绩查询管理系统    ┃");
		toxy(45,5);
		printf("┃                         ┃");
		toxy(45,6);
		printf("┃           HM            ┃");
		toxy(45,7);
		printf("┃                         ┃");
		toxy(45,8);
		printf("┃   [ 1 ].添加学生信息    ┃");
		toxy(45,9);
		printf("┃                         ┃");
		toxy(45,10);
		printf("┃   [ 2 ].班级成绩查询    ┃");
		toxy(45,11);
		printf("┃                         ┃");
		toxy(45,12);
		printf("┃   [ 3 ].学生信息搜索    ┃");
		toxy(45,13);
		printf("┃                         ┃");
		toxy(45,14);
		printf("┃   [ 4 ].学生成绩排名    ┃");
		toxy(45,15);
		printf("┃                         ┃");
		toxy(45,16);
		printf("┃   [ 5 ].删除学生信息    ┃");
		toxy(45,17);
		printf("┃                         ┃");
		toxy(45,18);
		printf("┃   [ 6 ].系统界面设置    ┃");
		toxy(45,19);
		printf("┃                         ┃");
		toxy(45,20);	
		printf("┃   [ 0 ].退出管理系统    ┃");
		toxy(45,21);
		printf("┃                         ┃");
		toxy(45,22);	   
        printf("┃   请您选择(0-6):        ┃"); 
        toxy(45,23);
		printf("┃                         ┃");
        toxy(45,24);
		printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
		toxy(64,22); 
        c=getchar();  
     }while(c<'0'||c>'6');  
        return (c-'0');                                      //字符减去'0'得到的是数字整型//  
}  

主函数

int main()  
{  	
	system("color 0F");
  	for(;;)                                                 //循环使用主界面直到遇到结束命令  
  	{   
    	switch(menu_select())                               // 函数的调用//  
      	{  
	  		case 1:              
          		add();  //学生记录添加 
          		break;  
      		case 2: 
          		scan();  //学生信息浏览
          		break;  
      		case 3:  
          		query();  //学生信息查询
          		break;  
      		case 4:  
          		date();  //数据计算  
         		break;  
      		case 5:  
           		delet();   //数据删除 
           		break;
			case 6:
				system_menu(); //系统菜单修改
				break;  
      		case 0:  
      			system("cls"); 
            	printf_ui("    感谢使用!",10,"    正在退出...",12,1); 
				Sleep(1000);
		        exit(0);  
      	}	  
  	}  
    system("cls");      
    return 0;
} 


代码全览

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define N sizeof(struct BOOK)
 
typedef struct person                               //定义结构体  
{  
    char num[15];   //学号  
    char name[20]; //姓名  
    float chinese;    //语文成绩  
    float en;      //英语成绩  
    float  math;      //数学成绩
    float  history;      //历史成绩  
    float  physics;  //物理成绩 
	int  term;     //学期
	int  classnum; //班级 
	float sum;   //总分 
	float average; //平均分 
}person;  
person per[200];  //定义100                                        
void HideCursor()     //隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void color(short x)
{
	if(x>=0&&x<=15)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
	}
	else
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
	}
} 
 
void toxy(int x, int y)      //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos); 
}

void no_sql()
{
	system("cls");
	toxy(45,8);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃     数据库无信息!      ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃      正在返回...        ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃                         ┃");
    toxy(45,15);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
	Sleep(1000);
}
    
void read_sql(struct person per[],int n)
{
	int flag=12,i,j,k;	
	toxy(75,6);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(75,7);
	printf("┃                         ┃");
	toxy(75,8);
	printf("┃   数据库中可查询数据:   ┃");
	toxy(75,9);
	printf("┃                         ┃");
	toxy(75,10);
	printf("┃     已有学年,班级:      ┃");
	toxy(75,11);
	printf("┃                         ┃");
	toxy(75,12);
	printf("┃                         ┃");
	toxy(75,13);
	printf("┃                         ┃");
	toxy(75,14);
	printf("┃                         ┃");
	toxy(75,15);
	printf("┃                         ┃");
	toxy(75,16);
	printf("┃                         ┃");
	toxy(75,17);
	printf("┃                         ┃");
	toxy(75,18);
	printf("┃                         ┃");
	toxy(75,19);
	//printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(75,12);
	for(i=0;i<n;i++)
	{
		printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
		for(i=1;per[i].term!=0;i++)
		{
			k = 0;
			for(j=0;j!=i;j++)
			{
				if(per[i].term==per[j].term && per[i].classnum==per[j].classnum)
				{
					
					k = 1;
					break;
				}
			}
			if(k==0) 
			{
				toxy(75,++flag);
				printf("┃       %d    %d        ┃",per[i].term,per[i].classnum);
			}
		}	
	}
	toxy(75,++flag);
	printf("┃                         ┃");
	toxy(75,++flag);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");	
}

void printf_ui(char str[],int line,char str1[],int line1,int flag)
{
	if(flag==1)
	{
		system("cls");
	}
	toxy(45,8);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃                         ┃");	
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃                         ┃");	
	toxy(71,12);
	printf("┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃                         ┃");
	toxy(45,15);
	printf("┃                         ┃");
    toxy(45,16);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(45,line);
	printf("┃  %s",str);
	toxy(45,line1);
	printf("┃  %s",str1);
	toxy(56,14);
}

void printf_change(char str[],int line,char str1[],int line1,int flag)
{
	if(flag==1)
	{
		system("cls");
	}
	toxy(45,line);
	printf("   %s",str);
	toxy(45,line1);
	printf("   %s",str1);
	toxy(56,14);
}


void printf_title()
{	
	system("cls");
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    printf("    学年     班级     姓名      学号            语文     英语     数学    历史    物理    总分    平均分\n");  
    printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
}

void printf_data(struct person per[],int flag)
{
	for(int i=0;i<flag;i++)  
    {
        printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
    }
}

void system_menu()
{	
	
	short back_Color;
	short text_Color;	
	printf_ui("系统背景字体颜色修改:",10,"  请输入字体颜色代码:",12,1);
	printf_change("0 = 黑色 ,1 = 蓝色 ,2 = 绿色 ,3 = 湖蓝色 ",18, "4 = 红色 ,5 = 紫色 ,6 = 黄色 ,7 = 白色 ",19,0);
	printf_change("8 = 灰色 ,9 = 淡蓝色 ,10 = 淡绿色 ,11 = 淡浅绿色 ",20,"12 = 淡红色 ,13 = 淡紫色 ,14 = 淡黄色 ,15 = 亮白色 ",21,0);
	scanf("%d",&text_Color);
	printf_ui("系统背景字体颜色修改:",10,"  请输入背景颜色代码:",12,0);
	scanf("%d",&back_Color); 
	char command[9]="color 3A";
	if(text_Color>9&&text_Color<16) 
	{
		command[7]=text_Color-10+'A';
	}
	else
	{
		command[7]='0'+text_Color; 		//将textColor变量改为字符型	 
	}
	if(back_Color>9&&back_Color<16)
	{
		command[6]=back_Color-10+'A';
	}
	else
	{
		command[6]='0'+back_Color;		//将backColor变量改为字符型	
	}	
	system(command);
	toxy(56,14);
	Sleep(1000);
	return;
}
int menu_select()                              //菜单选择系统函数  
{  
     char c;  
      do{  
        system("cls");
		char t;
		toxy(45,2);
		printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
		toxy(45,3);
		printf("┃                         ┃");
		toxy(45,4);
		printf("┃     成绩查询管理系统    ┃");
		toxy(45,5);
		printf("┃                         ┃");
		toxy(45,6);
		printf("┃           HM            ┃");
		toxy(45,7);
		printf("┃                         ┃");
		toxy(45,8);
		printf("┃   [ 1 ].添加学生信息    ┃");
		toxy(45,9);
		printf("┃                         ┃");
		toxy(45,10);
		printf("┃   [ 2 ].班级成绩查询    ┃");
		toxy(45,11);
		printf("┃                         ┃");
		toxy(45,12);
		printf("┃   [ 3 ].学生信息搜索    ┃");
		toxy(45,13);
		printf("┃                         ┃");
		toxy(45,14);
		printf("┃   [ 4 ].学生成绩排名    ┃");
		toxy(45,15);
		printf("┃                         ┃");
		toxy(45,16);
		printf("┃   [ 5 ].删除学生信息    ┃");
		toxy(45,17);
		printf("┃                         ┃");
		toxy(45,18);
		printf("┃   [ 6 ].系统界面设置    ┃");
		toxy(45,19);
		printf("┃                         ┃");
		toxy(45,20);	
		printf("┃   [ 0 ].退出管理系统    ┃");
		toxy(45,21);
		printf("┃                         ┃");
		toxy(45,22);	   
        printf("┃   请您选择(0-6):        ┃"); 
        toxy(45,23);
		printf("┃                         ┃");
        toxy(45,24);
		printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
		toxy(64,22); 
        c=getchar();  
     }while(c<'0'||c>'6');  
        return (c-'0');                                      //字符减去'0'得到的是数字整型//  
}  
  
void add()                                      //成绩的录入与添加函数  
  {  
    FILE *fp;  
    int i=0,n=0;  
    char sign='y';                              //首先定义sign='y'  
    system("cls"); 								//清屏函数  系统中调用  
    person p[200]  ;                             
    while(sign!='n'&&sign!='N')                    //其实只有当输入N或n时才跳出循环  
      {  
		printf_ui("     学生信息添加",10,"请输入学年(格式20xx):",12,1);
		toxy(56,14);
		scanf("%d",&p[i].term);
		printf_ui("     学生信息添加",10,"      请输入班级:",12,1);
		toxy(56,14);
		scanf("%d",&p[i].classnum);
		printf_ui("     学生信息添加",10,"      请输入姓名:",12,1);
		toxy(56,14);
		scanf("%s",&p[i].name);
		printf_ui("     学生信息添加",10,"      请输入学号:",12,1);
		toxy(56,14);
		scanf("%s",&p[i].num);
		printf_ui("     学生信息添加",10,"      请输入语文:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].chinese);
		printf_ui("     学生信息添加",10,"      请输入英语:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].en);
		printf_ui("     学生信息添加",10,"      请输入数学:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].math);
		printf_ui("     学生信息添加",10,"      请输入历史:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].history);
		printf_ui("     学生信息添加",10,"      请输入物理:",12,1);
		toxy(56,14);
		scanf("%f",&p[i].physics);
		printf_ui("      是否继续添加? ",10," 输n退出,否则继续:",12,1);
		toxy(56,14);
		scanf("\t%c",&sign);       
		p[i].sum = p[i].chinese + p[i].en + p[i].history + p[i].math + p[i].physics;
		p[i].average = p[i].sum / 5; 
        i++;  
        n=n+1;
		printf_ui(" ",10,"      正在保存... ",11,1); 
		Sleep(1000); 
        system( "cls ");  
   }
  
  
   if((fp=fopen("studata.txt","a"))==NULL)                    //以2进制形式进行文件尾追加//  
      {  
         no_sql();  
         system("pause");  
         return;                                         //如果文件出现错误 就返回  
       }  
        for(i=0;i<n;i++)  
        {
            fprintf(fp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);    //以2进制形式写入文件中//一次写入一个数组//  
        
        } 
        fclose(fp);                                       //关闭文件  
        system("pasue");  
  }  
  
void scan()                        //显示记录  进行全面信息浏览  
{  
	person per[200];
    FILE *fp;  
    struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
    float sum;                                         //总分  
    float s[200];  
    int i=0,n=0;  
    int j=0,k,t;  
    int m,term,flag,classnum;  
    system("cls");   
    if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
    {  
    	no_sql();
        system("pause");  
        return;  
    }
	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
    {    
        i++;
        n=n+1;
    }
    fclose(fp);
    read_sql(per,n);
	toxy(45,8);
	printf_ui("     班级成绩查询",10,"请输入学年(格式20xx):",12,0);	
	toxy(56,14);
	scanf("%d",&term);
	printf_ui("     班级成绩查询",10,"      请输入班级:",12,0);
	toxy(56,14);
	scanf("%d",&classnum);
	system("cls");	
	for(i=0;i<n;i++)
	{
	 	if(per[i].term==term&&per[i].classnum==classnum)
	 	{
	 		per[flag]=per[i];
	 		flag++;	 		
		 }
	 }     	 
    printf_title();
    printf_data(per,flag);                            
    system("pause");  
    system("cls"); 
  }  
  
void query()                     //学生信息的不同方式查询  
{      
    system("cls");
    person p[200];
    FILE *fp1;  
    int i=0;
    int n=0;  
    char m;   
    toxy(45,2);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,3);
	printf("┃                         ┃");
	toxy(45,4);
	printf("┃      学生成绩查询       ┃");
	toxy(45,5);
	printf("┃                         ┃");
	toxy(45,6);
	printf("┃      请输入选择:        ┃");
	toxy(45,7);
	printf("┃                         ┃");
	toxy(45,8);
	printf("┃   [ 1 ].模糊查询        ┃");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃   [ 2 ].姓名查询        ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃   [ 3 ].学号查询        ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃   [ 4 ].返回            ┃");
	toxy(45,15);
	printf("┃                         ┃");
    toxy(45,16);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛"); 
	toxy(64,6); 
	scanf("%c",&m);  
    while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='0')  
    {  	
    	toxy(45,4);
		printf("┃      学生成绩查询       ┃");
		toxy(45,6);
		printf("┃      请输入选择:        ┃");
		toxy(64,6);
	    scanf("%c",&m);  
    }  
    if((fp1=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
    {  
    	no_sql();
		return;  
    }    
    while(fscanf(fp1,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
    {    
         i++;
         n=n+1;
    }         
    if(m=='1')                                                 //模糊查询  
    {  
        char s[3];                                             //定义输入的文字所占的字节 /一个汉字占2个字节 外加一结尾符此处小心溢出  
        int i=0;  
        system("cls");  
		printf_ui("     学生成绩查询",10,"    请输入学生的姓:",12,1); 
        scanf("%s",s);	 
		printf_title(); 
        for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
        {  
  
          if(p[i].name[0]==s[0]&&p[i].name[1]==s[1])              //比较per[i].name与所输入的前俩个字符是否相同//  
            {  
                  
                printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
                printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
            }
        }  
    }  
       
    if(m=='2')                                               //姓名查询  
    {  
        system("cls");
        char s[20];  
        int i=0;  
        printf_ui("     学生成绩查询",10,"    请输入学生的姓名:",12,1);
        scanf("\t%s",s);
		printf_title();
		for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
    	{  

      		if((strcmp(p[i].name,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
        		{  
              
            		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
            		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        		}		
    	}
		i=0;    
        while(strcmp(p[i].name,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
        if(i==n)  
        {  
            no_sql();  
            return;  
        }  
	}   
    if(m=='3')                                                            //学号查询  
    {  
      	char s[15];  
    	int i=0;  
        toxy(45,8);
		printf_ui("     学生成绩查询",10,"    请输入学生的学号:",12,1);   
        scanf("\t%s",s);
		printf_title();
        for(i=0;i<n;i++)                                               //文件信息已经读取到数组中 此处进行循环用于下一语句的查找  
    	{  
      		if((strcmp(p[i].num,s))==0)              //比较per[i].name与所输入的前俩个字符是否相同//  
        		{                   
            		printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",p[i].term,p[i].classnum,p[i].name,p[i].num,p[i].chinese,p[i].en,p[i].math,p[i].history,p[i].physics,p[i].sum,p[i].average);  
            		printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        		}		
    	}
		i=0;    
        while(strcmp(p[i].num,s)!=0&&i<n)  i++;                              //比较per[i].name与所输入学号是否相同//                        
        if(i==n)  
        {  
            no_sql();  
            return;  
        }   
    }  
            fclose(fp1);
			toxy(50,18); 
            system("pause"); 
}  
                                                                           
void date()       //查询排名 
{  	 
	person per[200];
	FILE *fp;  
	struct person temp;                               //定义临时数组用于交换时存放数组信息用于后面的交换//  
	float sum,pass=60;                                         //总分  
	float s[200];  
	int i=0,n=0;  
	int j=0,k,t;  
	int term,flag,classnum,flagg; 
	char m; 
	system("cls"); 
	if((fp=fopen("studata.txt","r"))==NULL)                 //以2进制方式读取文件信息//  
  	{  
     	no_sql();
     	return;  
    }
    
 	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&per[i].term,&per[i].classnum,per[i].name,per[i].num,&per[i].chinese,&per[i].en,&per[i].math,&per[i].history,&per[i].physics,&per[i].sum,&per[i].average)!=EOF)
    {    
     	i++;
     	n=n+1;
    }
    fclose(fp);
    toxy(45,2);
	printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━┓");
	toxy(45,3);
	printf("┃                         ┃");
	toxy(45,4);
	printf("┃      学生成绩排名       ┃");
	toxy(45,5);
	printf("┃                         ┃");
	toxy(45,6);
	printf("┃      请输入选择:        ┃");
	toxy(45,7);
	printf("┃                         ┃");
	toxy(45,8);
	printf("┃   [ 1 ].语文            ┃");
	toxy(45,9);
	printf("┃                         ┃");
	toxy(45,10);
	printf("┃   [ 2 ].英语            ┃");
	toxy(45,11);
	printf("┃                         ┃");
	toxy(45,12);
	printf("┃   [ 3 ].数学            ┃");
	toxy(45,13);
	printf("┃                         ┃");
	toxy(45,14);
	printf("┃   [ 4 ].历史            ┃");
	toxy(45,15);
	printf("┃                         ┃");
	toxy(45,16);
	printf("┃   [ 5 ].物理            ┃");
	toxy(45,17);
	printf("┃                         ┃");
	toxy(45,18);
	printf("┃   [ 6 ].总分            ┃");
	toxy(45,19);
	printf("┃                         ┃");
	toxy(45,20);	
	printf("┃   [ 7 ].各科班级平均分  ┃");
	toxy(45,21);
	printf("┃                         ┃");
	toxy(45,22);	   
    printf("┃   [ 8 ].不及格同学      ┃"); 
    toxy(45,23);
	printf("┃                         ┃");
	toxy(45,24);	   
    printf("┃   [ 0 ].返回上级        ┃"); 
    toxy(45,25);
	printf("┃                         ┃");
    toxy(45,26);
	printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛");
	toxy(64,6); 
	scanf("%c",&m);    
    while(m!='0'&&m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7'&&m!='8')  
    {  
		toxy(45,6);
		printf("┃      请输入选择:        ┃");
		toxy(64,6); 
		scanf("%c",&m);   
    }	 
	if(m=='0') 
	{
		return; 
	}
 	read_sql(per,n);
 	printf_ui("     学生成绩排名",10,"请输入学年(格式20xx):",12,0); 
	scanf("%d",&term);
	printf_ui("     学生成绩排名",10,"      请输入班级:",12,0); 
	scanf("%d",&classnum);
 	system("cls");
 	for(i=0;i<n;i++)        //选择符合条件的班级 
 	{
 		if(per[i].term==term&&per[i].classnum==classnum)
 	{
 		per[flag]=per[i];
 		flag++; 		
	}
 	} 			  
	if(m=='2')  
  	{  
      	for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
      	{  
         	k=i;  
        	for(j=i+1;j<flag;j++)
        	{
        		if(per[j].en>per[k].en)                              //排序//比较大小//  
        		{
					k=j;
        		}
        	}
        	temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
      	}
		printf_title();  
        printf_data(per,flag);
		system("pause"); 
    }  	  
	if(m=='3')  
  	{  
  	  	for(int i=0;i<flag-1;i++)  
     	{  
          	k=i;  
       		for(j=i+1;j<flag;j++)  
        	if(per[j].math>per[k].math)  
          		k=j;  
        	temp=per[k];per[k]=per[i];per[i]=temp;  
      	}  
        printf_title();
        printf_data(per,flag);            
		system("pause"); 
    }
    if(m=='1')  
    {  
        for(int i=0;i<flag-1;i++)  
        {  
        	k=i;  
            for(j=i+1;j<flag;j++)  
            if(per[j].chinese>per[k].chinese)  
            k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
        }  
            printf_title();
        	printf_data(per,flag); 
			system("pause"); 
    } 
    if(m=='4')  
  	{  
    	for(int i=0;i<flag-1;i++)  
     	{  
          	k=i;  
       		for(j=i+1;j<flag;j++)  
        	if(per[j].history>per[k].history)  
          	k=j;  
        	temp=per[k];per[k]=per[i];per[i]=temp;  
      	}  
        printf_title();
        printf_data(per,flag);
		system("pause"); 
    }  
    if(m=='5')  
    {  
        for(int i=0;i<flag-1;i++)  
        {  
            k=i;  
           	for(j=i+1;j<flag;j++)  
            if(per[j].physics>per[k].physics)  
            k=j;  
            temp=per[k];per[k]=per[i];per[i]=temp;  
        }  
        printf_title();
        printf_data(per,flag);
		system("pause");  
    } 
    if(m=='6')  
    {  
		for(int i=0;i<flag-1;i++)                           //采用冒泡法进行排序//  
        {  
            k=i;  
            for(j=i+1;j<flag;j++)
            {
            	if(per[j].sum>per[k].sum)                              //排序//比较大小//  
            	{
					k=j;
            	}
            }
            temp=per[k];per[k]=per[i];per[i]=temp;                  //当符合条件时进行数据交换//  
        } 
        printf_title();
        printf_data(per,flag);
		system("pause");
    }  
	if(m=='7')                 //各科班级平均分  
    {  
       	for(i=0;i<flag;i++)
       	{
			s[0]=per[i].chinese+s[0]; 
			s[1]=per[i].en+s[1];
			s[2]=per[i].math+s[2];   
			s[3]=per[i].history+s[3];   
			s[4]=per[i].physics+s[4];  
		}		
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("     语文     英语     数学     历史     物理     \n");  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
        printf("     %.1f     %.1f     %.1f     %.1f     %.1f    \n",s[0]/flag,s[1]/flag,s[2]/flag,s[3]/flag,s[4]/flag);  
        printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");  
		system("pause");

    }
	      
	if(m=='8')
	{
		printf_title();
        for(int i=0;i<flag;i++)  
        {
        	if(per[i].chinese<pass||per[i].en<pass||per[i].math<pass||per[i].history<pass||per[i].physics<pass)
			{
            printf("    %d      %d     %s   %s      %.1f     %.1f     %.1f    %.1f    %.1f    %.1f    %.1f\n",per[i].term,per[i].classnum,per[i].name,per[i].num,per[i].chinese,per[i].en,per[i].math,per[i].history,per[i].physics,per[i].sum,per[i].average);  
            printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");        	
			}
		}
        system("pause");		
	}    
	    
		
}
     
void delet()     //数据删除 
{  
	person p[200];
	FILE *fp;  
	char s[10];  
	int i=0,n=0;  
  	if((fp=fopen("studata.txt","r"))==NULL)                  //以2进制方式读取文件信息//  
  	{  
     	no_sql(); 
     	return;  
   	} 
	while(fscanf(fp,"%d%d%s%s%f%f%f%f%f%f%f",&p[i].term,&p[i].classnum,p[i].name,p[i].num,&p[i].chinese,&p[i].en,&p[i].math,&p[i].history,&p[i].physics,&p[i].sum,&p[i].average)!=EOF)
    {    
         i++;
         n=n+1;
    } 
	fclose(fp);
	system("cls");
	printf_ui("     学生数据删除",10,"      请输入学号:",12,1); 
	scanf("%s",s);  
	i=0;
    while(strcmp(p[i].num,s)!=0&&i<n)
    {
         i++;
    }                           //进行比较 找到所需要的信息  
        if(i==n)  
         {  
            no_sql();
            return;  
         }  
    else
	{
	system("cls");  
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//读打开原文件123.txt
    ftp=fopen("tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //从原文件读取一行
    {
        if(strcmp(p[kk].num,s)!=0)//检验是要删除的行吗?
        {
            fprintf(ftp,"%d %d %s %s %.1f %.1f %.1f %.1f %.1f %.1f %.1f\n",p[kk].term,p[kk].classnum,p[kk].name,p[kk].num,p[kk].chinese,p[kk].en,p[kk].math,p[kk].history,p[kk].physics,p[kk].sum,p[kk].average);    //以2进制形式写入文件中//一次写入一个数组//  
        }
 
       kk++;    
    } 
    fclose(fin);
    fclose(ftp);
    remove("studata.txt");//删除原文件
    rename("tmp.txt","studata.txt");//将临时文件名改为原文件名
    printf_ui("      删除成功!",10,"      正在返回...",12,1); 
	Sleep(1500); 
	} 
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
     //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//  
                             //运用switch语句进行菜单选择//  
}
  
int main()  
{  	
	system("color 0F");
  	for(;;)                                                 //循环使用主界面直到遇到结束命令  
  	{   
    	switch(menu_select())                               // 函数的调用//  
      	{  
	  		case 1:              
          		add();  //学生记录添加 
          		break;  
      		case 2: 
          		scan();  //学生信息浏览
          		break;  
      		case 3:  
          		query();  //学生信息查询
          		break;  
      		case 4:  
          		date();  //数据计算  
         		break;  
      		case 5:  
           		delet();   //数据删除 
           		break;
			case 6:
				system_menu(); //系统菜单修改
				break;  
      		case 0:  
      			system("cls"); 
            	printf_ui("    感谢使用!",10,"    正在退出...",12,1); 
				Sleep(1000);
		        exit(0);  
      	}	  
  	}  
    system("cls");      
    return 0;
} 


  • 14
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hmm.

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值