在C语言环境下,键盘输入学生信息(包括学号和成绩),学号为0作为结束标志,建立其对应的线性表并输出数据,实现增、删、改、查的基本功能。并实现菜单功能
时间: 2024-03-16 13:47:38 浏览: 72
好的,这是一个比较完整的程序要求,我可以给你提供一个示例代码,你可以参考一下。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct student {
int id;
int score;
} Student;
typedef struct {
Student data[MAX_SIZE];
int length;
} List;
void initList(List *list) {
list->length = 0;
}
void printList(List list) {
for (int i = 0; i < list.length; i++) {
printf("学号:%d\t成绩:%d\n", list.data[i].id, list.data[i].score);
}
}
int locate(List list, int id) {
for (int i = 0; i < list.length; i++) {
if (list.data[i].id == id) {
return i;
}
}
return -1;
}
void insert(List *list, int id, int score) {
if (list->length >= MAX_SIZE) {
printf("线性表已满,无法插入!\n");
return;
}
int index = locate(*list, id);
if (index != -1) {
printf("学号已存在,无法插入!\n");
return;
}
Student student = {id, score};
list->data[list->length] = student;
list->length++;
}
void removeById(List *list, int id) {
int index = locate(*list, id);
if (index == -1) {
printf("学号不存在,无法删除!\n");
return;
}
for (int i = index; i < list->length - 1; i++) {
list->data[i] = list->data[i + 1];
}
list->length--;
}
void updateScore(List *list, int id, int score) {
int index = locate(*list, id);
if (index == -1) {
printf("学号不存在,无法更新成绩!\n");
return;
}
list->data[index].score = score;
}
void searchById(List list, int id) {
int index = locate(list, id);
if (index == -1) {
printf("学号不存在!\n");
return;
}
printf("学号:%d\t成绩:%d\n", list.data[index].id, list.data[index].score);
}
void menu() {
printf("***************\n");
printf("* 1. 插入学生信息 *\n");
printf("* 2. 删除学生信息 *\n");
printf("* 3. 更新学生成绩 *\n");
printf("* 4. 查找学生信息 *\n");
printf("* 5. 输出所有学生信息 *\n");
printf("* 0. 退出程序 *\n");
printf("***************\n");
}
int main() {
List list;
initList(&list);
int choice, id, score;
do {
menu();
printf("请选择菜单:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入学号和成绩(空格隔开):");
scanf("%d %d", &id, &score);
insert(&list, id, score);
break;
case 2:
printf("请输入要删除学生的学号:");
scanf("%d", &id);
removeById(&list, id);
break;
case 3:
printf("请输入要更新学生的学号和成绩(空格隔开):");
scanf("%d %d", &id, &score);
updateScore(&list, id, score);
break;
case 4:
printf("请输入要查找学生的学号:");
scanf("%d", &id);
searchById(list, id);
break;
case 5:
printList(list);
break;
case 0:
printf("程序已退出!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
} while (choice != 0);
return 0;
}
```
这个程序实现了建立学生的线性表,并且实现了增、删、改、查的基本功能,同时还实现了菜单功能,方便用户的操作。当然,这只是一个示例,你可以根据自己的需要进行修改和完善。
阅读全文