C语言实现-学生成绩管理系统
#include <>
#include <>
// 定义结构体存储学生信息
struct student {
char name[50];
int id;
float score;
};
// 定义函数声明
void add_student(struct student students[], int *num_students);
void delete_student(struct student students[], int *num_students);
void update_student(struct student students[], int num_students);
void search_student(struct student students[], int num_students);
int login();
int main() {
struct student students[50]; // 存储最多50个学生信息
int num_students = 0; // 当前学生数量
// 登录验证
if (!login()) {
printf("登录失败!\n");
return 1;
}
int choice;
do {
// 显示菜单并读取用户输入
printf("\n请选择操作:\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 修改学生信息\n");
printf("4. 查找学生\n");
printf("5. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(students, &num_students); // 调用添加学生函数
break;
case 2:
delete_student(students, &num_students); // 调用删除学生函数
break;
case 3:
update_student(students, num_students); // 调用修改学生信息函数
break;
case 4:
search_student(students, num_students); // 调用查找学生函数
break;
case 5:
printf("谢谢使用!\n");
break;
default:
printf("无效输入,请重新输入。\n");
}
} while (choice != 5);
return 0;
}
// 添加学生信息
void add_student(struct student students[], int *num_students) {
if (*num_students == 50) { // 学生数量已达上限
printf("学生数量已满,无法继续添加。\n");
return;
}
struct student new_student;
printf("请输入学生姓名:\n");
scanf("%s", new_student.name);
printf("请输入学生ID:\n");
scanf("%d", &new_student.id);
printf("请输入学生成绩:\n");
scanf("%f", &new_student.score);
students[*num_students] = new_student; // 将新学生信息存储到数组中
(*num_students)++; // 学生数量加1
printf("添加成功!\n");
}
// 删除学生信息
void delete_student(struct student students[], int *num_students) {
if (*num_students == 0) { // 没有学生信息可供删除
printf("当前没有学生信息可供删除。\n");
return;
}
int id_to_delete;
printf("请输入要删除的学生ID:\n");
scanf("%d", &id_to_delete);
int i;
for (i = 0; i < *num_students; i++) {
if (students[i].id == id_to_delete) {
break;
}
}
if (i == *num_students) { // 没有找到对应ID的学生信息
printf("未找到ID为%d的学生信息。\n", id_to_delete);
return;
}
// 将最后一个学生信息覆盖要删除的学生信息,实现删除操作
students[i] = students[(*num_students)-1];
(*num_students)--;
printf("删除成功!\n");
}
// 修改学生信息
void update_student(struct student students[], int num_students) {
if (num_students == 0) { // 没有学生信息可供修改
printf("当前没有学生信息可供修改。\n");
return;
}
int id_to_update;
printf("请输入要修改的学生ID:\n");
scanf("%d", &id_to_update);
int i;
for (i = 0; i < num_students; i++) {
if (students[i].id == id_to_update) {
// 找到对应ID的学生信息,读取新的学生姓名、学生成绩并更新
printf("请输入学生姓名:\n");
scanf("%s", students[i].name);
printf("请输入学生成绩:\n");
scanf("%f", &students[i].score);
printf("修改成功!\n");
return;
}
}
// 没有找到对应ID的学生信息
printf("未找到ID为%d的学生信息。\n", id_to_update);
}
// 查找学生信息
void search_student(struct student students[], int num_students) {
if (num_students == 0) { // 没有学生信息可供查找
printf("当前没有学生信息可供查找。\n");
return;
}
int choice;
do {
// 显示子菜单并读取用户输入
printf("\n请选择查找方式:\n");
printf("1. 根据姓名查找\n");
printf("2. 根据ID查找\n");
printf("3. 返回上一级菜单\n");
scanf("%d", &choice);
switch (choice) {
case 1: {
char name_to_search[50];
printf("请输入要查找的学生姓名:\n");
scanf("%s", name_to_search);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].name, name_to_search) == 0) {
printf("姓名:%s ID:%d 成绩:%.2f\n", students[i].name, students[i].id, students[i].score);
found = 1;
}
}
if (!found) {
printf("未找到姓名为%s的学生信息。\n", name_to_search);
}
break;
}
case 2: {
int id_to_search;
printf("请输入要查找的学生ID:\n");
scanf("%d", &id_to_search);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (students[i].id == id_to_search) {
printf("姓名:%s ID:%d 成绩:%.2f\n", students[i].name, students[i].id, students[i].score);
found = 1;
break;
}
}
if (!found) {
printf("未找到ID为%d的学生信息。\n", id_to_search);
}
break;
}
case 3:
break;
default:
printf("无效输入,请重新输入。\n");
}
} while (choice != 3);
}
// 登录验证(简化版,仅用于演示)
int login() {
char username[50];
char password[50];
printf("请输入用户名:\n");
scanf("%s", username);
printf("请输入密码:\n");
scanf("%s", password);
// 简单判断用户名密码是否正确
if (strcmp(username, "admin") == 0 && strcmp(password, "123456") == 0) {
return 1;
} else {
return 0;
}
}