C语言课程设计-球队管理系统(课设报告)

C语言课程设计-球队管理系统

一,前言
这个是我学期末的一项C语言课设做业,通过大佬点播,身为小白的我终于完成了它,鉴于博客中尚未关于此方面(球队信果息管理)的内容,先把个人做业在此分享给你们。仅做为参考,做为一个小白能力有限,写的有点简单啊,若是想实现更多的功能可参考别的信息管理系统做为参考。
二,直接上代码web

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void display();
void find();
void menu();
void change1();
int load();
void save();
void sore();
struct person
{
	int ID;
	char name[24];
	char sex[24];
	char position[24];
	char place[24];
	float score;
	char email[24];
	long telephone;
}player[24];
void display()//显示全部信息
{
	int a=0;
	struct person *p;
	printf("ID   name   sex     position     place    score         email     telephone\n");
	for(p=player;p<player+24;p++)
	{
		a=1;
		printf("%d   %s  %s     %s    %s    %.1f        %s      %ld  \n",p->ID,p->name,p->sex,p->position,p->place,p->score,p->email,p->telephone);
	}
	if(a==1)
		{
			printf("返回主菜单\n");
			system("pause");//页面停留
			system("cls");
			menu();

		}
}
void find()
{
	struct person *p;
	int num,loop;
	printf("\n请输入编号:\n");
	scanf("%d",&num);
	for(p=player;p<player+24;p++)
	{
		if(p->ID==num)
		{
			loop=1;
			printf("ID   name   sex     position     place    score    email    telephone");
			printf("\n%d   %s   %s   %s   %s   %f   %s   %ld  \n\n",p->ID,p->name,p->sex,p->position,p->place,p->score,p->email,p->telephone);
			printf("返回主菜单\n");
			system("pause\n");
			menu();break;

		}

	}
	if(loop==0)
		{
			system("cls");
			printf("无此球员信息\n");
		}
		printf("无此球员信息,请从新选择编号");
		find();
	
}
void change()
{
	system("cls");

	int b,c,num;
	struct person *p;
	int loop=0;
	printf("\n请输入须要修改的球员编号:\n");
	scanf("%d",&num);
	for(p=player;p<player+24;p++)
		{
			if(p->ID==num)
			{
				do
				{
					puts("\n\n1.ID   2.name   3.sex    4.position    5.place    6.score    7.email    8.telephone   9.全部信息   10.取消并返回\n");
					printf("请选择要修改的信息种类: [  ]\b\b\b");
					scanf("%d",&c);
					if(c>10||c<1)
					{
						system("cls");
						puts("\n选择错误!请从新选择!\n");
						getchar();
					}
				}while(c>10||c<1);break;
			}
			else
			{
			    if(p == p+24)
				printf("无此球员,请从新选择\n");
			}
	}

	do
	{
		switch(c)
			{
				case 1: printf("ID:");scanf("%d",&p->ID); break;
				case 2: printf("name:");scanf("%s",p->name); break;
				case 3: printf("sex:");scanf("%s",p->sex); break;
				case 4: printf("position:");scanf("%s",p->position); break;
				case 5: printf("place:");scanf("%s",p->place);break;
				case 6: printf("score:");scanf("%f",&p->score);break;
				case 7: printf("email:");scanf("%s",p->email);break;
				case 8: printf("telephone:");scanf("%ld",&p->telephone);break;
				case 9: change1();break;
				case 10: menu();
			}
	save();//修改完保存
	puts("\n修改后的信息:\n");
	printf("ID   name   sex     position     place    score    email    telephone\n");
	printf("%d   %s   %s   %s   %s   %f   %s   %ld  \n",p->ID,p->name,p->sex,p->position,p->place,p->score,p->email,p->telephone);
	puts("是否完成修改 请选择\n1/完成并退出  2/继续修改 3/修改其余球员信息");
	printf("    [  ]\b\b");
	scanf("%d",&b);
	}while(b==2);
	if(b==1)
		menu();
	if(b==3)
		change();


}
void change1()
{
		struct person *p;
		int num,loop=0;
		printf("\n请再次输入编号:\n");
		scanf("%d",&num);
		for(p=player;p<player+24;p++)
			{
				if(p->ID==num)
				{
					loop=1;
					printf("请输入该球员的新信息:依次输入 ID   name   sex     position     place    score    email    telephone\n");
					scanf("%d%s%s%s%s%f%s%ld\n",&p->ID,p->name,p->sex,p->position,p->place,&p->score,p->email,&p->telephone);
					break;//有bug
				}
			}
		if(loop)
		{
			printf("\n修改为功!!\n");
			printf("返回主菜单");
			system("pause");
			menu();

		}
		else
		{
			system("cls");
			printf("\n不存在该球员!!\n");
			printf("\n");
			change();
		}

}
void sort()//排序
{
	struct person p;//定义结构体变量,作中间变量
	int j,k;
	int i;
	for(i=0;i<24;i++)
	{
		k=i;
		for(j=i+1;j<24;j++)
			if(player[j].score>player[k].score)
			{
				k=j;
		        p=player[k];player[k]=player[i];player[i]=p;
			}
	}
	display();
	printf("返回主菜单\n");


}
void max()//找出得分最高
{
	int i,m=0;
	for(i=0;i<24;i++)
	{
		if(player[i].score>player[m].score)
			m=i;
	}
	printf("本赛季最佳球员是:%s\n\n",player[m].name);
			printf("返回主菜单\n");
			system("pause");//页面停留
			menu();
}
int load() /*打开文件,读取里面的数据,即写出*/
{
	struct person *p;
	p=player;
	FILE *fp;
    int i;
    if((fp=fopen("file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只容许读数据*/
	{
		printf("\n文件不存在!\n");
        return 0;
	}
    for(i=0;!feof(fp);i++)  /*处理到文件结尾*/
		for(p=player;p<player+24;p++)
			fscanf(fp,"%d\t%s\t%s\t%s\t%s\t%f\t%s\t%ld\n",&p->ID,p->name,p->sex,p->position,p->place,&p->score,p->email,&p->telephone);
    fclose(fp);
	return 0;
}
void save() /*保存学生信息*/
{
	struct person *p;
	p=player;
	//void exit();
	FILE *fp;
	int i;
    if((fp=fopen("file.txt","wb"))==NULL)/*只打开或创建一个二进制文件,只容许写数据*/
	{
		printf("\n文件不存在!\n");
	}
    for(i=0;i<24;i++)
      if(player[i].name[0]!='\0')
         if(fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%f\t%s\t%ld\n",p[i].ID,p[i].name,p[i].sex,p[i].position,p[i].place,p[i].score,p[i].email,p[i].telephone)==1)/*将一批数据做为一个总体一次性写入磁盘文件*/
            printf("文件写入错误!\n");
    fclose(fp);
}
void face()/*访问起始页面*/
{
	system("color 4e");
	printf("\n\t                         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
	puts("\n");
	puts("\t                              ┃                                       ┃");
	puts("\t                              ┃                                       ┃");
	puts("\t                              ┃       欢迎访问球队管理系统!           ┃");
	puts("\t                              ┃                                       ┃");
	puts("\t                              ┃                                       ┃");
	puts("\t                              ┃                制做人:燕京理工学院高鸿浩         ┃");
	puts("\t                              ┃                        2019.6.20      ┃ ");
	puts("\n ");
	printf("\n\t                              请按回车键继续……\n");

	getchar();
	system("cls");
}
void tail()
{
	printf("\n\t                         ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
	puts("\n");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃       感谢访问球队管理系统!欢迎下次再来!      ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                                               ┃");
	puts("\t                             ┃                  制做人:燕京理工学院高鸿浩            ┃");
	puts("\t                             ┃                          2019.6.20            ┃ ");
	puts("\n ");

}
void menu()/*主菜单*/
{
	int choice;
	int n;
	do
	{
		system("cls");
		printf("\n");
		printf("                                          ---巴塞罗那球员信息管理系统---\n");
		puts("\n");
		printf("                                             1/按编号查询球员信息\n");
		puts("\n");
		printf("                                             2/  修改球员信息\n");
		puts("\n");
		printf("                                             3/按照本赛季成绩排序\n");
		puts("\n");
		printf("                                             4/ 本赛季最佳球员\n");
		puts("\n");
		printf("                                             5/  显示全部信息\n");
		puts("\n");
		printf("                                             6/     退出\n");
		puts("\n");
		printf("                                          请选择服务种类(1-6) : [ ]\b\b");
	    scanf("%d",&n);
	    if(n<1||n>6)
		{
		   system("cls");
		   printf("选择错误!  请从新选择!\n");
		   system("pause");
		   choice=1;
		}
		else
		{
			break;
		}
	}while(choice==1);
		switch(n)
		{
			case 1:system("cls");system("cls");find();break;//调用find函数以对球员进行查找
			case 2:system("cls");change();break;//调用change函数以对球员信息进行修改
			case 3:system("cls");sort();break;//调用sort函数以对球员进行按成绩排序并输出
			case 4:system("cls");max();break;//调用max函数以输出全场最佳球员
			case 5:system("cls");display();break;//调用display函数以输出所有信息
			case 6:system("cls");tail();break;//调用tail函数以展示末尾页面
		}
}

int main()
{
	load();
	face();//调用face函数以展示主页面
    menu();//调用menu以展现功能菜单
    return 0;
}
//必定要注意文件的内容格式要与fscanf()里面的格式一一对应,此处不是代码注释 可删。

接下来是我课设报告中的部份内容算法

1、设计目的
球队信息管理系统(足球)
对于一支球队来讲,他要管理球队的球员信息,包括姓名,年龄,国籍,性别,联系方式,图片,身高,体重。球队要参加比赛,所以比赛日程可能要考虑比赛性质,又包括友谊赛,联赛,杯赛,为了基金管理者倒计时的设计是必要的,另外就是工资管理一个球员的工资,包括基本工资跟奖金,而奖金又包括进球奖金,比赛奖金及其余奖金,工资跟比赛的结果密切相关,咱们要在数据库中添加比赛记录,最后就是机构管理,球队的机构设置及负责人的各类信息
开发其系统主要为了帮助广大球员提升工做效率,节约资源,提升信息的精确度,实现球员。员信息管理的工做流程的系统化,规范化和自动化。
本次设计只有球员信息模块管理,涉及到的信息有ID,姓名,籍贯,邮箱,身高,性别,体重,场上位置,出生日期。涉及到的功能有,查询,修改,储存,以及肯定和取消按钮。而且能够推送出最近一场比赛的最佳球员。
2、功能描述数据库

  1. 根据球员编号查询球员信息
  2. 显示全部学生信息
  3. 修改学生信息,并保存
  4. 保存学生信息到文件
  5. 按得分从高到低显示全部球员信息
  6. 显示本赛季最佳球员(mvp)
  7. 退出系统
    3、整体设计
    首先定义结构体,定义主函数,用主函数调用文件数据写出函数load,将文件里面的数据写出并赋给结构体变量,而后调用face函数以显示欢迎界面,调用menu函数以显示菜单。
    menu函数经过switch条件语句调用各功能函数,选择1时,可按编号查询球员,2能够修改球员信息并保存,修改球员信息有包括了对球员ID,name,sex等的信息修改,修改完成后又经过一个switch条件语句来选择接下来的执行项(1/完成并退出2/继续修改3/修改其余球员信息);3能够按本赛季成绩排序并输出排序结果;4能够输出本赛季得分最高的球员,即本赛季最佳球员;5能够显示球队球员的全部信息;6 能够调用fail函数以显示退出系统页面。

执行流程图以下:

4、详细设计
包括系统各模块(函数)的组成、功能、参数说明、相互调用关系等;各功能模块的算法处理流程说明。svg

参数说明:
ID 球员编号
name 姓名
sex 性别
position 国籍
place 场上位置
score 得分
email 邮箱
telephone 电话
a,b,c,num 等 实现某单一功能的局部变量(如:循环变量)
*p 结构体指针 指向 struct person
player[24] 结构体变量

1,定义结构体(用来储存球员各类信息的变量)
struct person
{
int ID;
char name[24];
char sex[24];
char position[24];
char place[24];
float score;
char email[24];
long telephone;
}player[24]函数

2,函数
1,main函数,顺序调用load,face(展现欢迎页面),menu(展现功能菜单)函数当执行到load函数时将file文件打开并将里面的数据写出并赋给结构体变量
oop

2,face函数 用来展现欢迎页面
3,menu函数
经过switch条件语句调用自定义函数以实现相应功能
学习

4.display函数 用来显示全部球员的全部信息(无调用关系)
利用循环使指针指向每个球员信息的储存位置,并输出每次指向的地址储存的信息
在这里插入图片描述设计

5.find()函数 //根据编号查询信息,若是没有此球员则此函数调用其自己再次输入编号并进行查找
在这里插入图片描述指针

6.change函数
能够修改球员信息并保存,修改球员信息有包括了对球员ID,name,sex等的信息修改,修改完成后又经过一个switch条件语句来选择接下来的执行项(1/完成并退出2/继续修改3/修改其余球员信息)调用关系见下页流程图
在这里插入图片描述调试

7.change1函数
修改所有信息,调用关系以下流程图
在这里插入图片描述

8.max()函数 用到了“打擂台”算法,找出得分最高球员

void max()//找出得分最高
{
	int i,m=0;
	for(i=0;i<24;i++)
	{
		if(player[i].score>player[m].score)
			m=i;
	}
	printf("本赛季最佳球员是:%s\n\n",player[m].name);
			printf("返回主菜单\n");
			system("pause");//页面停留
			menu();
}
  1. sort()函数 用了选择法 算法
void sort()//排序
{
	struct person p;//定义结构体变量,作中间变量
	int j,k;
	int i;
	for(i=0;i<2;i++)
	{
		k=i;
		for(j=i+1;j<2;j++)
			if(player[j].score>player[k].score)
			{
				k=j;
		        p=player[k];player[k]=player[i];player[i]=p;
			}
	}
	display();//调用display以显示排序后的数据
	printf("返回主菜单\n");


}
  1. load()函数 被调用函数 写出文件里面的数据并赋给结构体变量 代码以下:
int load(){
	struct person *p;//结构体指针
	p=player;//给p赋初始位置
	FILE *fp;//文件指针
    int i;
    if((fp=fopen("file.txt","rb"))==NULL) /*读入空文件,rb表示打开一个二进制文件,只容许读数据*/
	{
		printf("\n文件不存在!请输入:\n");
        return 0;
	}
    for(i=0;!feof(fp);i++)  /*处理到文件结尾*/
		for(p=player;p<player+24;p++)
			fscanf(fp,"%d\t%s\t%s\t%s\t%s\t%f\t%s\t%ld\n",&p->ID,p->name,p->sex,p->position,p->place,&p->score,p->email,&p->telephone);
    fclose(fp);
	return 0;
}

7.save()函数 被调用函数

void save() /*保存学生信息*/
{
	struct person *p;
	p=player;
	//void exit();
	FILE *fp;
	int i;
    if((fp=fopen("file.txt","wb"))==NULL)/*只打开或创建一个二进制文件,只容许写数据*/
	{
		printf("\n文件不存在!\n");
	}
    for(i=0;i<24;i++)
      if(player[i].name[0]!='\0')
         if(fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%f\t%s\t%ld\n",p[i].ID,p[i].name,p[i].sex,p[i].position,p[i].place,p[i].score,p[i].email,p[i].telephone)==1)/*将一批数据做为一个总体一次性写入磁盘文件*/
            printf("文件写入错误!\n");
    fclose(fp);
}
  1. tail()函数//显示尾页

3,体会
程序设计过程,起初颇有信心,想尽量实现更多功能,但发现过程是艰辛的。发现现有知识并不能完成设计,为了知足对函数功能的设计须要,查书学习涉及到的知识,在科技博客CSDN中找经典算法以及寻求大佬的帮助。通过本身的努力和摸索,一条条附有相应功能的函数写了出来。我本觉得定义好函数就完成一大部分工做了,可是后来发现定义函数以后只是开启了总体的第一步,之后最可贵部分是将各个函数有机的串联在一块儿,接下来的工做就是对各个函数的拼接以及结构体的定义。在总体结构完成以后,对程序进行调试,调试,再调试。发现问题,解决问题,再发现问题,解决问题,如此反复几十次,过程当中发现的许多问题,随着发现问题而且解决问题,我对C语言程序设计的认知也愈来愈深了。哪方面印象最深的,就是出现了一个问题须要静下心来慢慢调。整体上来讲,就是基本功不扎实,练得少。
五天的时间,从不敢下手,到每次抱着试一试的态度编写,我以为我不只仅是学到了C语言知识,更是锻炼了逻辑思惟,和学会面对困难时要冷静。

4,参考文献 1.谭浩强.C语言程序设计[M].北京 清华大学出版社,2019年1月.293-350. 2.明日科技 C语言项目案例分析 北京 清华大学出版社,2012年1月 3.CSDN博客