代码说名
-
定义常量:
MAX_STUDENTS
:最大学生数量。NAME_LENGTH
和GENDER_LENGTH
:姓名和性别字符串的最大长度。
-
定义学生结构体:
Student
:包含学号、姓名、年龄、性别和成绩的结构体。
-
定义全局变量:
students
:学生数组,存储所有学生信息。studentCount
:当前学生数量。
-
添加学生:
- 提示用户输入学生信息并存储到学生数组中,增加学生数量。
-
删除学生:
- 根据学号查找并删除学生,调整数组以移除空位,减少学生数量。
-
修改学生信息:
- 根据学号查找并修改学生的信息。
-
显示所有学生信息:
- 打印所有学生的信息。
-
根据学号查找学生:
- 查找并打印指定学号的学生信息。
-
根据姓名查找学生:
- 查找并打印指定姓名的学生信息。
-
按成绩排序学生:
- 按成绩从高到低对学生进行排序。
-
主菜单:
- 提供用户选择功能,并根据选择执行相应操作。
代码
#include <stdio.h>
#include <string.h>
// 定义最大学生数量和姓名、性别长度
#define MAX_STUDENTS 100
#define NAME_LENGTH 50
#define GENDER_LENGTH 10
// 定义学生结构体
typedef struct {
int id; // 学号
char name[NAME_LENGTH]; // 姓名
int age; // 年龄
char gender[GENDER_LENGTH]; // 性别
float grade; // 成绩
} Student;
// 学生数组和当前学生数量
Student students[MAX_STUDENTS];
int studentCount = 0;
// 添加学生
void addStudent() {
if (studentCount >= MAX_STUDENTS) {
printf("无法添加更多学生,已达到最大容量。\n");
return;
}
Student s;
printf("输入学号: ");
scanf("%d", &s.id);
printf("输入姓名: ");
scanf("%s", s.name);
printf("输入年龄: ");
scanf("%d", &s.age);
printf("输入性别: ");
scanf("%s", s.gender);
printf("输入成绩: ");
scanf("%f", &s.grade);
students[studentCount++] = s;
printf("学生添加成功!\n");
}
// 删除学生
void deleteStudent() {
int id, i, found = 0;
printf("输入要删除的学生的学号: ");
scanf("%d", &id);
for (i = 0; i < studentCount; i++) {
if (students[i].id == id) {
for (int j = i; j < studentCount - 1; j++) {
students[j] = students[j + 1]; // 移动数组元素
}
studentCount--;
found = 1;
printf("学生删除成功!\n");
break;
}
}
if (!found) {
printf("未找到该学号的学生。\n");
}
}
// 修改学生信息
void modifyStudent() {
int id, found = 0;
printf("输入要修改的学生的学号: ");
scanf("%d", &id);
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id) {
found = 1;
printf("输入新的姓名: ");
scanf("%s", students[i].name);
printf("输入新的年龄: ");
scanf("%d", &students[i].age);
printf("输入新的性别: ");
scanf("%s", students[i].gender);
printf("输入新的成绩: ");
scanf("%f", &students[i].grade);
printf("学生信息修改成功!\n");
break;
}
}
if (!found) {
printf("未找到该学号的学生。\n");
}
}
// 显示所有学生信息
void displayAllStudents() {
if (studentCount == 0) {
printf("没有学生信息。\n");
return;
}
for (int i = 0; i < studentCount; i++) {
printf("学号: %d, 姓名: %s, 年龄: %d, 性别: %s, 成绩: %.2f\n",
students[i].id, students[i].name, students[i].age,
students[i].gender, students[i].grade);
}
}
// 根据学号查找学生
void searchStudentById() {
int id, found = 0;
printf("输入要查找的学生的学号: ");
scanf("%d", &id);
for (int i = 0; i < studentCount; i++) {
if (students[i].id == id) {
found = 1;
printf("学号: %d, 姓名: %s, 年龄: %d, 性别: %s, 成绩: %.2f\n",
students[i].id, students[i].name, students[i].age,
students[i].gender, students[i].grade);
break;
}
}
if (!found) {
printf("未找到该学号的学生。\n");
}
}
// 根据姓名查找学生
void searchStudentByName() {
char name[NAME_LENGTH];
int found = 0;
printf("输入要查找的学生的姓名: ");
scanf("%s", name);
for (int i = 0; i < studentCount; i++) {
if (strcmp(students[i].name, name) == 0) {
found = 1;
printf("学号: %d, 姓名: %s, 年龄: %d, 性别: %s, 成绩: %.2f\n",
students[i].id, students[i].name, students[i].age,
students[i].gender, students[i].grade);
}
}
if (!found) {
printf("未找到该姓名的学生。\n");
}
}
// 按成绩排序学生
void sortStudentsByGrade() {
Student temp;
for (int i = 0; i < studentCount - 1; i++) {
for (int j = 0; j < studentCount - 1 - i; j++) {
if (students[j].grade < students[j + 1].grade) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生成绩排序成功!\n");
}
// 主菜单
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("8. 退出\n");
printf("请输入你的选择: ");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
modifyStudent();
break;
case 4:
displayAllStudents();
break;
case 5:
searchStudentById();
break;
case 6:
searchStudentByName();
break;
case 7:
sortStudentsByGrade();
break;
case 8:
printf("退出系统。\n");
return 0;
default:
printf("无效的选择,请重新输入。\n");
}
}
}