学生成绩信息包括:学号,姓名,语文成绩、数学成绩、英语成绩。 主要功能: 1、 学生信息录入; 2、 学生信息浏览; 3、 信息查询(a 按学号查 b 按最高分查(查询每门课的最高分的同学信息)) 4、 信息排序(a 按总分排序(从高到低)b 按姓名排序 ) 5、 信息删除(给定学号,删除该学生信息) 6、 信息修改(给定学号,修改该学生信息) 7、 保存信息(把当前的结构体数组内容保存 8、 退出(C语言程序设计、程序清单中应有足够的注释,如语句功能说明,函数功能说明,函数参数说明等。)
时间: 2023-06-20 14:09:23 浏览: 161
C语言-《学生成绩管理系统》学生信息包括学号、姓名、成绩、电话、籍贯、住址
以下是一个简单的 C 语言程序设计,实现了以上功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100 // 最多学生数量
#define MAX_NAME_LEN 20 // 最长姓名长度
// 学生结构体
typedef struct {
char id[10]; // 学号
char name[MAX_NAME_LEN]; // 姓名
float chinese; // 语文成绩
float math; // 数学成绩
float english; // 英语成绩
float total; // 总分
} Student;
Student students[MAX_STUDENTS]; // 学生数组
int num_students = 0; // 学生数量
// 函数声明
void input_student();
void view_students();
void query_student();
void sort_students();
void delete_student();
void modify_student();
void save_students();
void load_students();
void print_menu();
// 主函数
int main() {
load_students(); // 加载学生信息
print_menu(); // 显示菜单
int option;
while (scanf("%d", &option) == 1) {
switch (option) {
case 1: input_student(); break;
case 2: view_students(); break;
case 3: query_student(); break;
case 4: sort_students(); break;
case 5: delete_student(); break;
case 6: modify_student(); break;
case 7: save_students(); break;
case 8: exit(0); break;
default: printf("无效选项,请重新输入\n"); break;
}
print_menu(); // 重新显示菜单
}
return 0;
}
// 录入学生信息
void input_student() {
if (num_students >= MAX_STUDENTS) {
printf("学生数量已达上限,无法添加新学生\n");
return;
}
printf("请输入学号:");
scanf("%s", students[num_students].id);
printf("请输入姓名:");
scanf("%s", students[num_students].name);
printf("请输入语文成绩:");
scanf("%f", &students[num_students].chinese);
printf("请输入数学成绩:");
scanf("%f", &students[num_students].math);
printf("请输入英语成绩:");
scanf("%f", &students[num_students].english);
students[num_students].total = students[num_students].chinese
+ students[num_students].math
+ students[num_students].english;
num_students++;
}
// 浏览学生信息
void view_students() {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
for (int i = 0; i < num_students; i++) {
printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n",
students[i].id, students[i].name,
students[i].chinese, students[i].math, students[i].english,
students[i].total);
}
}
// 按学号或最高分查询学生信息
void query_student() {
printf("请输入查询选项(a: 按学号查询,b: 按最高分查询):");
char option;
scanf(" %c", &option);
if (option == 'a') {
printf("请输入学号:");
char id[10];
scanf("%s", id);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n",
students[i].id, students[i].name,
students[i].chinese, students[i].math, students[i].english,
students[i].total);
found = 1;
break;
}
}
if (!found) {
printf("未找到学号为 %s 的学生\n", id);
}
} else if (option == 'b') {
float max_total = 0;
int max_index = -1;
for (int i = 0; i < num_students; i++) {
if (students[i].total > max_total) {
max_total = students[i].total;
max_index = i;
}
}
if (max_index == -1) {
printf("未找到学生信息\n");
} else {
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\n",
students[max_index].id, students[max_index].name,
students[max_index].chinese, students[max_index].math, students[max_index].english,
students[max_index].total);
}
} else {
printf("无效选项,请重新输入\n");
}
}
// 按总分或姓名排序学生信息
void sort_students() {
printf("请输入排序选项(a: 按总分排序,b: 按姓名排序):");
char option;
scanf(" %c", &option);
if (option == 'a') {
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - i - 1; j++) {
if (students[j].total < students[j + 1].total) {
Student tmp = students[j];
students[j] = students[j + 1];
students[j + 1] = tmp;
}
}
}
} else if (option == 'b') {
for (int i = 0; i < num_students - 1; i++) {
for (int j = 0; j < num_students - i - 1; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
Student tmp = students[j];
students[j] = students[j + 1];
students[j + 1] = tmp;
}
}
}
} else {
printf("无效选项,请重新输入\n");
}
}
// 删除学生信息
void delete_student() {
printf("请输入学号:");
char id[10];
scanf("%s", id);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = i; j < num_students - 1; j++) {
students[j] = students[j + 1];
}
num_students--;
found = 1;
break;
}
}
if (found) {
printf("已删除学号为 %s 的学生信息\n", id);
} else {
printf("未找到学号为 %s 的学生\n", id);
}
}
// 修改学生信息
void modify_student() {
printf("请输入学号:");
char id[10];
scanf("%s", id);
int found = 0;
for (int i = 0; i < num_students; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("请输入新的姓名:");
scanf("%s", students[i].name);
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;
printf("已修改学号为 %s 的学生信息\n", id);
found = 1;
break;
}
}
if (!found) {
printf("未找到学号为 %s 的学生\n", id);
}
}
// 保存学生信息到文件
void save_students() {
FILE *fp = fopen("students.txt", "w");
if (fp == NULL) {
printf("无法打开文件\n");
return;
}
fprintf(fp, "%d\n", num_students);
for (int i = 0; i < num_students; i++) {
fprintf(fp, "%s %s %.1f %.1f %.1f\n",
students[i].id, students[i].name,
students[i].chinese, students[i].math, students[i].english);
}
fclose(fp);
printf("已保存学生信息到文件\n");
}
// 从文件中读取学生信息
void load_students() {
FILE *fp = fopen("students.txt", "r");
if (fp == NULL) {
return;
}
fscanf(fp, "%d", &num_students);
for (int i = 0; i < num_students; i++) {
fscanf(fp, "%s %s %f %f %f",
students[i].id, students[i].name,
&students[i].chinese, &students[i].math, &students[i].english);
students[i].total = students[i].chinese
+ students[i].math
+ students[i].english;
}
fclose(fp);
}
// 打印菜单
void print_menu() {
printf("\n请选择操作:\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("请输入选项编号:");
}
```
这个程序使用了一个结构体数组来存储学生信息,同时实现了各种常见的操作,包括录入、浏览、查询、排序、删除、修改、保存和退出。程序还提供了一个简单的菜单界面,使用户可以方便地选择要执行的操作。
阅读全文