当前位置:网站首页>综合能力测评系统

综合能力测评系统

2022-07-06 04:01:00 努力一把呗

目的

设计拓展一个综合能力测评系统。该系统可以实现菜单选择自测模式、游戏模式、难度和题量,在加、减、乘、除测试模块实现积分、正确和错误题数提示、错题集收集功能,阶段性测试中实现计分排名功能,闯关游戏模块实现娱乐功能。

运行结果图

登录注册界面
注册

登录
菜单

功能介绍

    综合能力测评系统是一个小学生测试加减乘除运算能力的系统

1.用户权限保障

首先通过字符界面选择是登录或者注册,再选择是老师或者学生。 然后跳转进入登录或者注册界面,输入姓名、学号和密码。登录界面。如果程序检索不到姓名和学号匹配本地文件的目标账户,则返回错误信息并提示您的账户不存在,登录界面如果程序检索到姓名和学号匹配本地文件的目标账户但密码不匹配,则返回错误信息并提示您的密码不正确。

2.选择测试

在主菜单根据字符界面的提示按照对应的键盘输入选择加减乘除或综合随机测试,随后一一选择题量和难度,程序将会为学生自动生成对应难度和数量的题目,并在学生保存后为学生显示他(她)的得分和正确的题目数量。

3.排名和查错题

在阶段性测试中,程序将根据题目的难度和正确与否为学生赋分学生在测试中每完成一道题目都将为学生更新累计的积分,并在学生保存测试结果之后为学生更新总积分进行排名,学生和教师均可以查看排名与错题(错题集只记录了加减乘除模块 的错题)。

本组拓展的功能有:设置了简单、普通和困难三种难度,积分方式与之难度呈合理安排,防止盲目刷分;错题记录,错题集和错题数更好巩固并提升学习;用户评价,可及时给出鼓励和建议;有排名激励效应。

具体代码

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <Windows.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include<stdio.h>
#include<conio.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
#define DATALEN 100
using namespace std;

typedef struct man {
    
    char id[10];
    char name[8];
    char pwd[12];
    char sort;
    char power;
    int score;
}MAN;

struct wordUnit{
    
    char id[10];
    char name[8];
    char pwd[12];
    char sort;
    char power;
    int score;
};

int menu_first();
int login(char *sort_login);
int Register();
MAN ergodic(FILE* fp);//遍历文件函数
void Add(char sort_);
void Sub(char sort_);
void Mul(char sort_);
void Div(char sort_);
void result(int m,int s,int a,int b,char sort_r,char sign);
void AandS(int nandu,int cn,int cnt);
void MandD(int nandu,int cn,int cnt);
void WQ_set(char sort_);//错题集显示函数
void Menu(); //菜单界面
void Inform();//说明函数
void Free();//阶段测试
void Eva();//评价函数
void MMul();
int  Mul1();
int  Mul2();
int  Mul3();
void DDiv();
int Div1();
int Div2();
int Div3();
void AAdd();
void score_change(char sort_,int nscore);//积分保存
void Func();//排名


int an,a,b,m,s,n,temp,nandu,cnt=0,cn=0,sum=0,ret=0,score=0,w;
char sort_=-1;
float k=0.0,l=0.0;

int main()
{
    
    int judge=0;
    int choose = 0;
    //fflush(stdin);//清空缓冲区
    choose = menu_first();

    if (choose == 1) //登录
    {
    
        while (!judge)
        {
    
            judge = login(&sort_);
        }
    }
    else//注册
    {
    
        while (!judge)
        {
    
            judge = Register();
        }
        judge = 0;
        while (!judge)
        {
    
            judge = login(&sort_);
        }
    }
    Menu();
    bool flag=TRUE;
    while(flag)
    {
    
        Menu();
    }
    return 0;
}

//登录函数
int login(char *sort_login)
{
    
    FILE* fp;
    MAN x,input;
    int judge = 0,judge2=0;

    //输入登录的账户信息
    printf("\n\n");
    printf_s("%s\n", "\t\t\t\t欢迎进入登录界面(* ^-^ *///):");
    printf_s("%s", "\t\t\t\t\t请输入学号:");
    scanf("%s", input.id);
    printf_s("%s", "\t\t\t\t\t请输入名字:");
    scanf("%s", input.name);
    printf_s("%s", "\t\t\t\t\t请输入密码:");
    scanf("%s", input.pwd);

    fopen_s(&fp, "accout.txt", "r+");
    if (fp == NULL)
    {
    
        printf("打开文件失败");
        return 0;
    }
    //循环遍历文件函数
    while ( !judge2||!feof(fp) )
    {
    
        judge2=1;
        x = ergodic(fp);
        if (strcmp(x.id, input.id) == 0 &&
            strcmp(x.name, input.name) == 0 &&
            strcmp(x.pwd, input.pwd) == 0
            )
        {
    
            judge = 1;
            printf_s("\t\t\t\t\t%s\n", "登录成功,你好!(///^-^///)");
            break;
        }
    }
    fclose(fp);
    if (judge == 0)//该账户不存在或存在错误输入时
    {
    
        printf_s("\t\t\t\t\t%s\n", "输入错误,是记错了吗?");
        system("pause");
        Sleep(1000);
        system("cls");
        return 0;
    }
    else//查找到目标账户且一一对应时
    {
    
        *sort_login=x.sort;
        system("pause");
        Sleep(1000);
        system("cls");
        return 1;
    }
    //return 0;
}

//注册函数
int Register()
{
    
    FILE *fp=NULL,*fp2=NULL;
    MAN s;
    char test1[10], test2[10],test3[20];

    fopen_s(&fp,"accout.txt", "a+");
    if (fp == NULL)
    {
    
        printf_s("%s\n", "\t\t\t\t\tACCOUNT文件不存在!");
        return 0;
    }

    printf_s("\n%s", "\t\t\t\t\t你是学生还是老师?(老师:T/学生:S):");
    scanf("%c", &s.power);

    if (s.power != 'T' && s.power != 'S')//师or生权限输入错误提示
    {
    
        printf_s("%s\n", "\t\t\t\t\t输入错误请重试!");
        system("pause");
        system("cls");
        fclose(fp);
        return 0;
    }

    //输入MAN结构体s
    printf_s("%s","\t\t\t\t\t请输入学号:");
    scanf("%s", s.id);
    printf_s("%s", "\t\t\t\t\t请输入名字:");
    scanf("%s", s.name);
    printf_s("%s", "\t\t\t\t\t请输入密码:");
    scanf("%s", test1);
    printf_s("%s", "\t\t\t\t\t请重复输入密码:");
    scanf("%s",test2);
    strcpy_s(s.pwd, test1);

    fopen_s(&fp2, "sort.txt", "r");
    s.sort = fgetc(fp2);//序号从char转换到int

    if (fp2 != NULL)
    {
    
        fclose(fp2);
    }

    //密码一致,则注册成功,不一致则退出重试
    if (strcmp(test1, test2) == 0)//注册成功
    {
    
        printf_s("%s\n", "\t\t\t\t\t\t注册成功!");
        fprintf(fp, "%s\t%s\t%s\t%c\t%c\t%c\n", s.id, s.name, s.pwd, s.sort,s.power,'0');
        fopen_s(&fp2, "sort.txt", "r+");
        if (fp2 != NULL)
        {
    
            fputc(s.sort + 1, fp2);
        }
        fclose(fp2);

// 创建错题集文件
        if (s.power == 'S')
        {
    

            strcpy_s(test3, "MC");
            strcpy_s(test2,"");
            test2[0]=s.sort;
            test2[1]='\0';
            strcat(test3, test2);
            strcat(test3, ".txt");
// printf_s("%s\n", test3);
            creat( test3, 00700);//创建文件的用户组可读、写、执行
        }

        system("pause");
        system("cls");
        fclose(fp);
        return 1;
    }
    else //注册失败
    {
    
        printf_s("%s\n", "\t\t\t\t\t\t前后输入的密码不正确!");
        system("pause");
        system("cls");
        fclose(fp);
        return 0;
    }

}

//初始菜单
int menu_first()
{
    
    int choose;
    printf_s("\t\t\t%s\n", "---------------------------------");
    printf_s("\t\t\t%s\n", "| 你想要登录还是注册新账户? |");
    printf_s("\t\t\t%s\n", "| 登录请按1,注册请按0:(*^-^*)|");
    printf_s("\t\t\t%s\n", "---------------------------------");
    printf_s("\t\t\t选择:");
    scanf("%d", &choose);
    getchar();

    system("pause");
    system("cls");
    return choose;
}

//遍历文件函数
MAN ergodic(FILE* fp)
{
    
    MAN x = {
     " "," "," ",'0','0' ,0};
    fscanf(fp,"%s\t%s\t%s\t%c\t%c\t%d\n",x.id,x.name,x.pwd,&x.sort,&x.power,&x.score);
    return x;
}
void Menu() //菜单界面
{
    
	int xuan;
	printf("\t\t 小朋友,欢迎你们来学习小学算术!* * * * * * * * * * \n");
	printf("\t\t 赶快选择你的学习内容吧!! * * * * * * * * * * ⌒_⌒\n");
	printf("\n");
    printf("\t\t\t\t\t\t\t主菜单\n") ;
 	printf("\t\t ╔══════════════════════════════════════════════════════════════════════════════════════════╗\n");
	printf("\t\t ║ 1.加法 2.减法 3.乘法 4.除法 ║\n");
	printf("\t\t ║-------------------------------------------------------------------------------- ║\n") ;
	printf("\t\t ║ 5.说明 6.评价 7.阶段测试 8.排名 ║\n") ;
	printf("\t\t ║-------------------------------------------------------------------------------- ║\n") ;
    printf("\t\t ║ 9.乘法游戏 10.除法游戏 11.加法比较游戏 12.错题集 ║\n") ;
   	printf("\t\t ╚══════════════════════════════════════════════════════════════════════════════════════════╝\n");
	printf("\n");
	printf("\n");
	printf("\t\t积分规则:\n");
	printf("\t\t ╔════════════════════════════════════════════════════════════════════════════╗\n");
	printf("\t\t ║ ║ 1.加法 2.减法 3.乘法 4.除法 ║\n");
	printf("\t\t ║——————║——————————————————————————————— ║\n");
	printf("\t\t ║ 错误 ║ -1 -1 -1 -1 ║\n");
	printf("\t\t ║ 正确且简单 ║ 1 1 2 2 ║\n");
	printf("\t\t ║ 正确且普通 ║ 2 2 3 3 ║\n");
	printf("\t\t ║ 正确且困难 ║ 3 3 4 4 ║\n");
    printf("\t\t ╚════════════════════════════════════════════════════════════════════════════╝\n");
    printf("\n");
	printf("想要退出请选择:0\n");
	printf("\n\t\t 我的选择:");
	scanf("%d",&xuan) ;
	system("cls");
	switch(xuan)
	{
    
		case 0:exit(1);
				break;
		case 1:Add(sort_);
				break;
		case 2:Sub(sort_);
				break;
		case 3:Mul(sort_);
				break;
		case 4:Div(sort_);
				break;
		case 5:Inform();
				break;
		case 6:Eva();
				break;
		case 7:Free();
				break;
        case 8:Func();
                break;
        case 9:MMul();
                break;
        case 10:DDiv();
                break;
        case 11:AAdd();
                break;
        case 12:WQ_set(sort_);//测试序号为sort_的账户的错题集的显示
                break;
	}
 }
void Add(char sort_) //加法界面 参数表(已登录账户的序号)
{
    
	float start,end;

	srand(time(0));

	cnt=0;
	cn=0;
	printf("小朋友,赶快进入加法测试吧!\n\n");
	printf("请选择题目难度:1.简单 2.普通 3.困难\n");
	scanf("%d",&nandu);
	printf("请输入题目数量:");
	scanf("%d",&n);
	start=clock();
	for(int i=1;i<=n;i++)
	{
    
		if(nandu==1)
        {
    
            a=rand()%10;
	        b=rand()%10;
        }
        else if(nandu==2)
        {
    
            a=rand()%100;
	        b=rand()%100;
        }
        else
        {
    
            a=rand()%1000;
	        b=rand()%1000;
        }
		printf("第%d题:",i);
		printf("%d+%d= \n",a,b);
		m=a+b;
		printf("请输入你的计算结果:");
		scanf("%d",&s);
		result(m,s,a,b,sort_,'+');//调用判断正确答案函数
	}
	end=clock();
	AandS(nandu,cn,cnt);//调用计算正确率以及得分函数
	printf("用时:%.1f秒\n",(float)(end-start)*0.001);
	system("pause");
	system("cls");
}

void Sub(char sort_)//减法界面 参数表(已登录账户的序号)
{
    
	int start,end;
	srand(time(0));
	cnt=0;
	cn=0;
	printf("小朋友,赶快进入减法测试吧!\n\n");
	printf("请选择题目难度:1.简单 2.普通 3.困难\n");
	scanf("%d",&nandu);
	printf("请输入题目数量:");
	scanf("%d",&n);
	start=clock();
	for(int i=1;i<=n;i++)
	{
    
		if(nandu==1)
        {
    
            a=rand()%10;
	        b=rand()%10;
        }
        else if(nandu==2)
        {
    
            a=rand()%100;
	        b=rand()%100;
        }
        else
        {
    
            a=rand()%1000;
	        b=rand()%1000;
        }
		printf("第%d题:",i);
		printf("%d-%d= \n",a,b);
		m=a-b;
		printf("请输入你的计算结果:");
		scanf("%d",&s);
		result(m,s,a,b,sort_,'-');//调用判断正确答案函数
	}
	end=clock();
	AandS(nandu,cn,cnt);//调用计算正确率以及得分函数
	printf("用时:%.1f秒\n",(float)(end-start)*0.001);
	system("pause");
	system("cls");
}

void Mul(char sort_) //乘法函数 参数表(已登录账户的序号)
{
    
    int start,end;
	srand(time(0));
	int a,b,m,s,n,nandu;
	cnt=0;
	cn=0;
	printf("小朋友,赶快进入乘法测试吧!\n\n");
	printf("请选择题目难度:1.简单 2.普通 3.困难\n");
	scanf("%d",&nandu);
	printf("请输入题目数量:");
	scanf("%d",&n);
	start=clock();
	for(int i=1;i<=n;i++)
	{
    
		if(nandu==1)
        {
    
            a=rand()%10;
	        b=rand()%10;
        }
        else if(nandu==2)
        {
    
            a=rand()%100;
	        b=rand()%100;
        }
        else
        {
    
            a=rand()%1000;
	        b=rand()%1000;
        }
		printf("第%d题:",i);
		printf("%d×%d= \n",a,b);
		m=a*b;
		printf("请输入你的计算结果:");
		scanf("%d",&s);
		result(m,s,a,b,sort_,'*');//调用判断正确答案函数
	}
	end=clock();
	MandD(nandu,cn,cnt);//调用计算正确率以及得分函数
	printf("用时:%.1f秒\n",(float)(end-start)*0.001);
	system("pause");
	system("cls");
}

void Div(char sort_)//除法函数 参数表(已登录账户的序号)
{
    
    int start,end;
	srand(time(0));
	cnt=0;
	cn=0;
	printf("小朋友,赶快进入除法测试吧!\n\n");
	printf("请选择题目难度:1.简单 2.普通 3.困难\n");
	scanf("%d",&nandu);
	printf("请输入题目数量<建议在20道数左右>:");
	scanf("%d",&n);
	start=clock();
	for(int i=1;i<=n;i++)
	{
    
		if(nandu==1)
        {
    
            a=rand()%10;
	        b=rand()%10;
        }
        else if(nandu==2)
        {
    
            a=rand()%100;
	        b=rand()%100;
        }
        else
        {
    
            a=rand()%1000;
	        b=rand()%1000;
        }
		printf("第%d题:",i);
		printf("%d÷%d= \n",a,b);
		l=1.0*a/b;
		printf("请输入你的计算结果:");
		scanf("%f",&k);
		result(l,k,a,b,sort_,'/');//调用判断正确答案函数
	}
	end=clock();
	MandD(nandu,cn,cnt);//调用计算正确率以及得分函数
	printf("用时:%.1f秒\n",(float)(end-start)*0.001);
	system("pause");
	system("cls");

}


void Inform()//说明函数
{
    



	printf("关于该系统的说明\n\n\n");
	printf(" 本项目是应用C语言开发的小学生算术自测系统,该系统能够通过菜单提供功能选择,能够实现简单的\n加法,减法,乘法和除法 的随机测试(其中加减法采取打分制度,在进行多次\n加减法测试后还能对其进行加减法的分别的从低到高的排名,并输出最高分\n和最低分,乘除法采取通关模式),能够实现题量选择,题目批阅,答案提示,测评评价等功能。\n");
	printf(" 1:加减法采用计时计分模式,它根据分数的范围来评出ABCD四个等级,然后将每次运行程序时的每次\n的加减运算的成绩分别存储起来,最后可以在菜单界面查看,自己的分数排名和\n自己的最高分和最低分。\n");
	printf(" 2:乘除法采用闯关模式,第一关是两个操作数均是一位数;第二关第一个操作数是一位数,第二个操\n作数是两位数;第三关两个操作数均是两位数;除法得到的结果如果是整数3或者\n有理数2.75,直接得出结果,如果是无理数,则保留小数点后两位(四舍五入)5.6666...输出5.67。 ");
	printf("\n");
	printf("\n\n\n");
	system("pause");
	system("cls");
}

void Eva()//评价函数
{
    
	int eva;
	printf("您对我们的系统满意度是多少呢?\n");
	printf("请对我们打分(0--10分):") ;
	scanf("%d",&eva);
	if(eva>=0&&eva<=5)
	{
    
		printf("谢谢参与!我们会努力改进的!\n");
	}
	else if(eva>=6&&eva<=10)
	{
    
		printf("谢谢鼓励!我们会继续加油的!\n");
	}
	system("pause");
	system("cls");
}

void result(int m,int s,int a,int b,char sort_r,char sign)//判断计算输入答案是否正确
{
    

    FILE *fp=NULL;
    char test3[20],test2[20];

    strcpy_s(test3, "MC");
    strcpy_s(test2,"");
    test2[0]=sort_r;
    test2[1]='\0';
    strcat(test3, test2);
    strcat(test3, ".txt");
    if(m==s)
    {
    
    	printf("恭喜你答对了!\n");
    	printf("\n");
    	cnt++;//做对题目的数量
	}
	else
	{
    
		printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		printf("\n");
		cn++;  //cw
		fp=fopen(test3,"a");
		if(fp==NULL)
        {
    
            printf("文件为空\n");
        }
		fprintf_s(fp,"%d %c %d = %d 正确答案是: %d\n",a,sign,b,s,m);
		fclose(fp);
	}
	return ;
}

void AandS(int nandu,int cn,int cnt) //计算加减法的积分运算,n是输入题目数,cnt是答对题数
{
    

    printf("\n\n你一共答对了%d题\n",cnt);
    printf("\n你一共答错了%d题\n",cn);
    ret=cnt*nandu-cn;
    printf("\n本次共得%d分\n",ret);
}

void MandD(int nandu,int cn,int cnt) //计算乘除法的积分运算
{
    
    printf("\n\n你一共答对了%d题\n",cnt);
    printf("\n你一共答错了%d题\n",cn);
    int score;
    score=cnt*(nandu+1)-cn;
    printf("\n本次共得%d分\n",score);
}

void WQ_set(char sort_)//错题集显示函数 参数表(已登陆账户的序号)
{
    
    FILE *fp=NULL,*fpx=NULL;
    char test3[20],test2[20],test[30];

    MAN x;
    strcpy_s(test3, "MC");
    strcpy_s(test2,"");
    test2[0]=sort_;
    test2[1]='\0';
    strcat(test3, test2);
    strcat(test3, ".txt");

    fpx=fopen("accout.txt","r");

    while ( !feof(fp) )
    {
    
        x = ergodic(fpx);
        if (x.sort==sort_)
        {
    
            printf("学号:%s 姓名:%s的错题集\n ",x.id,x.name);
            break;
        }
    }

    fp=fopen(test3,"r");
    while(!feof(fp))
    {
    
        fgets(test,30,fp);
        printf("%s\n",test);
        strcpy(test,"");
    }
    system("pause");
    system("cls");
    return ;
}

void Free()//阶段测试
{
    
    int start,end;
	srand(time(0));
	int a,b,m,s,n,x,add=0,sub=0,mul=0,div=0,ad=0,su=0,mu=0,di=0;
	printf("赶快进入测试吧!\n\n");
	printf("本测试一共两道大题,共100分。\n\n");
	n=80;
    start=clock();
	for(int i=1;i<=n;i++)
	{
    
	    x=rand()%4;
       if(i>0&&i<=60)
        {
    
            if(i==1)
                printf("(一)本题共60题,每一小题1分,共60分。\n");
            printf("第%d题: ",i);
            a=rand()%100;
	        b=rand()%100+1;
            if(x==0)
		{
    
		    printf("%d+%d= \n",a,b);
		    m=a+b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                add++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
	     }
	     else if(x==1)
	     {
    
		    printf("%d-%d= \n",a,b);
		    m=a-b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                sub++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
	     }
	     else if(x==2)
         {
    
		    printf("%d*%d= \n",a,b);
		    m=a*b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                mul++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
         }
         else
         {
    
		    printf("%d/%d= \n",a,b);
		    m=a/b;
		    printf("请输入你的计算结果:");
		    scanf("%f",&k);
            if(m==k)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                div++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
        }
        }
        else if(i>60&&i<=80)
        {
    
            if(i==61)
                printf("(二)本题共20题,每一小题2分,共40分。\n");
                printf("第%d题: ",i-60);
            a=rand()%1000;
	        b=rand()%1000+1;
            if(x==0)
		  {
    
		    printf("%d+%d= \n",a,b);
		    m=a+b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                ad++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
	     }
	     else if(x==1)
	     {
    
		    printf("%d-%d= \n",a,b);
		    m=a-b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                su++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
	     }
	     else if(x==2)
         {
    
		    printf("%d*%d= \n",a,b);
		    m=a*b;
		    printf("请输入你的计算结果:");
		    scanf("%d",&s);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                mu++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
         }
         else
         {
    
		    printf("%d/%d= \n",a,b);
		    m=a/b;
		    printf("请输入你的计算结果:");
		    scanf("%f",&k);
            if(m==s)
            {
    
    	        printf("恭喜你答对了!\n");
                printf("\n");
                di++;
	         }
	         else
            {
    
		        printf("很遗憾你答错了! 正确答案应该是%d\n",m);
		        printf("\n");
            }
         }
        }

	}
    s=(add+sub+mul+div)*1+(ad+su+mu+di)*2;
    printf("你的得分为:%d\n",s);
    score_change(sort_,s);
    printf("如果你想知道排名,请选择1,否则选择0\n");
    printf("请选择:");
    scanf("%d",&w);
    if(w==1)
    {
    
        Func();
    }
    end=clock();
    printf("\n");
	printf("用时:%.1f秒\n",(float)(end-start)*0.001);
	system("pause");
	system("cls");

}


void MMul() //乘法函数
{
    
	int f1,f2,f3;
	do
	{
    
		f1=Mul1();
	}while(f1==1);
	if(f1==2)
	{
    
		do
		{
    
			f2=Mul2();
		}while(f2==1);
		if(f2==2)
		{
    
			do
			{
    
				f3=Mul3();
			}while(f3==1);
			system("pause");
			system("cls");
			Menu();
		}
		else
		{
    
			system("cls");
			Menu();
		}
	}
	else
	{
    
		system("cls");
		Menu();
	}
}

int  Mul1() //乘法的闯关游戏
{
    
	int count=0,n,answer,a,b,find=1;
	char ch;
	srand(time(NULL));
	printf("赶快进入乘法测试吧!\n\n");
	printf("欢迎进入第一关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%10;
		b=rand()%10;
		printf("%d*%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a*b))
			printf("答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第一关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第一关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 2;
		else
			return 0;
	}
}

int Mul2()
{
    
	int count=0,n,answer,a,b,find=1;
	char ch;
	srand(time(NULL));
	printf("欢迎进入第二关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%10;
		b=rand()%90+10;
		printf("%d*%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a*b))
			printf("恭喜你,答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第二关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第二关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 2;
		else
			return 0;
	}
}

int Mul3()
{
    
	int count=0,n,answer,a,b,find=1;
	char ch;
	srand(time(NULL));
	printf("欢迎进入第三关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%90+10;
		b=rand()%90+10;
		printf("%d*%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a*b))
			printf("答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第三关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第三关!\n");
		printf("恭喜闯关成功!\n");
		return 0;
	}
}

void DDiv()//除法函数
{
    
	int f1,f2,f3;
	do
	{
    
		f1=Div1();
	}while(f1==1);
	if(f1==2)
	{
    
		do
		{
    
			f2=Div2();
		}while(f2==1);
		if(f2==2)
		{
    
			do
			{
    
				f3=Div3();
			}while(f3==1);
			system("pause");
			system("cls");
			Menu();
		}
		else
		{
    
			system("cls");
			Menu();
		}
	}
	else
	{
    
		system("cls");
		Menu();
	}

}

int Div1() //除法的闯关游戏
{
    
	int count=0,n,a,b,find=1;
	char ch;
	int answer;
	srand(time(NULL));
	printf("赶快进入除法测试吧!\n\n");
	printf("欢迎进入第一关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%10;
		b=rand()%9+1;
		printf("%d/%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a/b))
			printf("答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第一关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第一关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 2;
		else
			return 0;
	}
}

int Div2()
{
    
	int count=0,n,a,b,find=1;
	char ch;
	int answer;
	srand(time(NULL));
	printf("欢迎进入第二关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%90+10;
		b=rand()%9+1;
		printf("%d/%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a/b))
			printf("答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第二关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第二关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 2;
		else
			return 0;
	}
}

int Div3()
{
    
	int count=0,n,a,b,find=1;
	char ch;
	int answer;
	srand(time(NULL));
	printf("欢迎进入第三关!\n");
	printf("请设定题目数量:");
	scanf("%d",&n);
	do
	{
    
		answer=0;
		a=rand()%90+10;
		b=rand()%90+10;
		printf("%d/%d=",a,b);
		scanf("%d",&answer);
		if (answer==(a/b))
			printf("答对了!\n");
		else
		{
    
			printf("很遗憾,答错了!\n");
			find=0;
		}
		count++;
	}while(count<n);
	if (find==0)
	{
    
		printf("很遗憾,没能通过第三关!\n");
		printf("是否继续挑战?Y<1>/N<0>:");
		scanf(" %c",&ch);
		if (ch=='Y'||ch=='1')
			return 1;
		else
			return 0;
	}
	else
	{
    
		printf("恭喜通过第三关!\n");
		printf("恭喜闯关成功!\n");
		return 0;
	}
}

void AAdd()//加法比较游戏
{
    
    int a,b,c,d,i,j,y,ans1,ans2,count;
    char ch;
    srand(time(NULL));
    printf("关卡数为3\n");
    printf("要求:请设定每一关卡的题目数量:\n");
    scanf("%d",&y);
    getchar();
    printf("要求:请在[]中输入 > 或 < 或 = 使成立\n");
    for(i=1;i<=3;i++)
    {
    
        printf("第%d关:\n",i);
        count=0;
        for(j=1;j<=y;j++)
        {
    
            if(i==1)
            {
    
               a=rand()%10;
		       b=rand()%10;
		       c=rand()%10;
		       d=rand()%10;
            }
            else if(i==2)
            {
    
               a=rand()%100;
		       b=rand()%100;
		       c=rand()%100;
		       d=rand()%100;
            }
            else
            {
    
               a=rand()%1000;
		       b=rand()%1000;
		       c=rand()%1000;
		       d=rand()%1000;
            }
            ans1=a+b;
            ans2=c+d;
            printf("%d+%d [] %d+%d\n",a,b,c,d);
            printf("请输入 > 或 < 或 = :");
            scanf("%c",&ch);
            getchar();
            if(ch=='>')
            {
    
                if(ans1>ans2)
                {
    
                    printf("正确!\n");
                    count++;
                }
                else
                {
    
                    printf("错误!闯关失败!!\n");
                    Sleep(1500);
                    break;
                }
            }
            else if(ch=='<')
            {
    
                if(ans1<ans2)
                {
    
                    printf("正确!\n");
                    count++;
                }
                else
                {
    
                    printf("错误!闯关失败!!\n");
                    Sleep(1500);
                    break;
                }
            }
            else if(ch=='=')
            {
    
                if(ans1==ans2)
                {
    
                    printf("正确!\n");
                    count++;
                }
                else
                {
    
                    printf("错误!闯关失败!!\n");
                    Sleep(1500);
                    break;
                }
            }
        }
        if(count==y)
        {
    
            printf("关卡通过!\n\n");
            Sleep(1500);
        }
        else
        {
    

            printf("将退出游戏。");
            Sleep(1500);
            system("cls");
            Menu();
            break;
        }
        }
        system("cls");
        Menu();
}


void score_change(char sort_,int nscore)
{
    
    FILE *fpo=NULL,*fpn=NULL;//fp_original 起初 fp_new 新文件 文件指针
    MAN x;
    int judge=0;

    fpo=fopen("accout.txt","r");
    fpn=fopen("temp.txt","w");
    if(fpo==NULL||fpn==NULL)
    {
    
        printf("文件打开失败。");
        return ;
    }

     while ( !judge||!feof(fpo) )
    {
    
        judge=1;
        x = ergodic(fpo);
        if (sort_==x.sort)
        {
    
            fprintf(fpn,"%s\t%s\t%s\t%c\t%c\t%d\n",x.id,x.name,x.pwd,x.sort,x.power,nscore);
        }
        else
        {
    
             fprintf(fpn,"%s\t%s\t%s\t%c\t%c\t%d\n",x.id,x.name,x.pwd,x.sort,x.power,x.score);
        }
    }
    fclose(fpo);
    fclose(fpn);
    system("del accout.txt");
    system("rename temp.txt accout.txt");
    return ;
}

void Func(){
    
    FILE *data;//要读取的文件指针
    int i=0,j,k,m;//结构题数组移动
    struct wordUnit words[DATALEN];
    struct wordUnit t;
    if((data=fopen("accout.txt","r"))==NULL){
    
        printf("Can not open file\n");
        exit(0);
    }
    while(!feof(data)){
    
        //原txt文档的数据之间是以空格隔开的
        fscanf(data,"%s\t%s\t%s\t%c\t%c\t%d\n",words[i].id,words[i].name,words[i].pwd,&words[i].sort,&words[i].power,&words[i].score);
        i++;
    }
    fclose(data);
    for(k=0;k<i;k++)//外层for循环
  {
    
    for(j=0;j<i-k-1;j++)//内层for循环
    {
    
      if(words[j].score < words[j+1].score)//挑出分数高的
      {
    
        t=words[j];
        words[j]=words[j+1];
        words[j+1]=t;
      }
    }
  }
    printf("\n");
    printf("————————————————————总 排 名————————————————————————\n\n");
    for(int j=0;j<i;j++){
    
        printf("%-10s %-13s %-4d\n",words[j].id,words[j].name,words[j].score);
    }
    system("pause");
    system("cls");
    return ;
}

以上是实训期间完成的一个项目,收获颇多,虽有不太完善的地方,但还是让我很满意了。

原网站

版权声明
本文为[努力一把呗]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_63064440/article/details/125537448