一、具体实现思路
1. 定义学生结构体: 使用“struct student”定义了一个学生的数据结构,包括姓名、ID和成绩。
2. 登录验证: 使用“login”函数进行简单的用户名和密码验证。在示例中,用户名是“admin”,密码是“123456”。这部分可以根据实际需求进行修改和加强。
3. 主函数: 主函数“main”包含一个循环,根据用户选择调用不同的功能函数。用户可以选择添加学生、删除学生、修改学生信息、查找学生或退出系统。
4. 添加学生信息: “add_student”函数用于向学生数组中添加新的学生信息。用户需要输入姓名、ID和成绩。程序会检查是否已达到最大学生数量(50个)。
5. 删除学生信息: “delete_student”函数用于根据学生ID删除学生信息。用户输入要删除的学生ID,程序会在数组中查找并删除对应学生信息。
6. 修改学生信息: “update_student”函数用于根据学生ID修改学生姓名和成绩。用户输入要修改的学生ID,程序会在数组中查找并更新对应学生信息。
7. 查找学生信息: “search_student”函数包含一个子菜单,用户可以选择根据姓名或ID查找学生信息。程序会在数组中查找匹配的学生信息并显示。
8. 退出系统: 用户选择退出时,程序结束运行。
二、具体的程序实现:
#include <stdio.h>
#include <string.h>
// 定义结构体存储学生信息
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;
}
}
以上代码实现了一个简单的学生成绩管理系统,包含了增删改查四个功能,并且实现了登录验证。需要注意的是,此代码仅为示例代码,可能存在一些安全问题,实际使用时需要进行更加严格的安全措施。