407比赛评分系统
写作时间: 学习阶段:大一上学期期末考试后的晚上 日期:2021年1月15日
我是一个大一才开始接触C语言的小白,即使我平时非常用心,也花了很多时间去学习C语言,应付这份学校布置程序设计作业也是挺吃力的,同时这篇博客也是我的第一篇博客,我希望通过第一个博客来记录我的第一次程序设计作业,也希望自己能在计算机这条路上越走越远。
程序设计题目
一、功能需求说明
- 系统主要功能菜单
- 输入选手成绩
- 插入新选手
- 删除退赛选手
- 选手成绩排名
- 输出选手分数
- 输出选手排名
- 退出系统
- 通过输入菜单项的序号启动相应模块的功能
- 能够根据输入的选手人数创建链表;
- 录入10位评委给选手的打分,并存储到文件player0riginal. dat中;
- 按照去掉-个最高分和去掉–个最低分的原则求每名选手的平均分;
- 按平均分由高到低的顺序对选手进行排序;
- 把排名后的数据存储到文件playerGrade. dat中;
- 把原始数据和最终的结果输出到屏幕;
- 在第(2)步中保存player0riginal. dat文件之前,可根据情况修改数据,例如:插入或删除选手。
- 系统功能模块
- 定义结构体
- 创建链表函数
- 输入数据函数
- 计算函数
- 排序函数
- 输出数据函数
- 输出最终数据
- 删除函数
- 插入函数
- 主函数
创建链表:使用尾插法插入数据;
输入选手信息:包括选手信息的输入,选手成绩的输入。去掉一个最高分和最低分,并将其余评委的评分求出成绩的平均值。输出选手排名:包括选手成绩排名。删除和插入选手信息:将退赛选手和新参加的比赛的选手进行删除和插入。
二、加分项
- 使用图形界面。
- 可参考实际情况对系统进行功能扩充
- 个人扩充功能
- 查看当前所有数据
- 从文件读取数据(支持文本以及二进制文件)
- 增加密码验证功能(一个系统怎么能没有密码呢!必须整一个)
三、设计要求
- 选手信息数据放入如上指定文件。
- 不同的模块都要有出错处理,并能给出出错提示。如输入数据错误,文件操作错误等等。
- 以上各个功能均编写成子函数,有良好的注释说明,由主函数调用实现。
- 必须采用结构体和动态链表实现对比赛评分数据的存储和访问;
- 必须使用文件保存数据。
- 应提供一一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。
- 管理员和选手的权限要分开。选手只能查询搜索成绩和排名。
四、测试数据
- 选手信息数据不少于10条。
一、总体设计
- 主函数
- 输出菜单界面
- 输入数据
- 查看程序当前数据
- 插入新选手
- 删除退赛选手
- 将原始数据写入playerOriginal.dat文件
- 对选手进行排名
- 将处理后数据写入playerGrade.dat文件
- 输出存储在playerOriginal.dat文件中的数据
- 输出存储在playerGrade.dat文件中的数据
系统功能模块结构图:
结构体头文件
#define LEN sizeof(struct Player)
struct Player{
char name[10];
int rank;
float scores[10];
float aver;
struct Player*next;
};
主函数模块
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include"player.h"//调用结构体类型
struct Player*input();//输入数据
void menu();//打印开始页面
void menu_choice1();// 打印管理员菜单
void menu_choice2();//打印选手菜单
void judge_1();//给管理员权限设置密码
void judge_2();//给选手权限设置密码
void prevent(struct Player*head);//呈现当前数据
void insert(struct Player*head);//插入新选手(尾插法)
void del(struct Player*head);//删除退赛选手
void rank(struct Player*head);//选手成绩排名
void store_1(struct Player*head);//存储原始数据
void store_2(struct Player*head);//存储最终数据
void print_Original();//输出全部选手原始的分数和排名
void print_Grade();//输出全部选手排序后的分数和排名
void search();//搜索选手并输出对应成绩,排名
int main(int argc, char *argv[]) {
int t;
char c,d;
struct Player*pt=NULL;
system("mode con cols=116 lines=35"); //设置窗口大小
system("color f0");//设置窗口背景颜色和字体颜色
menu();//打印开始页面
scanf("%d",&t);//获取用户选择
while(getchar()!='\n');//丢弃getchar()后面所有字符的功能
system("cls");//清屏
if(t==1){
printf("请输入管理员密码: (不超10位)(由于作为课设,给出密码:abcdef)\n");
judge_1();//验证是否为管理员
while(1){
menu_choice1();//打印管理员菜单
c=getchar();//获取用户选择
while(getchar()!='\n');//丢弃getchar()后面所有字符的功能
system("cls");//清屏
switch(c){
case '1':pt=input();break;//输入数据
case '2':prevent(pt);break;//呈现当前数据
case '3':insert(pt);break;//插入新选手
case '4':del(pt);break;//删除退赛选手
case '5':store_1(pt);break;//将十位评委给选手的打分存储到文件playerOriginal.dat
case '6':rank(pt);break;//将选手根据选手分数排名
case '7':store_2(pt);break;//将排名后的数据存储到文件playerGrade.dat
case '8':print_Original();break;//输出全部选手原始的分数和排名
case '9':print_Grade();break;//输出全部选手排序后的分数和排名
case '0':exit(0); //退出系统
default: {
printf("input error!\n");//输入错误,提示重新输入
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
}
}
}
else if(t==2){
printf("请输入选手密码: (不超10位)(由于作为课设,给出密码:abcde)\n");
judge_2();//验证是否为参赛选手
while(1){
menu_choice2();//打印选手菜单
c=getchar();//获取用户选择
while(getchar()!='\n');//丢弃getchar()后面所有字符的功能
system("cls");//清屏
switch(c){
case '1':search();break;//搜索选手并输出对应成绩,排名
case '0':exit(0);//退出系统
default: {
printf("input error!\n");//输入错误,提示重新输入
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
}
}
}
else printf("输入错误,程序结束,请重新启动\n");//输入错误,提示重新输入
return 0;
}
输出菜单模块
#include<stdio.h>
void menu(){//打印开始页面
printf("\n\n\n\n\n\n\n\n");//调整界面位置
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 欢迎使用407比赛评分系统 ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 你是? ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 管理员or比赛选手? ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\n\n\t\t\t管理员请输1,比赛选手请输2:\n\t\t\t");
}
void menu_choice1(){//打印管理员菜单
printf("\n\n\n\n\n");//调整界面位置
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** 407比赛评分系统欢迎你 ***\n");
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 1.输入数据 ***\n");
printf("\t\t\t*** 2.查看当前数据 ***\n");
printf("\t\t\t*** 3.插入新选手 ***\n");
printf("\t\t\t*** 4.删除退赛选手 ***\n");
printf("\t\t\t*** 5.将十位评委给选手的打分存储到文件playerOriginal.dat ***\n");
printf("\t\t\t*** 6.将选手根据选手分数排名 ***\n");
printf("\t\t\t*** 7.将排名后的数据存储到文件playerGrade.dat ***\n");
printf("\t\t\t*** 8.输出全部选手原始的分数和排名 ***\n");
printf("\t\t\t*** 9.输出全部选手排序后的分数和排名 ***\n");
printf("\t\t\t*** 0.Exit ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\n\n\t\t\tPlease Input your choice:\n\t\t\t");
}
void menu_choice2(){//打印选手菜单
printf("\n\n\n\n\n");//调整界面位置
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 407比赛评分系统欢迎你 ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 1.查询选手分数和排名 ***\n");
printf("\t\t\t*** 0.Exit ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\n\n\t\t\tPlease Input your choice:\n\t\t\t");
}
void menu_choice3(){//打印输入数据方式
printf("\n\n\n\n\n"); //调整界面位置
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 欢迎使用407比赛评分系统 ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 请选择输入数据的方式: ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 手动输入or从文件中读取? ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t*** 注意!!! ***\n");
printf("\t\t\t*** 文件中已经包含选手的分数,故文件输入不再需要手动输入分数! ***\n");
printf("\t\t\t*** ***\n");
printf("\t\t\t******************************************************************\n");
printf("\n\n\t\t\t手动输入请输1,从文件中读取请输2:\n\t\t\t");
}
密码验证模块
#include<stdio.h>
#include<string.h>
#include<windows.h>
void judge_1(){
int i=0;
static int count_1;//定义静态变量作计数器
char s1[10]="abcdef";//设置密码
char s2[10];
while((s2[i++]=getchar())!='\n');//获取用户输入密码
s2[i-1]='\0';//清除转义字符\n
if(strcmp(s1,s2)!=0){//判断密码对错
printf("密码输入错误,请重新输入: (最多尝试三次,错误三次后系统自动结束进程)\n");//密码错误
count_1++;//计数
if(count_1==3){
printf("密码输入错误3次,程序终止!\n");//输入次数达到3次终止程序进行
exit(0); //退出系统
}
judge_1();//递归调用judge_1函数
}else{
printf("密码正确!\n");
printf("407比赛评分系统感谢你的使用!\n");
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
}
void judge_2(){
int i=0;
static int count_2;//定义静态变量作计数器
char s1[10]="abcde";//设置密码
char s2[10];
while((s2[i++]=getchar())!='\n');//获取用户输入密码
s2[i-1]='\0';//清除转义字符\n
if(strcmp(s1,s2)!=0){//判断密码对错
printf("密码输入错误,请重新输入: (最多尝试三次,错误三次后系统自动结束进程)\n");
count_2++;//计数
if(count_2==3){
printf("密码输入错误3次,程序终止!\n");//输入次数达到3次终止程序进行
exit(0); //退出系统
}
judge_2();//递归调用judge_2函数
}else{
printf("密码正确!\n");
printf("407比赛评分系统感谢你的使用!\n");
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
}
输入数据模块
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"player.h"
void menu_choice3();
float aver(struct Player*p){//计算每个选手的平均分
int i,j,k;
float max=p->scores[0],min=p->scores[0],sum=0,aver=0;//给变量赋初值
for(i=0;i<10;i++){//遍历分数数组
if(max<p->scores[i]){
max=p->scores[i];//记录目前最大值
j=i;//记录目前最大值的索引
}
if(min>p->scores[i]){
min=p->scores[i];//记录目前最小值
k=i;//记录目前最小值的索引
}
}
for(i=0;i<10;i++) if(i!=j&&i!=k) sum+=p->scores[i];//累加
aver=sum/8;//求平均分
return aver;//返回结果
}
struct Player*input(){
int t,i,n=0;
struct Player*head=NULL;//定义头指针
struct Player*p1,*p2;//定义两个指针构建动态链表
menu_choice3();
scanf("%d",&t);
while(getchar()!='\n');
system("cls");
p1=p2=(struct Player*)malloc(LEN);//开辟第一个结点
if(t==1){
printf("请输入第%d位选手的名字: (输入finish结束输入)\n",n+1);//提示输入数据
scanf("%s",p1->name);//获取选手名字
for(i=0;i<10;i++){
printf("请输入第%d位评委对%s的评分:\n",i+1,p1->name);//提示输入
scanf("%f",&p1->scores[i]);//获取数据
}
do{
n++;
if(n==1) head=p1;
else p2->next=p1;//令p2所指结构体成员指针记录新结点
p2=p1;//使p2指向p1
p1=(struct Player*)malloc(LEN);//开辟新结点
system("cls");
printf("请输入第%d位选手的名字: (输入finish结束输入)\n",n+1);//提示输入数据
scanf("%s",p1->name); //获取选手名字
if(strcmp(p1->name,"finish")){
for(i=0;i<10;i++){
printf("请输入第%d位评委对%s的评分:\n",i+1,p1->name);//提示输入
scanf("%f",&p1->scores[i]);//获取数据
}
p1->aver=aver(p1);
}
}while(strcmp(p1->name,"finish"));
p2->next=NULL;
printf("数据输入成功!\n");
system("pause");
system("cls");
}else if(t==2){
FILE*fp;
int i;
char file[20];
printf("请输入文件名: (包括拓展名)(测试用例已备好:测试用例.txt)\n");
scanf("%s",file);
while(getchar()!='\n');
if((fp=fopen(file,"rb"))==NULL){
printf("cannot open \n");
printf("可能是文件不存在,请查看文件是否存在!\n");
system("pause");
system("cls");
return;
}
if(!feof(fp)){
if(strcmp(strrchr(file,'.'),".dat"))
do{
n++;
fscanf(fp,"%s ",p1->name);//读入数据
for(i=0;i<10;i++) fscanf(fp," %f",&p1->scores[i]);
p1->aver=aver(p1);
if(n==1) head=p1;
else p2->next=p1;//令p2所指结构体成员指针记录新结点
p2=p1;//使p2指向p1
p1=(struct Player*)malloc(LEN);//开辟新结点
}while(!feof(fp));
else
while(fread(p1,LEN,1,fp)){
n++;
if(n==1) head=p1;
else p2->next=p1;//令p2所指结构体成员指针记录新结点
p2=p1;//使p2指向p1
p1=(struct Player*)malloc(LEN);//开辟新结点
}
p2->next=NULL;
printf("数据读入成功!\n");
system("pause");
system("cls");
}else {
printf("文件不存在选手数据,请先往文件输入选手数据!\n");//发出错误警告,并提示
printf("输入时,用空格将数据隔开\n");
}
fclose(fp);
}else {
printf("输入错误!输入数据失败!回到主界面!\n");
}
return head;//输入成功,返回链表首地址;否则,返回空指针;
}
查看数据模块
#include<stdio.h>
#include"player.h"
void prevent(struct Player*head){
struct Player*p=head;
int i;
if(head!=NULL){
printf("目前的数据如下:\n");
printf("player score_1 score_2 score_3 scores4 scores5 scores6 scores7 scores8 scores9 scores10 aver rank\n") ;
do{
printf("%-8s",p->name);//格式化输出
for(i=0;i<10;i++) printf("%-8.2f",p->scores[i]);//格式化输出
printf(" ");//对齐数据
printf("%-8.2f",p->aver);//格式化输出
printf("%-2d\n",p->rank);//格式化输出
p=p->next;
}while(p!=NULL);
printf("提示:如果数据错误,可通过删除错误选手后,再次插入,也可重新输入数据,将目前数据覆盖!\n");//给用户提示
}else printf("暂无选手数据!\n");
system("pause"); //暂停程序,使用户查看操作结果
system("cls");
}
插入数据模块
#include<stdio.h>
#include<stdlib.h>
#include"player.h"
extern float aver(struct Player*p);
void insert(struct Player *head){
struct Player *p1=head,*p2=NULL;
int i;
p2=(struct Player*)malloc(LEN);//开辟新结点
printf("请输入新选手的名字\n");
scanf("%s",p2->name);
for(i=0;i<10;i++){
printf("请输入第%d位评委对%s的评分:\n",i+1,p1->name);
scanf("%f",&p2->scores[i]);
}
while(getchar()!='\n');
p2->aver=aver(p2);
p2->next=NULL;
if(head==NULL) p1=p2;
else{
if(head->next!=NULL){
do{
p1=p1->next;
}while(p1->next!=NULL);
}
p1->next=p2;
}
printf("选手插入成功\n");
printf("提示:若数据输入错误,可删除该选手后重新插入!\n");//给用户提示
system("pause"); //暂停程序,使用户查看操作结果
system("cls");
}
删除数据模块
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"player.h"
void del(struct Player*head){//根据退赛选手名字删除结点
struct Player*p1=head,*p2=NULL;
char name[10];
printf("请输入退赛选手名字:\n");//输入提示
scanf("%s",name);//获取退赛选手名字
while(getchar()!='\n');
if(head!=NULL){
do{
if(strcmp(p1->name,name)==0) p2=p1;//判断是否为所寻找的选手数据
p1=p1->next;//移动结点
}while(p1!=NULL);
}else{
printf("暂无选手数据!\n");//数据尚未输入
system("pause");//暂停程序,使用户查看操作结果
system("cls");
return;
}
p1=head;//使p1再次指向头指针
if(p2!=NULL){
do{
if(head==p2) head=p1->next;//删除头指针
else if(p1->next==p2) p1->next=p2->next;//删除结点
p1=p1->next;
}while(p1!=NULL);
free(p2);//释放内存
printf("删除成功\n");
printf("提示:若删除错误,可通过插入功能重新插入!\n");//给用户提示
}else printf("输入错误!\n");//选手名字输入错误
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
存储数据模块
#include<stdio.h>
#include"player.h"
void store_1(struct Player*head){
FILE*fp;//定义文件指针
struct Player*p=head;
if((fp=fopen("playerOriginal.dat","wb"))==NULL){//打开文件,同时判断文件是否打开
printf("cannot open \n");
system("pause");//暂停程序,使用户查看操作结果
system("cls");
return;
}
for( ;p!=NULL;p=p->next)
if(fwrite(p,LEN,1,fp)!=1)
printf("write error!");
printf("数据写入成功\n");//表示操作成功
system("pause"); //暂停程序,使用户查看操作结果
system("cls");//清屏
fclose(fp);
}
void store_2(struct Player*head){
FILE*fp;
struct Player*p=head;
if((fp=fopen("playerGrade.dat","wb"))==NULL){//打开文件,同时判断文件是否打开
printf("cannot open \n");
system("pause");
system("cls");
return;
}
for( ;p!=NULL;p=p->next)
if(fwrite(p,LEN,1,fp)!=1)
printf("write error!");
printf("数据写入成功\n"); //表示操作成功
fclose(fp);
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
选手排序模块
#include<stdio.h>
#include"player.h"
void rank(struct Player*head){
struct Player*p1,*p2,*p3;
float max,scores[10];
char name[10];
int i,j=1;
if(head!=NULL){
p1=p2=head;
do{
max=p2->aver;//给max赋初值
for(i=0;i<10;i++) scores[i]=p2->scores[i];//给scores赋初值
for(i=0;i<10&&p2->name[i]!='\0';i++) name[i]=p2->name[i];//给name赋初值
p3=p2;//给p3赋初始地址
do{//遍历链表寻找剩余结点中最高分选手
if(max<p2->aver){
max=p2->aver;
for(i=0;i<10;i++) scores[i]=p2->scores[i];
for(i=0;i<10&&p2->name[i]!='\0';i++) name[i]=p2->name[i];
name[i]='\0'; //防止名字重叠现象
p3=p2;
}
p2=p2->next;//遍历链表
}while(p2!=NULL);
p3->aver=p1->aver;
for(i=0;i<10;i++) p3->scores[i]=p1->scores[i];
for(i=0;i<10&&p1->name[i]!='\0';i++) p3->name[i]=p1->name[i];
p3->name[i]='\0';//防止名字重叠现象
p1->aver=max;
for(i=0;i<10;i++) p1->scores[i]=scores[i];
for(i=0;i<10&&name[i]!='\0';i++) p1->name[i]=name[i];
p1->name[i]='\0';//防止名字重叠现象
p1->rank=j++;//i自加运算,对选手进行排序
p2=p1->next;//使p2比交换结点元素前向前移动一个单位
p1=p1->next;
}while(p1!=NULL);
printf("排序成功\n");
}else printf("暂无选手数据!\n");//尚未输入选手数据
system("pause");//暂停程序,使用户查看操作结果
system("cls");//清屏
}
输出数据模块
#include<stdio.h>
#include"player.h"
void print_Original(){
FILE*fp;
int i,j;
struct Player player;
if((fp=fopen("playerOriginal.dat","rb"))==NULL){//打开文件,同时判断文件是否打开
printf("cannot open \n");
printf("可能数据尚没写入,请先写入数据!\n");
system("pause");
system("cls");
return;
}
if(!feof(fp)){
printf("原始数据如下:\n");
printf("player score_1 score_2 score_3 scores4 scores5 scores6 scores7 scores8 scores9 scores10 aver\n");//制作框架
while(fread(&player,LEN,1,fp)){//读取文件数据
printf("%-8s",player.name);//格式化输出
for(j=0;j<10;j++) printf("%-8.2f",player.scores[j]);//格式化输出
printf(" ");//对齐数据
printf("%-8.2f\n",player.aver);//格式化输出
}
printf("提示:如数据出错,可重新通过文件输入方式进行修改,并再次写入该文件,将错误数据覆盖!\n");
}else printf("暂无选手数据\n");//尚未输入选手数据
system("pause");//暂停程序,使用户查看操作结果
system("cls");//清屏
fclose(fp);
}
void print_Grade(){
FILE*fp;
int i,j;
struct Player player;
if((fp=fopen("playerGrade.dat","rb"))==NULL){//打开文件,同时判断文件是否打开
printf("cannot open \n");
printf("可能数据尚没写入,请先写入数据!\n");
system("pause");
system("cls");
return;
}
if(!feof(fp)){
printf("排序后的数据如下:\n");
printf("player score_1 score_2 score_3 scores4 scores5 scores6 scores7 scores8 scores9 scores10 aver rank\n");//制作框架
while(fread(&player,LEN,1,fp)){//读取文件数据
printf("%-8s",player.name);//格式化输出
for(j=0;j<10;j++) printf("%-8.2f",player.scores[j]);//格式化输出
printf(" ");//对齐数据
printf("%-8.2f",player.aver);//格式化输出
printf("%-2d\n",player.rank);//格式化输出
}
printf("提示:如数据出错,可重新通过文件输入方式进行修改,并再次写入该文件,将错误数据覆盖!\n");
}else printf("暂无选手数据\n");//尚未输入选手数据
system("pause");//暂停程序,使用户查看操作结果
system("cls");
fclose(fp);
}
查询成绩模块
#include<stdio.h>
#include<string.h>
#include"player.h"
void search(){
char name[10];
printf("请输入所查询选手名字: (不超过10个字符)\n");//输入提示
scanf("%s",name);//获取选手名字
while(getchar()!='\n');
FILE*fp;
int i,j;
struct Player player;
if((fp=fopen("playerGrade.dat","rb"))==NULL){//打开文件,同时判断文件是否打开
printf("cannot open \n");
system("pause");
system("cls");
return;
}
if(!feof(fp)){
while(fread(&player,LEN,1,fp)){//读取文件数据
if(strcmp(player.name,name)==0){//判断是否为同一选手
printf("%s的成绩如下:\n",name);
printf("player score_1 score_2 score_3 scores4 scores5 scores6 scores7 scores8 scores9 scores10 aver rank\n");//制作框架
printf("%-8s",player.name);//格式化输出
for(j=0;j<10;j++) printf("%-8.2f",player.scores[j]);//格式化输出
printf(" ");//对齐数据
printf("%-8.2f",player.aver);//格式化输出
printf("%-2d\n",player.rank);//格式化输出
}
}
if(player.name==NULL) printf("查无此人!\n");
}else printf("暂无选手数据\n");//尚未输入选手数据
fclose(fp);
system("pause");//暂停程序,使用户查看操作结果
system("cls");
}
希望这篇博客能给与有需要的人帮助,哪怕是给其带来一丝灵感,我都感到非常高兴。作为一个刚接触编程不久的大一学生,我写的可能并不是很好,所以也请各位多多指教。