键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出数据,实现增、删、改、查的基本功能。用线性表存储结构实现
时间: 2024-02-03 21:14:36 浏览: 90
学生信息管理系统,完成学生、课程、成绩的添加、修改和删除功能
以下是用C语言实现的代码,采用顺序存储结构实现线性表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 线性表的最大长度
// 学生信息结构体
typedef struct {
int id; // 学号
int score; // 成绩
} Student;
// 线性表结构体
typedef struct {
Student data[MAXSIZE]; // 存储学生信息的数组
int length; // 线性表当前长度
} List;
// 初始化线性表
void initList(List *L) {
L->length = 0;
}
// 增加元素
void insertList(List *L, int pos, Student stu) {
if (pos < 1 || pos > L->length + 1) {
printf("插入位置不合法!\n");
return;
}
if (L->length >= MAXSIZE) {
printf("线性表已满,无法插入!\n");
return;
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i-1];
}
L->data[pos-1] = stu;
L->length++;
printf("插入成功!\n");
}
// 删除元素
void deleteList(List *L, int pos) {
if (pos < 1 || pos > L->length) {
printf("删除位置不合法!\n");
return;
}
for (int i = pos; i < L->length; i++) {
L->data[i-1] = L->data[i];
}
L->length--;
printf("删除成功!\n");
}
// 修改元素
void updateList(List *L, int pos, Student stu) {
if (pos < 1 || pos > L->length) {
printf("修改位置不合法!\n");
return;
}
L->data[pos-1] = stu;
printf("修改成功!\n");
}
// 查找元素
void searchList(List *L, int id) {
for (int i = 0; i < L->length; i++) {
if (L->data[i].id == id) {
printf("学号:%d\t成绩:%d\n", L->data[i].id, L->data[i].score);
return;
}
}
printf("未找到学号为%d的学生!\n", id);
}
// 输出线性表
void printList(List *L) {
printf("学号\t成绩\n");
for (int i = 0; i < L->length; i++) {
printf("%d\t%d\n", L->data[i].id, L->data[i].score);
}
}
int main() {
List L;
initList(&L);
while (1) {
printf("请输入学号和成绩,以空格分隔(学号为0时结束):");
int id, score;
scanf("%d", &id);
if (id == 0) {
break;
}
scanf("%d", &score);
Student stu = {id, score};
insertList(&L, L.length+1, stu);
}
printList(&L);
while (1) {
printf("请选择操作:1.增加 2.删除 3.修改 4.查找 5.退出:");
int op;
scanf("%d", &op);
if (op == 5) {
break;
}
switch (op) {
case 1:
printf("请输入要插入的位置和学号、成绩,以空格分隔:");
int pos, id, score;
scanf("%d%d%d", &pos, &id, &score);
Student stu = {id, score};
insertList(&L, pos, stu);
printList(&L);
break;
case 2:
printf("请输入要删除的位置:");
scanf("%d", &pos);
deleteList(&L, pos);
printList(&L);
break;
case 3:
printf("请输入要修改的位置和学号、成绩,以空格分隔:");
scanf("%d%d%d", &pos, &id, &score);
Student stu = {id, score};
updateList(&L, pos, stu);
printList(&L);
break;
case 4:
printf("请输入要查找的学号:");
scanf("%d", &id);
searchList(&L, id);
break;
default:
printf("输入错误,请重新选择操作!\n");
break;
}
}
return 0;
}
```
使用方法:依次输入每个学生的学号和成绩,以空格分隔。当输入学号为0时结束输入。接着进入操作菜单,可选择增加、删除、修改、查找或退出操作。增加操作需要输入插入位置、学号和成绩,删除操作需要输入删除位置,修改操作需要输入修改位置、学号和成绩,查找操作需要输入要查找的学号。每次操作后会输出当前线性表的所有学生信息。
阅读全文