c语言单链表写:歌手比赛系统设计 1.输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分) 2.显示主菜单如下:3.输入选手数据4.评委打分5.成

c语言单链表写:歌手比赛系统设计 1.输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分) 2.显示主菜单如下:3.输入选手数据4.评委打分5.成绩排序(按平均分)排序后显示排序结果 6.数据查询 7.追加选手数据 8写入数据文件 9.加载数据文件 代码注释用中文 写完整代码

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

// 定义选手结构体
struct Player {
	/*完整代码联系博主:lxt123lxp456*/
};

struct Player* head = NULL;

// 显示主菜单
void displayMainMenu() {
	printf("主菜单:\n");
	printf("1. 输入选手数据\n");
	printf("2. 评委打分\n");
	printf("3. 成绩排序(按平均分)\n");
	printf("4. 数据查询\n");
	printf("5. 追加选手数据\n");
	printf("6. 写入数据文件\n");
	printf("7. 加载数据文件\n");
	printf("8. 显示全部信息\n");
	printf("0. 退出\n");
}

// 输入选手数据
void inputPlayerData() {
	struct Player* newPlayer = (struct Player*)malloc(sizeof(struct Player));
	if (newPlayer == NULL) {
		printf("内存分配失败\n");
		return;
	}
	
	printf("请输入选手编号: ");
	scanf("%d", &newPlayer->number);
	printf("请输入选手姓名: ");
	scanf("%s", newPlayer->name);
	
	printf("请输入十个评委的成绩:\n");
	for (int i = 0; i < 10; i++) {
		scanf("%d", &newPlayer->scores[i]);
	}
	
	newPlayer->next = head;
	head = newPlayer;
	
	printf("选手数据已添加\n");
}

// 评委打分
void judgeScoring() {
	int playerNumber;
	printf("请输入选手编号: ");
	scanf("%d", &playerNumber);
	
	struct Player* current = head;
	while (current != NULL) {
		if (current->number == playerNumber) {
			printf("请输入评委的成绩:\n");
			for (int i = 0; i < 10; i++) {
				scanf("%d", &current->scores[i]);
			}
			return;
		}
		current = current->next;
	}
	printf("未找到对应选手\n");
}

// 计算总成绩和平均成绩
void calculateScores() {
	struct Player* current = head;
	while (current != NULL) {
		int maxScore = current->scores[0];
		int minScore = current->scores[0];
		float totalScore = 0;
		for (int i = 0; i < 10; i++) {
			totalScore += current->scores[i];
			if (current->scores[i] > maxScore) {
				maxScore = current->scores[i];
			}
			if (current->scores[i] < minScore) {
				minScore = current->scores[i];
			}
		}
		current->totalScore = totalScore - maxScore - minScore;
		current->averageScore = current->totalScore / 8.0;
		current = current->next;
	}
	printf("成绩已计算\n");
}

// 按平均分排序
void sortPlayersByAverageScore() {
	// 使用冒泡排序按平均分排序
	struct Player *current, *next;
	float temp;
	int tempNumber;
	char tempName[50];
	
	for (current = head; current != NULL; current = current->next) {
		for (next = current->next; next != NULL; next = next->next) {
			if (current->averageScore < next->averageScore) {
				// 交换选手数据
				temp = current->averageScore;
				current->averageScore = next->averageScore;
				next->averageScore = temp;
				
				temp = current->totalScore;
				current->totalScore = next->totalScore;
				next->totalScore = temp;
				
				tempNumber = current->number;
				current->number = next->number;
				next->number = tempNumber;
				
				strcpy(tempName, current->name);
				strcpy(current->name, next->name);
				strcpy(next->name, tempName);
			}
		}
	}
	printf("按平均分排序完成\n");

}

// 追加选手数据
void appendPlayerData() {
	struct Player* newPlayer = (struct Player*)malloc(sizeof(struct Player));
	if (newPlayer == NULL) {
		printf("内存分配失败\n");
		return;
	}
	
	printf("请输入选手编号: ");
	scanf("%d", &newPlayer->number);
	printf("请输入选手姓名: ");
	scanf("%s", newPlayer->name);
	
	printf("请输入十个评委的成绩:\n");
	for (int i = 0; i < 10; i++) {
		scanf("%d", &newPlayer->scores[i]);
	}
	
	newPlayer->next = head;
	head = newPlayer;
	
	printf("选手数据已追加\n");
}

// 写入数据到文件
void writeDataToFile() {
	FILE *file;
	file = fopen("players.txt", "w");
	if (file == NULL) {
		printf("无法打开文件\n");
		return;
	}
	
	struct Player* current = head;
	while (current != NULL) {
		fprintf(file, "%d %s ", current->number, current->name);
		for (int i = 0; i < 10; i++) {
			fprintf(file, "%d ", current->scores[i]);
		}
		fprintf(file, "%.2f %.2f\n", current->totalScore, current->averageScore);
		current = current->next;
	}
	
	fclose(file);
	printf("数据已写入文件\n");
}

void loadDataFromFile(struct Player** head) {
	FILE* file = fopen("players.txt", "r");
	if (file == NULL) {
		printf("无法打开文件\n");
		return;
	}
	
	struct Player* current = *head;
	
	while (!feof(file)) {
		struct Player* newPlayer = (struct Player*)malloc(sizeof(struct Player));
		if (newPlayer == NULL) {
			printf("内存分配失败\n");
			return;
		}
		
		int result = fscanf(file, "%d %s", &newPlayer->number, newPlayer->name);
		if (result == EOF) {
			free(newPlayer); 
			break;
		}
		
		for (int i = 0; i < 10; i++) {
			result = fscanf(file, "%d", &newPlayer->scores[i]);
			if (result == EOF) {
				break;
			}
		}
		
		result = fscanf(file, "%f %f", &newPlayer->totalScore, &newPlayer->averageScore);
		if (result == EOF) {
			break;
		}
		
		newPlayer->next = NULL;
		
		if (*head == NULL) {
			*head = newPlayer;
			current = *head;
		} else {
			current->next = newPlayer;
			current = newPlayer;
		}
	}
	
	fclose(file);
	printf("数据已从文件加载\n");
}

void displayAllPlayers(struct Player* head) {
	struct Player* current = head;
	if (current == NULL) {
		printf("暂无选手信息\n");
	} else {
		while (current != NULL) {
			printf("选手编号: %d\n", current->number);
			printf("选手姓名: %s\n", current->name);
			printf("平均分: %.2f\n", current->averageScore);
			current = current->next;
		}
	}
}

void searchPlayer(struct Player* head) {
	int playerNumber;
	printf("请输入要查询的选手编号: ");
	scanf("%d", &playerNumber);
	
	struct Player* current = head;
	while (current != NULL) {
		if (current->number == playerNumber) {
			printf("选手编号: %d\n", current->number);
			printf("选手姓名: %s\n", current->name);
			printf("平均分: %.2f\n", current->averageScore);
			return;
		}
		current = current->next;
	}
	printf("未找到对应选手\n");
}
int main() {
	/*完整代码联系博主:lxt123lxp456*/
}

猜你喜欢

转载自blog.csdn.net/qq_62088638/article/details/134320132