#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<malloc.h>
# define LEN sizeof(player)
# define N 10
int i,j,t,num;
extern char name[50];
struct player //定义结构体
{
char name[50]; //选手姓名
float grade[N]; //评委评分或选手成绩
float sum; //总分
float ave; //平均分
int paiming; //排名
struct player *next;
};
player * head; //头指针
player * tail; //尾指针
int n=0;
void land(); //管理者与选手选择页面
void visitor(); //选手页面
void menu_select(); //菜单选择
void creat(); //建立单向动态链表。此函数带回一个指向链表头的指针,用于录入选手信息
struct player *search(struct player *head, char name[]); //用于查询选手成绩
struct player *del(struct player *head,char name[]); //删除选手信息
void show_Original(struct player *head); //显示初始成绩
void Grade(struct player *head); //显示最终成绩
struct player *rank( struct player * head); //排序函数(按成绩)
void ranksave( struct player *head); //成绩保存函数
void save(struct player *head); //选手信息保存
void exit(); //退出系统
void land() //登录界面函数
{
printf("\n ----------------------- 欢迎使用比赛评分系统! ---------------------- \n");
printf(" -----------------------------------------------------------\n");
printf(" 1.管理员登陆\n");
printf(" 2.选手登陆\n");
printf(" 3.退出系统\n");
printf(" -----------------------------------------------------------\n");
char choose;
scanf(" %c",&choose);
switch(choose)//功能函数
{
case'1':
system("cls");
menu_select();
break;
case '2':
system("cls");
visitor();
break;
land();
case '3':
system("cls");
exit();
getch();
system ("cls");
break;
}
system("cls");
}
void visitor() //选手菜单界面
{
printf("\n ----------------------- 欢迎使用比赛评分系统! ---------------------- \n");
printf("\n ----------------------- 选手系统 ---------------------- \n");
printf(" 1.成绩查询 \n");
printf(" 2.返回上一级. |\n");
printf(" -----------------------------------------------------------\n");
int c;
scanf("%d",&c); //用户输入是数字还是字符 gets都能输入系统 //利用atoi函数将字符转化成数值
if(c<1||c>2)
{
printf("输入有误,请重新输入:");
scanf("%d",&c);
}
else
{switch(c){
case 1: system("cls");
printf("请输入你的姓名:\n"); //参赛选手查询成绩
scanf("%s",name);
getchar();
search(head,name);
system("pause");
getch();
break;
case 2: system("cls"); land(); //返回上一级
getch();
exit(0);
system ("cls");
break;
}
}
}
void menu_select() //菜单选择界面
{
int c;
printf("\n ----------------------- 欢迎使用比赛评分系统! ---------------------- \n");
printf("\n ----------------------- 管理员系统 ---------------------- \n");
printf(" 1.增加选手信息. \n");
printf(" 2.输入选手信息录入. \n");
printf(" 3.显示选手成绩. \n");
printf(" 4.保存初始数据. \n");
printf(" 5.进行成绩排名并保存. \n");
printf(" 6.显示选手最终成绩 . \n");
printf(" 7.根据选手姓名查成绩 . \n");
printf(" 8. 删除选手信息. \n");
printf(" 9. 返回上一级. \n");
printf(" -----------------------------------------------------------\n");
scanf("%d",&c); //用户输入是数字还是字符 gets都能输入系统
while(1) //限定用户输入的数值为1-9才有效,否则重输
{
if(c<1||c>9)
{
printf("输入有误,请重新输入:");
getchar();
}
else
switch(c)
{
case 1: system("cls"); //增加选手信息
getch();
printf("********请输入选手成绩*********:\n");
creat();
system("pause");
getch();
break;
case 2: system("cls"); creat(); //选手信息录入
break;
case 3: system("cls"); show_Original(head); //显示初始成绩
system("pause");
getch();
system("cls");
break;
break;
case 4: system("cls"); save(head); //初始选手信息保存
system("pause");
break;
case 5: system("cls");
rank(head); //排序
ranksave(head); //保存选手最终成绩
system("pause");
getchar();
system("cls");
break;
case 6: system("cls"); Grade(head); //显示最终成绩
system("pause");
break;
case 7: system("cls"); //查询成绩
getchar();
printf("请输入查询选手的姓名:\n");
scanf("%s",name);
getchar();
search(head,name);
system("pause");
getchar();
system("cls");
break;
case 8: system("cls"); //选手信息删除
char del_name[100]; //del_name为删除选手名字
printf("********删除退赛选手*********:\n");
printf("请输入退赛选手的名字(输入0返回):\n");
scanf("%s",del_name);
getchar();
while(strcmp(del_name,"0")!=0)
{
del(head,del_name);
system("pause");
getchar();
printf("请输入退赛选手的名字(不继续删除请输入 0 ):\n");
scanf("%s",&del_name);
}
system("cls");
break;
case 9: system("cls"); land(); //返回上一级
getch();
exit(0);
system ("cls");
break;
}
getchar();
system("cls");
menu_select();
}
}
void creat() //创建链表函数
{
struct player *p,*p1; //p用来开辟新节点
int i,j;
float t;
p1=NULL;
p=(struct player*)malloc(LEN); //申请内存分配
printf("请输入参赛选手 %d 的姓名:\n",num+1); //输入姓名
scanf("%s", &p->name);
printf("请输入各个评委的打分(0-10):\n");
for (i = 0; i < 10; i++)
{
scanf("%f",&p->grade[i]); //输入分数
while(p->grade[i]<0||p->grade[i]>10){
printf("输入错误,请重输:\n");
scanf("%f",&p->grade[i]);
}
p->ave+=p->grade[i];
}
for(i=0;i<N-1;i++) { //冒泡排序
for(j=0;j<N-1-i;j++){
if(p->grade[j]>p->grade[j+1])
{
t=p->grade[j];
p->grade[j]=p->grade[j+1];
p->grade[j+1]=t;
}
评论0