设计一个游泳运动员成绩管理系统,我自己零零碎碎的写了,但是有错,不怎么会改,改成正确的,能正常运行就可以
```#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct Student{ //每个运动员对应一个结构体
char ID[20];//编号
char Name[10];//姓名
float wy;//蛙泳金牌数
float yy;//仰泳金牌数
float dy;//蝶泳金牌数
float zyy;//自由泳金牌数
float All; //总金牌数
float pro;//省份
}students[1000];
int num=0; //计数器
void Welcome(),Password(),Menu(),Load(),Input(),Edit(),deletee(),insert(),display(),search(),sort(),Save();//要用到的函数
void Copy(struct Student *arr,int i,int j)
{
strcpy(arr[i].ID,arr[j].ID);
strcpy(arr[i].Name,arr[j].Name);
arr[i].wy = arr[j].wy;
arr[i].yy = arr[j].yy;
arr[i].dy = arr[j].dy;
arr[i].zyy = arr[j].zyy;
arr[i].All = arr[j].All;
arr[i].pro = arr[j].pro;
}
int Student_SearchByName(char name[])//通过姓名来检索运动员
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].Name,name)==0) //通过strcmp函数来对比运动员姓名,找到返回在数组的位置
{
return i;
}
}
return -1; //未找到返回 -1
}
int Student_SearchByIndex(char id[])//通过编号来检索运动员信息
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(students[i].ID,id)==0) //通过strcmp函数来对比学生id,找到返回位置
{
return i;
}
}
return -1; //未找到返回 -1
}
void Student_DisplaySingle(int index)//输出表头
{
printf("%10s%10s%8s%8s%8s%10s\n","编号","姓名","蛙泳金牌数","仰泳金牌数 ","蝶泳金牌数 ","自由泳金牌数 ","总成绩","省份");
printf("-\n");
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",stud
ents[index].ID,students[index].Name,
students[index].wy,students[index].yy,students[index].dy,students[index].zyy,students[index].All,students[index].pro);
}
void Welcome()// 欢迎界面函数
{ system("color F5"); //设置背景色为亮白色,字体颜色为紫色
printf("\t\t|----------------------------------------------|\n");
printf("\t\t| 欢迎进入 |\n");
printf("\t\t| 游泳运动员成绩管理系统 |\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t| 设计者:才小呆 |\n");
printf("\t\t|----------------------------------------------|\n");
}
void Password()//输入密码
{
char mm[20];
printf("\n\n\n");
printf("\t\t 请输入登录密码:");
gets(mm);
if(strcmp(mm,"00")==0)//判断两个字符串是否相等(不能直接用“==”,只能用字符串比较函数)
Menu();
else
{
printf("\n");
printf("\t\t 输入密码有误,请重新输入......\n");
Password();
}
}
void Menu() //菜单
{ int i;
while(1){
Load();
system("cls");
printf("\t|--------------------------------------------------|\n");
printf("\t| |\n");
printf("\t| 运动员成绩管理 |\n");
printf("\t| |\n");
printf("\t| 1.录入运动员信息 2.修改运动员信息 |\n");
printf("\t| |\n");
printf("\t| 3.删除运动员信息 4.插入运动员信息 |\n");
printf("\t| |\n");
printf("\t| 5.显示运动员信息 6.查询运动员信息 |\n");
printf("\t| |\n");
printf("\t| 7.按总金牌数排序 0.退出系统 |\n");
printf("\t| |\n");
printf("\t|--------------------------------------------------|\n");
printf("\t请在(0—7)选择要进行的操作!\n"); //菜单的主页面
scanf("%d",&i);
switch(i){
case 1:Input();break;
case 2:Edit();break;
case 3:deletee();break;
case 4:insert();break;
case 5:display();break;
case 6:search();break;
case 7:sort();break;
case 0:exit(0);
default: ;
}
Save();
}
return;
}
void Input()//利用循环录入运动员信息
{
while(1)
{
printf("请输入编号:");
scanf("%s",&students[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[num].Name);
getchar();
printf("请输入蛙泳金牌数:");
scanf("%f",&students[num].wy);
getchar();
printf("请输入仰泳金牌数:");
scanf("%f",&students[num].yy);
getchar();
printf("请输入蝶泳金牌数:");
scanf("%f",&students[num].dy);
getchar();
printf("请输入自由泳金牌数:");
scanf("%f",&students[num].zyy);
getchar();
printf("请输入省份:");
scanf("%f",&students[num].pro);
getchar();
//依次输入各项数据
students[num].All=students[num].wy+students[num].yy+students[num].dy+students[num].zyy; //输完数据后自动计算总金牌数
if(Student_SearchByIndex(students[num].ID) == -1)
{
num++; //移向下一个位置
}
else
{
printf("编号重复,输入数据无效 !!!\n");
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void Edit()//修改成绩
{
while(1)
{
char id[20];
int index;
printf("请输入要修改的运动员的编号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
if (index==-1)
{
printf("运动员不存在!\n");
}
else
{
printf("你要修改的运动员信息为:\n");
Student_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入编号:");
scanf("%s",&students[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[index].Name);
getchar();
printf("请输入蛙泳金牌数:");
scanf("%f",&students[index].wy);
getchar();
printf("请输入仰泳金牌数:");
scanf("%f",&students[index].yy);
getchar();
printf("请输入蝶泳金牌数:");
scanf("%f",&students[index].dy);
getchar();
printf("请输入自由泳金牌数:");
scanf("%f",&students[index].zyy);
getchar();
printf("请输入省份:");
scanf("%f",&students[index].pro);
getchar(); //重新录入一套新的数据替代
students[index].All=students[index].wy+students[index].yy+students[index].dy+students[index].zyy;
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void deletee()//删除运动员信息
{
int i;
while(1)
{
char id[20];
int index;
printf("请输入要删除的运动员的编号:");
scanf("%s",&id);
getchar();
index=Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置
if (index==-1)
{
printf("运动员不存在!\n");
}
else
{
printf("你要删除的运动员信息为:\n");
Student_DisplaySingle(index);
printf("是否真的要删除?(y/n)");
if (getchar()=='y')
{
for (i=index;i<num-1;i++)
{
Copy(students,i,i+1);
//students[i]=students[i+1]; //把后边的对象都向前移动
}
num--;
}
getchar();
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void insert()//指定位置插入学生信息
{
int a,b,c;
printf("请输入你要插入的位置");
scanf("%d",&a);
if(a>num) {
printf("输入的位置有误,请重新输入,当前共%d条数据\n",num);
scanf("%d",&a);}
b=num-1;
for(;b>=a-1;b--)
{
//strcpy(students[b+1].ID,students[b].ID);
//strcpy(students[b+1].Name,students[b].Name);
//students[b+1].wy=students[b].wy;
//students[b+1].yy=students[b].yy;
//students[b+1].dy=students[b].dy;
//students[b+1].zyy=students[b].zyy;
//students[b+1].All=students[b].All;
//students[b+1].pro=students[b].pro;
Copy(students,b+1,b); //根据其输入的位置,将其及以后的数据向后移动一个位置
}
num++;
printf("请输入编号:");
scanf("%s",&students[a-1].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&students[a-1].Name);
getchar();
printf("请输入蛙泳金牌数:");
scanf("%f",&students[a-1].wy);
getchar();
printf("请输入仰泳金牌数:");
scanf("%f",&students[a-1].yy);
getchar();
printf("请输入蝶泳金牌数:");
scanf("%f",&students[a-1].dy);
getchar();
printf("请输入自由泳金牌数:");
scanf("%f",&students[a-1].zyy);
getchar();
printf("请输入省份:");
scanf("%f",&students[a-1].pro);
getchar();
//输入新数据
students[a-1].All=students[a-1].wy+students[a-1].yy+students[a-1].dy+students[a-1].zyy;
}
void display()//显示已录入的运动员信息
{
int a;
printf("%10s%10s%8s%8s%8s%8s%10s%10s\n","编号","姓名","蛙泳金牌数","仰泳金牌数 ","蝶泳金牌数 ","自由泳金牌数 ","总成绩","省份");
printf("-------------------------------------------------------------\n");
for (a=0;a<num;a++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[a].ID,students[a].Name,
students[a].wy,students[a].yy,students[a].dy,students[a].zyy,students[a].All,students[a].pro);
}
}
void search()//查询运动员信息
{
while(1)
{
char name[20];
int index;
printf("请输入要查询的运动员的姓名:");
scanf("%s",&name);
getchar();
index=Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置
if (index==-1)
{
printf("运动员不存在!\n");
}
else
{
printf("你要查询的运动员信息为:\n");
Student_DisplaySingle(index);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{
break;
}
}
}
void sort()//根据总金牌数排序
{
int i,j;
//struct students tmp;
for (i=0;i<num;i++)
{
students[i].All=students[i].wy+students[i].yy+students[i].dy+students[i].zyy;
}
for (i=0;i<num;i++)
{
for (j=1;j<num-i;j++)
{
if (students[j-1].All<students[j].All)
{
Copy(students,num,j-1);
Copy(students,j-1,j);
Copy(students,j,num);
//tmp=students[j-1];
//students[j-1]=students[j];
//students[j]=tmp; //冒泡排序
}
}
}
int a;
printf("%10s%10s%8s%8s%8s%8s%10s%10s\n","编号","姓名","蛙泳金牌数","仰泳金牌数 ","蝶泳金牌数 ","自由泳金牌数 ","总成绩","省份");
printf("-------------------------------------------------------------\n");
for (a=0;a<num;a++)
{
printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[a].ID,students[a].Name,
students[a].wy,students[a].yy,students[a].dy,students[a].zyy,students[a].All,students[a].pro);
}
}
void Save()
{
FILE*fp = fopen("temp.txt","w+");
fprintf(fp,"%d\n",num);
for(int i = 0 ; i< num ;i++)
{
fprintf(fp,"%s %s %f %f %f %f %f %f\n",students[i].ID,students[i].Name,students[i].wy,students[i].yy,students[i].dy,students[i].zyy,students[i].All,students[i].pro);
}
fclose(fp);
}
void Load()
{
FILE*fp = fopen("temp.txt","r");
fscanf(fp,"%d",&num);
for(int i = 0 ; i< num ;i++)
{
fscanf(fp,"%s %s %f %f %f %f %f %f\n",students[i].ID,students[i].Name,&students[i].wy,&students[i].yy,&students[i].dy,&students[i].zyy,&students[i].All,&students[i].pro);
}
fclose(fp);
}