|
50鱼币
/****头文件****/
#include <stdio.h> // I/O函数
#include <stdlib.h> // 其它说明
#include <string.h> // 字符串函数
#include <conio.h> // 屏幕操作函数
/****宏定义****/
#define N 10 // 参赛学校总数为10
#define M 10 // 男子竞赛项目数为10
#define W 10 // 女子竞赛项目数为10
#define Men 2 // 男子运动员数为2
#define Women 2 // 女子运动员数为2
/****定义结构体****/
struct SCHOOL //声明一个结构体类型 struct SCHOOL
{
int name; // 学校名称为整型
int ranking; // 学校名次为整型
int score; // 学校得分为整型
};
struct STUDENT //声明一个结构体类型struct STUDENT
{
struct SCHOOL school; // 成员school属于struct SCHOOL类型
long number; // 参赛号码为长整形
char name[15]; // 姓名为字符型
char sex[5]; // 性别为字符型
char sport[15]; // 参赛项目为字符型
int ranking; // 名次为整型
int score; // 得分为整型
}student[Men+Women],*p_student;
/****定义全局文件类型指针变量****/
FILE *fp;
/****定义子函数****/
void shuru (); // 1:登记比赛结果
void xiugai (); // 2:修改
void chaxun (); // 3:查询
void chaxun_school (); // 输出查询的学校得分情况
void chaxun_student (); // 输出查询的运动员得分情况
void shuchu (); // 4:显示结果
void shuchu_school (); // 输出学校团队得分情况
void shuchu_student (); // 输出全体运动员得分情况
void paixu_student (struct STUDENT *); // 对运动员进行冒泡排序
int mingci (int); // 名次->得分
/****主函数****/
main ()
{
char ch;
printf("\n\n");
printf(" **************欢迎使用校际运动会管理系统**************\n\n");
printf(" ————————————主菜单————————————\n");
printf(" * * \n");
printf(" * ◆ 1:登记比赛结果 ◆ 2:修改信息 * \n");
printf(" * * \n");
printf(" * ◆ 3:查询信息 ◆ 4:显示结果 * \n");
printf(" * * \n");
printf(" * ◆ 0:退出系统 * \n");
printf(" * * \n");
printf(" ———————————————————————————\n\n");
printf(" 请您在上述功能中选择(0 — 4):");
/****进入子函数****/
while (1)
{
ch=getchar(); //从键盘输入一个字符,送给字符变量ch
switch (ch)
{
case '0': exit(0);
case '1': shuru (); break; // 使流程跳到循环体之外
case '2': xiugai (); break;
case '3': chaxun (); break;
case '4': shuchu (); break;
default: printf("输入错误,请重新输入。\n");
getchar();
continue; // 结束本次循环
}
}
getch();
}
/****1:登记比赛结果****/
void shuru ()
{
char x[15];
int i;
char j;
/****显示学校的代码****/
printf("\n");
for(i=1,j='A';i<=N&&j<'A'+N;i++,j++)
{
printf("%c校——代码:%d\t",j,i);
}
printf("\n\n");
if ((fp=fopen("运动员信息.txt","ab+"))==NULL)
//打开名字为运动员信息的文本文件,使用方式为“读写”,并将fopen函数的
//返回值赋给指针变量fp,如果不能实现打开的任务,fopen函数将会带回一个
//出错信息,此时fopen函数将带回带回带回一个空指针值NULL。
{
printf("无法打开文件。\n");
getch();
exit(1); // 终止正在执行的程序,关闭文件。
}
getchar();
/****输入运动员信息****/
for (p_student=student;p_student<student+(Men+Women);p_student++)
{
printf("参赛号码:");
gets(x); // 输入字符串
p_student->number=atol(x);
fprintf(fp,"%d",p_student->number);
printf("学校:");
gets(x);
p_student->school.name=atoi(x);
fprintf(fp,"%d",p_student->school.name);
printf("姓名:");
gets(p_student->name);
fputs(p_student->name,fp); // 将p_student指向字符串name输出到
// fp所指向的文件
printf("性别:");
gets(p_student->sex);
fputs(p_student->sex,fp);
printf("参赛项目:");
gets(p_student->sport);
fputs(p_student->sport,fp);
printf("名次:");
gets(x);
p_student->ranking=atoi(x);
fprintf(fp,"%d",p_student->ranking);
(p_student->score)=mingci(p_student->ranking);
fprintf(fp,"%d",p_student->score);
printf("\n");
fputs("\n",fp);
}
fclose(fp); //关闭fp指向的文件
printf("\n登记完成。\n\n******请按回车键退回主界面。******\n\n");
getchar();
system ("cls"); // 清屏
main (); // 返回主界面
}
/****2:修改****/
void xiugai ()
{
char x[15];
if ((fp=fopen("运动员信息.txt","rb+"))==NULL)
{
printf("无法打开文件\n");
getch();
exit(1);
}
getchar();
printf("\n\n请输入你要修改的参赛选手的号码:");
gets(x);
/****输入要修改的运动员信息****/
for (p_student=student;p_student<student+(Men+Women);p_student++)
{
if (p_student->number==atol(x))
{
printf("参赛号码:");
gets(x);
p_student->number=atol(x);
fprintf(fp,"%d",p_student->number);
printf("学校代码:");
gets(x);
p_student->school.name=atoi(x);
fprintf(fp,"%d",p_student->school.name);
printf("姓名:");
gets(p_student->name);
fputs(p_student->name,fp);
printf("性别:");
gets(p_student->sex);
fputs(p_student->sex,fp);
printf("参赛项目:");
gets(p_student->sport);
fputs(p_student->sport,fp);
printf("名次:");
gets(x);
p_student->ranking=atoi(x);
fprintf(fp,"%d",p_student->ranking);
(p_student->score)=mingci(p_student->ranking);
fprintf(fp,"%d\n",p_student->score);
printf("\n");
fputs("\n",fp);
break;
}
}
if (p_student==student+(Men+Women))
printf("\n\n没有存储该选手的信息,无法修改。\n\n");
else
printf("\n\n修改完成。\n\n");
fclose(fp);
printf("\n\n******请按回车键退回主界面。******\n\n");
getchar();
system ("cls"); // 清屏
main (); // 返回主界面
}
/****3:查询****/
void chaxun ()
{
int i;
if ((fp=fopen("运动员信息.txt","rb"))==NULL)
{
printf("无法打开文件。\n");
getch();
exit(1);
}
getchar();
printf("\n\n查询学校得分情况请按“0”,查询运动员得分情况请按“1”:");
scanf("%d",&i);
switch (i)
{
case 0: chaxun_school (); break;
case 1: chaxun_student (); break;
}
fclose(fp);
getchar();
printf("\n\n******请按回车键退回主界面。******\n\n");
getchar();
system ("cls"); // 清屏
main (); // 返回主界面
getchar();
}
/****4:显示结果****/
void shuchu ()
{
int i;
if((fp=fopen("运动员信息.txt","rb+"))==NULL)
{
printf("无法读取该文件。\n");
exit(1);
}
printf("\n\n");
printf("\n\n输出学校团体得分情况请按“0”,输出全体运动员得分情况请按“1”:");
scanf("%d",&i);
switch (i)
{
case 0: shuchu_school (); break;
case 1: shuchu_student (); break;
}
fclose(fp);
getchar();
printf("\n\n******请按回车键退回主界面。******\n\n");
getchar();
system ("cls"); // 清屏
main (); // 返回主界面
getchar();
}
/****输出查询的学校得分情况****/
void chaxun_school ()
{
int x,sum=0,s=0;
printf("\n请输入要查询的学校代码:");
scanf("%d",&x);
for (p_student=student;p_student<student+(Men+Women);p_student++)
{
if (x==p_student->school.name)
{
sum=sum+p_student->score;
s++;
}
}
p_student->school.score=sum;
printf("\n%c校所得总分是%4d\n\n",s+64,p_student->school.score);
}
/****输出查询的运动员得分情况****/
void chaxun_student ()
{
long number;
printf("\n请输入要查询的参赛选手的号码:");
scanf("%d",&number);
printf("\n参赛号码\t学校\t姓名\t性别\t参赛项目 名次 得分\n");
for (p_student=student;p_student<student+(Men+Women);p_student++)
{
if ((p_student->number)==number)
{
printf("%6d\t%7c校\t%4s\t%3s\t%4s\t %5d %5d\n",p_student->number,
p_student->school.name+64,p_student->name,p_student->sex,
p_student->sport,p_student->ranking,p_student->score);
break;
}
}
if (p_student==student+(Men+Women))
printf("\n\n没有存储该选手的信息,查询失败。\n\n");
}
/****输出学校团队得分情况****/
void shuchu_school ()
{
printf("\n\n该项目正在修复中,如造成不便,请谅解。\n\n");
}
/****输出全体运动员得分情况****/
void shuchu_student ()
{
paixu_student (student); // 对运动员进行冒泡排序
printf("\n参赛号码\t学校\t姓名\t性别\t参赛项目 名次 得分\n");
for (p_student=student;p_student<student+(Men+Women);p_student++)
{
printf("%6d\t %7c校\t%4s\t%3s\t%4s\t %5d %5d\n",p_student->number,p_student->school.name+64,\
p_student->name,p_student->sex,p_student->sport,p_student->ranking,p_student->score);
}
printf("\n以上为本次运动会的成绩单。\n\n");
}
/****对运动员进行冒泡排序****/
void paixu_student (struct STUDENT *p_student)
{
int i,j;
struct STUDENT t;
p_student=student;
for (i=0;i<(Men+Women)-1;i++)
{
for (j=0;j<(Men+Women)-i-1;j++)
{
if ( (p_student+j)->number > (p_student+j+1)->number )
{
t=*(p_student+j);
*(p_student+j)=*(p_student+j+1);
*(p_student+j+1)=t;
}
}
}
}
/****名次->得分****/
int mingci (int ranking)
{
switch (ranking)
{
case 1: return 7; break; // 第一名得分7
case 2: return 5; break; // 第二名得分5
case 3: return 3; break; // 第三名得分3
case 4: return 2; break; // 第四名得分2
case 5: return 1; break; // 第五名得分1
default: return 0; break; // 否则得分为0
}
}
|
最佳答案
查看完整内容
改两个地方看看~~124行那里的输入
和出入哪里的学习不要加64~~
测试过ok~~
希望对你有帮助。
一起学习,加油吖~~支持支持~~{:7_155:}
|