学生成绩管理基本业务活动包括:对一个学生基本信息的输入、输出、查询、删除、插入等等。试设计一个学生成绩管理系统,将上述业务活动借助于计算机系统完成。 【基本要求】:要输出相应界面:链式存储方法实现。 〈1〉每个学生的信息包括:学号、姓名、3课成绩 〈2〉系统应实现的操作及其功能定义如下: ① 输入: ② 查找: ③ 插入: ④删除: ⑤查找总分最高分的同学,并输出其信息: ○6统计不及格学生的人数,并输出不及格学生和课程信息: ○7查询某门课的平均分:
时间: 2024-02-05 16:14:05 浏览: 56
以下是一个简单的学生成绩管理系统的设计,采用链式存储方法实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生信息结构体
typedef struct student {
char id[10]; // 学号
char name[20]; // 姓名
int scores[3]; // 3门课成绩
struct student *next; // 指向下一个学生的指针
} Student;
// 添加学生信息
void addStudent(Student **head) {
Student *newStudent = (Student*)malloc(sizeof(Student));
printf("请输入学号:");
scanf("%s", newStudent->id);
printf("请输入姓名:");
scanf("%s", newStudent->name);
printf("请输入3门课成绩:");
scanf("%d %d %d", &newStudent->scores[0], &newStudent->scores[1], &newStudent->scores[2]);
newStudent->next = *head;
*head = newStudent;
printf("添加成功!\n");
}
// 查找学生信息
void findStudent(Student *head) {
char id[10];
printf("请输入要查找的学生学号:");
scanf("%s", id);
while (head != NULL) {
if (strcmp(head->id, id) == 0) {
printf("学号:%s,姓名:%s,成绩:%d %d %d\n", head->id, head->name, head->scores[0], head->scores[1], head->scores[2]);
return;
}
head = head->next;
}
printf("未找到该学生!\n");
}
// 插入学生信息
void insertStudent(Student **head) {
char id[10];
printf("请输入要插入的位置的后一位学生的学号:");
scanf("%s", id);
Student *newStudent = (Student*)malloc(sizeof(Student));
printf("请输入学号:");
scanf("%s", newStudent->id);
printf("请输入姓名:");
scanf("%s", newStudent->name);
printf("请输入3门课成绩:");
scanf("%d %d %d", &newStudent->scores[0], &newStudent->scores[1], &newStudent->scores[2]);
Student *p = *head;
while (p != NULL) {
if (strcmp(p->id, id) == 0) {
newStudent->next = p->next;
p->next = newStudent;
printf("插入成功!\n");
return;
}
p = p->next;
}
printf("未找到插入位置!\n");
}
// 删除学生信息
void deleteStudent(Student **head) {
char id[10];
printf("请输入要删除的学生学号:");
scanf("%s", id);
Student *p = *head;
if (strcmp(p->id, id) == 0) {
*head = p->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL) {
if (strcmp(p->next->id, id) == 0) {
Student *q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 查找总分最高分的同学
void findMaxStudent(Student *head) {
char id[10], name[20];
int maxScore = -1, sum;
while (head != NULL) {
sum = head->scores[0] + head->scores[1] + head->scores[2];
if (sum > maxScore) {
maxScore = sum;
strcpy(id, head->id);
strcpy(name, head->name);
}
head = head->next;
}
printf("总分最高分的同学:学号:%s,姓名:%s,总分:%d\n", id, name, maxScore);
}
// 统计不及格学生的人数
void countFailedStudent(Student *head) {
int count = 0;
while (head != NULL) {
if (head->scores[0] < 60 || head->scores[1] < 60 || head->scores[2] < 60) {
count++;
printf("不及格学生:学号:%s,姓名:%s,课程:", head->id, head->name);
if (head->scores[0] < 60) {
printf("语文 ");
}
if (head->scores[1] < 60) {
printf("数学 ");
}
if (head->scores[2] < 60) {
printf("英语 ");
}
printf("\n");
}
head = head->next;
}
printf("不及格学生人数:%d\n", count);
}
// 查询某门课的平均分
void findAvgScore(Student *head) {
int course;
printf("请输入要查询的课程(1-3):");
scanf("%d", &course);
if (course < 1 || course > 3) {
printf("课程号错误!\n");
return;
}
int sum = 0, count = 0;
while (head != NULL) {
sum += head->scores[course - 1];
count++;
head = head->next;
}
printf("课程%d平均分:%.2f\n", course, (float)sum / count);
}
// 主函数
int main() {
Student *head = NULL;
while (1) {
printf("\n**********学生成绩管理系统**********\n");
printf(" 1.添加学生信息\n");
printf(" 2.查找学生信息\n");
printf(" 3.插入学生信息\n");
printf(" 4.删除学生信息\n");
printf(" 5.查找总分最高分的同学\n");
printf(" 6.统计不及格学生的人数\n");
printf(" 7.查询某门课的平均分\n");
printf(" 0.退出系统\n");
printf("**************************************\n");
int choice;
printf("请输入操作编号:");
scanf("%d", &choice);
switch (choice) {
case 1:
addStudent(&head);
break;
case 2:
findStudent(head);
break;
case 3:
insertStudent(&head);
break;
case 4:
deleteStudent(&head);
break;
case 5:
findMaxStudent(head);
break;
case 6:
countFailedStudent(head);
break;
case 7:
findAvgScore(head);
break;
case 0:
return 0;
default:
printf("操作编号错误!\n");
break;
}
}
return 0;
}
```
该程序实现了添加、查找、插入、删除、查找总分最高分的同学、统计不及格学生的人数、查询某门课的平均分等基本操作。用户可以根据菜单选择相应的操作。
阅读全文