C语言 校园歌手比赛系统源码

详情点此处

/*实验:校园歌手比赛系统
作者:多庸
学号:
实验要求:输入输出 增添删除 导入储存 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>     //系统时间
#include<conio.h>     //隐藏密码输入
#include<windows.h>  //系统函数库
///
struct Student       //定义结构体变量
    {
        char cla[20];//班级
		int num;//编号
        char name[20];//姓名
        float score[10];//分数
        float aver;//平均分
        float sum;//总分
    }stu[1000];
struct Student stu[1000],*p=stu; //定义全局p->struct Student stu[]
int count=0,n=0,o=0;   //定义全局变量count

//*************************************
//*************************************
//学生分数录入
void input(struct Student stu[])
{
    float min,max;
    void save(struct Student stu[]);
    int choose;
    int i,j;
    char tempcla[10]={"-1"};  //定义临时姓名字符串,用于按(-1)返回菜单
    a:
    system("cls");    //清屏
    fflush(stdin);    //清空缓存区
    printf("分  数  录  入\n");
    printf("********************************************************************************************\n");
    printf("请输入\t班级.编号.姓名. 十个评委\n");

    printf("班级(按-1返回菜单):");  //输入编号
    while(scanf("%s",stu[count].cla)==0)   //判断返回值,除去类型错误bug
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    if(strcmp(stu[count].cla,tempcla)==0)  //按-1返回菜单
    {
        printf("\n按任意键返回菜单!\n\n");
        system("pause");
        return;
    }
    while(strlen(stu[count].cla)>20)  //判断字符长度
    {
        fflush(stdin);
        printf("班级输入不合理,请重新录入:");
        scanf("%s",stu[count].cla);
    }
    //姓名
	printf("\n姓名:");  //输入姓名
    fflush(stdin);
    while(scanf("%s",stu[count].name)==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(strlen(stu[count].name)>7)
    {
        fflush(stdin);
        printf("姓名不合理,请重新录入:");
        scanf("%s",stu[count].name);
    }
  //编号
    printf("\n选手编号(3位数,001开始):");
	m:  //输入编号
    fflush(stdin);
    while(scanf("%d",&stu[count].num)==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }//判断重复编号
   for(i=0;i<count;i++)
    {
    	if(stu[count].num==stu[i].num)
    	{
    		printf("已有该编号,重新输入:\n");
    		goto m;
		}
	}
    printf("\n评委1(0~100):");  //输入评委一的分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[0])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[0]<0||stu[count].score[0]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[0]);
    }
    printf("\n评委2(0~100):");  //输入2号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[1])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[1]<0||stu[count].score[1]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[1]);
    }
    printf("\n评委3(0~100):");  //输入3号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[2])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[2]<0||stu[count].score[2]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[2]);
    }
    printf("\n评委4(0~100):");  //输入4号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[3])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[3]<0||stu[count].score[3]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[3]);
    }
    printf("\n评委5(0~100):"); //输入5号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[4])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[4]<0||stu[count].score[4]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[4]);
    }
    printf("\n评委6(0~100):"); //输入6号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[5])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[5]<0||stu[count].score[5]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[5]);
    }
    printf("\n评委7(0~100):"); //输入7号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[6])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[6]<0||stu[count].score[6]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[6]);
    }
    printf("\n评委8(0~100):"); //输入8号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[7])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[7]<0||stu[count].score[7]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[7]);
    }
    printf("\n评委9(0~100):");//输入9号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[8])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[8]<0||stu[count].score[8]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[8]);
    }
    printf("\n评委10(0~100):"); //输入10号评委分数
    fflush(stdin);
    while(scanf("%f",&stu[count].score[9])==0)
    {
        fflush(stdin);
        printf("格式有误,请重新输入:");
    }
    while(stu[count].score[9]<0||stu[count].score[9]>100)
    {
        fflush(stdin);
        printf("数据超出,请重新输入:");
        scanf("%f",&stu[count].score[9]);
    }
//总分
    stu[count].sum=(stu[count].score[0]+stu[count].score[1]+stu[count].score[2]+stu[count].score[3]+stu[count].score[4]+stu[count].score[5]+stu[count].score[6]+stu[count].score[7]+stu[count].score[8]+stu[count].score[9]);
    max=min=stu[count].score[0];
    for(j=0;j<10;j++)
    {
       if(max<stu[count].score[j])
        {
         max=stu[count].score[j];
        }
       else if(min>stu[count].score[j])
        {
             min=stu[count].score[j];
        }
    }
    stu[count].aver=(stu[count].sum-min-max)/8.0;//计算平均成绩
    count++;  // 结构体数据数+1
    save(p);   //保存文件
    fflush(stdin);
    printf("是否继续录入:\n\n");
    printf("1.是 2.否\n");
    fflush(stdin);
    printf("\n请选择:");
    b:
    while(scanf("%d",&choose)==0)
    {
    	printf("您输入的格式错误,请重新输入:\n");
    	fflush(stdin);
    	goto b;
	}
   switch(choose)
    {
        case 1:goto a;break;
        case 2:return;break;
        default:printf("没有该序号,请重新输入:");goto b;
    }
}
//
//*************************************
//修改的保存密码
void save_password(char s[])//将修改后的密码保存
{
	FILE *fp= fopen("password.txt","w+");
	fprintf(fp,"%s",s);
	fclose(fp);
}
/
//隐藏密码输入
void yincangpassword(char *pswd, unsigned maxlen)//隐藏密码进行输入
{
    int index = 0;
    char buff = '\0';
    while ((buff = getch()) != '\r')
    {
        if (buff == '\b' && index != 0)
            {
            index--;
            printf("\b \b");
        }
            else if (index < maxlen - 1 && buff != '\b'){
            pswd[index++] = buff;
            putchar('*');
        }
    }
    pswd[index] = '\0';
}

//************************************************************
//学生成绩显示
void print(struct Student stu[])
{
    void sort(struct Student stu[]);
    system("cls");
    if(count==0)
    printf("\n您尚未录入选手信息,请返回菜单进行录入!\n");
    sort(p);    //排序函数
    return;
}
//*************************************
char password[20],key[20];//初始密码
/
//修改密码
int up()
{
	printf("注:修改密码后需要重新登录!\n");
	printf("请输入想要更改的密码:\n");
	yincangpassword(password,21);
	save_password(password);
	printf("\n修改成功!请重新登录!\n");
	exit(0);
	return 0;
}
//
//*************************************
///
//评委均分
void average(struct Student stu[])
{
	system("cls");
	int i;
	if(count==0) printf("\n您尚未录入选手信息,请返回菜单进行录入!\n");
	float aver[10];
	float total[10]={0};
	for(i = 0; i < count; i++)
	{
		total[0]+=stu[i].score[0];
		total[1]+=stu[i].score[1];
		total[2]+=stu[i].score[2];
		total[3]+=stu[i].score[3];
		total[4]+=stu[i].score[4];
		total[5]+=stu[i].score[5];
		total[6]+=stu[i].score[6];
		total[7]+=stu[i].score[7];
		total[8]+=stu[i].score[8];
		total[9]+=stu[i].score[9];
	}
	aver[0]=total[0]/count;
	aver[1]=total[1]/count;
	aver[2]=total[2]/count;
	aver[3]=total[3]/count;
	aver[4]=total[4]/count;
	aver[5]=total[5]/count;
	aver[6]=total[6]/count;
	aver[7]=total[7]/count;
	aver[8]=total[8]/count;
	aver[9]=total[9]/count;
	printf("评委均分显示\n");
	printf("*******************************************************************************************************\n");
	printf("评委一:\t%.2f\n",aver[0]);
	printf("评委二:\t%.2f\n",aver[1]);
	printf("评委三:\t%.2f\n",aver[2]);
	printf("评委四:\t%.2f\n",aver[3]);
	printf("评委五:\t%.2f\n",aver[4]);
	printf("评委六:\t%.2f\n",aver[5]);
	printf("评委七:\t%.2f\n",aver[6]);
	printf("评委八:\t%.2f\n",aver[7]);
	printf("评委九:\t%.2f\n",aver[8]);
	printf("评委十:\t%.2f\n",aver[9]);
    printf("**************************************************************************************************\n");
    system("pause");
    return;
}
//*************************************
//*************************************///
//平均成绩排序
void sort(struct Student stu[])
{
    void save(struct Student stu[]);
    system("cls");
    fflush(stdin);
    char tempname[20];  //临时变量
    char tempcla[20];
    int i,j;
    int t1;
    float t;
    if(count==0)
        printf("\n\n您尚未录入选手信息,请返回菜单进行录入!\n\n");
    else
    {
        printf("\n分数显示(按平均分数排序)\n");   //冒泡排序
            for(i=0;i<count-1;i++)
            {
                for(j=0;j<count-i-1;j++)
                {
                    if(stu[j].aver<stu[j+1].aver)  //注意字符串的复制
                    {
                        strcpy(tempcla,stu[j].cla);strcpy(stu[j].cla,stu[j+1].cla);strcpy(stu[j+1].cla,tempcla);
                        strcpy(tempname,stu[j].name);strcpy(stu[j].name,stu[j+1].name);strcpy(stu[j+1].name,tempname);
                        t1=stu[j].num;stu[j].num=stu[j+1].num;stu[j+1].num=t1;
                        t=stu[j].score[0];stu[j].score[0]=stu[j+1].score[0];stu[j+1].score[0]=t;
                        t=stu[j].score[1];stu[j].score[1]=stu[j+1].score[1];stu[j+1].score[1]=t;
                        t=stu[j].score[2];stu[j].score[2]=stu[j+1].score[2];stu[j+1].score[2]=t;
                        t=stu[j].score[3];stu[j].score[3]=stu[j+1].score[3];stu[j+1].score[3]=t;
                        t=stu[j].score[4];stu[j].score[4]=stu[j+1].score[4];stu[j+1].score[4]=t;
                        t=stu[j].score[5];stu[j].score[5]=stu[j+1].score[5];stu[j+1].score[5]=t;
                        t=stu[j].score[6];stu[j].score[6]=stu[j+1].score[6];stu[j+1].score[6]=t;
                        t=stu[j].score[7];stu[j].score[7]=stu[j+1].score[7];stu[j+1].score[7]=t;
                        t=stu[j].score[8];stu[j].score[8]=stu[j+1].score[8];stu[j+1].score[8]=t;
                        t=stu[j].score[9];stu[j].score[9]=stu[j+1].score[9];stu[j+1].score[9]=t;
                        t=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=t;
                        t=stu[j].sum;stu[j].sum=stu[j+1].sum;stu[j+1].sum=t;

                    }
                }

            }
            printf("****\t****\t****\t******\t******\t******\t******\t******\t******\t******\t******\t******\t******\t****\t******\n");
            printf("班级\t编号\t姓名\t评委一\t评委二\t评委三\t评委四\t评委五\t评委六\t评委七\t评委八\t评委九\t评委十\t总分\t平均分\n");
            printf("****\t****\t****\t******\t******\t******\t******\t******\t******\t******\t******\t******\t******\t****\t******\n");
            for(i=0;i<count;i++)
            {
            	 printf("%-8s%-8d%-8s%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf\n",stu[i].cla,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);
			}
                save(p);   //保存文件
    }
    system("pause");
    return;
}
//*************************************
//*************************************
///
//*************************************
//成绩排序
void projectsort(struct Student stu[])
{
    if(count==0)
    {
        printf("\n\n您尚未录入选手信息,请返回菜单进行录入!\n\n");
        system("pause");
        return;
    }
    //int choose;
    system("cls");
    fflush(stdin);
    //choose:
    printf("\n\t\t\t\t\t\t   分数排序\n\n");
    printf("\t\t\t\t****************************************************\n\n");
    printf("\t\t\t\t****************************************************\n\n");
	        sort(p);
	        system("cls");
	        printf("按任意键返回菜单!\n\n");
	        system("pause");
	        return;
}
//*************************************
void updatePoo(int *poo)
{
 int y=1;
 *poo=y;
}
//*************************************
/
//按编号查询
void findnum(struct Student stu[])
{
  //  int o;
    int i;
    int searchindex=-1;  //定义下表值
    int searchnum;
    fflush(stdin);
    P:
    printf("\n请输入查询分数的选手编号(0返回):");
    scanf("%d",&searchnum);
    for(i=0;i<count;i++)
    {
        if(searchnum==0){
            return;
        }
        if(searchnum==stu[i].num)
        {
            o=1;
            //updatePoo(&o);
          //  system("cls");
            searchindex=i;
            printf("找到了。该生信息如下:\n");
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2lf%-8.2f\n",stu[i].cla,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);
            break;  //找到后跳出
        }
    }
    if(searchindex==-1)
    {
    printf("\n很抱歉,没有找到该选手的数据!\n\n");
    printf("\n按任意键返回分数查询\n\n");
    system("pause");
    goto P;
    }
}
//*************************************
//*************************************
//
//按姓名查询
void findname(struct Student stu[])
{
    //int o=1;
    int i;
    char searchname[20];
    int searchindex=-1;
    fflush(stdin);
    //L:
    printf("\n请输入查询分数选手的姓名(按0返回):\n");
    scanf("%s",searchname);
     if(searchname==0)
            {
            return;
            }
    for(i=0;i<count;i++)  //循环寻找姓名
    {

        if(strcmp(searchname,stu[i].name)==0)
        {
            o=1;
            //system("cls");
            searchindex=i;
            printf("找到了,该选手信息如下:\n");
           printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
           printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
           printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
           printf("%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n\n",stu[i].cla,stu[i].num,stu[i].name,
                   stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);

            break;  //找到后跳出
        }
    }
    if(searchindex==-1)
        printf("\n很抱歉,没有找到该选手的姓名!\n\n");
    printf("\n按任意键返回分数查询\n\n");
    system("pause");
    //goto L;
}
//*************************************
//*************************************
/

//*************************************
//*************************************
///
//按编号删除成绩
void delnum(struct Student stu[])
{
    void print(struct Student stu[]);
    int i,choose;
    int searchindex=-1;
    int deletenum;
    fflush(stdin);
    printf("请输入要删除学生的编号:");
    scanf("%d",&deletenum);
    printf("是否确定删除:\n");
    fflush(stdin);
    printf("1.是 2.否\n");
    fflush(stdin);
    printf("请选择:");
    b:
    while(scanf("%d",&choose)==0)
    {
    	printf("您输入的格式错误,请重新输入:\n");
    	fflush(stdin);
    	goto b;
	}
    switch(choose)
    {
        case 1:break;
        case 2:return;break;
        default:printf("没有该序号,请重新输入:");goto b;
    }
    if(deletenum==-1)
    {
        printf("\n按任意键返回删除分数!\n\n");
        system("pause");
        return;
    }
    for(i=0;i<count;i++)
    {
        if(deletenum==stu[i].num)
        {
            searchindex=i;
            break;
        }
    }
    if(searchindex==-1)
    {
        printf("\n很遗憾,未能找到所要删除选手的编号!\n");
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    else  //查找信息后,每组数据往前进行覆盖
    {
        for(i=searchindex;i<count-1;i++)
        {
            strcpy(stu[i].cla,stu[i+1].cla);
            stu[i].num=stu[i+1].num;
            strcpy(stu[i].name,stu[i+1].name);
            stu[i].score[0]=stu[i+1].score[0];
            stu[i].score[1]=stu[i+1].score[1];
            stu[i].score[2]=stu[i+1].score[2];
            stu[i].score[3]=stu[i+1].score[3];
            stu[i].score[4]=stu[i+1].score[4];
            stu[i].score[5]=stu[i+1].score[5];
            stu[i].score[6]=stu[i+1].score[6];
            stu[i].score[7]=stu[i+1].score[7];
            stu[i].score[8]=stu[i+1].score[8];
            stu[i].score[9]=stu[i+1].score[9];
            stu[i].aver=stu[i+1].aver;
        }
        count--;  //总数据组-1
    }
    if(count==0)
    {
        printf("\n目前没有选手信息,请返回菜单录入!\n\n");
        system("pause");
        return;
    }
   // system("cls");  //删除后进行打印
    printf("\n删除成功!\n\n");
    printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
    printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
    printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
    for(i=0;i<count;i++)
        printf("%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n\n",stu[i].cla,stu[i].num,stu[i].name,
                   stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);
       printf("\n按任意键返回菜单\n\n");
    system("pause");
    return;
}
//*************************************
//*************************************

//按姓名删除成绩
void delname(struct Student stu[])
{
    void print(struct Student stu[]);
    int i,choose;
    char tempname[10]={"-1"};
    int searchindex=-1;
    char deletename[20];
    fflush(stdin);
    printf("请输入要删除选手的姓名(按-1返回):");
    scanf("%s",deletename);
    printf("是否确定删除:\n");
    fflush(stdin);
    printf("1.是 2.否\n");
    fflush(stdin);
    printf("请选择:");
    b:
    while(scanf("%d",&choose)==0)
    {
    	printf("您输入的格式错误,请重新输入:\n");
    	fflush(stdin);
    	goto b;
	}
	switch(choose)
    {
        case 1:;break;
        case 2:return;break;
        default:printf("没有该序号,请重新输入:");goto b;
    }
    if(strcmp(deletename,tempname)==0)
    {
        printf("\n按任意键返回删除成绩!\n\n");
        system("pause");
        return;
    }
    for(i=0;i<count;i++)
    {
        if(strcmp(deletename,stu[i].name)==0)
        {
            searchindex=i;
            break;
        }
    }
    if(searchindex==-1)
    {
        printf("\n很遗憾,未能找到所要删除选手的姓名!\n");
        printf("\n按任意键返回菜单\n\n");
        system("pause");
        return;
    }
    else
    {
        for(i=searchindex;i<count-1;i++)
        {
            strcpy(stu[i].cla,stu[i+1].cla);
            stu[i].num=stu[i+1].num;
            strcpy(stu[i].name,stu[i+1].name);
            stu[i].score[0]=stu[i+1].score[0];
            stu[i].score[1]=stu[i+1].score[1];
            stu[i].score[2]=stu[i+1].score[2];
            stu[i].score[3]=stu[i+1].score[3];
            stu[i].score[4]=stu[i+1].score[4];
            stu[i].score[5]=stu[i+1].score[5];
            stu[i].score[6]=stu[i+1].score[6];
            stu[i].score[7]=stu[i+1].score[7];
            stu[i].score[8]=stu[i+1].score[8];
            stu[i].score[9]=stu[i+1].score[9];
            stu[i].aver=stu[i+1].aver;
        }
        count--;
    }
    printf("\n");
    printf("\n删除成功!\n\n");
    if(count==0)
    {
        printf("\n目前没有选手信息,请返回菜单录入!\n\n");
        system("pause");
        return;
    }
    //system("cls");
    printf("\n删除成功!\n\n");
    printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
    printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
    printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
    for(i=0;i<count;i++)
         printf("%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n\n",stu[i].cla,stu[i].num,stu[i].name,
                   stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);

    printf("\n按任意键返回菜单\n\n");
    system("pause");
    return;
}


//删除数据
void dell(struct Student stu[])
{
    void delnum(struct Student stu[]);
    void delname(struct Student stu[]);
    void save(struct Student stu[]);
    int choose;
    if(count==0)
    {
        printf("\n\n您尚未录入选手信息,请返回菜单进行录入!\n\n");
        system("pause");
        return;
    }
    choose:
    fflush(stdin);   //删除成绩页面菜单
    printf("\n\t\t\t\t\t     删除分数\n\n");
    printf("当前信息如下:\n");
    print(p);
    printf("\t\t\t\t********************************\n\n");
    printf(" \t\t\t\t\t   1.按编号删除\n\n\t\t\t\t\t   2.按姓名删除\n\n\t\t\t\t\t   3.退出!\n\n");
    printf("\t\t\t\t********************************\n\n");
    printf("请输入删除方式:");
    a:
    while(scanf("%d",&choose)==0)
    {
        printf("输入格式有误,请您重新输入:");
        fflush(stdin);
    }
    switch(choose)
    {
	    case 1:
	        delnum(p);
	        save(p);
	        system("cls");
	        goto choose;
	        break;
	    case 2:
	        delname(p);
	        save(p);
	        system("cls");
	        goto choose;
	        break;
	    case 3:
	        printf("\n退出!\n\n");
	        system("pause");
	        break;
	    default:
	        printf("没有该序号,请您重新输入:");goto a;
    }

}
/
//修改信息分数
void changescore(struct Student stu[])
{
    void save(struct Student stu[]);
    int i,j;
    int choose;
    int searchnum,tempnum;
    int searchindex=-1;
    if(count==0)
    {
        printf("\n您尚未录入学生信息,请返回菜单进行录入!\n");
        system("pause");
        return;
    }
    a:
    system("cls");
    printf("\n修改信息!\n\n");
    printf("当前信息如下:\n");
    print(p);
    printf("************************************************\n");
    printf("\n请输入修改学生的编号:(按-1返回菜单)");
    scanf("%d",&searchnum);
    fflush(stdin);
    if(searchnum==-1)
    {
        printf("\n按任意键返回菜单!\n\n");
        system("pause");
        return;
    }
   // system("cls");
    for(i=0;i<count;i++)
    {
        if(searchnum==stu[i].num)
        {
            searchindex=i;
            printf("\n该选手信息:\n");  //修改成绩页面菜
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("%-8s%-8d%-8s%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2lf%-8.2f%-8.2lf\n\n",stu[i].cla,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);
            printf("************************************************\n");
            printf("|1. 修改班级  \t       2. 修改编号      |\n");
            printf("|3. 修改姓名  \t       4. 修改评委一    |\n");
            printf("|5. 修改评委二\t       6. 修改评委三    |\n");
            printf("|7. 修改评委四\t       8. 修改评委五    |\n");
            printf("|9. 修改评委六\t      10. 修改评委七    |\n");
            printf("|11.修改评委八\t      12. 修改评委九    |\n");
            printf("|13.修改评委十\t        0.返回菜单\t  |\n");
            printf("************************************************\n");
            printf("请选择修改的信息:");
            choose:
            while(scanf("%d",&choose)==0)
            {
                printf("输入格式有误,请您重新输入:");
                fflush(stdin);
            }
            switch(choose)
            {
	            case 1:
	                fflush(stdin);
	                printf("请修改班级:");
	                while(scanf("%s",stu[i].cla)==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(strlen(stu[count].cla)>10)  //判断字符长度
	                {
	                    printf("班级输入不合理,请重新录入:");
	                    fflush(stdin);
	                    scanf("%s",stu[count].cla);
	                }
	                break;
                case 2:
	                fflush(stdin);
	                printf("请修改编号:");
	                w:
	                while(scanf("%d",&stu[i].num)==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                tempnum=stu[i].num;
	                stu[i].num=0;
	                for(j=0;j<count;j++)
	                {
	                    if(tempnum==stu[j].num)
	                    {
	                        printf("已有编号,请重新输入:\n");
	                        goto w;
	                    }
	                }
	                stu[i].num=tempnum;
	                break;
	            case 3:
	                fflush(stdin);
	                printf("请修改姓名:");
	                while(scanf("%s",stu[i].name)==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(strlen(stu[count].name)>10)  //判断字符长度
	                {
	                    printf("姓名输入不合理,请重新录入:");
	                    fflush(stdin);
	                    scanf("%s",stu[count].name);
	                }
	                break;
	            case 4:
	                fflush(stdin);
	                printf("请修改评委1:");
	                while(scanf("%f",&stu[i].score[0])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[0]<0||stu[i].score[0]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[0]);
	                }
	                break;
	            case 5:
	                fflush(stdin);
	                printf("请修改评委2:");
	                while(scanf("%f",&stu[i].score[1])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[1]<0||stu[i].score[1]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[1]);
	                }
	                break;
	            case 6:
	                fflush(stdin);
	                printf("请修改评委3:");
	                while(scanf("%f",&stu[i].score[2])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[2]<0||stu[i].score[2]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[2]);
	                }
	                break;
	            case 7:
	                fflush(stdin);
	                printf("请修改评委4:");
	                while(scanf("%f",&stu[i].score[3])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[3]<0||stu[i].score[3]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[3]);
	                }
	                break;
	            case 8:
	                fflush(stdin);
	                printf("请修改评委5:");
	                while(scanf("%f",&stu[i].score[4])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[4]<0||stu[i].score[4]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[4]);
	                }
	                break;
                case 9:
	                fflush(stdin);
	                printf("请修改评委6:");
	                while(scanf("%f",&stu[i].score[5])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[5]<0||stu[i].score[5]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[5]);
	                }
	                break;
	            case 10:
	                fflush(stdin);
	                printf("请修改评委7:");
	                while(scanf("%f",&stu[i].score[6])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[6]<0||stu[i].score[6]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[6]);
	                }
	                break;
	            case 11:
	                fflush(stdin);
	                printf("请修改评委8:");
	                while(scanf("%f",&stu[i].score[7])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[7]<0||stu[i].score[7]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[7]);
	                }
	                break;
	            case 12:
	                fflush(stdin);
	                printf("请修改评委9:");
	                while(scanf("%f",&stu[i].score[8])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[8]<0||stu[i].score[8]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[8]);
	                }
	                break;
	            case 13:
	                fflush(stdin);
	                printf("请修改评委10:");
	                while(scanf("%f",&stu[i].score[9])==0)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                }
	                while(stu[i].score[9]<0||stu[i].score[9]>100)
	                {
	                    printf("格式有误,请重新输入:");
	                    fflush(stdin);
	                    scanf("%f",&stu[i].score[4]);
	                }
	                break;
	            case 0:
	                printf("\n按任意键返回菜单!\n\n");
	                save(p);
	                return;
	            default:
	                printf("没有该序号,请您重新输入:");
	                goto choose;
            }//switch结尾处
            stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4]+stu[i].score[5]+stu[i].score[6]+stu[i].score[7]+stu[i].score[8]+stu[i].score[9];
            float Max,Min;
            Max=Min=stu[i].score[0];
            for(j=0;j<10;j++)
            {
            if(Max<stu[i].score[j])
             {
            Max=stu[i].score[j];
             }
            else if(Min>stu[i].score[j])
                {
             Min=stu[i].score[j];
                }
            }
            stu[i].aver=(stu[i].sum-Min-Max)/8.0;
            printf("\n修改成功:\n");
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("班级\t编号\t姓名\t评委1\t评委2\t评委3\t评委4\t评委5\t评委6\t评委7\t评委8\t评委9\t评委10\t总分\t平均分\n");
            printf("****\t****\t****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t*****\t******\t****\t******\n");
            printf("%-8s%-8d%-8s%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f%-8.2f\n\n",stu[i].cla,stu[i].num,stu[i].name,
                   stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].score[5],stu[i].score[6],
                   stu[i].score[7],stu[i].score[8],stu[i].score[9],stu[i].sum,stu[i].aver);

        }//if结束处
    }//for结束处
    if(searchindex==-1)
    {
        printf("\n很抱歉,未能找到该选手,请重新输入编号!\n\n");
        system("pause");
        goto a;
    }
    save(p);
    system("pause");
    return;
}

//成绩查询
void find(struct Student stu[])
{
    if(count==0)
    {
        printf("\n\n您尚未录入选手信息,请返回菜单进行录入!\n\n");
        system("pause");
        return;
    }
    int choose,n;
    system("cls");
    fflush(stdin);
    choose:   //成绩查询页面菜单
    printf("\n\t\t\t\t\t\t  选手分数查询\n\n");
    printf("\t\t\t\t\t*****************************\n\n");
    printf("\t\t\t\t\t |1.按编号查找 2.按姓名查找|\n\n");
    printf("\t\t\t\t\t |3.全部显示   4.返回菜单  |\n\n");
    printf("\t\t\t\t\t*****************************\n");
    printf("\t\t\t\t\t\n请输入查询方式:");
    a:
    while(scanf("%d",&choose)==0)
    {
        printf("输入格式有误,请您重新输入:");
        fflush(stdin);
    }
    switch(choose)
    {
	      case 1://按编号查找
	         findnum(p);
	         if(o==1)
            {
	         H:
	         printf("选择要进行的操作:1.修改分数\t2.删除分数\t3.返回菜单\n");
	         printf("输入操作:");
             //选择操作
             while(scanf("%d",&n)==0)
              {
              printf("输入格式有误,请您重新输入:");
              fflush(stdin);
              }
              switch(n)
              {
	           case 1://修改分数
	           changescore(p);
	           system("cls");
	           break;
               case 2://删除分数
               dell(p);
               system("cls");break;
	           case 3:
	           //printf("\n按任意键返回菜单!\n\n");
	           system("pause");
	           return;
	        //return;
	          default:
	          printf("没有该序号,请您重新输入:");goto H;
	          goto choose;
              }
	         }
	         else if(o==1)
	         {
            system("cls");
	        goto choose;
	        break;
	         }
          case 2://姓名查找
             findname(p);
	          if(o==1)
            {
                 //system("cls");
	         P:
	         printf("选择要进行的操作:1.修改分数\t2.删除分数\t3.返回菜单\n");
	         printf("输入操作:");
             //选择操作
             while(scanf("%d",&n)==0)
              {
              printf("输入格式有误,请您重新输入:");
              fflush(stdin);
              }
              switch(n)
              {
	           case 1://修改分数
	           changescore(p);
	           system("cls");
	           break;
               case 2://删除分数
               dell(p);
               system("cls");break;
	           case 3:
	           //printf("\n按任意键返回菜单!\n\n");
	           //system("pause");
	           return;
	        //return;
	          default:
	          printf("没有该序号,请您重新输入:");goto P;
	         // goto choose;
              }
	         }
	         else if(o==1)
	         {
            system("cls");
	        goto choose;
	        break;
	         }
            case 3:
                print(p);
	            system("cls");
	            goto choose;
	            break;
            case 4:
	            printf("\n按任意键返回菜单!\n\n");
	            system("pause");
	            return;
	        default:
	            printf("没有该序号,请您重新输入:");goto a;
    }
}
//*************************************
//************************************
//*************************************
//
//文件导入
void read(struct Student stu[])
{
    int i;
    FILE*fp;
    if((fp=fopen("student.bat","rb"))==NULL)
        return;
    for(i=0;i<1000;i++)
    {
        if(fread(&stu[i],sizeof(struct Student),1,fp)!=1)
        {
            if(feof(fp))
            {
                fclose(fp);
                goto a;
            }
            printf("file read error\n");
        }
        count++;  //存入一个,数据组数+1
    }
    fclose(fp);
    a:
    printf("\n导入文件已成功,祝您使用愉快!\n\n");
    printf("请按任意键进入页面菜单!\n\n");
    system("pause");
    return;
}
//*************************************
//*************************************
///文件存储
void save(struct Student stu[])
{
    int i;
    FILE*fp;
    fp=fopen("student.bat","wb");
    for(i = 0; i < count; i++)
    {
        if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1)
            printf("file write error\n");
    }
    fclose(fp);
    printf("\n已保存至文件student.bat中\n\n");
    //system("pause");
}
/

///颜色输出
void color(const unsigned short textColor)      //自定义函根据参数改变颜色
{
    if(textColor>=0 && textColor<=15){     //参数在0-15的范围颜色
         SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);  //用一个参数,改变字体颜色
     }
	else{                  //默认的字体颜色是白色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    }
}

//主函数
int main()
{
    system("color 3E"); //设置背景颜色
    //初始页面
    time_t timep;    //系统时间
	struct tm *p_1;
	time (&timep);
	p_1=gmtime(&timep);
	printf("@@@@@@@@@@@@当前时间%d时%d分@@@@@@@@@@@@@@@@@@@@@\n",8+p_1->tm_hour,p_1->tm_min);
	printf("@@@@@@@@@@@@  %d年%d月%d日 @@@@@@@@@@@@@@@@@@@@\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("★★     今日听君歌一曲,如听仙乐耳暂鸣!     ★★\n");
    printf("★★**************************************    ★★\n");
    printf("★★       校 园 歌 手 比 赛 系 统            ★★\n");
    printf("★★   制作者:多庸       学号:************    ★★\n\n");
    printf("★★ ***************************************  ★★\n\n");
    printf("★★  欢迎使用校园歌手比赛系统,祝您使用愉快!  ★★\n\n");
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
    printf("\t   ************************* \n");
    printf("\t   ************************* \n");
    printf("\t   ************************* \n");
    printf("\t   ************************* \n");
    printf("\t   ************************* \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t   *****               ***** \n");
    printf("\t********               ***** \n");
    printf("\t********          ********** \n");
    printf("\t********          ********** \n");
    printf("\t********          ********** \n");
	printf("请输入登陆密码!初次登录回车进入-\n");
    int sum2=0;
	while(1){
		yincangpassword(key,21);
		printf("\n");
		FILE *fpr=fopen("password.txt","r");
		fgets(password, 21, fpr);
		fclose(fpr);
		int n=strlen(key),m=strlen(password);
		if(n!=m){
			sum2++;
			if(sum2>=5){
                color(4);
				printf("多次输入密码错误!系统将关闭!请通过password.bat文件查看原密码!\n");
				sum2=0;
				exit(0);
			}
			printf("密码错误!请重新输入!你还有%d次机会!\n",5-sum2);
		}else{
			int sum1=0;
			for(int i=0;i<n;i++){
				if(key[i]!=password[i]){
					sum1++;
				}
			}
			if(sum1==0){
				printf("登录成功!\n");
					break;
			}else{
				sum2++;
				if(sum2>=5){
                    color(4);
					printf("多次输入密码错误!系统关闭!请通过password.bat文件查看原密码!\n");
					sum2=0;
					exit(0);
				}
				printf("密码错误!请重新输入!你还有%d次机会!\n",5-sum2);
			}
		}
	}
    read(p); //导入文件
    system("cls");
    //页面菜单
    menu:
    system("cls");
    time (&timep);
	p_1=gmtime(&timep);
    printf("\t\t\t\t\t\t   当前时间%d时%d分\n",8+p_1->tm_hour,p_1->tm_min);
	printf("\t\t\t\t\t\t    %d年%d月%d日\n",1900+p_1->tm_year,1+p_1->tm_mon,p_1->tm_mday);
    printf("\n");
    printf("\t\t\t\t\t\t    页  面  菜  单\n");
    printf("\n");
    printf("\t\t★————————————————————————————————————————★\n\n");
    printf("\t\t\t   | 1. 分数录入\t\t2. 分数显示\t\t3. 评委均分  |\n\n");
    printf("\t\t\t   | 4. 分数排序\t\t5. 分数查找\t\t6. 信息修改  |\n\n");
    printf("\t\t\t   | 7. 删除分数\t\t8. 修改密码\t\t0. 退出系统  |\n\n");
    printf("\t\t★————————————————————————————————————————★\n");

    printf("请选择相应序号:");
    int choose;
    while(scanf("%d",&choose)==0)
    {
        printf("格式错误,请重新输入:");
        fflush(stdin);
    }
    switch(choose)
    {
    	case 1:   //成绩录入
	        system("cls");
	        printf("选手分数录入\n");
	        input(p);
	        goto menu;
	    case 2:  //成绩显示和排序
	    	system("cls");
	        printf("选手分数显示\n");
	        print(p);
	        goto menu;
	    case 3:  //均科成绩
	    	system("cls");
			average(p);
			goto menu;
	    case 4:  //成绩排序
	    	 system("cls");
	        projectsort(p);
	        goto menu;
	    case 5:  //成绩查找
	        system("cls");
	        find(p);
	        goto menu;
	    case 6:  //成绩修改
		    system("cls");
	        changescore(p);
	        goto menu;
	    case 7:  //成绩删除
		    system("cls");
	        dell(p);
	        goto menu;
        case 8:  //密码修改
		    system("cls");
	        up();
	        break;
	    case 0: //退出系统
	        fflush(stdin);
	            Sleep(500);  //休眠
	            printf("欢迎下次继续使用本产品!\n");
	            printf("正在退出,请稍后.");
	            Sleep(500);
	            printf(">");
	            Sleep(500);
	            printf(">");
	            Sleep(500);
	            printf(">");
	            Sleep(500);
	            printf(">");
	            Sleep(500);
	            printf(">");
	            Sleep(500);
	            exit(0);
	        }
	}

猜你喜欢

转载自blog.csdn.net/qq_62315940/article/details/127891601