1、需求分析
- 问题阐述:
(1)在”学校运动会管理系统”中,设有n个单位参加比赛(单位可是学院、系、年级等,应可设置),学院与个人可以选择参加项目,运动员参加项目应有限制,如最多参加3项。
(2)各项目名次应可设置,随系统环境环境而变化,如:
参赛人数超过6人,取前5名:第一名7分,第二名5分,第三名3分,第四名2分,第五名1分;
参赛人数不超过6人,取前3名:第一名5分,第二名3分,第三名2分
参赛项目人数不足4人则取消项目
(3)系统设置内容
参赛单位名称
比赛项目设置
运动员参赛项目限制
选取名次设置
- 基本要求:
- 数据备份、
- 比赛成绩自动统计
- 比赛成绩查询
- 秩序册生成
- 参赛信息查询
- 运动员报名登记
- 参赛项目发布
2、概要设计
通过使用数据结构的知识,将对应的信息存储在对应数组和……中,并写入txt文件达到数据备份的作用,再通过数组中值的比较实现信息查询、修改等功能。
3、详细设计
菜单:通过switch case语句调用对应方法实现菜单界面功能选择
录入信息:打开data.txt文件,在判定文件状态后,通过scanf语句将数据写入结构数组对应位置,关闭文件
信息查询:打开data.txt文件,在判定文件状态后,通过比对所输入的数据与结构数组中的数据,将其对应的结构数据的其他数据一同输出,关闭文件
信息修改:打开data.txt文件,在判定文件状态后,通过比对所输入的数据与结构数组中的数据,将其对应的结构数据进行修改,关闭文件
秩序册项目集:将项目相关信息以及相关选手信息进行排列输出,得到整体的校运会项目时间秩序册。
定义结构体DATA(姓名、学院、项目、成绩)来传递对象信息,用FORMAT格式化输出,定义文件指针变量,实现打开关闭文件写入读出数据进行数据存储。
4、用户手册
- 输入密码123456按回车后进入运动会管理系统
- 进入界面之后通过文字便可以了解逐步的操作
- 显示所有信息指显示目前已经录入的所有运动员的信息
- 查询单一项目信息指显示一个项目的选手的相关信息
- 查询单一学院信息指显示一个学院的选手的相关信息
- 项目表是运动会的项目表
- 秩序册是运动会流程大致展示
5、测试结果
界面展示:
选项一:
将信息录入data.txt 文件中:
6、源代码
//
// created by stu_kk on 2022/05/01
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L sizeof(ID)
#define FORMAT "\t\t\t%-12s%-\t\t%-15s%-\t\t%-15s%-\t\t%-60s"
#define DATA ids[i].name, ids[i].xy, ids[i].xm,ids[i].score
int n;
int i = 0;
int j = 0;
int c;
int k;
FILE *p; //定义指向FILE类型文件的指针变量
char name[12];
typedef struct
{
char name[12]; //姓名
char xy[15]; //学院
char xm[15]; //项目
char score[60]; //成绩
} ID; //声明新的类型名ID 代表上面结构体类型
ID ids[100];
void menu() //菜单
{
system("cls");
printf("\n\n\n");
printf("\t\t\t\t|------------------------------------------------------|\n");
printf("\t\t\t\t|------------------------------------------------------|\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 校运会信息管理系统 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 1.录入运动员信息 2.查询运动员信息 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 3.修改运动员信息 4.删除运动员信息 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 5.显示所有信息 6.查询单一项目信息 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 7.查询单一学院信息 8.项目表 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 9.查看秩序册 0.退出系统 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t|------------------------------------------------------|\n");
printf("\t\t\t\t|------------------------------------------------------|\n");
printf("\t\t\t\t|请在(0-9)选择要进行的操作!\n"); //菜单的主页面
}
void all() //全部运动员信息展示
{
system("cls"); //清屏
printf("\n\n\n\n");
p = fopen("data.txt", "rb"); //打开文件并将fopen函数的返回值赋给指针变量p
j = 0;
while (!feof(p)) //判断p指向的文件是否结束
if (fread(&ids[j], L, 1, p) == 1) //将p指向的文件中读入结构体数组ids的一个元素 每次读入一个 则读入成功 其返回值为1
j++; //每读一个 j就加1
fclose(p); //把p指向的文件关闭 以后p不再指向该文件
if (j == 0)
{
printf("\t\t\t\t目前没有运动员信息\n\t\t\t");
system("pause");
return;
}
printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\n");
for (i = 0; i < j; i++) //输出运动员信息
{
printf(FORMAT, DATA);
printf("\n");
}
printf("\t\t\t输入任意键返回主界面\n\t");
system("pause");
}
void input()
{
system("cls"); //清屏
printf("\n\n\n");
if ((p = fopen("data.txt", "a+")) == NULL) //打开文件,先检查是否有错,有错则输出无法打开文件
{
printf("\t\t\t\t\t无法打开文件\n\t\t\t\t\t");
system("pause");
return;
}
while (!feof(p)) //判断p指向的文件是否结束
{
if (fread(&ids[j], L, 1, p) == 1) //将p指向的文件中读入结构体数组ids的一个元素 每次读入一个 则读入成功 其返回值为1
j++;
}
fclose(p); //把p指向的文件关闭 以后p不再指向该文件
if (j == 0)
printf("\t\t\t\t\t目前没有运动员\n");
else
{
system("cls"); //清屏
printf("\n\n\n\n");
all();
}
if ((p = fopen("data.txt", "wb")) == NULL) //打开文件,先检查是否有错,有错则输出无法打开文件,p指向该文件
{
printf("\t\t\t\t\t文件无法打开\n\t\t\t\t\t");
system("pause");
return;
}
for (i = 0; i < j; i++) //建立运动员信息
fwrite(&ids[i], L, 1, p);
printf("\t\t\t\t\t输入1开始建立运动员信息 输入0结束\n\t\t\t\t\t");
scanf("%d", &c);
while (c)
{
printf("\t\t\t\t\t输入运动员姓名\n\t\t\t\t\t");
scanf("%s", &ids[j].name);
for (i = 0; i < j; i++)
if (strcmp(ids[j].name, ids[i].name) == 0)
{
printf("\t\t\t\t\t该运动员已存在\n\t\t\t\t\t");
system("pause");
fclose(p);
return;
}
printf("\t\t\t\t\t学院:\n\t\t\t\t\t");
scanf("%s", &ids[j].xy);
printf("\t\t\t\t\t项目:\n\t\t\t\t\t");
scanf("%s", &ids[j].xm);
printf("\t\t\t\t\t成绩:\n\t\t\t\t\t");
scanf("%s", &ids[j].score);
if (fwrite(&ids[j], L, 1, p) != 1)
{
printf("\t\t\t\t\t写入失败\n\t\t\t\t\t");
system("pause");
return;
}
else
{
printf("\t\t\t\t\t运动员信息 %s 写入成功\n", &ids[j].name);
j++;
}
printf("\t\t\t\t\t是否继续输入?输入1继续 输入0结束\n\t\t\t\t\t");
scanf("%d", &c);
}
fclose(p);
printf("\t\t\t\t\t已关闭文件\n");
printf("\t\t\t\t\t任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void search()
{
system("cls");
printf("\n\n\n\n");
if ((p = fopen("data.txt", "rb")) == NULL)
{
printf("\t\t\t\t\t打开文件失败\n\t\t\t\t\t");
system("pause");
return;
}
while (!feof(p))
if (fread(&ids[j], L, 1, p) == 1)
j++;
fclose(p);
if (j == 0)
{
printf("\t\t\t\t\t目前没有运动员信息\n\t\t\t\t\t");
system("pause");
return;
}
printf("\t\t\t\t\t请输入要查找的运动员姓名\n\t\t\t\t\t");
scanf("%s", name);
for (i = 0; i < j; i++)
if (strcmp(ids[i].name, name) == 0)
{
printf("\t\t\t\t\t已找到运动员\n");
printf("\t\t\t\t\t是否显示此运动员? 输入1显示 输入0不显示\n\t\t\t\t\t");
scanf("%d", &c);
if (c)
{
printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\t\t\t\t\n");
printf(FORMAT, DATA);
}
break;
}
if (i == j)
printf("\t\t\t\t\t未查询到该运动员\n");
printf("\t\t\t\t\t任意键返回主页面\n\t\t\t\t\t");
system("pause");
}
void updata()
{
system("cls");
printf("\n\n\n\n");
if ((p = fopen("data.txt", "rb")) == NULL)
{
printf("\t\t\t\t\t无法打开文件\n\t\t\t\t\t");
system("pause");
return;
}
while (!feof(p))
{
if (fread(&ids[j], L, 1, p) == 1)
j++;
}
if (j == 0)
{
printf("\t\t\t\t\t目前还没有运动员\n");
fclose(p);
return;
}
fclose(p);
all();
printf("\t\t\t\t\t输入你想修改的运动员信息\n");
printf("\t\t\t\t\t姓名:");
scanf("%s", name);
for (i = 0; i < j; i++)
{
if (strcmp(name, ids[i].name) == 0)
{
printf("\t\t\t\t\t已找到该运动员,请修改\n");
printf("\t\t\t\t\t姓名:");
scanf("%s", &ids[i].name);
printf("\t\t\t\t\t学院:");
scanf("%s", &ids[i].xy);
printf("\t\t\t\t\t项目:");
scanf("%s", &ids[i].xm);
printf("\t\t\t\t\t成绩:");
scanf("%s", &ids[i].score);
fopen("data.txt", "wb");
for (c = 0; c < j; c++)
if (fwrite(&ids[c], L, 1, p) != 1)
{
printf("\t\t\t\t\t没有成功保存\n");
system("pause");
return;
}
printf("\t\t\t\t\t运动员 %s 的信息修改成功\n", name);
fclose(p);
break;
}
}
if (i == j)
printf("\t\t\t\t\t没有找到该运动员\n");
printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void dlt()
{
system("cls");
printf("\n\n\n\n");
if ((p = fopen("data.txt", "r+")) == NULL)
{
printf("\t\t\t\t\t目前没有文件\n\t\t\t\t\t");
system("pause");
return;
}
j = 0;
while (!feof(p))
{
if (fread(&ids[j], L, 1, p) == 1)
{
j++;
}
}
fclose(p);
if (j == 0)
{
printf("\t\t\t\t\t目前没有运动员信息\n\t\t\t\t\t");
system("pause");
return;
}
printf("\t\t\t\t\t输入你想删除的运动员姓名: ");
scanf("%s", name);
for (i = 0; i < j; i++)
{
if (strcmp(name, ids[i].name) == 0)
{
printf("\t\t\t\t\t已找到该运动员,是否删除 1 确定 0 取消\n");
printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\t\t\t\t\n");
printf(FORMAT, DATA);
printf("\n\t\t\t");
scanf("%d", &k);
if (k)
{
for (n = i; n < j; n++)
{
ids[n] = ids[n + 1];
}
j -= 1;
}
break;
}
}
fopen("data.txt", "wb");
for (i = 0; i < j; i++)
{
if (fwrite(&ids[i], L, 1, p) != 1)
{
printf("\t\t\t\t\t没有修改成功\n");
system("pause");
return;
}
}
printf("\t\t\t\t\t运动员 %s 的信息删除成功\n", name);
fclose(p);
printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void chaxunxiangmu()
{
system("cls");
printf("\n\n\n\n");
char proname[15];
int i;
if ((p = fopen("data.txt", "r+")) == NULL)
{
printf("\t\t\t\t\t目前没有文件\n\t\t\t\t\t");
system("pause");
return;
}
j = 0;
while (!feof(p))
{
if (fread(&ids[j], L, 1, p) == 1)
{
j++;
}
}
fclose(p);
if (j == 0)
{
printf("\t\t\t\t\t目前没有项目信息\n\t\t\t\t\t");
system("pause");
return;
}
printf("\t\t\t\t\t请输入任意一个项目的名称以获取相关的信息\n");
scanf("%s", proname);
while(!feof(p))
{
int m;
int p=0;
if(strcmp(proname, ids[m].xm) == 0&&p==0)
{
printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\t\t\t\t\n");
p=1;
}
if(strcmp(proname, ids[m].xm) == 0)
{
printf("\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t\t\n",ids[m].name,ids[m].xy,ids[m].xm,ids[m].score);
printf("\n");
}
m++;
}
printf("\t\t\t\t\t项目 %s 的信息查找成功\n", proname);
printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void chaxunxueyuan()
{
system("cls");
printf("\n\n\n\n");
char proname[15];
int i;
if ((p = fopen("data.txt", "r+")) == NULL)
{
printf("\t\t\t\t\t目前没有文件\n\t\t\t\t\t");
system("pause");
return;
}
j = 0;
while (!feof(p))
{
if (fread(&ids[j], L, 1, p) == 1)
{
j++;
}
}
fclose(p);
if (j == 0)
{
printf("\t\t\t\t\t目前没有项目信息\n\t\t\t\t\t");
system("pause");
return;
}
printf("\t\t\t\t\t请输入任意一个学院的名称以获取相关的信息\n");
scanf("%s", proname);
while(!feof(p))
{
int m;
int p=0;
if(strcmp(proname, ids[m].xy) == 0&&p==0)
{
printf("\t\t\t姓名\t\t\t学院\t\t\t项目\t\t\t成绩\t\t\t\t\n");
p=1;
}
if(strcmp(proname, ids[m].xy) == 0)
{
printf("\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t\t\n",ids[m].name,ids[m].xy,ids[m].xm,ids[m].score);
printf("\n");
}
m++;
}
fopen("data.txt", "wb");
printf("\t\t\t\t\t学院 %s 的信息查找成功\n", proname);
fclose(p);
printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void xmxx(){
system("cls");
printf("\n\n\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 项目信息 |\n");
printf("\t\t\t\t|田赛: |\n");
printf("\t\t\t\t|铅球投掷(预赛、决赛) |\n");
printf("\t\t\t\t|跳高 (预赛、决赛) |\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|径赛: |\n");
printf("\t\t\t\t|100m跑 (预赛、决赛) |\n");
printf("\t\t\t\t|200m跑 (预赛、决赛) |\n");
printf("\t\t\t\t|400m跑 (预赛、决赛) |\n");
printf("\t\t\t\t|800m跑 (预赛、决赛) |\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t\t输入任意键返回主界面\n\t\t\t\t\t");
system("pause");
}
void zhixuce(){
system("cls");
printf("\n\n\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 运动会秩序册 |\n");
printf("\t\t\t\t|运动会第一天 |\n");
printf("\t\t\t\t|上午: |\n");
printf("\t\t\t\t| 时间 项目 |\n");
printf("\t\t\t\t|8:00~8:40 100m跑 (预赛) |\n");
printf("\t\t\t\t|9:00~10:40 200m跑 (预赛) |\n");
printf("\t\t\t\t|11:00~11:40 400m跑 (预赛) |\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|下午: |\n");
printf("\t\t\t\t| 时间 项目 |\n");
printf("\t\t\t\t|14:00~14:40 800m跑 (预赛) |\n");
printf("\t\t\t\t|15:00~15:40 立定跳远(预赛) |\n");
printf("\t\t\t\t|16:00~16:40 三级跳远(预赛) |\n");
printf("\t\t\t\t|17:00~17:40 铅球投掷(预赛) |\n");
printf("\t\t\t\t|17:00~17:40 跳高 (预赛) |\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|运动会第二天 |\n");
printf("\t\t\t\t|上午: |\n");
printf("\t\t\t\t| 时间 项目 |\n");
printf("\t\t\t\t|8:00~8:40 100m跑 (决赛) |\n");
printf("\t\t\t\t|9:00~10:40 200m跑 (决赛) |\n");
printf("\t\t\t\t|11:00~11:40 400m跑 (决赛) |\n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|下午: |\n");
printf("\t\t\t\t| 时间 项目 |\n");
printf("\t\t\t\t|14:00~14:40 800m跑 (决赛) |\n");
printf("\t\t\t\t|15:00~15:40 立定跳远(决赛) |\n");
printf("\t\t\t\t|16:00~16:40 三级跳远(决赛) | \n");
printf("\t\t\t\t|17:00~17:40 铅球投掷(决赛) |\n");
printf("\t\t\t\t|18:00~18:40 跳高 (决赛) | \n");
printf("\t\t\t\t|----------------------------------------------|\n");
printf("\t\t\t\t|----------------------------------------------|\n");
system("pause");
}
main()
{
char s[20];
printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t请输入密码以进入系统:");
scanf("%s", s);
if (strcmp(s, "123456") == 0) //密码
{
void menu();
void input();
void search();
void updata();
void dlt();
void all();
repeat:
menu();
scanf("%d", &n);
while (n)
{
switch (n)
{
case 1:
input();
break;
case 2:
search();
break;
case 3:
updata();
break;
case 4:
dlt();
break;
case 5:
all();
break;
case 6:
chaxunxiangmu();
break;
case 7:
chaxunxueyuan();
break;
case 8:
xmxx();
break;
case 9:
zhixuce();
break;
}
goto repeat;
}
}
else
printf("密码输入错误!系统已关闭!");
return 0;
}
选项二:
选项三:
选项四:
删除后如选项五所示
选项五:
版权声明:本文为博主作者:stu_kk原创文章,版权归属原作者,如果侵权,请联系我们删除!
原文链接:https://blog.csdn.net/m0_54409739/article/details/125822687