用c语言做一个学生成绩系统,要能实现学生成绩表的建立、插入、删除、查找、总分的排序的基本操作的实现
时间: 2023-12-13 08:04:10 浏览: 79
好的,我可以帮你解答这个问题。
要实现学生成绩系统,可以采用结构体来存储每个学生的信息,包括学号、姓名、各门课程的成绩等。同时,可以使用链表来存储多个学生的信息。
以下是一个简单的示例代码,实现了学生成绩系统的基本操作,包括建立、插入、删除、查找和排序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_STU_NUM 100
// 定义学生结构体
typedef struct student {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
float score1; // 课程1成绩
float score2; // 课程2成绩
float score3; // 课程3成绩
float total_score; // 总分
struct student *next; // 链表指针
} Student;
// 全局变量,指向链表头部
Student *head = NULL;
// 建立学生信息
void create() {
int num, i;
printf("请输入学生的数量:");
scanf("%d", &num);
if (num > MAX_STU_NUM) {
printf("超过最大学生数量!\n");
return;
}
for (i = 1; i <= num; i++) {
printf("请输入第 %d 个学生的信息:\n", i);
Student *p = (Student *)malloc(sizeof(Student));
printf("学号:");
scanf("%d", &p->id);
printf("姓名:");
scanf("%s", p->name);
printf("课程1成绩:");
scanf("%f", &p->score1);
printf("课程2成绩:");
scanf("%f", &p->score2);
printf("课程3成绩:");
scanf("%f", &p->score3);
p->total_score = p->score1 + p->score2 + p->score3;
p->next = NULL;
if (head == NULL) {
head = p;
} else {
Student *q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
}
}
// 插入学生信息
void insert() {
int id;
printf("请输入要插入学生的学号:");
scanf("%d", &id);
Student *p = head;
while (p != NULL) {
if (p->id == id) {
printf("该学号已存在!\n");
return;
}
p = p->next;
}
Student *q = (Student *)malloc(sizeof(Student));
q->id = id;
printf("姓名:");
scanf("%s", q->name);
printf("课程1成绩:");
scanf("%f", &q->score1);
printf("课程2成绩:");
scanf("%f", &q->score2);
printf("课程3成绩:");
scanf("%f", &q->score3);
q->total_score = q->score1 + q->score2 + q->score3;
q->next = NULL;
if (head == NULL) {
head = q;
} else if (q->id < head->id) {
q->next = head;
head = q;
} else {
Student *p = head, *pre = NULL;
while (p != NULL && p->id < q->id) {
pre = p;
p = p->next;
}
pre->next = q;
q->next = p;
}
printf("插入成功!\n");
}
// 删除学生信息
void delete() {
int id;
printf("请输入要删除学生的学号:");
scanf("%d", &id);
Student *p = head, *pre = NULL;
while (p != NULL) {
if (p->id == id) {
if (pre == NULL) {
head = p->next;
} else {
pre->next = p->next;
}
free(p);
printf("删除成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("未找到该学号的学生!\n");
}
// 查找学生信息
void search() {
int id;
printf("请输入要查找学生的学号:");
scanf("%d", &id);
Student *p = head;
while (p != NULL) {
if (p->id == id) {
printf("学号:%d\n", p->id);
printf("姓名:%s\n", p->name);
printf("课程1成绩:%.2f\n", p->score1);
printf("课程2成绩:%.2f\n", p->score2);
printf("课程3成绩:%.2f\n", p->score3);
printf("总分:%.2f\n", p->total_score);
return;
}
p = p->next;
}
printf("未找到该学号的学生!\n");
}
// 排序学生信息
void sort() {
Student *p = head, *q;
int i, j, num = 0;
while (p != NULL) {
num++;
p = p->next;
}
for (i = 0; i < num - 1; i++) {
p = head;
for (j = 0; j < num - i - 1; j++) {
if (p->total_score < p->next->total_score) {
q = p->next;
p->next = q->next;
q->next = p;
if (p == head) {
head = q;
} else {
Student *pre = head;
while (pre->next != p) {
pre = pre->next;
}
pre->next = q;
}
p = q;
}
p = p->next;
}
}
printf("排序成功!\n");
}
int main() {
int choice;
while (1) {
printf("\n");
printf("*********************\n");
printf("1. 建立学生信息\n");
printf("2. 插入学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 查找学生信息\n");
printf("5. 排序学生信息\n");
printf("6. 退出\n");
printf("请输入你的选择:");
scanf("%d", &choice);
switch (choice) {
case 1: create(); break;
case 2: insert(); break;
case 3: delete(); break;
case 4: search(); break;
case 5: sort(); break;
case 6: exit(0);
default: printf("输入错误,请重新输入!\n");
}
}
return 0;
}
```
这个学生成绩系统实现了以下功能:
1. 建立学生信息:输入学生数量和每个学生的信息,将学生信息存储在链表中;
2. 插入学生信息:输入要插入的学生信息,按学号顺序插入到链表中;
3. 删除学生信息:输入要删除的学生学号,从链表中删除该学生信息;
4. 查找学生信息:输入要查找的学生学号,从链表中查找该学生信息并输出;
5. 排序学生信息:按照学生总分从高到低排序链表中的学生信息。
希望这个示例代码能够帮助你完成学生成绩系统的实现。
阅读全文