精华内容
下载资源
问答
  • 如何提高小学生数学成绩.doc
  • 如何快速提高初中数学成绩.doc
  • 如何提高学生的数学成绩.pdf
  • 如何提高学生的数学成绩.docx
  • 提高小学数学成绩的有效方法.doc
  • 如何快速提高学生的数学成绩.doc
  • 那么,高中生如何才能快速提高高二数学成绩呢?请跟随老师来看一下! 推荐阅读:[高中数学习题精讲]函数的解析式解题思路和方法(文章) 高中数学辅导之高考数学秒杀向量巨难题型–四心问题(视频) 一、高中生怎么...

    数学对于很多高中生来说,是一大难题,学好高中数学很重要。特别是高二同学相对于高一来说,高二的数学知识更多也更难。那么,高中生如何才能快速提高高二数学成绩呢?请跟随老师来看一下!
    推荐阅读:[高中数学习题精讲]函数的解析式解题思路和方法(文章)
    高中数学辅导之高考数学秒杀向量巨难题型–四心问题(视频)
    一、高中生怎么提高数学成绩
    1、重视课前预习

    在这里插入图片描述
    2、定期重复巩固
    在这里插入图片描述
    3、背概念、公式、定理、图像
    在这里插入图片描述
    4、记例题
    在这里插入图片描述
    5、课后复习
    在这里插入图片描述
    二、高中生如何快速提高高二数学成绩
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    三、高中生如何提高高二数学成绩的方法
    1、提高听课效率
    在这里插入图片描述
    2、高中数学做到及时复习
    在这里插入图片描述
    好了,今天高分享就到这里了,高中生如何才能快速提高高二数学成绩根据以上三方面去做,需要高中数学视频或者习题可以私信或者留言给老师。

    展开全文
  • 快速提高小学数学成绩的方法 (2).doc
  • 好对提高小学数学成绩的几点做法.doc
  • 信息技术能够帮助学生 提高数学成绩吗 张景中 Zhang Jingzhong zjz101@ 2009-9-16 广州 提要 [1]对教育技术实际效果的质疑 [2]专家们对质疑的回应 [3]对具体问题做具体的分析 [4]教学中所用软件的三个层次 [5]数学...
  • 名师指导:提高高考数学成绩的两大途径.docx
  • 小学数学怎样提高成绩.doc
  • 很多高中生在学习高中数学感觉非常吃力,学好高中数学是高中生和家长最关心的问题,就是如何提高孩子的学习成绩,尤其是数学成绩。高中数学知识点之间的关联都是非常紧密的,只要有一个阶段掌握不好,往后的学习都会...

    很多高中生在学习高中数学感觉非常吃力,学好高中数学是高中生和家长最关心的问题,就是如何提高孩子的学习成绩,尤其是数学成绩。高中数学知识点之间的关联都是非常紧密的,只要有一个阶段掌握不好,往后的学习都会受到影响。

    推荐阅读:[高中数学辅导之高考数学秒杀向量巨难题型–四心问题](视频)
    高三学生及家长必看:数学高效提分知识分享
    一、怎么提高孩子数学成绩
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    二、学好数学的方法有哪些
    1、强化数学学习基础
    在这里插入图片描述
    2、掌握数学解题思路
    在这里插入图片描述
    3、注重养成数学思维
    在这里插入图片描述
    好了,今天分享就到这里了,如何学好高中数学 提高高中数学成绩秒杀技巧视频有需要的同学可以私聊或者留言给老师.

    展开全文
  • 《如何有效提高小学数学教学成绩》.doc
  • 《如何能有效提高小学数学教学成绩》.pdf
  • 精品教育教学资料
  • C语言学生成绩管理系统

    万次阅读 多人点赞 2019-11-07 14:49:58
    学生成绩管理系统(C语言)需求代码总结 大学正式上课的第一个月10.8~11.7,学到了很多东西,收获颇多,刚入校只会用现成的,只会调用各种函数,把封装好的东西拿来用。现在可以自己不抄别人,完全按照自己的思路写...

    学生成绩管理系统(C语言)

    大学正式上课的第一个月,学到了很多东西,收获颇多,刚入校只会用现成的,只会调用各种函数,把封装好的东西拿来用。现在可以自己不抄别人,完全按照自己的思路写一个这个入门的项目了,虽然还要bug没被发现,但是总还会慢慢改好的。写个博客记录一下…

    需求

    1.用C语言实现 “学生成绩管理系统”或自拟题目。
    2. 设计“学生成绩管理系统”的用户界面,系统启动进入后,只能通过界面菜单指令才能退出。
    3. “学生成绩管理系统”具有以下功能:
    (1) 系统启动后,弹出一个用户界面,能实现人机交互的功能。而且只能通过界面菜单命令实现各种功能(包括系统退出功能),可以设计欢迎词。
    (2) 成绩录入:录入信息包括班级、姓名、学号、五门课程成绩。
    (3) 计算平均成绩:计算每门课程的平均成绩和学生五门课程的平均成绩并存档。

    下面的功能必须是第(3)项功能完成以后才能进行。
    (4) 成绩输出:输出学生的信息和对应的原始成绩以及平均成绩;
    (5) 成绩排序(按平均成绩),输出排序后的学生信息以及对应的课程成绩和平均成绩。
    (6) 成绩查找:两种查找方法,一是按学号查找,二是按姓名查找。
    (7) 成绩修改:查找后修改成绩,修改后重新排序,并输出学生信息和对应课程成绩和平均成绩。
    (8) 成绩追加:增补遗漏的学生以及对应的信息和对应的课程成绩,并计算出平均成绩,增补以后重新排序,并输出新增学生信息和对应课程成绩和平均成绩。

    附加功能:
    (9) 删除成绩:删除不需要的学生对应的记录(包括姓名、学号、成绩等)。
    (10) 成绩分段:将学生成绩分段。
    (11) 文件存储:把学生信息和对应的课程成绩和平均成绩存入到文件中。
    (12) 文件输出:输出文件中的内容。
    (13) 文件导入:从文件中导入数据到成绩管理系统中,然后进行管理。

    代码

    6天赶完的项目存在许多bug,待慢慢发现再不断更改完善!

    #include <stdio.h>
    #include <windows.h> 
    #include <stdlib.h>
    #include <string.h>
    #pragma warning(disable : 4996)//关闭编译器报错
    struct score//为了清晰地区分成绩和学生信息,定义score结构体
    {
    	char ch[5], en[5], ma[5], se[5], pe[5];//语文,英语,数学,编程,体育
    	float aver;
    };
    struct student//定义结构体
    {
    	char name[30],id[30],clas[5];
    	struct score sco;//这样就可以student.sco.xxx了,看着爽
    };
    void Paint_Start();//绘制开始菜单
    void insert_One();//成绩导入
    void insert_File();//文件导入
    void cal_aver();//计算平均分
    void list();//显示全部成绩,列出来
    void sort();//排序,起泡法
    void find();//查找成绩,根据学号或者姓名
    void add();//添加条目
    void del();//删除成绩
    void savefile();//保存到文件,假保存,真效果
    void outfile();//输出文件里的成绩
    void edit();//更改成绩,查找出来,再进行修改
    void div();//成绩分段,分三段,我随意
    void end();//结束动画
    float staver(student stu);//这个函数计算单个学生的五科一起的平均分...(⊙﹏⊙)
    int ifnum(char item[]);//用来在各模块中输入数字时,判断是不是数字
    int main()
    {
    	system("color 02");//先打印个郑州轻工业大学图标纪念一下
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t            *  ***  ****\n");
    	printf("\t\t\t\t\t          *** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t          **** ******* ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	printf("\t\t\t\t\t      欢迎使用学生成绩管理系统\n");
    	printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t  ");
    	system("pause");
    	Paint_Start();//打印开始菜单,进入功能选择
    	return 0;
    } 
    void insert_One()
    {
    	system("cls");
    	printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t    注意:请输入对应的正确内容,否则记录将出现错误!\n\n\t\t\t\t\t\t  ");//提示一下用户
    	system("pause");
    	system("cls");
    	printf("*****************************************************成绩录入***********************************************************\n");
    	printf("依次键入班级、姓名、学号、语文成绩、数学成绩、英语成绩、体育成绩、专业课成绩,用一个空格隔开各数据,每一条输入完成后按回车键进行下一条输入。\n\t\t\t\t\t\t退出(输入'#'并回车)\n例如:\n1902 妙陈希 459113460230 99 60 87 81 93\n");
    	printf("在此输入:\n");
    	student stu;
    	char name[30],clas[5],id[30];//临时储存学生信息
    	char ch[5],ma[5],en[5],pe[5],se[5];//创建各变量临时储存成绩
    	int count = 1;
    	bool err;
    	FILE* fp;
    	fp = fopen("stu.db", "wb");
    	while (1)
    	{
    		int loc = 0,ifloc=0;
    		err = false;//看输入是不是有误的一个标志
    		memset(ch,0,5);//清空各数组所占内存的内容,都变成空,方便后续判断
    		memset(en,0,5);
    		memset(ma,0,5);
    		memset(pe,0,5);
    		memset(se,0,5);
    		memset(id,0,30);
    		memset(clas,0,5);
    		memset(name, 0, 30);//这样以后,所有元素都变成\0了
    		scanf("%s",clas);
    		if (clas[0] == '#') break;
    		scanf(" %s %s %s %s %s %s %s", name, id, ch, ma, en, pe, se);
    		fflush(stdin);
    
    		bool isclas = true;
    		for (int i = 0; clas[i] != '\0'; i++)
    			if (!(clas[i] >= '0' && clas[i] <= '9'))
    			{
    				printf("请检查班级输入是否正确,并重新输入!\n");
    				isclas = false;
    				err = true;
    				break;
    			}
    		if (isclas) strcpy(stu.clas, clas);
    
    		bool isname = true;
    		for (int i = 0; i <= 7; i++)
    		{
    			if (name[i] >= 32 && name[i] <= 127) isname = false;//仅判断是否是ASCII中的字符
    		}
    		if (name[8] == '\0' && isname == true)//一个中文字符占两个字节 
    		{
    			strcpy(stu.name, name);
    		}
    		else
    		{
    			printf("请检查姓名输入是否正确,并重新输入!\n");
    			err = true;
    		}
    
    		if (ifnum(id) && id[11] != '\0' && id[12] == '\0') strcpy(stu.id, id);
    		else
    		{
    			printf("请检查学号输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(ch) && ((ch[0] == '1' && ch[1] == '0' && ch[2] == '0') || (ch[2] == '\0' && ch[3] != '\0') || ch[2] == '\0')) strcpy(stu.sco.ch, ch);//成绩不能超过100,超过则执行else语句
    		else
    		{
    			printf("请检查语文成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(ma) && ((ma[0] == '1' && ma[1] == '0' && ma[2] == '0') || (ma[2] == '\0' && ma[3] != '\0') || ma[2] == '\0')) strcpy(stu.sco.ma, ma);
    		else
    		{
    			printf("请检查数学成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(en) && ((en[0] == '1' && en[1] == '0' && en[2] == '0') || (en[2] == '\0' && en[3] != '\0') || en[2] == '\0')) strcpy(stu.sco.en, en);
    		else
    		{
    			printf("请检查英语成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(pe) && ((pe[0] == '1' && pe[1] == '0' && pe[2] == '0') || (pe[2] == '\0' && pe[3] != '\0') || pe[2] == '\0')) strcpy(stu.sco.pe, pe);
    		else
    		{
    			printf("请检查体育成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(se) && ((se[0] == '1' && se[1] == '0' && se[2] == '0') || (se[2] == '\0' && se[3] != '\0') || se[2] == '\0')) strcpy(stu.sco.se, se);
    		else
    		{
    			printf("请检查专业课成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (err == false)
    		{
    			//此处写入磁盘文件
    			if (fp == NULL)
    			{
    				printf("文件打开失败!\n");
    				break;
    			}
    			if (fwrite(&stu,100, 1, fp) != 1)
    			{
    				printf("文件写入失败!\n");
    				break;
    			}
    		}
    
    	}
    	fclose(fp);
    	cal_aver();
    	Paint_Start();
    }
    void Paint_Start()
    {
    	system("cls");
    	printf("***********************************************************************************************************************\n");
    	printf("*\t\t\t\t\t\t 学生成绩管理系统\t\t\t\t\t\t      *\n");
    	printf("*\t\t1.录入成绩\t\t2.查看成绩\t\t3.成绩查找\t\t4.成绩修改\t\t      *\n");
    	printf("*\t\t5.成绩追加\t\t6.删除成绩\t\t7.成绩分段\t\t8.文件储存\t\t      *\n");
    	printf("*\t\t9.文件输出\t\t10.文件导入\t\t11.退出程序\t\t\t\t\t      *\n");
    	printf("***********************************************************************************************************************\n\t\t\t\t\t   若输入多个编号,则以第一个为准\n");
    	printf("执行编号:");
    	int num;//储存功能编号
    	int i=0;
    	scanf("%d",&num);//接收编号,准备判断需求
    	while (getchar() != '\n')continue;
    	switch (num)
    	{
    	case 1:insert_One();break;//成绩录入
    	case 2:list(); break;//列出全部成绩
    	case 3:find(); break;//查成绩
    	case 4:edit(); break;//更改成绩
    	case 5:add(); break;//数据库末尾添加成绩
    	case 6:del(); break;//删除条目
    	case 7:div(); break;//成绩分段0-59,60-79,80-100三段
    	case 8:savefile(); break;//保存文件,假的,但是没毛病啊
    	case 9:outfile(); break;//输出文件内容
    	case 10:insert_File(); break;//把文件内容导入数据库
    	case 11:end(); break;//啥都不干,退出
    	default:printf("请选择对应的序号!"); system("pause");Paint_Start();
    	}
    }
    void insert_File()//文件导入
    {
    	char dir[50] = "\0";//存放 导入的文件的绝对路径的 字符串变量
    	FILE* fp,*fpp;
    	student stu;
    	printf("输入文件的绝对路径(例如C:\\abc123.db):\n");
    	scanf("%s", dir);//输入绝对路径
    	while (getchar() != '\n')continue;//清空输入缓冲区,免得万一有东西没输完搞得被后面的读到了
    	if ((fpp = fopen("stu.db", "ab")) == NULL)//以二进制追加方式打开数据库文件
    	{
    		printf("数据库打开失败!\n");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    	if ((fp = fopen(dir, "rb"))==NULL)//以二进制只读方式打开要导入的文件
    	{
    		printf("所选文件打开失败!");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    	for (; fgetc(fp) != EOF;)//fp的文件位置往后读一字节看是不是读到EOF了,不是就再退一字节
    	{
    		fseek(fp,-1L,1);//fp位置退一字节
    		fread(&stu, 100, 1, fp);
    		fwrite(&stu, 100, 1, fpp);
    	}
    	printf("导入完成!");
    	system("pause");
    	fclose(fpp);//关闭fp和fpp
    	fclose(fp);
    	Paint_Start();
    }
    void cal_aver()//计算平均分
    {
    	student stu;
    	float total;//单科所有学生总分
    	FILE* fp;
    	FILE* fpp;
    	if ((fpp = fopen("stuavr.db", "w")) == NULL)//stuavr.db储存各科平均分,以文本模式打开(创建/覆盖),保证每一次计算平均成绩都是新得到的结果
    	{
    		printf("平均成绩文件写入失败!\n");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    
    	if ((fp = fopen("stu.db", "rb+")) == NULL)//二进制方式可读可写地打开本地的数据库文件
    	{
    		printf("文件打开失败\n!");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    
    	total = 0;
    	int i = 0;//一共i个人,也就是i条数据
    	for (;fgetc(fp)!=EOF;i++)//一个一个读计算语文总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, 100, 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			Paint_Start(); fclose(fp); fclose(fpp); return;
    		}
    		if (stu.sco.ch[2] == '0') total = total + 100;//判断输入的成绩是100分?还是两位数的?还是个位数的?再分别作出结果的计算
    		else if (stu.sco.ch[1] != '\0')
    			total = total + (float)((int)stu.sco.ch[0] - 48) * 10 + (int)stu.sco.ch[1] - 48;//因为读取是以字符串形式读的,所以还得用ASCII码转整型再来计算
    		else total = total + (float)((int)stu.sco.ch[0] - 48);
    	}
    	fprintf(fpp,"%f ",total/i);//结果写入到的stuavr.db里
    	
    	i = 0;
    	total = 0;
    	rewind(fp);//fp文件位置移到开头,清除错误信息
    	for (; fgetc(fp) != EOF;i++)//数学总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			Paint_Start(); fclose(fp); fclose(fpp); return;
    		}
    		if (stu.sco.ma[2] == '0') total = total + 100;
    		else if (stu.sco.ma[1] != '\0')
    			total = total + (float)((int)stu.sco.ma[0] - 48) * 10 + (int)stu.sco.ma[1] - 48;
    		else total = total + (float)((int)stu.sco.ma[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	total = 0;
    	rewind(fp);
    	for (; fgetc(fp) != EOF;i++)//英语总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			Paint_Start(); fclose(fp); fclose(fpp); return;
    		}
    		if (stu.sco.en[2] == '0') total = total + 100;
    		else if (stu.sco.en[1] != '\0')
    			total = total + (float)((int)stu.sco.en[0] - 48) * 10 + (int)stu.sco.en[1] - 48;
    		else total = total + (float)((int)stu.sco.en[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	rewind(fp);
    	total = 0;
    	for (; fgetc(fp) != EOF;i++)//体育总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			Paint_Start(); fclose(fp); fclose(fpp); return;
    		}
    		if (stu.sco.pe[2] == '0') total = total + 100;
    		else if (stu.sco.pe[1] != '\0')
    			total = total + (float)((int)stu.sco.pe[0] - 48) * 10 + (int)stu.sco.pe[1] - 48;
    		else total = total + (float)((int)stu.sco.pe[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	rewind(fp);
    	total = 0;
    	for (; fgetc(fp) != EOF;i++)//编程总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			Paint_Start(); fclose(fp); fclose(fpp); return;
    		}
    		if (stu.sco.se[2] == '0') total = total + 100;
    		else if (stu.sco.se[1] != '\0')
    			total = total + (float)((int)stu.sco.se[0] - 48) * 10 + (int)stu.sco.se[1] - 48;
    		else total = total + (float)((int)stu.sco.se[0] - 48);
    	}
    	fprintf(fpp, "%f", total / i);
    	fclose(fpp);//各总平均分写入完成,关闭fpp
    
    	rewind(fp);//文件位置移到开头,计算有多少条数据
    	int j;
    	for (j = 0; fgetc(fp) != EOF; j++)
    	{
    		fseek(fp,-1L,1);
    		fseek(fp, 100L, 1);
    	}
    	rewind(fp);//文件位置移到开头,准备逐个学生写入平均分
    	for (int i=0;i<j;i++)//逐个写入每个学生的平均分
    	{
    		fseek(fp,i*100,0);//参考随机读写那一章节,文件位置移到要写的地方开头,再进行读写
    		if (fread(&stu,100,1,fp) != 1)
    		{
    			printf("读取失败!\n");
    			Paint_Start();
    			fclose(fp);
    			return;
    		}
    		float ch,ma,en,pe,se;
    		if (stu.sco.ch[2] == '0') ch = 100;
    		else if (stu.sco.ch[1] !='\0')
    			ch = ((int)stu.sco.ch[0] - 48) * 10 + (int)stu.sco.ch[1] - 48;
    		else ch = (int)stu.sco.ch[0] - 48;
    		if (stu.sco.ma[2] == '0') ma = 100;
    		else if (stu.sco.ma[1] != '\0')
    			ma = ((int)stu.sco.ma[0] - 48) * 10 + (int)stu.sco.ma[1] - 48;
    		else ma = (int)stu.sco.ma[0] - 48;
    		if (stu.sco.en[2] == '0') en = 100;
    		else if (stu.sco.en[1] != '\0')
    			en = ((int)stu.sco.en[0] - 48) * 10 + (int)stu.sco.en[1] - 48;
    		else en = (int)stu.sco.en[0] - 48;
    		if (stu.sco.pe[2] == '0') pe = 100;
    		else if (stu.sco.pe[1] != '\0')
    			pe = ((int)stu.sco.pe[0] - 48) * 10 + (int)stu.sco.pe[1] - 48;
    		else pe = (int)stu.sco.pe[0] - 48;
    		if (stu.sco.se[2] == '0') se = 100;
    		else if (stu.sco.ch[1] != '\0')
    			se = ((int)stu.sco.se[0] - 48) * 10 + (int)stu.sco.se[1] - 48;
    		else se = (int)stu.sco.se[0] - 48;
    		stu.sco.aver = (ch + ma + en + pe + se) / 5;
    		fseek(fp, i * 100, 0);
    		if (fwrite(&stu,100, 1, fp) != 1)
    		{
    			printf("文件写入错误!\n");
    			Paint_Start();break;
    		}
    	}
    	fclose(fp);
    }
    void list()//列出全部成绩
    {
    	cal_aver();
    	sort();
    	FILE* fp,* fpp;
    	student stu;
    	fp = fopen("stu.db", "rb");
    	fpp = fopen("stuavr.db","r");//总平均成绩储存的文件
    	system("cls");
    	printf("*****************************************************查看成绩***********************************************************\n");
    	printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n","班级","姓名","学号","语文","数学","英语","体育","专业","平均分");
    	if (fp == NULL)//懒得判断fpp是不是NULL了
    	{
    		printf("数据文件打开失败!\n");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    	else
    	{
    		for (;fgetc(fp)!=EOF;)//还是那方法,读一个退一个
    		{
    			fseek(fp,-1L,SEEK_CUR);
    			fread(&stu, sizeof(student), 1, fp);
    			printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se,stu.sco.aver);
    		}
    		fclose(fp);
    	}
    	float ch, ma, en, pe, se;
    	fscanf(fpp,"%f%f%f%f%f",&ch,&ma,&en,&pe,&se);//把平均成绩都从文件里读出来
    	printf("\n语文平均分:%.1f\t\t数学平均分:%.1f\t\t英语平均分:%.1f\n体育平均分:%.1f\t\t专业平均分:%.1f\n",ch,ma,en,pe,se);
    	fclose(fpp);
    	system("pause");
    	Paint_Start();
    }
    void sort()//起泡法? 
    {
    	student temp;
    	student* stu = (student*)malloc(100*200);//暂时只能容纳200人,直接student stu[200]会栈溢出,所以这样放到堆里,就欧了
    	FILE* fp;
    	int i;//起泡法排序用的
    	fp = fopen("stu.db","rb+");
    	if (fp == NULL)
    	{
    		printf("文件打开失败!\n");
    		system("pause");
    		return;
    	}
    	for (i=0; fgetc(fp)!=EOF;i++)
    	{
    		fseek(fp,-1L,1);
    		if (fread(&stu[i], 100, 1, fp) != 1)
    		{
    			printf("数据读取失败!\n");
    			fclose(fp);
    			Paint_Start();
    			return;
    		}
    	}
    	for (int j = 0; j < i - 1; j++)//起泡法排序
    	{
    		for (int k = 0; k < i - 1 - j; k++)
    		{
    			if (stu[k].sco.aver < stu[k + 1].sco.aver)
    			{
    				temp = stu[k + 1];
    				stu[k + 1] = stu[k];
    				stu[k] = temp;
    			}
    		}
    	}
    	rewind(fp);
    	for (int j = 0; j < i; j++)
    	{
    		if (fwrite(&stu[j], 100, 1, fp)!=1)
    		{
    			printf("排序失败!\n");
    			system("pause");
    			fclose(fp);
    			Paint_Start();
    			return;
    		}
    	}
    	free(stu);//记得要释放刚刚申请的内存
    	fclose(fp);
    }
    void find()//查找成绩
    {
    	cal_aver();
    	student stu;
    	int num;
    	char item[30]="\0";//用于储存姓名或者学号 跟数据库条目对比
    	FILE* fp;
    	printf("请选择查找方式,通过学号(输入1并回车),通过姓名(输入2并回车):\n");
    	scanf("%d",&num);//选择查找方式
    	if (num == 1)
    	{
    		printf("\t\t\t\t\t\t<键入'#'并回车退出>\n");
    		fp = fopen("stu.db","rb+");
    		if(fp==NULL)
    		{
    			printf("数据库打开失败!\n");
    			system("pause");
    			Paint_Start();
    			return;
    		}
    		int exist;
    		while (1)
    		{
    			exist = 0;
    			printf("学号:");
    			scanf("%s",item);
    			while (getchar() != '\n')continue;
    			if (item[0] == '#')//#则退出
    			{
    				fclose(fp);
    				Paint_Start();
    				return;
    			}
    			while (fgetc(fp)!=EOF)//遍历
    			{
    				fseek(fp,-1L,1);
    				fread(&stu,100,1,fp);
    				if (strcmp(stu.id, item) == 0)//找到相同项就打印出来
    				{
    					exist = 1;
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    					//break;
    				}
    			}
    			if (exist == 0) printf("查无此人!\n");
    			rewind(fp);//关键!!
    		}
    		
    	}
    	else
    	{
    		if (num == 2)
    		{
    			fp = fopen("stu.db", "rb");
    			if (fp == NULL)
    			{
    				printf("数据库打开失败!\n");
    				system("pause");
    				Paint_Start();
    				return;
    			}
    			int exist;
    			printf("\t\t\t\t\t\t<键入'#'并回车退出>\n");
    			while (1)
    			{
    				exist = 0;
    				printf("姓名:");
    				scanf("%s",item);
    				while (getchar() != '\n')continue;
    				if (item[0] == '#')//#则退出
    				{
    					fclose(fp);
    					Paint_Start();
    					return;
    				}
    				while (fgetc(fp)!=EOF)
    				{
    					fseek(fp,-1L,1);
    					fread(&stu,100,1,fp);
    					if (strcmp(stu.name, item) == 0)
    					{
    						exist = 1;
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    						//break;
    					}
    				}
    				if (exist == 0) printf("查无此人!\n");
    				rewind(fp);//这个很关键!!
    			}
    		}
    		else
    		{
    			printf("二选一噢~\n");//如果既没输1也没输2就打印它
    			system("pause");
    			Paint_Start();
    		}
    	}
    	
    }
    void del()//删除成绩 
    {
    	FILE* fp,*fpp;
    	student stu;
    	char id[30]="\0";
    	int i;
    	printf("**********************************************输入'#'并回车可退出此功能************************************************\n");
    	while (1)
    	{
    		fpp = fopen("stutemp.db", "wb");//临时新建的文件,用于储存删除一个人后所以人的数据,然后把他变成stu.db,把原来的stu.db删除,起到删除一个人数据而不留空的目的
    		fclose(fpp);
    		if ((fp = fopen("stu.db", "rb+")) == NULL)
    		{
    			printf("文件打开失败!\n");
    			system("pause");
    			Paint_Start();
    			return;
    		}
    		if ((fpp = fopen("stutemp.db", "rb+"))==NULL)
    		{
    			printf("临时文件创建失败!\n");
    			system("pause");
    			return;
    		}
    		printf("输入学号:");//姓名会重,学号不会重		//先查找再删除
    		scanf("%s", id);
    		while (getchar() != '\n')continue;
    		if (id[0] == '#')break;
    		int done=0;
    		for (i=1;fgetc(fp)!=EOF;i++)//与id相同的第i个数据
    		{
    			fseek(fp,-1L,1);
    			fread(&stu,100,1,fp);
    			if (strcmp(id, stu.id) == 0)
    			{
    				done = 1;
    				break;
    			}
    		}
    		rewind(fp);
    		rewind(fpp);
    		for (int j=1;fgetc(fp)!=EOF;j++)//把stu里的每一条数据,除了i标记的那条(也就是要删除的那条),都写入临时文件
    		{
    			fseek(fp, -1L, 1);
    			if (j == i)
    			{
    				fseek(fp, 100L, 1);
    				if (fgetc(fp) == EOF)break;
    				else fseek(fp,-1L,1);
    			}
    			fread(&stu,100,1,fp);
    			if (fwrite(&stu, 100, 1, fpp) != 1)
    			{
    				printf("写入临时文件失败!\n");
    				done = 0;
    			}
    		}
    		if (done == 1)printf("已删除!\n");
    		else printf("删除失败!\n");
    		fclose(fpp);
    		fclose(fp);
    		system("del stu.db");//命令提示符多方便
    		system("rename stutemp.db stu.db");//删了stu.db拿stutemp.db充当stu.db
    	}
    	fclose(fpp);
    	fclose(fp);
    	Paint_Start();
    } 
    void div()//成绩分段
    {
    	system("cls");
    	printf("******************************************************成绩分段**********************************************************\n");
    	printf("根据平均成绩可将学生分为A,B,C三个档次:\n");
    	printf("\t\t\t\t\t\t      ***A***\n\n");
    	FILE* fp;
    	student stu;
    	if ((fp = fopen("stu.db", "rb")) == NULL)
    	{
    		printf("文件打开失败!\n");
    		return;
    	}
    	printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    	for (;fgetc(fp)!=EOF;)//一条条判断是不是在某范围内,在,则打印
    	{
    		fseek(fp,-1L,1);
    		fread(&stu,100,1,fp);
    		if (stu.sco.aver >= 80)
    			printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    	}
    	rewind(fp);
    	printf("\n\n\t\t\t\t\t\t       **B**\n\n");
    	printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    	for (; fgetc(fp) != EOF;)
    	{
    		fseek(fp, -1L, 1);
    		fread(&stu, 100, 1, fp);
    		if (stu.sco.aver < 80&&stu.sco.aver>=60)
    			printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    	}
    	rewind(fp);
    	printf("\n\n\t\t\t\t\t\t        *C*\n\n");
    	printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    	for (; fgetc(fp) != EOF;)
    	{
    		fseek(fp, -1L, 1);
    		fread(&stu, 100, 1, fp);
    		if (stu.sco.aver < 60)
    			printf("\t\t\t   %-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    	}
    	fclose(fp);
    	system("pause");
    	Paint_Start();
    	return;
    }
    void outfile()//输出文件内容 
    {
    	char dir[50]="\0";
    	float total;
    	FILE* fp, * fpp;
    	student stu;
    	printf("输入文件的绝对路径(例如C:\\aaa.db):\n");
    	scanf("%s", dir);
    	while (getchar() != '\n')continue;
    
    	if ((fpp = fopen("avrtemp.db", "w")) == NULL)
    	{
    		printf("平均成绩文件打开失败!\n");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    
    	if ((fp = fopen(dir, "rb")) == NULL)
    	{
    		printf("文件打开失败!");
    		system("pause");
    		Paint_Start();
    		return;
    	}
    
    	total = 0;
    	int i = 0;
    	for (; fgetc(fp) != EOF; i++)//一个一个读计算语文总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, 100, 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			break;
    		}
    		if (stu.sco.ch[2] == '0') total = total + 100;
    		else if (stu.sco.ch[1] != '\0')
    			total = total + (float)((int)stu.sco.ch[0] - 48) * 10 + (int)stu.sco.ch[1] - 48;
    		else total = total + (float)((int)stu.sco.ch[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	total = 0;
    	rewind(fp);
    	for (; fgetc(fp) != EOF; i++)//数学总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			break;
    		}
    		if (stu.sco.ma[2] == '0') total = total + 100;
    		else if (stu.sco.ma[1] != '\0')
    			total = total + (float)((int)stu.sco.ma[0] - 48) * 10 + (int)stu.sco.ma[1] - 48;
    		else total = total + (float)((int)stu.sco.ma[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	total = 0;
    	rewind(fp);
    	for (; fgetc(fp) != EOF; i++)//英语总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			break;
    		}
    		if (stu.sco.en[2] == '0') total = total + 100;
    		else if (stu.sco.en[1] != '\0')
    			total = total + (float)((int)stu.sco.en[0] - 48) * 10 + (int)stu.sco.en[1] - 48;
    		else total = total + (float)((int)stu.sco.en[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	rewind(fp);
    	total = 0;
    	for (; fgetc(fp) != EOF; i++)//体育总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			break;
    		}
    		if (stu.sco.pe[2] == '0') total = total + 100;
    		else if (stu.sco.pe[1] != '\0')
    			total = total + (float)((int)stu.sco.pe[0] - 48) * 10 + (int)stu.sco.pe[1] - 48;
    		else total = total + (float)((int)stu.sco.pe[0] - 48);
    	}
    	fprintf(fpp, "%f ", total / i);
    
    	i = 0;
    	rewind(fp);
    	total = 0;
    	for (; fgetc(fp) != EOF; i++)//编程总平均分
    	{
    		fseek(fp, -1L, 1);
    		if (fread(&stu, sizeof(student), 1, fp) != 1)
    		{
    			printf("文件读取失败!\n");
    			break;
    		}
    		if (stu.sco.se[2] == '0') total = total + 100;
    		else if (stu.sco.se[1] != '\0')
    			total = total + (float)((int)stu.sco.se[0] - 48) * 10 + (int)stu.sco.se[1] - 48;
    		else total = total + (float)((int)stu.sco.se[0] - 48);
    	}
    	fprintf(fpp, "%f", total / i);
    
    	system("cls");
    	printf("*****************************************************文件输出***********************************************************\n");
    	printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    	rewind(fp);
    	rewind(fpp);
    	for (; fgetc(fp) != EOF;)
    	{
    		fseek(fp, -1L, SEEK_CUR);
    		fread(&stu, sizeof(student), 1, fp);
    		printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    	}
    	fclose(fp);
    	float ch, ma, en, pe, se;
    	fclose(fpp);
    	fpp = fopen("avrtemp.db","r");
    	fscanf(fpp,"%f%f%f%f%f", &ch, &ma, &en, &pe, &se);
    	printf("\n语文平均分:%.1f\t\t数学平均分:%.1f\t\t英语平均分:%.1f\n体育平均分:%.1f\t\t专业平均分:%.1f\n", ch, ma, en, pe, se);
    	fclose(fpp);
    	system("pause");
    	Paint_Start();
    }
    void savefile()//文件储存
    {
    	printf("文件stu.db已储存到源程序根目录!");
    	system("pause");
    	Paint_Start();
    }
    void add()//追加,在文件末尾
    {
    	system("cls");
    	printf("*****************************************************成绩追加***********************************************************\n");
    	printf("依次键入班级、姓名、学号、语文成绩、数学成绩、英语成绩、体育成绩、专业课成绩,用一个空格隔开各数据,每一条输入完成后按回车键进行下一条输入。\n\t\t\t\t\t\t退出(输入'#'并回车)\n例如:\n1902 苗陈茜 459113460230 99 60 87 81 93\n");
    	student stu;
    	char name[30], clas[5], id[30];
    	char ch[5], ma[5], en[5], pe[5], se[5];
    	int count = 1;
    	bool err;
    	FILE* fp;
    	fp = fopen("stu.db", "ab");
    	if (fp == NULL)
    	{
    		printf("文件打开失败!\n");
    		return;
    	}
    	int c = 0;//这里的c其实就是count,用于计数,写了几条
    	while (1)
    	{
    		err = false;
    		memset(ch, 0, 5);
    		memset(en, 0, 5);
    		memset(ma, 0, 5);
    		memset(pe, 0, 5);
    		memset(se, 0, 5);
    		memset(id, 0, 30);
    		memset(clas, 0, 5);
    		memset(name, 0, 30);//这样以后,所有元素都变成\0了
    		printf("输入:\n");
    		scanf("%s", clas);
    		if (clas[0] == '#') break;
    		scanf(" %s %s %s %s %s %s %s", name, id, ch, ma, en, pe, se);
    		fflush(stdin);
    
    		bool isclas = true;
    		for (int i = 0; clas[i] != '\0'; i++)
    			if (!(clas[i] >= '0' && clas[i] <= '9'))
    			{
    				printf("请检查班级输入是否正确!\n");
    				isclas = false;
    				err = true;
    				break;
    			}
    		if (isclas) strcpy(stu.clas, clas);
    
    		bool isname = true;
    		for (int i = 0; i <= 7; i++)
    		{
    			if (name[i] >= 32 && name[i] <= 127) isname = false;//仅判断是否是ASCII中的字符
    		}
    		if (name[8] == '\0' && isname == true)//一个中文字符占两个字节 
    		{
    			strcpy(stu.name, name);
    		}
    		else
    		{
    			printf("请检查姓名输入是否正确!\n");
    			err = true;
    		}
    
    		if (ifnum(id) && id[11] != '\0' && id[12] == '\0') strcpy(stu.id, id);
    		else
    		{
    			printf("请检查学号输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(ch) && ((ch[0] == '1' && ch[1] == '0' && ch[2] == '0') || (ch[2] == '\0' && ch[3] != '\0') || ch[2] == '\0')) strcpy(stu.sco.ch, ch);//成绩不能超过100,超过则执行else语句
    		else
    		{
    			printf("请检查语文成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(ma) && ((ma[0] == '1' && ma[1] == '0' && ma[2] == '0') || (ma[2] == '\0' && ma[3] != '\0') || ma[2] == '\0')) strcpy(stu.sco.ma, ma);
    		else
    		{
    			printf("请检查数学成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(en) && ((en[0] == '1' && en[1] == '0' && en[2] == '0') || (en[2] == '\0' && en[3] != '\0') || en[2] == '\0')) strcpy(stu.sco.en, en);
    		else
    		{
    			printf("请检查英语成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(pe) && ((pe[0] == '1' && pe[1] == '0' && pe[2] == '0') || (pe[2] == '\0' && pe[3] != '\0') || pe[2] == '\0')) strcpy(stu.sco.pe, pe);
    		else
    		{
    			printf("请检查体育成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (ifnum(se) && ((se[0] == '1' && se[1] == '0' && se[2] == '0') || (se[2] == '\0' && se[3] != '\0') || se[2] == '\0')) strcpy(stu.sco.se, se);
    		else
    		{
    			printf("请检查专业课成绩输入是否正确,并重新输入!\n");
    			err = true;
    		}
    		if (err == false)
    		{
    			//此处写入磁盘文件
    			if (fp == NULL)
    			{
    				printf("文件打开失败!\n");
    				break;
    			}
    			if (fwrite(&stu, 100, 1, fp) != 1)
    			{
    				printf("文件写入失败!\n");
    				break;
    			}
    			c++;
    		}
    	}
    	fclose(fp);
    	cal_aver();//追加写入完,计算平均成绩
    	fp=fopen("stu.db","rb");//打开
    	fseek(fp,(long)(-c*100),SEEK_END);//从末尾往前数,数count个stu字节,就是刚输入的所有学生数据的起始位置,一次读100个输出到屏幕。
    	if (err == false)
    	{
    		printf("\n新增学生信息:\n");
    		printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    		for (int i = 0; i < c; i++)
    		{
    			fread(&stu,100,1,fp);
    			printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    		}
    	}
    	fclose(fp);
    	printf("\n成绩已排序,请在功能2中查看!");
    	system("pause");
    	Paint_Start();
    }
    void edit()//先查找,再编辑
    {
    	student stu;
    	int num;
    	int exist;
    	char item[30] = "\0";
    	FILE* fp;
    	printf("请选择查找方式,通过学号(输入1并回车),通过姓名(输入2并回车):\n");
    	scanf("%d", &num);
    	while (getchar() != '\n')continue;
    	if (num == 1)
    	{
    		printf("\t\t\t\t\t\t<键入'#'并回车退出>\n");
    		fp = fopen("stu.db", "rb+");
    		if (fp == NULL)
    		{
    			printf("数据库打开失败!\n");
    			system("pause");
    			Paint_Start();
    			return;
    		}
    		while (1)
    		{
    			exist = 0;
    			printf("学号:");
    			scanf("%s", item);
    			while (getchar() != '\n')continue;
    			if (item[0] == '#')
    			{
    				fclose(fp);
    				Paint_Start();
    				return;
    			}
    			while (fgetc(fp) != EOF)
    			{
    				fseek(fp, -1L, 1);
    				fread(&stu, 100, 1, fp);//先读取,再一个个比较,直到读到底都没有一样的就直接结束了,或者读到一样的就输出到屏幕,然后开始读取学生信息和成绩,输入成绩,仅(替换)录入成绩
    				if (strcmp(stu.id, item) == 0)
    				{
    					exist = 1;
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    					printf("请输入新成绩(语、数、英、体育、专业,用一个空格隔开):\n");
    					char ch[5]="\0", ma[5]="\0", en[5]="\0", pe[5]="\0", se[5]="\0";
    					scanf("%s %s %s %s %s",ch,ma,en,pe,se);
    					while (getchar() != '\n')continue;
    					if (ifnum(ch) && ((ch[0] == '1' && ch[1] == '0' && ch[2] == '0') || (ch[2] == '\0' && ch[3] != '\0') || ch[2] == '\0')) strcpy(stu.sco.ch, ch);//成绩不能超过100,超过则执行else语句
    					else
    					{
    						printf("请检查语文成绩输入是否正确,并重新输入!\n");
    					}
    					if (ifnum(ma) && ((ma[0] == '1' && ma[1] == '0' && ma[2] == '0') || (ma[2] == '\0' && ma[3] != '\0') || ma[2] == '\0')) strcpy(stu.sco.ma, ma);
    					else
    					{
    						printf("请检查数学成绩输入是否正确,并重新输入!\n");
    					}
    					if (ifnum(en) && ((en[0] == '1' && en[1] == '0' && en[2] == '0') || (en[2] == '\0' && en[3] != '\0') || en[2] == '\0')) strcpy(stu.sco.en, en);
    					else
    					{
    						printf("请检查英语成绩输入是否正确,并重新输入!\n");
    					}
    					if (ifnum(pe) && ((pe[0] == '1' && pe[1] == '0' && pe[2] == '0') || (pe[2] == '\0' && pe[3] != '\0') || pe[2] == '\0')) strcpy(stu.sco.pe, pe);
    					else
    					{
    						printf("请检查体育成绩输入是否正确,并重新输入!\n");
    					}
    					if (ifnum(se) && ((se[0] == '1' && se[1] == '0' && se[2] == '0') || (se[2] == '\0' && se[3] != '\0') || se[2] == '\0')) strcpy(stu.sco.se, se);
    					else
    					{
    						printf("请检查专业课成绩输入是否正确,并重新输入!\n");
    					}
    					fseek(fp,-100L,1);//读取完就要退回100字节再进行写入
    					fwrite(&stu,100,1,fp);
    					printf("修改结果:\n");
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    					printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, staver(stu));
    					break;
    				}
    				if (exist == 0) printf("查无此人!\n");
    			}
    			rewind(fp);
    		}
    	}
    	else
    	{
    		if (num == 2)
    		{
    			fp = fopen("stu.db", "rb+");
    			if (fp == NULL)
    			{
    				printf("数据库打开失败!\n");
    				system("pause");
    				Paint_Start();
    				return;
    			}
    			printf("\t\t\t\t\t\t<键入'#'并回车退出>\n");
    			while (1)
    			{
    				exist = 0;
    				printf("姓名:");
    				scanf("%s", item);
    				while (getchar() != '\n')continue;
    				if (item[0] == '#')
    				{
    					fclose(fp);
    					Paint_Start();
    					return;
    				}
    				while (fgetc(fp) != EOF)
    				{
    					fseek(fp, -1L, 1);
    					fread(&stu, 100, 1, fp);
    					if (strcmp(stu.name, item) == 0)
    					{
    						exist = 1;
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, stu.sco.aver);
    						printf("请输入新成绩(语、数、英、体育、专业,用一个空格隔开):\n");
    						char ch[5] = "\0", ma[5] = "\0", en[5] = "\0", pe[5] = "\0", se[5] = "\0";
    						scanf("%s %s %s %s %s", ch, ma, en, pe, se);
    						while (getchar() != '\n')continue;
    						if (ifnum(ch) && ((ch[0] == '1' && ch[1] == '0' && ch[2] == '0') || (ch[2] == '\0' && ch[3] != '\0') || ch[2] == '\0')) strcpy(stu.sco.ch, ch);//成绩不能超过100,超过则执行else语句
    						else
    						{
    							printf("请检查语文成绩输入是否正确,并重新输入!\n");
    						}
    						if (ifnum(ma) && ((ma[0] == '1' && ma[1] == '0' && ma[2] == '0') || (ma[2] == '\0' && ma[3] != '\0') || ma[2] == '\0')) strcpy(stu.sco.ma, ma);
    						else
    						{
    							printf("请检查数学成绩输入是否正确,并重新输入!\n");
    						}
    						if (ifnum(en) && ((en[0] == '1' && en[1] == '0' && en[2] == '0') || (en[2] == '\0' && en[3] != '\0') || en[2] == '\0')) strcpy(stu.sco.en, en);
    						else
    						{
    							printf("请检查英语成绩输入是否正确,并重新输入!\n");
    						}
    						if (ifnum(pe) && ((pe[0] == '1' && pe[1] == '0' && pe[2] == '0') || (pe[2] == '\0' && pe[3] != '\0') || pe[2] == '\0')) strcpy(stu.sco.pe, pe);
    						else
    						{
    							printf("请检查体育成绩输入是否正确,并重新输入!\n");
    						}
    						if (ifnum(se) && ((se[0] == '1' && se[1] == '0' && se[2] == '0') || (se[2] == '\0' && se[3] != '\0') || se[2] == '\0')) strcpy(stu.sco.se, se);
    						else
    						{
    							printf("请检查专业课成绩输入是否正确,并重新输入!\n");
    						}
    						fseek(fp, -100L, 1);
    						fwrite(&stu, 100, 1, fp);
    						printf("修改结果:\n");
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5s\n", "班级", "姓名", "学号", "语文", "数学", "英语", "体育", "专业", "平均分");
    						printf("%-5s%-10s%-15s%-5s%-5s%-5s%-5s%-8s%-5.1f\n", stu.clas, stu.name, stu.id, stu.sco.ch, stu.sco.ma, stu.sco.en, stu.sco.pe, stu.sco.se, staver(stu));
    						break;
    					}
    					if (exist == 0) printf("查无此人!\n");
    				}
    				rewind(fp);
    			}
    		}
    		else
    		{
    			printf("二选一噢~\n");
    			system("pause");
    			Paint_Start();
    			return;
    		}
    	}
    }
    int ifnum(char item[])//数字字符串判断,正确返回1,否则0
    {
    	bool isnum = true;
    	for (int i = 0; item[i] != '\0'; i++)
    	{
    		if (!(item[i] >= '0' && item[i] <= '9'))
    		{
    			isnum = false;
    			return 0;
    			break;
    		}
    	}
    	if(isnum) return 1;
    }
    float staver(student stu)//计算单条平均分并返回结果
    {
    	float ch, ma, en, pe, se;
    	if (stu.sco.ch[2] == '0') ch = 100;
    	else if (stu.sco.ch[1] != '\0')
    		ch = ((int)stu.sco.ch[0] - 48) * 10 + (int)stu.sco.ch[1] - 48;
    	else ch = (int)stu.sco.ch[0] - 48;
    	if (stu.sco.ma[2] == '0') ma = 100;
    	else if (stu.sco.ma[1] != '\0')
    		ma = ((int)stu.sco.ma[0] - 48) * 10 + (int)stu.sco.ma[1] - 48;
    	else ma = (int)stu.sco.ma[0] - 48;
    	if (stu.sco.en[2] == '0') en = 100;
    	else if (stu.sco.en[1] != '\0')
    		en = ((int)stu.sco.en[0] - 48) * 10 + (int)stu.sco.en[1] - 48;
    	else en = (int)stu.sco.en[0] - 48;
    	if (stu.sco.pe[2] == '0') pe = 100;
    	else if (stu.sco.pe[1] != '\0')
    		pe = ((int)stu.sco.pe[0] - 48) * 10 + (int)stu.sco.pe[1] - 48;
    	else pe = (int)stu.sco.pe[0] - 48;
    	if (stu.sco.se[2] == '0') se = 100;
    	else if (stu.sco.ch[1] != '\0')
    		se = ((int)stu.sco.se[0] - 48) * 10 + (int)stu.sco.se[1] - 48;
    	else se = (int)stu.sco.se[0] - 48;
    	stu.sco.aver = (ch + ma + en + pe + se) / 5;
    	return stu.sco.aver;
    }
    void end()
    {
    	system("cls");
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t            *  ***  ****\n");
    	printf("\t\t\t\t\t          *** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t          **** ******* ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	Sleep(800);
    	system("cls");
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t               ***  ****\n");
    	printf("\t\t\t\t\t            * **** ****\n");
    	printf("\t\t\t\t\t          *** **** **** \n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         ****  *******  ****   \n");
    	printf("\t\t\t\t\t          ****         ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	Sleep(100);
    	system("cls");
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t               ***  ****\n");
    	printf("\t\t\t\t\t              **** ****\n");
    	printf("\t\t\t\t\t            * **** **** \n");
    	printf("\t\t\t\t\t          *** **** **** \n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         ****  *******  ****   \n");
    	printf("\t\t\t\t\t         ****  感   谢  ****   \n");
    	printf("\t\t\t\t\t          ****         ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	Sleep(100);
    	system("cls");
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t               ***  ****\n");
    	printf("\t\t\t\t\t              **** ****\n");
    	printf("\t\t\t\t\t              **** **** \n");
    	printf("\t\t\t\t\t            * **** ****\n");
    	printf("\t\t\t\t\t          *** **** **** \n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         ****  *******  ****   \n");
    	printf("\t\t\t\t\t         ****           ****   \n");
    	printf("\t\t\t\t\t         ****  感   谢  ****   \n");
    	printf("\t\t\t\t\t          ****         ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	Sleep(100);
    	system("cls");
    	printf("\n\n\n\t\t\t\t\t                 *\n");
    	printf("\t\t\t\t\t               ***  ****\n");
    	printf("\t\t\t\t\t              **** ****\n");
    	printf("\t\t\t\t\t              **** **** \n");
    	printf("\t\t\t\t\t            * **** ****\n");
    	printf("\t\t\t\t\t          *** **** **** \n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         **** **** **** ****\n");
    	printf("\t\t\t\t\t         ****  *******  ****   \n");
    	printf("\t\t\t\t\t         ****  感   谢  ****   \n");
    	printf("\t\t\t\t\t         ****           ****   \n");
    	printf("\t\t\t\t\t          **** 使   用 ****\n");
    	printf("\t\t\t\t\t            *************\n");
    	printf("\t\t\t\t\t                *****\n\n");
    	Sleep(2000);
    }
    

    总结

    15:14 2019-11-7
    1.变量命名可以参考帕斯卡命名法,驼峰式命名法。
    2.把用户当作傻瓜来设计程序。
    3.注意代码的可读性重复代码最好多用函数,不要像我一样,暂时没能力缩减更多。
    4.注意各模块之间的联系,不要起冲突,bug及时修!


    11:21 2019-12-3
    现在发现面向对象的优越性了,把一个个类封装起来,可以保护数据,不受外界干扰,隐藏对象的属性和实现细节,仅对外提供公共访问方法,提高复用性和安全性。不会像用C语言写这个程序的时候,一个模块写完,可能其他的模块就因为它出了bug。

    展开全文
  • 这项研究的目的是探讨... 此外,受访者认为,国际象棋棋手可以是一个很好的数学家,特别是如果他们从小就开始玩,并且国际象棋是学校课程的一部分,因为持续下棋有助于他们发展和提高解决问题的能力和批判性思维能力。
  • 把成绩低于总平均成绩的女同学的的成绩提高5% #首先我们需要确定[成绩表]里是否存在[外键], 如果不存在,那么我们直接进行update语句即可, 如果存在[外键],我们是没办法进行更改成绩的, 那么我们需要先把这...

    在MySQL中,

    把成绩低于总平均成绩的女同学的的成绩提高5%

    #首先我们需要确定[成绩表]里是否存在[外键]

    如果不存在,那么我们直接进行update语句即可,

    如果存在[外键],我们是没办法进行更改成绩的,

    那么我们需要先把这个[成绩表]备份一下,

    备份/复制一个表的语法是:

    create table 新表名 select * from 旧表名
    

    相应的如果[成绩表]名为"sc"的话,就随便创建一个新表,表明为"sc1",那么语法就是:

    create table sc1 select * from sc

    备份完[成绩表]之后,

    就可以进行更改操作了,

    根据题目,首先我们需要确定几个条件,

    第一,总平均成绩

    第二,成绩低于总平均成绩的人

    第三,所有的女生

    那么,好,求出平均成绩的语法是:

    select avg(成绩) from 表名

    在[成绩表]里,成绩的字段名为:degree,并且需要在刚才的新表中才可以更改,所以就以[sc1]表为例,具体语法:

    select avg(degree) from sc1

    第一步到此为止。

    接着,成绩低于总平均成绩的人,语法:

    where degree < (select avg(degree) from sc1)

    第二步到底结束。

    接着,所有的女生,有性别的表是[学生表],所以我们要在[学生表]里查询,语法:

    select * from student where ssex="女"

    但是,我们需要先要想一想,我们查出了所有的女生,但是我们肯定不需要她们所有的信息,只需要其中的一个项(字段)即可,[学生表]和[成绩表]里都有的字段是[学号]"sno",那么就用[学号]这个字段即可。所以上面的语法要改为:

    select sno from student where ssex="女"

    那么,好,第三步到此结束。

    更新/修改 的语句是:

    update 表名 set 列名=表达式...

    所以完整的语句是:

    uupdate sc1 set degree=degree*1.05
    where sno in (select sno from student where ssex="女")
    and degree<(select avg(degree) from sc1)

    好,没了,就这些。

    细心的话,会注意到,作为条件的话,一般作为条件的都是一个数据(单个数据),比如[平均成绩]是一个数,比如性别"女"。

    但是,

    性别为"女"的人的学号是一整列学号,竟然也可以作为条件查询!我还不知道答案的时候,思来想去,不知道如何把一整列学号当作一个条件来使用。

    结果一看答案。

    惊了!

    竟然只用了一个"in"就可以把一整列当作一个条件。

     

    展开全文
  • 《巧学妙解王高中数学》在编写体例上遵循学习规律,你在学习中得到全面系统的提高。共分六篇。 第一篇 巧学绝技,秒杀技法全解:较详细地介绍了77种高中数学解题方法,这些方法中有大家很熟悉的、用得很多的待定...
  • 面试 SQL整理 常见的SQL面试题:经典50题

    万次阅读 多人点赞 2019-09-12 22:16:11
    目录 ​ SQL基础知识整理: 常见的SQL面试题:经典50题 三、50道面试题 ...【面试题类型总结】这类题目属于行列如何互换,解题思路...select 查询结果 如:[学号,平均成绩:组函数avg(成绩)]from 从哪张表中查找数...
  • Java实现 蓝桥杯 算法提高 成绩排序

    万次阅读 多人点赞 2020-02-10 18:28:17
     排序规则,优先考虑数学成绩,高的在前;数学相同,英语高的在前;数学英语都相同,语文高的在前;三门都相同,学号小的在前 输入格式  第一行一个正整数n,表示学生人数  接下来n行每行3个0~100的整数,第i行...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    48 七、补充提高 49 第六章 C语言 49 C语言中的存储 50 数据类型 50 常量 53 结构体 54 条件/分支逻辑 54 Switch 54 If 55 循环 55 For 55 while 56 do…while 56 函数 56 第七章 Windows环境搭建 59 一、名词注解...
  • 后续研究证实了这一发现,表明该教学方法是学生数学成绩的决定性因素,而通过计算机实践来加强教学至关重要。 这项研究的基本假设是,在数学学习是计算机辅助的情况下,小学数学课的教学方法(替代或前沿)之间存在...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    Microsoft.Net Framework SDK中内置了C#的编译器csc.exe,下面我们使用这个微软提供的命令行编译器对程序welcome.cs进行编译。假设已经将welcome.cs文件保存在d:\Charp目录下,启动命令行提示符,在屏幕上输入一行...
  • Java实现 蓝桥杯 算法提高 成绩排名

    万次阅读 多人点赞 2020-02-10 14:39:35
    试题 算法提高 成绩排名 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述  小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决...
  • 这项研究的重点是将合作学习作为提高菲律宾10年级数学学生成绩水平的一种方法。 研究了该方法及其对学生成绩的影响。 通过使用准实验研究方法,得出以下结果:1)该方法积极改善了对照组和实验组的数学表现; 2)...
  • 《数据库原理》— 数据库系统概论第五版习题解析

    万次阅读 多人点赞 2017-05-29 14:57:48
    数据库系统概论前七章习题解析 第1章绪论 1.试述数据、数据库、数据库系统、数据库管理系统的概念...早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,960
精华内容 8,784
关键字:

怎么让数学成绩提高