利用线性表实现学生信息的管理
时间: 2023-05-22 07:01:59 浏览: 130
可以使用线性表来存储学生信息,每个学生可以用一个结构体来表示,包含学生的姓名、学号、年龄、性别等信息。可以使用数组或链表来实现线性表,具体实现方式可以根据实际情况选择。对于学生信息的管理,可以实现添加、删除、修改、查询等功能,具体实现方式可以根据需求进行设计。
相关问题
利用线性表实现学生信息的管理,具体包括下列基本操作: (1)学生信息的存储。(2)某一个学生信息的插入。(3)删除某一个学生的信息。(4)查找某个学生的信息。(5)打印输出所有学生的信息。
这是关于管理学生信息的操作指南,具体包括:
(1) 学生信息的存储。
(2) 插入某一个学生信息。
(3) 删除某一个学生的信息。
(4) 查找某一个学生的信息。
(5) 打印输出所有学生的信息。
用c++代码利用线性表存储学生信息,用链表存储课程信息,写一个学生成绩管理系统,学生个数未知,课程数目未知(最多不超过6门),要体现课程信息,最后输出学生的学号,姓名,班级,平均分和课程名以及课程平均分
本题涉及到两个数据结构:线性表和链表。
线性表用于存储学生信息,需要包含学号、姓名、班级、成绩等信息;链表用于存储课程信息,需要包含课程名、学分、成绩等信息。
下面是一份示例代码,供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COURSE_NUM 6
// 定义学生结构体
typedef struct {
int id; // 学号
char name[20]; // 姓名
char class[20]; // 班级
int scores[MAX_COURSE_NUM]; // 成绩
} Student;
// 定义课程结构体
typedef struct CourseNode {
char name[20]; // 课程名
int credit; // 学分
struct CourseNode *next; // 下一门课程的指针
} CourseNode, *CourseList;
// 获取学生信息
Student getStudentInfo() {
Student s;
printf("请输入学号:");
scanf("%d", &s.id);
printf("请输入姓名:");
scanf("%s", s.name);
printf("请输入班级:");
scanf("%s", s.class);
printf("请输入各门课程的成绩:\n");
for (int i = 0; i < MAX_COURSE_NUM; i++) {
printf("请输入第%d门课程的成绩:", i+1);
scanf("%d", &s.scores[i]);
}
return s;
}
// 输出学生信息
void printStudentInfo(Student s, CourseList clist) {
printf("%d\t%s\t%s\t%.2f\t", s.id, s.name, s.class, getAverageScore(s.scores, MAX_COURSE_NUM));
CourseNode *p = clist;
while (p != NULL) {
printf("%s\t%.2f\t", p->name, getCourseAverageScore(p->name));
p = p->next;
}
printf("\n");
}
// 获取平均分
float getAverageScore(int scores[], int len) {
int sum = 0;
for (int i = 0; i < len; i++) {
sum += scores[i];
}
return sum * 1.0 / len;
}
// 获取某门课程的平均分
float getCourseAverageScore(char courseName[]) {
// TODO: 实现获取某门课程的平均分
return 0;
}
// 添加课程
void addCourse(CourseList *clist) {
CourseNode *p = *clist;
CourseNode *newNode = (CourseNode*)malloc(sizeof(CourseNode));
printf("请输入课程名:");
scanf("%s", newNode->name);
printf("请输入学分:");
scanf("%d", &newNode->credit);
newNode->next = NULL;
if (p == NULL) {
*clist = newNode;
} else {
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
}
int main() {
Student *slist = NULL;
int studentNum = 0;
CourseList clist = NULL;
int choice;
do {
printf("1. 添加学生\n");
printf("2. 添加课程\n");
printf("3. 查看成绩单\n");
printf("4. 退出\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
studentNum++;
slist = (Student*)realloc(slist, studentNum * sizeof(Student));
slist[studentNum-1] = getStudentInfo();
break;
case 2:
addCourse(&clist);
break;
case 3:
printf("学号\t姓名\t班级\t平均分\t");
CourseNode *p = clist;
while (p != NULL) {
printf("%s\t", p->name);
p = p->next;
}
printf("\n");
for (int i = 0; i < studentNum; i++) {
printStudentInfo(slist[i], clist);
}
break;
case 4:
printf("感谢使用!\n");
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
} while (choice != 4);
free(slist);
return 0;
}
```
上述代码中,主要实现了以下几个功能:
1. 添加学生信息:通过调用 `getStudentInfo()` 函数,获取学生信息并将其存储到一个动态分配的数组中。
2. 添加课程信息:通过调用 `addCourse()` 函数,向链表中添加一门新的课程。
3. 查看成绩单:通过遍历学生数组和课程链表,输出每个学生的学号、姓名、班级、平均分以及各门课程的平均分。
需要注意的是,本题中并没有实现获取某门课程的平均分的功能,需要根据实际情况进行补充。此外,还需要注意内存管理,例如在程序结束时需要释放动态分配的内存。
阅读全文