写一个成绩管理系统并给出程序分析 要求: 1. 需要用结构体定义管理系统的基本元素,如学生,不能够使用类 2. 需要有增删改查的操作,可以使用数组存储、链表存储,或指针结构体等 3. 需要进行全面的案例测试后提交。
时间: 2024-03-16 09:47:22 浏览: 48
好的,我可以为您提供一个简单的成绩管理系统代码,以下是程序分析:
首先,我们需要定义一个学生结构体,包含学生ID、姓名、年龄和成绩等基本信息:
```c
struct Student {
int id;
char name[20];
int age;
double score;
};
```
接下来,我们可以使用链表存储学生信息,每个节点包含一个学生结构体和指向下一个节点的指针:
```c
struct Node {
struct Student stu;
struct Node* next;
};
```
然后,我们可以编写各种操作函数,如添加学生、删除学生、修改学生信息和查询学生信息等:
```c
// 添加学生信息
void addStudent(struct Node** head, struct Student stu);
// 删除学生信息
void deleteStudent(struct Node** head, int id);
// 修改学生信息
void modifyStudent(struct Node* head, int id, struct Student newStu);
// 查询学生信息
void queryStudent(struct Node* head, int id);
```
最后,我们可以在主函数中调用各种操作函数,实现完整的成绩管理系统。例如,我们可以在主函数中创建一个空链表,然后通过 addStudent 函数添加学生信息,再通过 deleteStudent 函数删除某个学生,通过 modifyStudent 函数修改某个学生的信息,最后通过 queryStudent 函数查询某个学生的信息。
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int id;
char name[20];
int age;
double score;
};
struct Node {
struct Student stu;
struct Node* next;
};
// 添加学生信息
void addStudent(struct Node** head, struct Student stu) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->stu = stu;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
struct Node* p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
}
// 删除学生信息
void deleteStudent(struct Node** head, int id) {
struct Node* p = *head;
if (p == NULL) {
printf("链表为空,无法删除\n");
return;
}
if (p->stu.id == id) {
*head = p->next;
free(p);
printf("删除成功\n");
return;
}
while (p->next != NULL && p->next->stu.id != id) {
p = p->next;
}
if (p->next == NULL) {
printf("未找到该学生,无法删除\n");
return;
}
struct Node* q = p->next;
p->next = q->next;
free(q);
printf("删除成功\n");
}
// 修改学生信息
void modifyStudent(struct Node* head, int id, struct Student newStu) {
struct Node* p = head;
while (p != NULL && p->stu.id != id) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生,无法修改\n");
return;
}
p->stu = newStu;
printf("修改成功\n");
}
// 查询学生信息
void queryStudent(struct Node* head, int id) {
struct Node* p = head;
while (p != NULL && p->stu.id != id) {
p = p->next;
}
if (p == NULL) {
printf("未找到该学生\n");
return;
}
printf("学生ID:%d\n", p->stu.id);
printf("学生姓名:%s\n", p->stu.name);
printf("学生年龄:%d\n", p->stu.age);
printf("学生成绩:%lf\n", p->stu.score);
}
int main() {
struct Node* head = NULL;
// 添加学生信息
struct Student stu1 = { 1001, "Tom", 18, 95.0 };
struct Student stu2 = { 1002, "Jack", 19, 85.0 };
struct Student stu3 = { 1003, "Lucy", 17, 92.0 };
addStudent(&head, stu1);
addStudent(&head, stu2);
addStudent(&head, stu3);
// 删除学生信息
deleteStudent(&head, 1002);
// 修改学生信息
struct Student newStu = { 1003, "Lily", 18, 96.0 };
modifyStudent(head, 1003, newStu);
// 查询学生信息
queryStudent(head, 1001);
queryStudent(head, 1002);
queryStudent(head, 1003);
return 0;
}
```
阅读全文