帮我做一个设计一个学生成绩查询统计系统 内容要求: (1)分析数据的逻辑结构。 (2)设计数据的存储结构。(诸如一个记录应包括哪些字段数据,每个字段的数据是什么类型的,应用什么数据结构来保存众多的记录) (3)根据学生姓名进行字典排序。 (4)根据成绩进行由高到低排序。(可采用冒泡法或其他快速算法) (5)根据学号或姓名查找学生成绩。(可采用顺序查找或二分查找等方法,并实现查找结构的打印) (6)统计各分数段(≥90分、80-89分、70-79分、60-69分、60分以下)的学生人数及其所占比例,并打印统计的结果。 (7)编写主要的C语言代码,尤其是对函数头部涉及的主要参数要进行注释说明。 (8)系统的程序结构可以考虑采用多文件组合框架,也可以采用单文件多模块组合框架。
时间: 2024-04-21 09:29:38 浏览: 29
好的,我可以帮你解答这个问题。
首先,我们需要分析数据的逻辑结构。这个学生成绩查询统计系统的逻辑结构应该包括学生信息和成绩信息两个部分。每个学生的信息应该包括学号、姓名、性别、出生日期、专业等。每个学生的成绩信息应该包括各个科目的成绩,如语文、数学、英语等。每个成绩信息应该包括科目、成绩、学生学号等。
接下来,我们需要设计数据的存储结构。我们可以采用结构体来存储学生和成绩信息。具体地,我们可以定义一个包含学生信息和成绩信息的结构体,如下所示:
```c
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char birthday[20]; // 出生日期
char major[50]; // 专业
float chinese; // 语文成绩
float math; // 数学成绩
float english; // 英语成绩
float total; // 总成绩
} Student;
```
其中,id、name、gender、birthday、major是学生信息,chinese、math、english、total是成绩信息。
我们可以将所有学生的信息存储在数组中。为了方便排序和查找,我们可以对学生信息进行字典排序。
对于成绩信息,我们可以使用一个二维数组来存储,第一维表示学生的序号,第二维表示各个科目的成绩。我们可以用冒泡排序或其他快速算法对成绩信息进行排序。
对于查找功能,我们可以采用顺序查找或二分查找等方法。如果是按照姓名查找,我们可以先对学生信息进行排序,然后使用二分查找。如果是按照学号查找,我们可以采用顺序查找。
最后,我们需要统计各分数段的学生人数及其所占比例。我们可以遍历成绩信息,计算各个分数段的学生人数,并计算比例。最后,我们可以将统计结果打印出来。
下面是主要的C语言代码,包括排序、查找和统计功能。请注意,代码中的函数头部涉及的参数都有注释说明。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 1000 // 最大学生数目
#define SCORE_SEG_NUM 5 // 成绩分数段数目
// 学生信息和成绩信息的结构体
typedef struct student {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char birthday[20]; // 出生日期
char major[50]; // 专业
float chinese; // 语文成绩
float math; // 数学成绩
float english; // 英语成绩
float total; // 总成绩
} Student;
// 成绩分数段的结构体
typedef struct score_segment {
int num; // 人数
float percent; // 比例
} ScoreSegment;
// 按照总成绩从高到低排序
void sort_students(Student students[], int n) {
int i, j;
Student temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (students[j].total < students[j+1].total) {
temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
// 按照姓名进行字典排序
void sort_students_by_name(Student students[], int n) {
int i, j;
Student temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-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;
}
}
}
}
// 顺序查找学生信息
int search_student_by_id(Student students[], int n, char* id) {
int i;
for (i = 0; i < n; i++) {
if (strcmp(students[i].id, id) == 0) {
return i;
}
}
return -1;
}
// 二分查找学生信息
int binary_search_student_by_name(Student students[], int n, char* name) {
int left = 0, right = n-1, mid;
while (left <= right) {
mid = (left + right) / 2;
if (strcmp(students[mid].name, name) == 0) {
return mid;
} else if (strcmp(students[mid].name, name) < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 统计各分数段的学生人数和比例
void stat_score_segment(Student students[], int n, ScoreSegment score_segments[]) {
int i;
for (i = 0; i < SCORE_SEG_NUM; i++) {
score_segments[i].num = 0;
score_segments[i].percent = 0.0;
}
for (i = 0; i < n; i++) {
if (students[i].total >= 90) {
score_segments[0].num++;
} else if (students[i].total >= 80 && students[i].total < 90) {
score_segments[1].num++;
} else if (students[i].total >= 70 && students[i].total < 80) {
score_segments[2].num++;
} else if (students[i].total >= 60 && students[i].total < 70) {
score_segments[3].num++;
} else {
score_segments[4].num++;
}
}
for (i = 0; i < SCORE_SEG_NUM; i++) {
score_segments[i].percent = (float)score_segments[i].num / n;
}
}
int main() {
Student students[MAX_STUDENT_NUM];
ScoreSegment score_segments[SCORE_SEG_NUM];
// 读入学生信息和成绩信息
int n;
printf("请输入学生数目:");
scanf("%d", &n);
int i, j;
for (i = 0; i < n; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%s", students[i].id);
printf("姓名:");
scanf("%s", students[i].name);
printf("性别:");
scanf("%s", students[i].gender);
printf("出生日期:");
scanf("%s", students[i].birthday);
printf("专业:");
scanf("%s", students[i].major);
printf("语文成绩:");
scanf("%f", &students[i].chinese);
printf("数学成绩:");
scanf("%f", &students[i].math);
printf("英语成绩:");
scanf("%f", &students[i].english);
students[i].total = students[i].chinese + students[i].math + students[i].english;
}
// 排序
sort_students(students, n);
sort_students_by_name(students, n);
// 查找
char id[20], name[20];
printf("请输入要查找的学生学号:");
scanf("%s", id);
int index = search_student_by_id(students, n, id);
if (index >= 0) {
printf("学号为%s的学生信息为:\n", id);
printf("学号:%s\n姓名:%s\n性别:%s\n出生日期:%s\n专业:%s\n语文成绩:%.2f\n数学成绩:%.2f\n英语成绩:%.2f\n总成绩:%.2f\n",
students[index].id, students[index].name, students[index].gender, students[index].birthday, students[index].major,
students[index].chinese, students[index].math, students[index].english, students[index].total);
} else {
printf("没有找到学号为%s的学生。\n", id);
}
printf("请输入要查找的学生姓名:");
scanf("%s", name);
index = binary_search_student_by_name(students, n, name);
if (index >= 0) {
printf("姓名为%s的学生信息为:\n", name);
printf("学号:%s\n姓名:%s\n性别:%s\n出生日期:%s\n专业:%s\n语文成绩:%.2f\n数学成绩:%.2f\n英语成绩:%.2f\n总成绩:%.2f\n",
students[index].id, students[index].name, students[index].gender, students[index].birthday, students[index].major,
students[index].chinese, students[index].math, students[index].english, students[index].total);
} else {
printf("没有找到姓名为%s的学生。\n", name);
}
// 统计
stat_score_segment(students, n, score_segments);
printf("各分数段的学生人数和比例为:\n");
printf("≥90分:人数:%d,比例:%.2f%%\n", score_segments[0].num, score_segments[0].percent*100);
printf("80-89分:人数:%d,比例:%.2f%%\n", score_segments[1].num, score_segments[1].percent*100);
printf("70-79分:人数:%d,比例:%.2f%%\n", score_segments[2].num, score_segments[2].percent*100);
printf("60-69分:人数:%d,比例:%.2f%%\n", score_segments[3].num, score_segments[3].percent*100);
printf("60分以下:人数:%d,比例:%.2f%%\n", score_segments[4].num, score_segments[4].percent*100);
return 0;
}
```
这个程序的结构比较简单,只有一个文件。如果你想将其分成多个文件,可以将排序、查找和统计功能分别放在不同的文件中。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)