c语言 •设班里有n位同学,每位同学的数据包括以下内容:学号(长整型)、姓名(字符串)、数学成绩(整型)、程序设计(课程名称为:程序设计,整型)。设计程序完成以如下功能 •1) 成绩录入; •2) 显示学生成绩 •3) 按照总分排名(从高到低) •4)输入一个学生的学号能查找到学生的成绩。 注:输入数据时,要求学号不能相同,姓名可以相同。建议采用结构体数组。 •具体要求如下 程序运行时,首先显示主菜单如下 1)学生成绩录入 2)总分排序 3)查询 4)数据显示。 学号查询:输入学号后,若该学号存在则显示与其相关的所有信息,否则显示找不到的提示信息; (提示:查询到满足条件的结果后,查询即可结束)
时间: 2023-06-20 22:08:19 浏览: 171
以下是参考代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT_NUM 100
// 学生信息结构体
typedef struct {
long long id; // 学号
char name[20]; // 姓名
int math_score; // 数学成绩
int prog_score; // 程序设计成绩
int total_score; // 总成绩
} Student;
// 全局变量:学生信息数组,学生数量
Student students[MAX_STUDENT_NUM];
int student_num = 0;
// 函数声明
void show_menu();
void input_scores();
void sort_by_total_score();
void search_by_id();
void show_all_scores();
int main() {
// 显示主菜单
show_menu();
return 0;
}
// 显示主菜单
void show_menu() {
int choice;
do {
printf("=== 学生成绩管理系统 ===\n");
printf("1)学生成绩录入\n");
printf("2)总分排序\n");
printf("3)查询\n");
printf("4)数据显示\n");
printf("0)退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_scores();
break;
case 2:
sort_by_total_score();
break;
case 3:
search_by_id();
break;
case 4:
show_all_scores();
break;
case 0:
printf("Goodbye!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
}
} while (choice != 0);
}
// 录入学生成绩
void input_scores() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数量已达最大值,无法继续添加!\n");
return;
}
Student new_student;
printf("请输入学生信息:\n");
printf("学号:");
scanf("%lld", &new_student.id);
for (int i = 0; i < student_num; i++) {
if (new_student.id == students[i].id) {
printf("该学号已存在,请重新输入!\n");
return;
}
}
printf("姓名:");
scanf("%s", new_student.name);
printf("数学成绩:");
scanf("%d", &new_student.math_score);
printf("程序设计成绩:");
scanf("%d", &new_student.prog_score);
new_student.total_score = new_student.math_score + new_student.prog_score;
students[student_num] = new_student;
student_num++;
printf("学生成绩录入成功!\n");
}
// 按总分排序
void sort_by_total_score() {
if (student_num == 0) {
printf("学生数量为0,无法排序!\n");
return;
}
// 使用冒泡排序
for (int i = 0; i < student_num - 1; i++) {
for (int j = 0; j < student_num - i - 1; j++) {
if (students[j].total_score < students[j+1].total_score) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
printf("总分排序成功!\n");
}
// 学号查询
void search_by_id() {
if (student_num == 0) {
printf("学生数量为0,无法查询!\n");
return;
}
long long id;
printf("请输入学号:");
scanf("%lld", &id);
for (int i = 0; i < student_num; i++) {
if (students[i].id == id) {
printf("学号:%lld\n", students[i].id);
printf("姓名:%s\n", students[i].name);
printf("数学成绩:%d\n", students[i].math_score);
printf("程序设计成绩:%d\n", students[i].prog_score);
printf("总成绩:%d\n", students[i].total_score);
return;
}
}
printf("找不到该学号对应的学生!\n");
}
// 显示所有学生成绩
void show_all_scores() {
if (student_num == 0) {
printf("学生数量为0,无法显示!\n");
return;
}
printf("学号\t姓名\t数学成绩\t程序设计成绩\t总成绩\n");
for (int i = 0; i < student_num; i++) {
printf("%lld\t%s\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].math_score, students[i].prog_score, students[i].total_score);
}
}
```
这个程序使用了结构体数组来存储学生信息,菜单上提供了四个选项,分别对应录入学生成绩、按总分排序、学号查询和显示所有学生成绩。其中,录入学生成绩时会检查学号是否已经存在,如果已经存在则要求重新输入;按总分排序使用了冒泡排序算法;学号查询会根据输入的学号查找学生信息并输出,如果找不到则输出提示信息;显示所有学生成绩则会输出表格形式的所有学生信息。
阅读全文