/*实验:校园歌手比赛系统
作者:多庸
学号:
实验要求:输入输出 增添删除 导入储存 */
#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);
}
}
C语言 校园歌手比赛系统源码
于 2022-11-16 19:37:39 首次发布