407比赛评分系统

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");
}

希望这篇博客能给与有需要的人帮助,哪怕是给其带来一丝灵感,我都感到非常高兴。作为一个刚接触编程不久的大一学生,我写的可能并不是很好,所以也请各位多多指教。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿豆蛙给生活加点甜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值