Skip to content

YMYarctto/2023-C-1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

2023 C语言期中

#include <stdio.h>

//主菜单页面
void mainMenu();
//查看成绩菜单页面
void scoreMenu();
//返回用户输入的数字,1~max为有效
int scanln(int max);
//主菜单页面显示后执行输入逻辑,传入数组
void mainMenuInput(int *stu);
//查看成绩页面显示后执行输入逻辑,传入数组
void scoreMenuInput(int *stu, int size);
//输入成绩并存入数组,传入数组
void inputScore(int *stu);
//交换元素,传入数组和偏移量,在IntSort中使用
void changeElement(int *arr, int i, int offset);
//排序并交换整行,传入数组和排序列
void IntSort(int *arr, int size, int input);
//输出成绩,传入数组
void outputScore(int *stu, int size);
//执行查找逻辑,传入数组
void search(int *stu, int size);
//计算平均分,传入数组
void Cal(int *stu, int size);

int main() {
	int students[30][5] = {};
	mainMenu();
	mainMenuInput(&students[0][0]);
	return 0;
}

void mainMenu() {
	printf("|------------------------|\n");
	printf("|---学生成绩统计系统-----|\n");
	printf("|------------------------|\n");
	printf("|---1.查看学生成绩-------|\n");
	printf("|---2.输入学生成绩-------|\n");
	printf("|---3.查找学生成绩-------|\n");
	printf("|---4.计算平均分---------|\n");
	printf("|---5.退出系统-----------|\n");
	printf("|------------------------|\n\n");
}

void scoreMenu() {
	printf("\n|------------------------|\n");
	printf("|---1.按学号查看---------|\n");
	printf("|---2.按数学成绩查看-----|\n");
	printf("|---3.按英语成绩查看-----|\n");
	printf("|---4.按物理成绩查看-----|\n");
	printf("|---5.按总分查看---------|\n");
	printf("|---6.返回上级-----------|\n");
	printf("|------------------------|\n\n");
}

int scanln(int max) {
	int input;
	printf(">");
	if (scanf("%d", &input) != 1) {
		while (getchar() != '\n');
		return -1;
	} else if (input < 1 || input > max) {
		return -1;
	}
	return input;
}

void mainMenuInput(int *stu) {
	int size = 0;
	while (1) {
		switch (scanln(5)) {
			case 1:
				scoreMenu();
				scoreMenuInput(stu, size);
				break;
			case 2:
				if (size < 30) {
					inputScore(&stu[5 * size]);
					size += 1;
				} else {
					printf("已达到人数上限\n");
				}
				break;
			case 3:
				search(stu, size);
				break;
			case 4:
				Cal(stu, size);
				break;
			case 5:
				printf("\n感谢您的使用,下次再见");
				return;
			default:
				printf("错误输入\n");
				break;
		}
	}
}

void scoreMenuInput(int *stu, int size) {
	while (1) {
		printf(">");
		int input = scanln(6);
		switch (input) {
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				IntSort(stu, size, input - 1);
				outputScore(stu, size);
				break;
			case 6:
				printf("\n|----------------|\n");
				printf("|--已返回到上级--|\n");
				printf("|----------------|\n\n");
				return;
			default:
				printf("错误输入\n");
				break;
		}
	}
}

void inputScore(int *stu) {
	printf("请输入以下数据:学号,数学成绩,英语成绩,物理成绩(用英文逗号隔开)\n");
	while (1) {
		printf(">>");
		if (scanf("%d,%d,%d,%d", &stu[0], &stu[1], &stu[2], &stu[3]) != 4) {
			while (getchar() != '\n');
			printf("错误输入\n\n");
		} else {
			stu[4] = stu[1] + stu[2] + stu[3];
			printf("输入成功\n\n");
			return;
		}
	}
}

void changeElement(int *arr, int i, int offset) {
	int temp;
	temp = arr[i * 5 + offset];
	arr[i * 5 + offset] = arr[(i + 1) * 5 + offset];
	arr[(i + 1) * 5 + offset] = temp;
}

void IntSort(int *arr, int size, int input) {
	for (int j = 0; j < size; j++) {
		for (int i = 0; i < size - 1 - j; i++) {
			if (arr[i * 5 + input] < arr[(i + 1) * 5 + input]) {
				for (int k = 0; k < 5; k++) {
					changeElement(arr, i, k);
				}
			}
		}
	}
}

void outputScore(int *stu, int size) {
	printf("\n|--------------------------------------------|\n");
	printf("|      学号 数学成绩 英语成绩 物理成绩 总成绩|\n");
	for (int i = 0; i < size; i++) {
		printf("|%10d   %3d      %3d      %3d      %3d |\n", stu[i * 5], stu[i * 5 + 1], stu[i * 5 + 2], stu[i * 5 + 3],
		       stu[i * 5 + 4]);
	}
	printf("|--------------------------------------------|\n\n");
}

void search(int *stu, int size) {
	printf("请输入要查找学生的学号\n>");
	int num = scanln((int)1e11);
	for (int i = 0; i < size; i++) {
		if (stu[i * 5] == num) {
			printf("\n已找到学号为%d的学生的成绩\n", num);
			printf("|-----------------------------------|\n");
			printf("| 数学成绩 英语成绩 物理成绩 总成绩 |\n");
			printf("|   %3d      %3d      %3d      %3d  |\n", stu[i * 5 + 1], stu[i * 5 + 2], stu[i * 5 + 3], stu[i * 5 + 4]);
			printf("|-----------------------------------|\n\n");
			return;
		}
	}
	printf("未找到学号\n\n", num);
}

void Cal(int *stu, int size) {
	if (size == 0) {
		printf("暂无数据\n\n");
		return;
	}
	double count[4] = {};
	for (int i = 1; i < 5; i++) {
		for (int j = 0; j < size; j++) {
			count[i - 1] += stu[5 * j + i];
		}
		count[i - 1] /= size;
	}
	printf("\n该班级平均分如下\n");
	printf("|--------------------------------------|\n");
	printf("| 数学成绩  英语成绩  物理成绩  总成绩 |\n");
	printf("|  %6.2lf    %6.2lf    %6.2lf   %6.2lf |\n", count[0], count[1], count[2], count[3]);
	printf("|--------------------------------------|\n\n");
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages