#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
// 学生结构体
typedef struct {
char id[20];
char name[50];
char gender[10];
char clas[20];
float scores[3];
float averageScore;
float totalScore;
float maxScore;
float minScore;
} Student;
// 全局学生数组和学生数量
Student students[MAX_STUDENTS];
int studentCount = 0;
// 辅助函数声明
int findStudentIndexById(const char* id);
void printStudent(const Student* student);
void printAllStudents();
void addStudent();
void deleteStudent();
void modifyStudent();
void searchStudent();
void sortStudents();
void groupStudents();
int main() {
int choice;
while (1) {
printf("\n----------- 学生信息管理系统 -----------\n");
printf("1. 显示所有学生信息\n");
printf("2. 录入学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 查询学生信息\n");
printf("6. 排序学生信息\n");
printf("7. 分组学生信息\n");
printf("0. 退出系统\n");
printf("---------------------------------------\n");
printf("请输入要进行的操作(0-7):");
scanf("%d", &choice);
switch (choice) {
case 1:
printAllStudents();
break;
case 2:
addStudent();
break;
case 3:
deleteStudent();
break;
case 4:
modifyStudent();
break;
case 5:
searchStudent();
break;
case 6:
sortStudents();
break;
case 7:
groupStudents();
break;
case 0:
printf("感谢使用学生信息管理系统!\n");
exit(0);
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
return 0;
}
// 根据学号查找学生在数组中的索引
int findStudentIndexById(const char* id) {
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 打印学生信息
void printStudent(const Student* student) {
printf("学号:%s\n", student->id);
printf("姓名:%s\n", student->name);
printf("性别:%s\n", student->gender);
printf("班级:%s\n", student->clas);
printf("学科成绩:\n");
printf(" 语文:%.2f\n", student->scores[0]);
printf(" 数学:%.2f\n", student->scores[1]);
printf(" 英语:%.2f\n", student->scores[2]);
printf("平均成绩:%.2f\n", student->averageScore);
printf("总成绩:%.2f\n", student->totalScore);
printf("最高成绩:%.2f\n", student->maxScore);
printf("最低成绩:%.2f\n", student->minScore);
printf("\n");
}
// 打印所有学生信息
void printAllStudents() {
printf("\n=========== 所有学生信息 ===========\n");
for (int i = 0; i < studentCount; i++) {
printStudent(&students[i]);
}
printf("共%d名学生\n", studentCount);
printf("===================================\n");
}
// 录入学生信息
void addStudent() {
if (studentCount >= MAX_STUDENTS) {
printf("学生信息已达到上限,无法继续添加!\n");
return;
}
Student newStudent;
printf("\n请输入学号:");
scanf("%s", newStudent.id);
// 检查学号是否已存在
if (findStudentIndexById(newStudent.id) != -1) {
printf("学号已存在,请重新输入!\n");
return;
}
printf("请输入姓名:");
scanf("%s", newStudent.name);
printf("请输入性别:");
scanf("%s", newStudent.gender);
printf("请输入班级:");
scanf("%s", newStudent.clas);
printf("请输入语文成绩:");
scanf("%f", &newStudent.scores[0]);
printf("请输入数学成绩:");
scanf("%f", &newStudent.scores[1]);
printf("请输入英语成绩:");
scanf("%f", &newStudent.scores[2]);
// 计算平均成绩、总成绩、最高成绩和最低成绩
newStudent.totalScore = newStudent.scores[0] + newStudent.scores[1] + newStudent.scores[2];
newStudent.averageScore = newStudent.totalScore / 3.0;
newStudent.maxScore = newStudent.scores[0];
newStudent.minScore = newStudent.scores[0];
for (int i = 1; i < 3; i++) {
if (newStudent.scores[i] > newStudent.maxScore) {
newStudent.maxScore = newStudent.scores[i];
}
if (newStudent.scores[i] < newStudent.minScore) {
newStudent.minScore = newStudent.scores[i];
}
}
// 将新学生信息添加到数组中
students[studentCount] = newStudent;
studentCount++;
printf("学生信息添加成功!\n");
}
// 删除学生信息
void deleteStudent() {
char id[20];
printf("\n请输入要删除的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
// 将要删除的学生信息从数组中移除
for (int i = index; i < studentCount - 1; i++) {
students[i] = students[i + 1];
}
studentCount--;
printf("学生信息删除成功!\n");
}
// 修改学生信息
void modifyStudent() {
char id[20];
printf("\n请输入要修改的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
Student* student = &students[index];
printf("学号:%s\n", student->id);
printf("姓名:%s\n", student->name);
printf("性别:%s\n", student->gender);
printf("班级:%s\n", student->clas);
printf("学科成绩:\n");
printf(" 语文:%.2f\n", student->scores[0]);
printf(" 数学:%.2f\n", student->scores[1]);
printf(" 英语:%.2f\n", student->scores[2]);
printf("平均成绩:%.2f\n", student->averageScore);
printf("总成绩:%.2f\n", student->totalScore);
printf("最高成绩:%.2f\n", student->maxScore);
printf("最低成绩:%.2f\n", student->minScore);
printf("\n请输入新的学生信息:\n");
printf("请输入姓名:");
scanf("%s", student->name);
printf("请输入性别:");
scanf("%s", student->gender);
printf("请输入班级:");
scanf("%s", student->clas);
printf("请输入语文成绩:");
scanf("%f", &student->scores[0]);
printf("请输入数学成绩:");
scanf("%f", &student->scores[1]);
printf("请输入英语成绩:");
scanf("%f", &student->scores[2]);
// 更新平均成绩、总成绩、最高成绩和最低成绩
student->totalScore = student->scores[0] + student->scores[1] + student->scores[2];
student->averageScore = student->totalScore / 3.0;
student->maxScore = student->scores[0];
student->minScore = student->scores[0];
for (int i = 1; i < 3; i++) {
if (student->scores[i] > student->maxScore) {
student->maxScore = student->scores[i];
}
if (student->scores[i] < student->minScore) {
student->minScore = student->scores[i];
}
}
printf("学生信息修改成功!\n");
}
// 查找学生信息
void searchStudent() {
char id[20];
printf("\n请输入要查找的学生学号:");
scanf("%s", id);
int index = findStudentIndexById(id);
if (index == -1) {
printf("未找到学号为%s的学生!\n", id);
return;
}
printf("\n=========== 查找到的学生信息 ===========\n");
printStudent(&students[index]);
printf("=======================================\n");
}
// 根据平均成绩排序学生信息
void sortStudents() {
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - i - 1; j++) {
if (students[j].averageScore < students[j + 1].averageScore) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生信息排序成功!\n");
}
// 分组学生信息
void groupStudents() {
int groupCount;
printf("\n请输入要分组的组数:");
scanf("%d", &groupCount);
if (groupCount <= 0 || groupCount > studentCount) {
printf("无效的组数,请重新输入!\n");
return;
}
int studentsPerGroup = studentCount / groupCount;
int remainingStudents = studentCount % groupCount;
int startIndex = 0;
for (int i = 0; i < groupCount; i++) {
int endIndex = startIndex + studentsPerGroup;
if (remainingStudents > 0) {
endIndex++;
remainingStudents--;
}
printf("\n=========== 第%d组学生信息 ===========\n", i + 1);
for (int j = startIndex; j < endIndex; j++) {
printStudent(&students[j]);
}
printf("======================================\n");
startIndex = endIndex;
}
}
找ChatGPT
位选,选位置。我要选择哪一位数码管亮。
段选,选一段。我要选择哪一段LED亮.