用c语言设计一个学生成绩查询统计系统 内容要求: (1)分析数据的逻辑结构。 (2)设计数据的存储结构。(诸如一个记录应包括哪些字段数据,每个字段的数据是什么类型的,应用什么数据结构来保存众多的记录) (3)根据学生姓名进行字典排序。 (4)根据成绩进行由高到低排序。(可采用冒泡法或其他快速算法) (5)根据学号或姓名查找学生成绩。(可采用顺序查找或二分查找等方法,并实现查找结构的打印) (6)统计各分数段(≥90分、80-89分、70-79分、60-69分、60分以下)的学生人数及其所占比例,并打印统计的结果。 (7)编写主要的C语言代码,尤其是对函数头部涉及的主要参数要进行注释说明。 (8)系统的程序结构可以考虑采用多文件组合框架,也可以采用单文件多模块组合框架。
时间: 2024-03-11 17:45:56 浏览: 74
今天给大家分享一个C语言环境下开发的学生成绩管理系统 这个系统原理很简单:成绩的录入,输出,修改,排序,删除等等
好的,下面是一个用C语言设计的学生成绩查询统计系统,符合你所要求的内容要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义常量
#define MAX_STUDENTS 100 // 最多学生数量
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_ID_LEN 10 // 学号最大长度
// 定义学生记录结构体
typedef struct {
char name[MAX_NAME_LEN]; // 姓名
char id[MAX_ID_LEN]; // 学号
float grades[3]; // 三门课程的成绩
float total_grade; // 总成绩
char grade_level[10]; // 成绩等级
} Student;
// 定义全局变量
Student students[MAX_STUDENTS]; // 学生记录数组
int num_students = 0; // 学生数量
// 函数声明
void menu();
void add_student();
void sort_by_name();
void sort_by_grade();
void print_student(Student student);
void search();
void statistics();
// 主函数
int main() {
menu();
return 0;
}
// 菜单函数
void menu() {
int choice;
do {
printf("请选择操作:\n");
printf("1. 添加学生记录\n");
printf("2. 根据姓名排序\n");
printf("3. 根据成绩排序\n");
printf("4. 查找学生成绩\n");
printf("5. 统计各分数段学生人数\n");
printf("0. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
sort_by_name();
break;
case 3:
sort_by_grade();
break;
case 4:
search();
break;
case 5:
statistics();
break;
case 0:
printf("谢谢使用!\n");
break;
default:
printf("无效的选择,请重新选择!\n");
break;
}
} while (choice != 0);
}
// 添加学生记录函数
void add_student() {
if (num_students == MAX_STUDENTS) {
printf("学生记录已满,无法添加!\n");
return;
}
Student student;
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生学号:");
scanf("%s", student.id);
printf("请输入学生三门课程的成绩(用空格分隔):");
scanf("%f %f %f", &student.grades[0], &student.grades[1], &student.grades[2]);
student.total_grade = student.grades[0] + student.grades[1] + student.grades[2];
if (student.total_grade >= 270) {
strcpy(student.grade_level, "优秀");
} else if (student.total_grade >= 240) {
strcpy(student.grade_level, "良好");
} else if (student.total_grade >= 210) {
strcpy(student.grade_level, "中等");
} else if (student.total_grade >= 180) {
strcpy(student.grade_level, "及格");
} else {
strcpy(student.grade_level, "不及格");
}
students[num_students++] = student;
printf("学生记录添加成功!\n");
}
// 根据姓名排序函数
void sort_by_name() {
int i, j;
Student temp;
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生记录已按姓名排序!\n");
}
// 根据成绩排序函数
void sort_by_grade() {
int i, j;
Student temp;
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (students[j].total_grade < students[j + 1].total_grade) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("学生记录已按成绩排序!\n");
}
// 打印学生记录函数
void print_student(Student student) {
printf("%s %s %.1f %.1f %.1f %.1f %s\n", student.name, student.id, student.grades[0], student.grades[1], student.grades[2], student.total_grade, student.grade_level);
}
// 查找学生成绩函数
void search() {
int choice;
char keyword[MAX_NAME_LEN];
printf("请选择查找方式:\n");
printf("1. 根据学号查找\n");
printf("2. 根据姓名查找\n");
scanf("%d", &choice);
if (choice == 1) {
printf("请输入要查找的学生学号:");
scanf("%s", keyword);
int i;
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].id, keyword) == 0) {
print_student(students[i]);
return;
}
}
printf("未找到该学生的记录!\n");
} else if (choice == 2) {
printf("请输入要查找的学生姓名:");
scanf("%s", keyword);
int i;
for (i = 0; i < num_students; i++) {
if (strcmp(students[i].name, keyword) == 0) {
print_student(students[i]);
return;
}
}
printf("未找到该学生的记录!\n");
} else {
printf("无效的选择!\n");
}
}
// 统计各分数段学生人数函数
void statistics() {
int num_90 = 0, num_80 = 0, num_70 = 0, num_60 = 0, num_below_60 = 0;
int i;
for (i = 0; i < num_students; i++) {
if (students[i].total_grade >= 90) {
num_90++;
} else if (students[i].total_grade >= 80) {
num_80++;
} else if (students[i].total_grade >= 70) {
num_70++;
} else if (students[i].total_grade >= 60) {
num_60++;
} else {
num_below_60++;
}
}
printf("90分及以上的学生人数:%d,占比%.2f%%\n", num_90, num_90 * 100.0 / num_students);
printf("80分到89分的学生人数:%d,占比%.2f%%\n", num_80, num_80 * 100.0 / num_students);
printf("70分到79分的学生人数:%d,占比%.2f%%\n", num_70, num_70 * 100.0 / num_students);
printf("60分到69分的学生人数:%d,占比%.2f%%\n", num_60, num_60 * 100.0 / num_students);
printf("60分以下的学生人数:%d,占比%.2f%%\n", num_below_60, num_below_60 * 100.0 / num_students);
}
```
这个系统采用了一个学生记录结构体来保存每个学生的信息,每个结构体包括了姓名、学号、三门课程的成绩、总成绩和成绩等级等字段。同时,使用数组来保存所有学生的记录。
这个系统实现了添加学生记录、根据姓名排序、根据成绩排序、查找学生成绩和统计各分数段学生人数等功能。同时,也采用了函数注释等规范的编程风格。
阅读全文