C语言实现——球员信息管理系统

#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

struct players { //声明函数体
	char team_name[20];//队名
	int num;//球员编号
	char name[30];//名字
	char sex;//性别
	int age;//年龄
	char id[100];//身份证
	int height;//身高
	int weight;//体重
	char addr[100];//住址
	char tel[100];//电话号码
	char position[100];//位置
} play[100]; //结构体变量

void menu();//菜单
void input();//录入信息
void display();//浏览
void search();//查询
void search_name();/*通过姓名查询*/
void search_num();/*通过球员编号查询*/
void search_id();/*通过ID查询*/
void search_team_name();/*通过球队名字查询*/

void del();//删除
void add();//添加
void modify();//修改
void save(int);//保存函数

int main() {
	char a;
	int n;
	menu();
	scanf("%d", &n);
	printf("\n");
	switch (n) {
		case 1:
			printf("********欢迎使用球员信息录入功能*******\n");
			input();
			break;
		case 2:
			printf("********欢迎使用球员信息浏览功能*******\n");
			display();
			break;
		case 3:
			printf("********欢迎使用按球员查询信息功能*******\n");
			search();
			break;
		case 4:
			printf("********欢迎使用删除球员信息功能*******\n");
			del();
			break;
		case 5:
			printf("********欢迎使用添加球员信息功能*******\n");
			add();
			break;
		case 6:
			printf("********欢迎使用修改球员信息功能*******\n");
			modify();
			break;
		default:
			printf("选择无效,请选择正确的序号");
			break;
	}
	getchar();//吸收回车
	printf("\n");
	printf("是否继续使用功能(y or n):\n");
	scanf("%c", &a);
	if (a == 'y') {
		main();
		scanf("%d", &n);
		printf("\n");
	} else
		exit(0);
}

void menu() { //菜单函数
	printf("\t\t*****欢迎来到球员信息管理系统****\n");
	printf("\t\t        1.录入球员信息\n");
	printf("\t\t        2.浏览球员信息\n");
	printf("\t\t        3.查询球员信息\n");
	printf("\t\t        4.删除球员信息\n");
	printf("\t\t        5.添加球员信息\n");
	printf("\t\t        6.修改球员信息\n");
	printf("----------------------------------------------------\n");
	printf("请按序号选择您需要的功能(输入1--6):\n");
}

void input() { //录入函数
	int i, j, n;
	char a;
	printf("请输入需要录入信息的球员人数(1-20):\n");
	scanf("%d", &j);
	printf("\n");

	for (i = 0; i < j; i++) {
		printf("请输入球员队名:");
		scanf("%s", &play[i].team_name);
		printf("\n");

		printf("请输入球员编号:");
		scanf("%d", &play[i].num);
		printf("\n");

		printf("请输入球员姓名:");
		scanf("%s", &play[i].name);
		printf("\n");


		printf("请输入性别(w-女 m-男):");
		getchar();
		scanf("%c", &play[i].sex);
		a = play[i].sex;
		printf("\n");

		if (a != 'm' && a != 'w') {
			printf("您输入的性别有误,请重新输入!\n");
			printf("\n");
			printf("请输入性别(w-女 m-男):");
			getchar();
			scanf("%c", &play[i].sex);
			printf("\n");
		}

		printf("请输入年龄:");
		scanf("%d", &play[i].age);
		printf("\n");

		printf("请输入身高:");
		scanf("%d", &play[i].height);
		printf("\n");

		printf("请输入体重:");
		scanf("%d", &play[i].weight);
		printf("\n");

		printf("请输入球员身份证号:");
		scanf("%s", &play[i].id);
		printf("\n");
		n = strlen(play[i].id);//计算n长度
		if (n < 18 || n > 18) {
			printf("您输入的身份证有误,请重新输入!\n");
			printf("\n");
			printf("请输入球员身份证号:");
			scanf("%s", &play[i].id);
			printf("\n");
		}

		printf("请输入位置:");
		scanf("%s", &play[i].position);
		printf("\n");

		printf("请输入住址:");
		scanf("%s", &play[i].addr);
		printf("\n");

		printf("请输入电话:");
		scanf("%s", &play[i].tel);
	}
	printf("\n录入完成!\n");
	save(j);//把数据存储到文件中,保存起来,防止丢失
}

void save(int j) { //文件保存函数
	int i;
	FILE *fp;
	fp = fopen("players_list", "wb");
	if
	((fp = fopen("players_list", "wb")) == NULL) {
		printf("cannot open file\n");
		exit(0);
	}
	for (i = 0; i < j; i++) {
		if (fwrite(&play[i], sizeof(play[i]), 1, fp) != 1)
			printf("file write error\n");
	}
	fclose(fp);
}

int load() { //导入函数
	FILE *fp;
	int i = 0;
	if ((fp = fopen("players_list", "rb")) == NULL) {
		printf("cannot open file\n");
		exit(0);
	} else {
		do {
			fread(&play[i], sizeof(play[i]), 1, fp);
			i++;
		} while (feof(fp) == 0);
	}
	fclose(fp);
	return (i - 1);
}

void display() { //浏览函数
	int i;
	int j = load();//导入数据
	printf("---------------------------------------------------------------------------------------------\n");
	printf("球员编号\t姓名\t性别\t年龄\t身高\t体重\t位置\t住址\t电话\t身份证号\n");
	printf("---------------------------------------------------------------------------------------------\n");
	for (i = 0; i < j; i++) //j为输入部分球员的人数
		printf("%-12d\t%-5s\t%c\t%d\t%d\t%d\t%s\t%s\t\t%s\t%s\t", play[i].num, play[i].name, play[i].sex, play[i].age,
		       play[i].height, play[i].weight, play[i].position, play[i].addr, play[i].tel, play[i].id);
	printf("---------------------------------------------------------------------------------------------\n");
};

void search() { /*查询球员信息函数*/
	int i, j;        /*定义i,j*/
	do {         /*使用do...while语句*/
		printf("按1 通过球员姓名查询\n按2 通过球员编号查询\n按3 通过ID搜索\n按4 通过球队名字搜索\n按5 返回主菜单页面\n");
		printf("你的选择是:");
		scanf("%d", &i);
		if (i >= 1 && i <= 5) {
			j = 1;
			break;
		} else {
			j = 0;
			printf("输入错误,请重新输入");
		}
	} while (j == 0);
	while (j == 1) {

		switch (i) {
			case 1:
				printf("球员姓名查询\n");
				search_name();
				break;
			case 2:
				printf("球员编号查询\n");
				search_num();
				break;
			case 3:
				printf("球员ID查询\n");
				search_id();
				break;
			case 4:
				printf("队名查询\n");
				search_team_name();
				break;
			case 5:
				system("cls");
				menu();
				break;
			default:
				break;
		}
	}
}

void search_name() {
	char search_name[20] = { 0 };//初始化数组
	int i, j, m;
	int k = load();
	printf("请输入球员姓名:\n");

	scanf("%s", search_name);
	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++)
			if (strcmp(search_name, play[i].name) == 0) {
				printf("已找到该球员,其相关信息为:\n");
				printf("\n \t队名 \t姓名 \t 性别 \t年龄 \t编号 \t ID \t 地址\t体重\t电话");
				printf("\n \t%s \t%s \t%c\t%d \t%s \t%s \t%s\t%d \t%s \n",
				       play[i].team_name, play[i].name, play[i].sex, play[i].age, play[i].id, play[i].id, play[i].addr, play[i].weight,
				       play[i].tel);
				system("pause");//暂停程序
				system("cls");//清屏
				menu();

			}
		if (i == k) {
			printf("\n 抱歉,未查到相关球员\n\n");
			printf("继续该查询方式请按1,返回查询方式选择请按2");
			scanf("%d", &m);
			switch (m) {
				case 1:
					system("pause");
					system("cls");
					break;
				case 2:
					search();
					break;
				default:
					break;
			}
		}
	}
}

void search_num() {
	int num;
	int i, t, k, m;
	int j = load();
	printf("请输入球员编号:\n");
	scanf("%d", &num);
	for (i = 0; i < j; i++)
		if (num == play[i].num) {
			printf("\n 已找到此人,其记录为: \n");
			printf("------------------------------------------------------------------------------\n");
			printf("\n \t队名 \t姓名 \t 性别 \t年龄 \t编号 \t ID \t 地址\t体重\t电话");
			printf("------------------------------------------------------------------------------\n");
			printf("\n \t%s \t%s \t%c\t%d \t%s \t%s \t%s\t%d \t%s \n",
			       play[i].team_name, play[i].name, play[i].sex, play[i].age, play[i].num, play[i].id, play[i].addr, play[i].weight,
			       play[i].tel);
			system("pause");
			system("cls");
			menu();
		}
	if (i == k) {
		printf("\n 抱歉,未查到相关球员\n\n");
		printf("继续该查询方式请按1,返回查询方式选择请按2");
		scanf("%d", &m);
		switch (m) {
			case 1:
				system("pause");
				system("cls");
				break;
			case 2:
				search();
				break;
			default:
				break;
		}
	}
}

void search_id() {
	char search_id[10] = { 0 };
	int i, j, m;
	int k = load();
	printf("请输入球员ID:\n");

	scanf("%s", search_id, sizeof(search_id));
	for (i = 0; i < 20; i++) {
		for (j = 0; j < 20; j++)
			if (strcmp(search_id, play[j].id) == 0) {
				printf("已找到该球员,其相关信息为:\n");
				printf("\n \t队名 \t姓名 \t 性别 \t年龄 \t编号 \t ID \t 地址\t体重\t电话");
				printf("\n \t%s \t%s \t%c\t%d \t%s \t%s \t%s\t%d \t%s \n",
				       play[i].team_name, play[i].name, play[i].sex, play[i].age, play[i].id, play[i].id, play[i].addr, play[i].weight,
				       play[i].tel);
				system("pause");
				system("cls");
				menu();
			}
		if (i == k) {
			printf("\n 抱歉,未查到相关球员\n\n");
			printf("继续该查询方式请按1,返回查询方式选择请按2");
			scanf("%d", &m);
			switch (m) {
				case 1:
					system("pause");
					system("cls");
					break;
				case 2:
					search();
					break;
				default:
					break;
			}
		}
	}
}

void search_team_name() {
	char search_team_name[10] = { 0 };
	int i, j, m;
	int k = load();
	printf("请输入队名:\n");

	scanf("%s", search_team_name, sizeof(search_team_name));
	for (i = 0; i < 20; i++) {
		//for (j = 0; j < 20; j++)
		if (strcmp(search_team_name, play[j].team_name) == 0) {
			printf("已找到该球员,其相关信息为:\n");
			printf("\n \t队名 \t姓名 \t 性别 \t年龄 \t编号 \t ID \t 地址\t体重\t电话");
			printf("\n \t%s \t%s \t%c\t%d \t%s \t%s \t%s\t%d \t%s \n",
			       play[i].team_name, play[i].name, play[i].sex, play[i].age, play[i].id, play[i].id, play[i].addr, play[i].weight,
			       play[i].tel);
			system("pause");
			system("cls");
			menu();
		}
		if (i == k) {
			printf("\n 抱歉,未查到相关球员\n\n");
			printf("继续该查询方式请按1,返回查询方式选择请按2");
			scanf("%d", &m);
			switch (m) {
				case 1:
					system("pause");
					system("cls");
					break;
				case 2:
					search();
					break;
				default:
					break;
			}
		}
	}
}

void add() { //添加函数
	FILE *fp;//文件指针
	int t, n;
	int count = 0;
	int i;
	int j = load();
	char a;
	printf("\n原来球员信息:\n");
	display();
	printf("\n");
	fp = fopen("players_list.txt", "a");
	printf("输入增加球员的个数");
	scanf("%d", &t);
	for (i = j; i < (t + j); i++) {
		printf("\n输入新增球员的信息:\n");
		printf("\n");
		printf("请输入球员队名:");
		scanf("%d", &play[i].team_name);
		printf("\n");

		printf("请输入球员编号:");
		scanf("%d", &play[i].num);
		printf("\n");

		printf("请输入球员姓名:");
		scanf("%s", &play[i].name);
		printf("\n");


		printf("请输入性别(w-女 m-男):");
		getchar();
		scanf("%c", &play[i].sex);
		printf("\n");
		if (a != 'm' && a != 'w') {
			printf("您输入的性别有误,请重新输入!\n");
			printf("\n");
			printf("请输入性别(w-女 m-男):");
			getchar();
			scanf("%c", &play[i].sex);
			printf("\n");
		}


		printf("请输入年龄:");
		scanf("%d", &play[i].age);
		printf("\n");

		printf("请输入身高:");
		scanf("%d", &play[i].height);
		printf("\n");

		printf("请输入体重:");
		scanf("%d", &play[i].weight);
		printf("\n");

		printf("请输入球员身份证号:");
		scanf("%s", &play[i].id);
		printf("\n");
		n = strlen(play[i].id);
		if (n < 18 || n > 18) {
			printf("您输入的身份证有误,请重新输入!\n");
			printf("\n");
			printf("请输入球员身份证号:");
			scanf("%s", &play[i].id);
			printf("\n");
		}

		printf("请输入位置:");
		scanf("%s", &play[i].position);
		printf("\n");

		printf("请输入住址:");
		scanf("%s", &play[i].addr);
		printf("\n");

		printf("请输入电话:");
		scanf("%s", &play[i].tel);

		count = count + 1;
		printf("已经增加的球员个数:\n");
		printf("%d\n", count);
	}
	printf("\n添加完成\n");
	j = j + count;
	printf("\n浏览增加后的所有球员信息\n");
	printf("\n");
	save(j);
	display();
	fclose(fp);
}

void modify() { /*修改函数*/
	int num;
	char name[30];
	char sex;
	int age;
	int height;
	int weight;
	char addr[50];
	char tel[20];
	char position[50];
	int b, c, i, n, t, flag;
	int j = load();
	printf("\n原来的球员信息:\n");
	display();
	printf("\n");
	printf("请输入要修改的球员的姓名:\n");
	scanf("%s", name);
	for (flag = 1, i = 0; flag && i < j; i++)
		if (strcmp(play[i].name, name) == 0) {
			printf("\n已找到此人,原始记录为: \n");
			printf("球员编号\t姓名\t\t性别\t\t年龄\n");
			printf("\n%d\t\t%s\t\t%c\t\t%d\t\n", play[i].num, play[i].name, play[i].sex, play[i].age);
			printf("\n身高\t\t体重\t\t住址\t\t电话\t\t\n");
			printf("\n%d\t\t%d\t\t%s\t\t%s\n", play[i].height, play[i].weight, play[i].addr, play[i].tel);
			printf("位置\n");
			printf("\n%s\n", play[i].position);
			printf("\n确实要修改此人信息请按1 ;不修改请按0\n");
			scanf("%d", &n);
			if (n == 1) {
				printf("\n需要进行修改的选项\n 1.球员编号2.姓名3.性别4.年龄5.身高6.体重7.住址8.电话9.位置\n");
				printf("请输入你想修改的那项序号:\n");
				scanf("%d", &c);
				if (c > 9 || c < 1)
					printf("\n选择错误,请重新选择!\n");
			}
			flag = 0;
		}
	if (flag == 1)
		printf("\n对不起,查无此人!\n");
	do {
		switch (c) {
			case 1:
				printf("球员编号改为: ");
				scanf("%d", &num);
				play[i - 1].num = num;
				break;
			case 2:
				printf("姓名改为: ");
				scanf(" %s", name);
				strcpy(play[i - 1].name, name);
				break;
			case 3:
				printf("性别改为:  ");
				getchar();
				scanf("%c", &sex);
				play[i - 1].sex = sex;
				break;
			case 4:
				printf("年龄改为: ");
				scanf("%d", &age);
				play[i - 1].age = age;
				break;
			case 5:
				printf("身高改为: ");
				scanf("%d", &height);
				play[i - 1].height = height;
				break;
			case 6:
				printf("体重改为: ");
				scanf("%d", &weight);
				play[i - 1].weight = weight;
				break;
			case 7:
				printf("住址改为: ");
				scanf("%s", addr);
				strcpy(play[i - 1].addr, addr);
				break;
			case 8:
				printf("电话改为: ");
				scanf("%s", tel);
				strcpy(play[i - 1].tel, tel);
				break;
			case 9:
				printf("位置改为:");
				scanf("%s", position);
				strcpy(play[i - 1].position, position);
				break;
		}
		printf("\n");
		printf("\n是否确定所修改的信息?\n是请按1;不重新修改请按2:\n");
		scanf("%d", &b);
	} while (b == 2);
	printf("\n浏览修改后的所有球员信息:\n");
	printf("\n");
	save(j);
	display();
	printf("\n继续修改请按1,不再修改请按0\n");
	scanf("%d", &t);
	switch (t) {
		case 1:
			modify();
			break;
		case 0:
			break;
		default:
			break;
	}
}

void del() { /*删除函数*/
	int j = load();
	int i, a, n, t, flag;
	char name[30];
	printf("\n原来的球员信息:\n");
	display();
	printf("\n");
	printf("请输入要删除的球员的姓名:\n");
	scanf("%s", name);
	for (flag = 1, i = 0; flag && i < j; i++) {
		if (strcmp(play[i].name, name) == 0) {
			printf("\n已找到此人,原始记录为: \n");
			printf("球员编号\t姓名\t\t性别\t\t年龄\n");
			printf("\n%d\t\t%s\t\t%c\t\t%d\t\n", play[i].num, play[i].name, play[i].sex, play[i].age);
			printf("\n身高\t\t体重\t\t住址\t\t电话\t\t\n");
			printf("\n%d\t\t%d\t\t%s\t\t%s\n", play[i].height, play[i].weight, play[i].addr, play[i].tel);
			printf("位置\n");
			printf("\n%s\n", play[i].position);
			printf("\n确实要修改此人信息请按1 ;不修改请按0\n");
			scanf("%d", &n);
			if (n == 1) {
				for (a = i; a < j - 1; a++) {
					strcpy(play[a].name, play[a + 1].name);
					play[a].num = play[a + 1].num;
					play[a].sex = play[a + 1].sex;
					play[a].age = play[a + 1].age;
					play[a].height = play[a + 1].height;
					play[a].weight = play[a + 1].weight;
					strcpy(play[a].addr, play[a + 1].addr);
					strcpy(play[a].tel, play[a + 1].tel);
					strcpy(play[a].position, play[a + 1].position);
				}
				flag = 0;
			}
		}
	}
	if (!flag)
		j = j - 1;
	else
		printf("\n对不起,查无此人!\n");
	printf("\n浏览删除后的所有球员信息:\n");
	save(j);
	display();
	printf("\n继续删除请按1,不再删除请按0\n");
	scanf("%d", &t);
	switch (t) {
		case 1:
			del();
			break;
		case 0:
			break;
		default:
			break;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT大鸵鸟

你的鼓励是我创作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值