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

2023-10-21 19:50

本文主要是介绍C语言课程设计-球队管理系统(课设报告),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

#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()里面的格式一一对应,此处不是代码注释 可删。

接下来是我课设报告中的部分内容

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

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

执行流程图如下:

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

参数说明:
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文件打开并将里面的数据写出并赋给结构体变量

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博客

这篇关于C语言课程设计-球队管理系统(课设报告)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/256581

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,