c语言编写学生成绩管理系统,需要先登录,学生成绩已事先录入,可修改密码,可实现表示列出所有学生记录;“3”表示列出总分最高的学生;“4”表示按姓名查找学生记录;“5”表示按学号查找学生记录;“6”表示按平均分降序排序;“7”表示退出系统等功能的完整代码
时间: 2023-10-10 17:04:35 浏览: 34
好的,以下是一个简单的学生成绩管理系统的完整代码,包含登录、修改密码、查询和排序等功能:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_STUDENT_NUM 100
#define MAX_NAME_LEN 20
#define MAX_PASSWORD_LEN 20
typedef struct student {
char name[MAX_NAME_LEN];
char id[MAX_NAME_LEN];
int math;
int english;
int computer;
int total;
float average;
} Student;
void login(char* password);
void change_password(char* password);
void list_students(Student* students, int num);
void find_by_name(Student* students, int num);
void find_by_id(Student* students, int num);
void sort_by_average(Student* students, int num);
int main() {
Student students[MAX_STUDENT_NUM];
int num = 0;
char password[MAX_PASSWORD_LEN];
int choice;
// 添加学生记录
strcpy(students[num].name, "张三");
strcpy(students[num].id, "001");
students[num].math = 80;
students[num].english = 90;
students[num].computer = 85;
students[num].total = students[num].math + students[num].english + students[num].computer;
students[num].average = students[num].total / 3.0f;
num++;
strcpy(students[num].name, "李四");
strcpy(students[num].id, "002");
students[num].math = 75;
students[num].english = 85;
students[num].computer = 90;
students[num].total = students[num].math + students[num].english + students[num].computer;
students[num].average = students[num].total / 3.0f;
num++;
strcpy(students[num].name, "王五");
strcpy(students[num].id, "003");
students[num].math = 85;
students[num].english = 80;
students[num].computer = 95;
students[num].total = students[num].math + students[num].english + students[num].computer;
students[num].average = students[num].total / 3.0f;
num++;
login(password);
do {
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("请选择(1-7):");
scanf("%d", &choice);
switch (choice) {
case 1:
change_password(password);
break;
case 2:
list_students(students, num);
break;
case 3:
printf("总分最高的学生是:\n");
printf("姓名\t学号\t数学\t英语\t计算机\t总分\t平均分\n");
int max_total = -1;
int max_index = -1;
for (int i = 0; i < num; i++) {
if (students[i].total > max_total) {
max_total = students[i].total;
max_index = i;
}
}
printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[max_index].name, students[max_index].id, students[max_index].math, students[max_index].english, students[max_index].computer, students[max_index].total, students[max_index].average);
break;
case 4:
find_by_name(students, num);
break;
case 5:
find_by_id(students, num);
break;
case 6:
sort_by_average(students, num);
list_students(students, num);
break;
case 7:
printf("谢谢使用!\n");
break;
default:
printf("无效选择,请重新选择!\n");
break;
}
} while (choice != 7);
return 0;
}
// 登录
void login(char* password) {
printf("请输入密码:");
scanf("%s", password);
}
// 修改密码
void change_password(char* password) {
char old_password[MAX_PASSWORD_LEN];
char new_password[MAX_PASSWORD_LEN];
printf("请输入旧密码:");
scanf("%s", old_password);
if (strcmp(old_password, password) == 0) {
printf("请输入新密码:");
scanf("%s", new_password);
strcpy(password, new_password);
printf("密码修改成功!\n");
} else {
printf("密码错误,无法修改!\n");
}
}
// 列出所有学生记录
void list_students(Student* students, int num) {
printf("姓名\t学号\t数学\t英语\t计算机\t总分\t平均分\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].name, students[i].id, students[i].math, students[i].english, students[i].computer, students[i].total, students[i].average);
}
}
// 按姓名查找学生记录
void find_by_name(Student* students, int num) {
char name[MAX_NAME_LEN];
printf("请输入要查找的姓名:");
scanf("%s", name);
printf("姓名\t学号\t数学\t英语\t计算机\t总分\t平均分\n");
int found = 0;
for (int i = 0; i < num; i++) {
if (strcmp(students[i].name, name) == 0) {
printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].name, students[i].id, students[i].math, students[i].english, students[i].computer, students[i].total, students[i].average);
found = 1;
}
}
if (!found) {
printf("找不到该学生!\n");
}
}
// 按学号查找学生记录
void find_by_id(Student* students, int num) {
char id[MAX_NAME_LEN];
printf("请输入要查找的学号:");
scanf("%s", id);
printf("姓名\t学号\t数学\t英语\t计算机\t总分\t平均分\n");
int found = 0;
for (int i = 0; i < num; i++) {
if (strcmp(students[i].id, id) == 0) {
printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\n", students[i].name, students[i].id, students[i].math, students[i].english, students[i].computer, students[i].total, students[i].average);
found = 1;
}
}
if (!found) {
printf("找不到该学生!\n");
}
}
// 按平均分降序排序
void sort_by_average(Student* students, int num) {
for (int i = 0; i < num - 1; i++) {
for (int j = 0; j < num - 1 - i; j++) {
if (students[j].average < students[j+1].average) {
Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
}
```
这是一个简单的实现,可以根据需要进行修改和优化。在实际开发中,还需要考虑输入校验、存储方式、界面设计等方面的问题。