请根据以下条件编写一个c语言代码: (1) 需要处理的基础数据 每个学生的信息应包括:学号、姓名、性别、出生日期、C 语言程序设计、数字逻辑和数学建 模三门课的成绩。 (2) 系统的基本功能 ① 数据的录入:如录入学生的基本信息(要求输入 10 个比自己学号大的学生信息,第 1 个学 生信息为本人),对输入的字符长度(如学号必须是 13 位、数字构成)、类型(成绩必须是整 数)、范围(成绩范围必须是 0-100 之间)等加以合法性验证,比如输入的成绩不在 0~100 之间,就提示不合法,要求重新输入; ②数据的插入:在指定位置插入某个学生信息; ③数据的删除:根据学号删除相应学生信息; ④数据的修改:修改指定学号的学生信息; ⑤数据的查询:要求可以根据姓名信息进行查询,并显示查询结果; ⑥数据的排序:按综合成绩从低到高的次序输出学生信息; ⑦数据的排序:按每个学生的三门课的平均成绩从高到低的顺序,输出学生信息; ⑧数据的输出:输出学生相应结果信息,并列出不及格学生清单(学号、姓名、不及格的课程 和成绩)。 ⑨数据的保存:考虑用文件把数据保存起来(可选)
时间: 2023-06-26 18:10:09 浏览: 97
以下是一个简单的 C 语言代码,实现了上述条件中的基本功能。注意,为了简化,代码中的数据结构使用了数组,实际应用中可能需要使用更为灵活的数据结构。
```c
#include <stdio.h>
#include <string.h>
#define MAX_STUDENT 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
typedef struct {
char id[14];
char name[MAX_NAME_LEN];
char gender;
char birth[9];
int c_score;
int logic_score;
int math_score;
} Student;
// 定义全局变量
Student students[MAX_STUDENT];
int student_count = 0;
// 函数声明
void input_students();
void insert_student();
void delete_student();
void modify_student();
void query_student();
void sort_by_total_score();
void sort_by_avg_score();
void output_students();
int main() {
int choice;
do {
printf("请选择操作:\n");
printf("1. 录入学生信息\n");
printf("2. 插入学生信息\n");
printf("3. 删除学生信息\n");
printf("4. 修改学生信息\n");
printf("5. 查询学生信息\n");
printf("6. 按综合成绩排序\n");
printf("7. 按平均成绩排序\n");
printf("8. 输出学生信息\n");
printf("0. 退出\n");
printf("请输入选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_students();
break;
case 2:
insert_student();
break;
case 3:
delete_student();
break;
case 4:
modify_student();
break;
case 5:
query_student();
break;
case 6:
sort_by_total_score();
break;
case 7:
sort_by_avg_score();
break;
case 8:
output_students();
break;
case 0:
printf("程序退出。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
}
} while (choice != 0);
return 0;
}
// 录入学生信息
void input_students() {
printf("请输入学生信息:\n");
for (int i = 0; i < 10; i++) {
Student s;
printf("学号:");
scanf("%s", s.id);
if (strlen(s.id) != 13) {
printf("学号必须是 13 位,重新输入:");
scanf("%s", s.id);
}
printf("姓名:");
scanf("%s", s.name);
printf("性别(M/F):");
scanf(" %c", &s.gender);
printf("出生日期(YYYYMMDD):");
scanf("%s", s.birth);
printf("C 语言程序设计成绩:");
scanf("%d", &s.c_score);
if (s.c_score < 0 || s.c_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.c_score);
}
printf("数字逻辑成绩:");
scanf("%d", &s.logic_score);
if (s.logic_score < 0 || s.logic_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.logic_score);
}
printf("数学建模成绩:");
scanf("%d", &s.math_score);
if (s.math_score < 0 || s.math_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.math_score);
}
students[student_count++] = s;
}
printf("录入完成。\n");
}
// 插入学生信息
void insert_student() {
int pos;
printf("请输入要插入的位置(1~%d):", student_count);
scanf("%d", &pos);
if (pos < 1 || pos > student_count + 1) {
printf("无效的位置。\n");
return;
}
Student s;
printf("学号:");
scanf("%s", s.id);
if (strlen(s.id) != 13) {
printf("学号必须是 13 位,重新输入:");
scanf("%s", s.id);
}
printf("姓名:");
scanf("%s", s.name);
printf("性别(M/F):");
scanf(" %c", &s.gender);
printf("出生日期(YYYYMMDD):");
scanf("%s", s.birth);
printf("C 语言程序设计成绩:");
scanf("%d", &s.c_score);
if (s.c_score < 0 || s.c_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.c_score);
}
printf("数字逻辑成绩:");
scanf("%d", &s.logic_score);
if (s.logic_score < 0 || s.logic_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.logic_score);
}
printf("数学建模成绩:");
scanf("%d", &s.math_score);
if (s.math_score < 0 || s.math_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.math_score);
}
for (int i = student_count; i >= pos; i--) {
students[i] = students[i - 1];
}
students[pos - 1] = s;
student_count++;
printf("插入完成。\n");
}
// 删除学生信息
void delete_student() {
char id[14];
printf("请输入要删除的学号:");
scanf("%s", id);
int pos = -1;
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
pos = i;
break;
}
}
if (pos == -1) {
printf("未找到学号为 %s 的学生。\n", id);
return;
}
for (int i = pos; i < student_count - 1; i++) {
students[i] = students[i + 1];
}
student_count--;
printf("删除成功。\n");
}
// 修改学生信息
void modify_student() {
char id[14];
printf("请输入要修改的学号:");
scanf("%s", id);
int pos = -1;
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].id, id) == 0) {
pos = i;
break;
}
}
if (pos == -1) {
printf("未找到学号为 %s 的学生。\n", id);
return;
}
Student s;
printf("学号:");
scanf("%s", s.id);
if (strlen(s.id) != 13) {
printf("学号必须是 13 位,重新输入:");
scanf("%s", s.id);
}
printf("姓名:");
scanf("%s", s.name);
printf("性别(M/F):");
scanf(" %c", &s.gender);
printf("出生日期(YYYYMMDD):");
scanf("%s", s.birth);
printf("C 语言程序设计成绩:");
scanf("%d", &s.c_score);
if (s.c_score < 0 || s.c_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.c_score);
}
printf("数字逻辑成绩:");
scanf("%d", &s.logic_score);
if (s.logic_score < 0 || s.logic_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.logic_score);
}
printf("数学建模成绩:");
scanf("%d", &s.math_score);
if (s.math_score < 0 || s.math_score > 100) {
printf("成绩必须在 0~100 之间,重新输入:");
scanf("%d", &s.math_score);
}
students[pos] = s;
printf("修改完成。\n");
}
// 查询学生信息
void query_student() {
char name[MAX_NAME_LEN];
printf("请输入要查询的姓名:");
scanf("%s", name);
int count = 0;
for (int i = 0; i < student_count; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("%s %s %c %s %d %d %d\n",
students[i].id,
students[i].name,
students[i].gender,
students[i].birth,
students[i].c_score,
students[i].logic_score,
students[i].math_score);
count++;
}
}
if (count == 0) {
printf("未找到姓名为 %s 的学生。\n", name);
}
}
// 按综合成绩排序
void sort_by_total_score() {
for (int i = 0; i < student_count - 1; i++) {
for (int j = i + 1; j < student_count; j++) {
int total_i = students[i].c_score + students[i].logic_score + students[i].math_score;
int total_j = students[j].c_score + students[j].logic_score + students[j].math_score;
if (total_i > total_j) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按综合成绩排序完成。\n");
}
// 按平均成绩排序
void sort_by_avg_score() {
for (int i = 0; i < student_count - 1; i++) {
for (int j = i + 1; j < student_count; j++) {
double avg_i = (students[i].c_score + students[i].logic_score + students[i].math_score) / 3.0;
double avg_j = (students[j].c_score + students[j].logic_score + students[j].math_score) / 3.0;
if (avg_i < avg_j) {
Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
printf("按平均成绩排序完成。\n");
}
// 输出学生信息
void output_students() {
printf("学号 姓名 性别 出生日期 C语言 数字逻辑 数学建模\n");
for (int i = 0; i < student_count; i++) {
printf("%s %s %c %s %d %d %d\n",
students[i].id,
students[i].name,
students[i].gender,
students[i].birth,
students[i].c_score,
students[i].logic_score,
students[i].math_score);
if (students[i].c_score < 60 || students[i].logic_score < 60 || students[i].math_score < 60) {
printf("不及格课程:");
if (students[i].c_score < 60) {
printf("C语言(%d) ", students[i].c_score);
}
if (students[i].logic_score < 60) {
printf("数字逻辑(%d) ", students[i].logic_score);
}
if (students[i].math_score < 60) {
printf("数学建模(%d) ", students[i].math_score);
}
printf("\n");
}
}
}
```