简易学籍管理系统(1)--创建动态链表。计算机某班有若干学生,每个学生的信息包括班级、学号、姓名、程序设计成绩、高数成绩、电路成绩,以及3门课总分。学生信息可用如下结构体定义: struct stud { char clas[20];//班级 double num; //学号 char name[10];//姓名 float program; //程序设计成绩 float math; //高数成绩 float circuit; //电路成绩 float sum; //3门总分 struct stud *next; }; (1)编程创建动态链表,由键盘输入学生的成绩,当班级为x表示输入结束; (2)输出所有学生信息。
时间: 2023-06-04 10:06:33 浏览: 103
学籍管理系统程序(学籍管理系统主要功能是学生信息管理及相关查询。学生管理主要有添加新学生、学生信息修改。成绩管理包括成绩录入、查询、补考成绩管理。学籍管理系统作为计算机应用的一部分,使用管理信息系统对学生学籍进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。)
4星 · 用户满意度95%
好的,这是一个编程问题,我可以回答。以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stud {
char clas[20]; // 班级
double num; // 学号
char name[10]; // 姓名
float program; // 程序设计成绩
float math; // 高数成绩
float circuit; // 电路成绩
float sum; // 3门总分
struct stud *next; // 下一个节点
};
int main() {
struct stud *head, *p, *tail; // 定义头指针、遍历指针和尾指针
head = NULL;
tail = NULL;
char x[20];
while (1) {
printf("请输入学生的班级: ");
scanf("%s", x);
if (strcmp(x, "x") == 0) { // 如果输入的班级为x,则退出循环
break;
}
p = (struct stud *) malloc(sizeof(struct stud)); // 分配内存
if (p == NULL) { // 内存分配失败,程序退出
printf("Error: 内存分配失败\n");
exit(1);
}
printf("请输入学生的学号, 姓名, 程序设计成绩, 高数成绩, 电路成绩: ");
scanf("%lf %s %f %f %f", &p->num, p->name, &p->program, &p->math, &p->circuit);
strcpy(p->clas, x); // 将输入的班级存入节点
p->sum = p->program + p->math + p->circuit; // 计算总分
p->next = NULL;
if (head == NULL) { // 如果链表为空,将头指针指向当前节点
head = p;
tail = p;
} else { // 如果链表不为空,将当前节点插入到尾部,并更新尾指针
tail->next = p;
tail = p;
}
}
printf("所有学生信息如下:\n");
p = head;
while (p != NULL) { // 遍历链表并输出每个节点的信息
printf("%s %.0lf %s %.2f %.2f %.2f %.2f\n", p->clas, p->num, p->name, p->program, p->math, p->circuit, p->sum);
p = p->next;
}
// 释放链表内存
p = head;
while (p != NULL) {
struct stud *tmp = p;
p = p->next;
free(tmp);
}
return 0;
}
```
希望我的回答能够帮到你!
阅读全文