输入3个人的信息只会显示1个人的信息,输入俩人会正常显示,还有那个sort函数我不知道为什么rank一直不执行
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Stuedent
{ struct Stuedent* last;//上一个的地址
char num[12]; //编号
char name[10]; //姓名
int score[10]; //10个评委的成绩
float result; //最终成绩
int rank; //排名
struct Stuedent* next;//下一个的地址
};
int count=0; //总人数设为全局变量并赋初值为0
int Max=0;//方便Sort函数计算
struct Stuedent* Head;//方便定位链表头节点
int flag=1;
void Welcome(),Password(),Menu(),Input(),Insert(),Query(),Query_num(),Query_name(),Edit(),Edit_edit(),Edit_del(),Rank(),Output(),Sort(),Tip_1(),Tip_2();int Grade_max(),Grade_min();//用到的所有函数的声明
void Welcome()// 欢迎界面函数
{
system("title 程序设计课程设计"); //设置会话的窗口标题为“程序设计课程设计”
system("title 歌唱比赛成绩管理系统");
system("color F4"); //设置背景色为亮白色,字体颜色为红色
system("cls"); //清屏
printf("\n\n\t\t|----------------------------------------|\n");
printf("\t\t|----------------------------------------|\n");
printf("\t\t| 《程序设计》课程设计 |\n");
printf("\t\t| …………………………… |\n");
printf("\t\t|----------------------------------------|\n");
printf("\t\t|----------------------------------------|\n");
printf("\n\t\t 程序设计:新工科产业学院");
printf("\n\t\t 专业:软件工程\n");
printf("\n\t\t 班级:软工\n");
printf("\n\t\t 学号:202112900910\n");
printf("\n\t\t 姓名:\n");
printf("\n\t\t\t 2022年02月12日\n");
printf("请输入登录密码:");
Password();
}
void Password()
{
char pw[3]="10",PW[3];
gets(PW);
if(strcmp(PW,pw)==0) //判断两个字符串是否相等(不能直接用“==”,只能用字符串比较函数)
Menu();
else
{ printf("\n密码错误请重新输入\n");
Password();
system("cls");
}
}
void Menu() //菜单界面函数
{
printf("\t…………\n");
system("cls");
printf("\t1.参赛选手成绩录入\n");
printf("\t2.参赛选手成绩查询\n");
printf("\t3.参赛选手编辑\n");
printf("\t4.参赛选手排名及统计\n");
printf("\t5.参赛选手成绩显示\n");
printf("\t6.退出系统\n");
printf("\t…………\n");
printf("\t请选择菜单选项1-6:");
switch(getchar())
{
case '1':system("cls");Input();break;
case '2':system("cls");Query();break;
case '3':system("cls");Edit();break;
case '4':system("cls");Rank();break;
case '5':system("cls");Output();break;
case '6':printf("\n欢迎再次使用本系统!\n祝您身体健康,工作顺利!\n");system("pause");Welcome();exit(0);break;
default:printf("\n输入指令错误,请重新输入!\n");system("pause");Menu();
}
}
int Grade_max(int a,int b, int c,int d,int e,int f,int g,int h,int i,int j)
{
int max;int arr[10]={a,b,c,d,e,f,g,h,i,j},k;
max=arr[1];
for(k=1;k<=9;k++)
{
if(max<arr[k])
{
max=arr[k];
}
}
return max;
}
int Grade_min(int a,int b, int c,int d,int e,int f,int g,int h,int i,int j)
{
int min;int arr[10]={a,b,c,d,e,f,g,h,i,j},k;
min=arr[1];
for(k=1;k<=9;k++)
{
if(min<arr[k])
{
min=arr[k];
}
}
return min;
}
void Tip_1()
{
fflush(stdin);
switch(getchar())
{
case 'C':Insert();break;
case 'c':Insert();break;
case'S':Output();printf("\n请检查是否信息有误,如需修改请输入1(/ω\*):");fflush(stdin);if(getchar()=='1')Edit_edit();break;
case's':Output();printf("\n请检查是否信息有误,如需修改请输入1(/ω\):");fflush(stdin);if(getchar()=='1')Edit_edit();break;
default:printf("指令错误,请重新输入!!!(~ ̄▽ ̄)~:\n");Tip_1();
}
}
void Tip_2()
{
fflush(stdin);
switch(getchar())
{
case'M':Menu();break;
case'm':Menu();break;
default:printf("指令错误,请重新输入!!!(~ ̄▽ ̄)~:\n");Tip_2();
}
}
void Insert()
{
struct Stuedent * head,*p1,*head_1;int a,min,max,b=0;
p1=Head;
do{
head_1=p1->next;
p1=p1->next;
}while(p1->next!=NULL);
head=(struct Stuedent)malloc(sizeof(struct Stuedent));
head->last=p1;
p1->next=head;
head->result=0;
printf("请输入选手的编号:\n");scanf("%s",&head->num);
printf("请输入选手的名字:\n");scanf("%s",&head->name);
for(a=0;a<=9;a++)
{
printf("请输入选手的成绩:");scanf("%d",&head->score[a]);
}
min=Grade_min(head->score[0],head->score[1],head->score[2],head->score[3],head->score[4],head->score[5],head->score[6],head->score[7],head->score[8],head->score[9]);
max=Grade_max(head->score[0],head->score[1],head->score[2],head->score[3],head->score[4],head->score[5],head->score[6],head->score[7],head->score[8],head->score[9]);
for(a=0;a<=9;a++)//计算实际分数
{
b+=head->score[a];
}
head->result=(b-max-min)/8.0;
head->next=NULL;
printf("是否继续输入???\t是请输入C或者cヾ(≧▽≦*)o否请输入S或者s:");
Tip_1();
}
void Input() //录入选手成绩信息函数
{
struct Stuedent * head,p1;int a,b=0,min,max;char ch;
if(flag)
{
head=Head=(struct Stuedent)malloc(sizeof(struct Stuedent));
flag=0;
}
if(Head==NULL)
{
printf("开辟内存失败!!!");
exit(1);
}
head->last=NULL;
p1=(struct Stuedent*)malloc(sizeof(struct Stuedent));
p1->last=head;
p1->result=0;
printf("请输入选手的编号:\n");scanf("%s",&p1->num);
printf("请输入选手的名字:\n");scanf("%s",&p1->name);
for(a=0;a<=9;a++)
{
printf("请输入选手的成绩:");scanf("%d",&p1->score[a]);
}
min=Grade_min(p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->score[4],p1->score[5],p1->score[6],p1->score[7],p1->score[8],p1->score[9]);
max=Grade_max(p1->score[0],p1->score[1],p1->score[2],p1->score[3],p1->score[4],p1->score[5],p1->score[6],p1->score[7],p1->score[8],p1->score[9]);
for(a=0;a<=9;a++)//计算实际分数
{
b+=p1->score[a];
}
p1->result=(b-max-min)/8.0;
head->next=p1;
p1->next=NULL;
count+=1;
printf("是否继续输入???\t是请输入C或者cヾ(≧▽≦*)o否请输入S或者s:");
Tip_1();
printf("回到菜单请输入M或者mヾ(≧▽≦*)o:");
Tip_2();
}
void Sort()
{
struct Stuedent * head,*p1;int arr[count],a=0,b=0,max=0,tmp;
printf("执行判断");
p1=Head->next;
do
{
arr[a]=p1->result;
p1=p1->next;
a+=1;
}while(p1->next!=NULL);
for(a=0;a<count-1;a++)
{
for(b=0;b<count-1-a;b++)
if(arr[b]<arr[b+1])
{
tmp=arr[b];
arr[b]=arr[b+1];
arr[b+1]=tmp;
}
}
b=0;
do{
if(p1->result==arr[b])
{
p1->rank=b+1;
p1=Head;
b+=1;
}
p1=p1->next;
}while(p1!=NULL);
}
void Query() //按编号查找选手成绩信息函数
{
system("cls");
printf("1.使用编号查询\n");
printf("2.使用姓名查询\n");
printf("\t请选择菜单选项1-?:");
switch(getchar())
{
case '1':Query_num();break;
case '2':Query_name();break;
default:printf("指令输入错误,请重新输入!!!╰(°▽°)╯╰(°▽°)╯╰(°▽°)╯ ");system("pause");system("cls");Query();
}//调用Query_num()、Query_name()等函数
}
void Query_num() //按编号查找选手成绩信息函数
{
struct Stuedent * head,*p1;char NUM[12];
printf("\n请输入要查询的编号:");
gets(NUM);
p1=head->next;
do
{
if(p1->num==NUM)
Output();
p1=p1->next;
}while(p1->next==NULL);
}
void Query_name() //按姓名查找选手成绩信息函数
{
struct Stuedent * head,*p1;char NAME[10];
printf("\n请输入要查询的编号:");
gets(NAME);
p1=head->next;
do
{
if(p1->name==NAME)
Output();
p1=p1->next;
}while(p1->next==NULL);
}
void Edit() //编辑选手成绩信息菜单
{
system("cls");
printf("\t1.选手信息的修改\n");
printf("\t2.选手信息的删除\n");
printf("\t3.返回上一个菜单");
printf("\t请选择菜单选项1-?:");
switch(getchar())
{
case '1':Edit_edit();break;
case '2':Edit_del();break;
case '3':Menu();break;
default:printf("指令输入错误,请重新输入!!!╰(°▽°)╯╰(°▽°)╯╰(°▽°)╯ ");system("pause");system("cls");Edit();
}//调用Edit_edit()、 Edit_del() 等函数
}
void Edit_edit() // 选手信息修改函数
{
struct Stuedent * head,*p1;char NUM[12];int a;
p1=Head->next;
printf("请输入要修改选手的编号:");
do
{
if(p1->num==NUM)
break;
p1=p1->next;
}while(p1->next==NULL);
printf("请输入要修改选手的名字:");
scanf("%s",&p1->name);
for(a=0;a<=9;a++)
{
printf("请输入要修改成绩数据a+1:");
scanf("%s",&p1->score[a]);
}
}
void Edit_del() // 选手信息删除函数
{
struct Stuedent * head,*p1,*p2;char NUM[12];int a,flag;
p1=Head->next;
printf("请输入要删除选手的编号:(●'?'●)");
do
{
if(p1->num==NUM)
{
p2=p1;
break;
}
p1=p1->next;
}while(p1->next==NULL);
printf("您要删除的选手信息为:\n");
printf("选手的编号是%s\n",p1->num);
printf("选手的名字是%s\n",p1->name);
printf("选手的成绩1是%d\n",p1->score[0]);
printf("选手的成绩2是%d\n",p1->score[1]);
printf("选手的成绩3是%d\n",p1->score[2]);
printf("选手的成绩4是%d\n",p1->score[3]);
printf("选手的成绩5是%d\n",p1->score[4]);
printf("选手的成绩6是%d\n",p1->score[5]);
printf("选手的成绩7是%d\n",p1->score[6]);
printf("选手的成绩8是%d\n",p1->score[7]);
printf("选手的成绩9是%d\n",p1->score[8]);
printf("选手的成绩10是%d\n",p1->score[9]);
printf("选手的去极平均分为:%.1f\n",p1->result);
printf("选手的排名为%d",p1->rank);
printf("确认删除请输入(Y/y)不是请输入(N/n)(●'?'●)");
do
{
switch(getchar())
{
case'Y'||'y':
flag=0;
head=p2->last;
head->next=p1->next;
free(p1);
if(p1==NULL)
printf("删除成功(●'?'●)");
flag=0;
break;
case'N':printf("取消成功!!!(●'?'●)");break;
case'n':printf("取消成功!!!(●'?'●)");break;
default:flag=1;printf ("请重新输入");
}
}while(flag);
system("cls");
Edit();
}
void Rank() //按选手最终成绩降序排序并显示
{
struct Stuedent * head,*p1;int a;
p1=Head->next;
do
{
for(a=1;a<=count;a++)
if(a==p1->rank)
{
printf("选手的编号是%s\t\t",p1->num);
printf("选手的名字是%s\n",p1->name);
printf("选手的成绩1是%d\t",p1->score[0]);
printf("选手的成绩2是%d\t",p1->score[1]);
printf("选手的成绩3是%d\t",p1->score[2]);
printf("选手的成绩4是%d\t",p1->score[3]);
printf("选手的成绩5是%d\t",p1->score[4]);
printf("选手的成绩6是%d\t",p1->score[5]);
printf("选手的成绩7是%d\t",p1->score[6]);
printf("选手的成绩8是%d\t",p1->score[7]);
printf("选手的成绩9是%d\t",p1->score[8]);
printf("选手的成绩10是%d\n",p1->score[9]);
printf("选手的去极平均分为:%.1f",p1->result);
printf("选手的排名为%d",p1->rank);
system("pause");
}
p1=p1->next;
}while(a<count);
}
void Output_1(struct Student *p)
{
}
void Output() //输出选手成绩信息函数
{ struct Stuedent * head,*p1;
Sort();
p1=Head->next;
do
{
printf("选手的编号是%s\n",p1->num);
printf("选手的名字是%s\n",p1->name);
printf("选手的成绩1是%d\n",p1->score[0]);
printf("选手的成绩2是%d\n",p1->score[1]);
printf("选手的成绩3是%d\n",p1->score[2]);
printf("选手的成绩4是%d\n",p1->score[3]);
printf("选手的成绩5是%d\n",p1->score[4]);
printf("选手的成绩6是%d\n",p1->score[5]);
printf("选手的成绩7是%d\n",p1->score[6]);
printf("选手的成绩8是%d\n",p1->score[7]);
printf("选手的成绩9是%d\n",p1->score[8]);
printf("选手的成绩10是%d\n",p1->score[9]);
printf("选手的去极平均分为:%.1f\n",p1->result);
printf("选手的排名为%d\n",p1->rank);
p1=p1->next;
}while(p1==NULL);
}
int main()
{
Welcome(); //调用欢迎界面函数
Password(); //调用菜单界面函数
return 0;
}
请输入选手的编号:
1
请输入选手的名字:
dfa
请输入选手的成绩:1
请输入选手的成绩:2
请输入选手的成绩:3
请输入选手的成绩:4
请输入选手的成绩:5
请输入选手的成绩:6
请输入选手的成绩:7
请输入选手的成绩:8
请输入选手的成绩:9
请输入选手的成绩:10
是否继续输入??? 是请输入C或者cヾ(≧▽≦*)o否请输入S或者s:c
请输入选手的编号:
2
请输入选手的名字:
sdf
请输入选手的成绩:1
请输入选手的成绩:2
请输入选手的成绩:3
请输入选手的成绩:4
请输入选手的成绩:5
请输入选手的成绩:6
请输入选手的成绩:7
请输入选手的成绩:89
请输入选手的成绩:9
请输入选手的成绩:10
是否继续输入??? 是请输入C或者cヾ(≧▽≦*)o否请输入S或者s:s
执行判断选手的编号是1
选手的名字是dfa
选手的成绩1是1
选手的成绩2是2
选手的成绩3是3
选手的成绩4是4
选手的成绩5是5
选手的成绩6是6
选手的成绩7是7
选手的成绩8是8
选手的成绩9是9
选手的成绩10是10
选手的去极平均分为:4.4
选手的排名为1934974010
请检查是否信息有误,如需修改请输入1(/ω\):