c语言班级学生成绩管理系统(1) 输入一个班级的学生的基本信息(包括学号,姓名,性别,5门课程成绩)。 (2) 按姓名或者学号查找、修改、删除和保存各个学生的信息。 (3) 计算每个学生各门功课总分和平均分,按学号或总分排序输出每个学生的基本信息及总分、平均分和名次。 (4) 计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩。 (5) 显示每门科目中,成绩在90分以上的学生信息,以及每门科目中不及格的学生信息。 (6) 用菜单进行管理 (7) 只有正确输入用户名密码才能使用此系统。 (8) 所有内容能够保存到文件中。下次进入系统是从文件中读取原有信息。的代码
时间: 2024-03-13 15:42:28 浏览: 18
为了方便您的阅读,我将代码分多个部分展示。首先是主函数部分,包括菜单的显示和用户登录认证:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100 // 最大学生数
#define MAX_NAME 20 // 最大姓名长度
#define PASSWORD "123" // 登录密码
// 学生结构体
typedef struct {
char id[10]; // 学号
char name[MAX_NAME];// 姓名
char sex[5]; // 性别
float score[5]; // 5门课程成绩
float sum_score; // 总分
float avg_score; // 平均分
int rank; // 名次
} Student;
Student stu[MAX_NUM]; // 学生信息数组
int stu_num = 0; // 学生数
// 菜单函数
int menu()
{
int choice;
printf("\n");
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("* 9. 显示每门科目中,成绩在90分以上的学生信息,以及不及格的学生信息 *\n");
printf("* 0. 保存学生信息到文件中 *\n");
printf("* -1. 从文件中读取学生信息 *\n");
printf("* 10. 退出 *\n");
printf("*******************************\n");
printf("请输入您的选择:");
scanf("%d", &choice);
return choice;
}
// 用户登录函数
int login()
{
char password[20];
int count = 3; // 最多尝试次数
while (count--) {
printf("请输入密码:");
scanf("%s", password);
if (strcmp(password, PASSWORD) == 0) {
printf("登录成功!\n");
return 1;
} else {
printf("密码错误!您还有%d次机会。\n", count);
}
}
printf("登录失败!\n");
return 0;
}
int main()
{
int choice;
if (!login()) {
return 0;
}
while (1) {
choice = menu();
switch (choice) {
case 1: input_stu_info(); break;
case 2: search_stu_by_name(); break;
case 3: search_stu_by_id(); break;
case 4: modify_stu_info(); break;
case 5: delete_stu_info(); break;
case 6: show_stu_info(); break;
case 7: sort_stu_info(); break;
case 8: calc_course_avg(); break;
case 9: show_stu_stat(); break;
case 0: save_to_file(); break;
case -1: read_from_file(); break;
case 10: exit(0);
default: printf("输入有误,请重新输入!\n"); break;
}
}
return 0;
}
```
接下来是各个功能函数的实现,包括输入、查找、修改、删除、显示学生信息、计算统计数据、保存和读取文件:
```
// 输入学生信息函数
void input_stu_info()
{
if (stu_num >= MAX_NUM) {
printf("已达到最大学生数,无法添加!\n");
return;
}
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", stu[stu_num].id);
printf("姓名:");
scanf("%s", stu[stu_num].name);
printf("性别:");
scanf("%s", stu[stu_num].sex);
printf("5门课程成绩:");
for (int i = 0; i < 5; i++) {
scanf("%f", &stu[stu_num].score[i]);
}
stu_num++;
printf("添加成功!\n");
}
// 按姓名查找学生信息函数
void search_stu_by_name()
{
char name[MAX_NAME];
printf("请输入要查找的学生姓名:");
scanf("%s", name);
for (int i = 0; i < stu_num; i++) {
if (strcmp(name, stu[i].name) == 0) {
printf("学号:%s,姓名:%s,性别:%s,成绩:%.1f %.1f %.1f %.1f %.1f,总分:%.1f,平均分:%.1f\n",
stu[i].id, stu[i].name, stu[i].sex, stu[i].score[0], stu[i].score[1], stu[i].score[2],
stu[i].score[3], stu[i].score[4], stu[i].sum_score, stu[i].avg_score);
return;
}
}
printf("未找到该学生!\n");
}
// 按学号查找学生信息函数
void search_stu_by_id()
{
char id[10];
printf("请输入要查找的学生学号:");
scanf("%s", id);
for (int i = 0; i < stu_num; i++) {
if (strcmp(id, stu[i].id) == 0) {
printf("学号:%s,姓名:%s,性别:%s,成绩:%.1f %.1f %.1f %.1f %.1f,总分:%.1f,平均分:%.1f\n",
stu[i].id, stu[i].name, stu[i].sex, stu[i].score[0], stu[i].score[1], stu[i].score[2],
stu[i].score[3], stu[i].score[4], stu[i].sum_score, stu[i].avg_score);
return;
}
}
printf("未找到该学生!\n");
}
// 修改学生信息函数
void modify_stu_info()
{
char id[10];
printf("请输入要修改的学生学号:");
scanf("%s", id);
for (int i = 0; i < stu_num; i++) {
if (strcmp(id, stu[i].id) == 0) {
printf("学号:%s,姓名:%s,性别:%s,成绩:%.1f %.1f %.1f %.1f %.1f,总分:%.1f,平均分:%.1f\n",
stu[i].id, stu[i].name, stu[i].sex, stu[i].score[0], stu[i].score[1], stu[i].score[2],
stu[i].score[3], stu[i].score[4], stu[i].sum_score, stu[i].avg_score);
printf("请输入修改后的学生信息:\n");
printf("学号:");
scanf("%s", stu[i].id);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].sex);
printf("5门课程成绩:");
for (int j = 0; j < 5; j++) {
scanf("%f", &stu[i].score[j]);
}
printf("修改成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
// 删除学生信息函数
void delete_stu_info()
{
char id[10];
printf("请输入要删除的学生学号:");
scanf("%s", id);
for (int i = 0; i < stu_num; i++) {
if (strcmp(id, stu[i].id) == 0) {
for (int j = i; j < stu_num - 1; j++) {
stu[j] = stu[j + 1];
}
stu_num--;
printf("删除成功!\n");
return;
}
}
printf("未找到该学生!\n");
}
// 显示学生信息函数
void show_stu_info()
{
for (int i = 0; i < stu_num; i++) {
printf("学号:%s,姓名:%s,性别:%s,成绩:%.1f %.1f %.1f %.1f %.1f,总分:%.1f,平均分:%.1f\n",
stu[i].id, stu[i].name, stu[i].sex, stu[i].score[0], stu[i].score[1], stu[i].score[2],
stu[i].score[3], stu[i].score[4], stu[i].sum_score, stu[i].avg_score);
}
}
// 计算每个学生的总分和平均分,并按学号或总分排序输出
void sort_stu_info()
{
int choice;
printf("请选择排序方式:1.按学号排序 2.按总分排序\n");
scanf("%d", &choice);
for (int i = 0; i < stu_num; i++) {
stu[i].sum_score = 0;
for (int j = 0; j < 5; j++) {
stu[i].sum_score += stu[i].score[j];
}
stu[i].avg_score = stu[i].sum_score / 5;
}
for (int i = 0; i < stu_num - 1; i++) {
for (int j = 0; j < stu_num - i - 1; j++) {
if (choice == 1) { // 按学号排序
if (strcmp(stu[j].id, stu[j + 1].id) > 0) {
Student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
} else if (choice == 2) { // 按总分排序
if (stu[j].sum_score < stu[j + 1].sum_score) {
Student temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
}
for (int i = 0; i < stu_num; i++) {
stu[i].rank = i + 1;
printf("名次:%d,学号:%s,姓名:%s,性别:%s,成绩:%.1f %.1f %.1f %.1f %.1f,总分:%.1f,平均分:%.1f\n",
stu[i].rank, stu[i].id, stu[i].name, stu[i].sex, stu[i].score[0], stu[i].score[1], stu[i].score[2],
stu[i].score[3], stu[i].score[4], stu[i].sum_score, stu[i].avg_score);
}
}
// 计算全班各门功课的平均分,并显示低于平均分的学生信息
void calc_course_avg()
{
float avg[5] = {0}; // 存放5门课程的平均分
for (int i = 0; i < stu_num; i++) {
for (int j = 0; j < 5; j++) {
avg[j] += stu[i].score[j];
}
}
for (int i = 0; i < 5; i++) {
avg[i] /= stu_num;
printf("第%d门课程的平均分为:%.1f\n", i + 1, avg[i]);
for (int j = 0; j < stu_num; j++) {
if (stu[j].score[i] < avg[i]) {
printf("学号:%s,姓名:%s,性别:%s,科目:%d,成绩:%.1f\n",
stu[j].id, stu[j].name, stu[j].sex, i + 1, stu[j].score[i