C语言数据结构源代码1、题目: 设计一个学生成绩查询统计系统2、内容要求:(1)分析数据的逻辑结构(2)选择并设计数据的存储结构(3)输入学生成绩的数据信息(4)输出全体或根据条件选取部分学生成绩的数据信息(5)根据学生姓名对数据进行字典排序并输出(6)根据成绩对数据进行由高到低排序并输出(7)根据学号或姓名查找学生成绩信息并输出(8)统计及格、中、良、优秀和不及格学生人数及其所占比例并输出
时间: 2024-03-05 17:51:16 浏览: 233
学生课程成绩查询系统(C语言)
以下是一个简单的C语言数据结构源代码,实现了一个学生成绩查询统计系统:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 学生课程信息结构体
typedef struct course_info {
char course_name[20]; // 课程名称
float score; // 成绩
} CourseInfo;
// 学生信息结构体
typedef struct student_info {
char student_id[10]; // 学号
char name[20]; // 姓名
char gender[10]; // 性别
int age; // 年龄
CourseInfo courses[3]; // 三门课程成绩
float total_score; // 总分
float avg_score; // 平均分
} StudentInfo;
// 学生信息数组
StudentInfo students[100];
int student_count = 0;
// 分析数据的逻辑结构
// 学生基本信息(学号、姓名、性别、年龄等)、学生课程信息(课程名称、成绩等)以及学生总成绩信息(总分、平均分等)
// 选择并设计数据的存储结构
// 使用数组来存储学生信息
// 输入学生成绩的数据信息
void input_student_info() {
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", students[student_count].student_id);
printf("姓名:");
scanf("%s", students[student_count].name);
printf("性别:");
scanf("%s", students[student_count].gender);
printf("年龄:");
scanf("%d", &students[student_count].age);
for (int i = 0; i < 3; i++) {
printf("请输入第%d门课程的名称和成绩:\n", i + 1);
printf("名称:");
scanf("%s", students[student_count].courses[i].course_name);
printf("成绩:");
scanf("%f", &students[student_count].courses[i].score);
students[student_count].total_score += students[student_count].courses[i].score;
}
students[student_count].avg_score = students[student_count].total_score / 3;
student_count++;
}
// 输出全体或根据条件选取部分学生成绩的数据信息
void output_student_info() {
printf("学号\t姓名\t性别\t年龄\t\t课程1\t课程2\t课程3\t总分\t平均分\n");
for (int i = 0; i < student_count; i++) {
printf("%s\t%s\t%s\t%d\t", students[i].student_id, students[i].name, students[i].gender, students[i].age);
for (int j = 0; j < 3; j++) {
printf("%s:%.2f\t", students[i].courses[j].course_name, students[i].courses[j].score);
}
printf("%.2f\t%.2f\n", students[i].total_score, students[i].avg_score);
}
}
// 根据学生姓名对数据进行字典排序并输出
void sort_by_name() {
for (int i = 0; i < student_count; i++) {
for (int j = i + 1; j < student_count; j++) {
if (strcmp(students[i].name, students[j].name) > 0) {
StudentInfo temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按姓名排序后的学生信息:\n");
output_student_info();
}
// 根据成绩对数据进行由高到低排序并输出
void sort_by_score() {
for (int i = 0; i < student_count; i++) {
for (int j = i + 1; j < student_count; j++) {
if (students[i].total_score < students[j].total_score) {
StudentInfo temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按成绩排序后的学生信息:\n");
output_student_info();
}
// 根据学号或姓名查找学生成绩信息并输出
void search_student_info() {
char keyword[20];
printf("请输入要查找的学生姓名或学号:");
scanf("%s", keyword);
printf("学号\t姓名\t性别\t年龄\t\t课程1\t课程2\t课程3\t总分\t平均分\n");
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].name, keyword) == 0 || strcmp(students[i].student_id, keyword) == 0) {
printf("%s\t%s\t%s\t%d\t", students[i].student_id, students[i].name, students[i].gender, students[i].age);
for (int j = 0; j < 3; j++) {
printf("%s:%.2f\t", students[i].courses[j].course_name, students[i].courses[j].score);
}
printf("%.2f\t%.2f\n", students[i].total_score, students[i].avg_score);
}
}
}
// 统计及格、中、良、优秀和不及格学生人数及其所占比例并输出
void count_student_score() {
int pass_count = 0, good_count = 0, excellent_count = 0, fail_count = 0;
for (int i = 0; i < student_count; i++) {
if (students[i].total_score >= 90) {
excellent_count++;
} else if (students[i].total_score >= 80) {
good_count++;
} else if (students[i].total_score >= 60) {
pass_count++;
} else {
fail_count++;
}
}
printf("及格人数:%d,占比:%.2f%%\n", pass_count, (float)pass_count / student_count * 100);
printf("中等人数:%d,占比:%.2f%%\n", good_count, (float)good_count / student_count * 100);
printf("良好人数:%d,占比:%.2f%%\n", excellent_count, (float)excellent_count / student_count * 100);
printf("优秀人数:%d,占比:%.2f%%\n", fail_count, (float)fail_count / student_count * 100);
}
int main() {
int choice;
while (1) {
printf("1. 输入学生信息\n");
printf("2. 输出学生信息\n");
printf("3. 按姓名排序\n");
printf("4. 按成绩排序\n");
printf("5. 查找学生信息\n");
printf("6. 统计学生成绩\n");
printf("0. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_student_info();
break;
case 2:
output_student_info();
break;
case 3:
sort_by_name();
break;
case 4:
sort_by_score();
break;
case 5:
search_student_info();
break;
case 6:
count_student_score();
break;
case 0:
exit(0);
default:
printf("无效操作!\n");
}
}
return 0;
}
```
这个代码实现了一个简单的学生成绩查询统计系统,包括输入学生信息、输出学生信息、按姓名排序、按成绩排序、查找学生信息以及统计学生成绩等功能。你可以根据需要进行修改和完善。
阅读全文