C语言实现学生管理系统详解
本文将详细讲解如何使用C语言实现一个简单的学生管理系统,包括设计思路、代码实现和运行效果展示。
设计思路
学生管理系统是一种常见的信息管理系统,其主要功能包括添加、删除、查询、修改学生信息。在设计实现过程中,我们可以采用如下思路:
1. 学生信息结构体的定义和存储
我们定义一个结构体(student)来表示每个学生的信息,包括姓名、学号、性别、年龄、成绩等字段。我们可以使用动态数组来存储学生信息,实现动态添加、删除学生信息的功能。
2. 学生信息的添加
用户在程序运行时可以选择添加一批学生信息,将信息保存到结构体数组中。
3. 学生信息的删除
程序运行时支持根据学号或者姓名来删除学生信息。
4. 学生信息的查询
程序支持根据学号或者姓名来查询学生信息,同时支持打印出全部学生信息。
5. 学生信息的排序
程序支持根据成绩或者年龄对学生信息进行排序。
代码实现
基于上述设计思路,我们可以通过编写C语言代码来实现学生管理系统。以下是示例代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STUDENT 1000 // 最大学生数
// 学生信息结构体
struct student {
char name[20]; // 姓名
char id[20]; // 学号
char sex[5]; // 性别
int age; // 年龄
float score; // 成绩
};
// 全局变量
struct student* students[MAX_STUDENT];
int student_count = 0;
// 打印菜单
void print_menu() {
printf("********************************************\n");
printf("* 欢迎来到学生管理系统 *\n");
printf("* 1. 添加学生信息 *\n");
printf("* 2. 删除学生信息 *\n");
printf("* 3. 查询学生信息 *\n");
printf("* 4. 显示所有学生信息 *\n");
printf("* 5. 学生成绩排序 *\n");
printf("* 0. 退出程序 *\n");
printf("********************************************\n");
}
// 添加学生信息
void add_student() {
if (student_count >= MAX_STUDENT) {
printf("学生数量已满,无法添加新的学生信息");
return;
}
printf("请输入学生姓名:");
char name[20];
scanf("%s", name);
printf("请输入学生学号:");
char id[20];
scanf("%s", id);
printf("请输入学生性别:");
char sex[5];
scanf("%s", sex);
printf("请输入学生年龄:");
int age;
scanf("%d", &age);
printf("请输入学生成绩:");
float score;
scanf("%f", &score);
struct student* s = (struct student*)malloc(sizeof(struct student));
strcpy(s->name, name);
strcpy(s->id, id);
strcpy(s->sex, sex);
s->age = age;
s->score = score;
students[student_count++] = s;
printf("学生信息添加成功\n");
}
// 删除学生信息
void delete_student() {
printf("请输入你要删除学生的学号或姓名:");
char search[20];
scanf("%s", search);
int found = 0;
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i]->name, search) == 0 || strcmp(students[i]->id, search) == 0) {
// 找到目标学生,删除其信息
free(students[i]);
students[i] = NULL;
student_count--;
found = 1;
printf("学生信息删除成功\n");
break;
}
}
if (!found) {
printf("未找到要删除的学生信息\n");
}
}
// 查询学生信息
void search_student() {
printf("请输入你要查询学生的学号或姓名:");
char search[20];
scanf("%s", search);
int found = 0;
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i]->name, search) == 0 || strcmp(students[i]->id, search) == 0) {
// 找到目标学生,输出其信息
printf("姓名:%s 学号:%s 性别:%s 年龄:%d 成绩:%f\n",
students[i]->name, students[i]->id, students[i]->sex, students[i]->age, students[i]->score);
found = 1;
}
}
if (!found) {
printf("未找到要查询的学生信息\n");
}
}
// 显示学生信息
void show_all_student() {
for (int i = 0; i < student_count; i++) {
printf("姓名:%s 学号:%s 性别:%s 年龄:%d 成绩:%f\n",
students[i]->name, students[i]->id, students[i]->sex, students[i]->age, students[i]->score);
}
}
// 成绩排序
int cmp_score(const void* a, const void* b) {
struct student* s1 = *(struct student**)a;
struct student* s2 = *(struct student**)b;
return s1->score > s2->score ? -1 : 1; // 按分数降序排序
}
void sort_student_by_score() {
qsort(students, student_count, sizeof(struct student*), cmp_score);
printf("学生成绩排序成功\n");
}
int main() {
int option;
do {
print_menu();
printf("请输入选项(0-5):");
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
delete_student();
break;
case 3:
search_student();
break;
case 4:
show_all_student();
break;
case 5:
sort_student_by_score();
break;
case 0:
printf("感谢使用学生管理系统,下次再见!\n");
break;
default:
printf("输入的选项有误,请重新输入\n");
break;
}
} while (option != 0);
// 释放学生信息内存
for (int i = 0; i < student_count; i++) {
free(students[i]);
}
return 0;
}
运行效果展示
下面是一个简单的运行效果展示,仅供参考。
********************************************
* 欢迎来到学生管理系统 *
* 1. 添加学生信息 *
* 2. 删除学生信息 *
* 3. 查询学生信息 *
* 4. 显示所有学生信息 *
* 5. 学生成绩排序 *
* 0. 退出程序 *
********************************************
请输入选项(0-5):1
请输入学生姓名:Tom
请输入学生学号:123456
请输入学生性别:male
请输入学生年龄:20
请输入学生成绩:90
学生信息添加成功
请输入选项(0-5):4
姓名:Tom 学号:123456 性别:male 年龄:20 成绩:90.000000
请输入选项(0-5):2
请输入你要删除学生的学号或姓名:123456
学生信息删除成功
请输入选项(0-5):4
请输入选项(0-5):0
感谢使用学生管理系统,下次再见!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言实现学生管理系统详解 - Python技术站