学生成绩管理系统之线性表(顺序表和)的实现
时间: 2023-11-21 07:04:01 浏览: 430
学生成绩管理系统可以使用线性表来实现。线性表是一种数据结构,可以用来存储一组有序的数据元素,而顺序表是一种具体的线性表实现方式,它使用一段连续的存储空间来存储线性表中的元素。
下面是使用顺序表实现学生成绩管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 最大学生数
typedef struct {
int id; // 学生学号
char name[20]; // 学生姓名
float score; // 学生成绩
} Student;
typedef struct {
Student data[MAX_SIZE]; // 存储学生数据的数组
int length; // 学生数量
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->length = 0;
}
// 在顺序表末尾插入学生数据
void AddStudent(SeqList *L, Student stu) {
if (L->length >= MAX_SIZE) {
printf("顺序表已满,无法插入!\n");
return;
}
L->data[L->length++] = stu;
}
// 按学号查找学生信息
void FindStudentById(SeqList L, int id) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i].id == id) {
printf("学号:%d\n", L.data[i].id);
printf("姓名:%s\n", L.data[i].name);
printf("成绩:%0.2f\n", L.data[i].score);
return;
}
}
printf("未找到该学号的学生!\n");
}
// 按姓名查找学生信息
void FindStudentByName(SeqList L, char *name) {
int i, found = 0;
for (i = 0; i < L.length; i++) {
if (strcmp(L.data[i].name, name) == 0) {
printf("学号:%d\n", L.data[i].id);
printf("姓名:%s\n", L.data[i].name);
printf("成绩:%0.2f\n", L.data[i].score);
found = 1;
}
}
if (!found) {
printf("未找到该姓名的学生!\n");
}
}
// 修改学生信息
void ModifyStudent(SeqList *L, int id, char *name, float score) {
int i;
for (i = 0; i < L->length; i++) {
if (L->data[i].id == id) {
strcpy(L->data[i].name, name);
L->data[i].score = score;
printf("修改成功!\n");
return;
}
}
printf("未找到该学号的学生!\n");
}
// 删除学生信息
void DeleteStudent(SeqList *L, int id) {
int i, j;
for (i = 0; i < L->length; i++) {
if (L->data[i].id == id) {
for (j = i; j < L->length-1; j++) {
L->data[j] = L->data[j+1];
}
L->length--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学号的学生!\n");
}
// 显示所有学生信息
void ShowAllStudents(SeqList L) {
int i;
printf("学号\t姓名\t成绩\n");
for (i = 0; i < L.length; i++) {
printf("%d\t%s\t%0.2f\n", L.data[i].id, L.data[i].name, L.data[i].score);
}
}
int main() {
SeqList L;
InitList(&L);
// 添加学生数据
Student stu1 = {1001, "张三", 85.5};
Student stu2 = {1002, "李四", 92.0};
Student stu3 = {1003, "王五", 78.5};
AddStudent(&L, stu1);
AddStudent(&L, stu2);
AddStudent(&L, stu3);
// 查找学生信息
FindStudentById(L, 1002);
FindStudentByName(L, "张三");
// 修改学生信息
ModifyStudent(&L, 1002, "赵六", 88.5);
// 删除学生信息
DeleteStudent(&L, 1003);
// 显示所有学生信息
ShowAllStudents(L);
return 0;
}
```
这段代码中,我们首先定义了一个`Student`结构体来表示学生信息,然后定义了一个`SeqList`结构体来表示顺序表。在`main`函数中,我们使用`InitList`函数初始化了顺序表,然后添加了三个学生数据。接着,我们使用`FindStudentById`和`FindStudentByName`函数分别按学号和姓名查找学生信息。然后,我们使用`ModifyStudent`函数修改了一个学生的信息,使用`DeleteStudent`函数删除了一个学生的信息。最后,我们使用`ShowAllStudents`函数显示了所有学生的信息。
顺序表是一种简单但常用的数据结构,适用于存储元素数量较少的情况。如果需要存储更多的学生数据,可以考虑使用链表等其他数据结构来实现。
阅读全文