利用线性表的顺序存储结构完成一个班级的一个学期的所有课程成绩的管理,帮我用C语言写一个要求实现增加删除学生的成绩记录等运算
时间: 2023-06-06 10:04:41 浏览: 103
好的,我可以帮您编写一个基于线性表顺序存储结构的成绩管理系统。以下是一个简单的C语言实现:
```c
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 // 定义线性表的最大长度
typedef struct {
int id; // 学生编号
char name[20]; // 学生姓名
float score; // 学生成绩
}Student;
typedef struct {
Student data[MAXSIZE]; // 用数组存储学生信息
int length; // 当前线性表的长度
}LinearList;
// 初始化线性表
void initList(LinearList *L){
L->length = 0;
}
// 根据学生ID查找学生信息
int locateElem(LinearList *L, int id){
for(int i = 0; i < L->length; i++){
if(L->data[i].id == id){
return i; // 返回该学生在数组中的下标
}
}
return -1; // 未找到该学生
}
// 添加学生信息
void addElem(LinearList *L, Student s){
if(L->length == MAXSIZE){ // 线性表已满,无法添加
printf("Error: The list is full!\n");
return;
}
int i;
for(i = 0; i < L->length; i++){
if(L->data[i].id == s.id){ // 学生ID重复,无法添加
printf("Error: The student already exists!\n");
return;
}
}
L->data[L->length++] = s; // 在数组末尾添加新学生
printf("Add student successfully!\n");
}
// 删除学生信息
void deleteElem(LinearList *L, int id){
int pos = locateElem(L, id);
if(pos == -1){ // 未找到该学生,无法删除
printf("Error: The student does not exist!\n");
return;
}
for(int i = pos; i < L->length - 1; i++){
L->data[i] = L->data[i+1]; // 将后面的学生信息往前移
}
L->length--;
printf("Delete student successfully!\n");
}
// 修改学生信息
void modifyElem(LinearList *L, int id, float score){
int pos = locateElem(L, id);
if(pos == -1){ // 未找到该学生,无法修改
printf("Error: The student does not exist!\n");
return;
}
L->data[pos].score = score; // 修改学生成绩
printf("Modify student successfully!\n");
}
// 输出所有学生信息
void printList(LinearList L){
if(L.length == 0){ // 线性表为空
printf("The list is currently empty!\n");
return;
}
printf("ID\tName\tScore\n");
for(int i = 0; i < L.length; i++){
printf("%d\t%s\t%.2f\n", L.data[i].id, L.data[i].name, L.data[i].score);
}
}
int main(){
LinearList L;
initList(&L);
Student s1 = {1, "小红", 68.5};
Student s2 = {2, "小明", 85.0};
Student s3 = {3, "小刚", 92.5};
addElem(&L, s1);
addElem(&L, s2);
addElem(&L, s3);
printList(L);
modifyElem(&L, 2, 90.0);
printList(L);
deleteElem(&L, 1);
printList(L);
return 0;
}
```
以上代码实现了增加、删除和修改学生信息,并能输出所有学生信息。您可以根据需要进行适当修改和完善。
阅读全文