学生成绩管理系统(C语言版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT 100 /* 定义最大的学生数量 */
/* 学生结构体 */
typedef struct {
char name[20]; /* 姓名 */
int id; /* 学号 */
float score; /* 成绩 */
} Student;
Student students[MAX_STUDENT]; /* 存储学生数据的数组 */
int studentCount = 0; /* 学生数量 */
/* 根据学号查询学生 */
int searchStudentById(int id)
{
int i;
for (i = 0; i < studentCount; i++) {
if (students[i].id == id) {
return i; /* 找到学生返回下标 */
}
}
return -1; /* 没找到返回-1 */
}
/* 添加学生记录 */
void addStudent()
{
char name[20];
int id;
float score;
printf("请输入姓名:");
scanf("%s", name);
printf("请输入学号:");
scanf("%d", &id);
/* 判断学号是否已存在 */
if (searchStudentById(id) != -1) {
printf("该学号已存在!\n");
return;
}
printf("请输入成绩:");
scanf("%f", &score);
Student student = { .id = id, .score = score };
strcpy(student.name, name);
/* 将新加入的学生放在数组的最后 */
students[studentCount] = student;
studentCount++;
printf("添加成功!\n");
}
/* 删除学生记录 */
void deleteStudent()
{
int id, index;
printf("请输入学号:");
scanf("%d", &id);
index = searchStudentById(id);
if (index == -1) {
printf("该学生不存在!\n");
} else {
/* 将待删除的学生从数组中移除 */
for (; index < studentCount - 1; index++) {
students[index] = students[index + 1];
}
studentCount--;
printf("删除成功!\n");
}
}
/* 修改学生记录 */
void modifyStudent()
{
int id, index;
float score;
printf("请输入学号:");
scanf("%d", &id);
index = searchStudentById(id);
if (index == -1) {
printf("该学生不存在!\n");
} else {
printf("请输入新成绩:");
scanf("%f", &score);
students[index].score = score;
printf("修改成功!\n");
}
}
/* 查询学生记录 */
void queryStudent()
{
int id, index;
printf("请输入学号:");
scanf("%d", &id);
index = searchStudentById(id);
if (index == -1) {
printf("该学生不存在!\n");
} else {
printf("姓名:%s 学号:%d 成绩:%.2f\n",
students[index].name, students[index].id, students[index].score);
}
}
/* 计算成绩排名 */
void calculateRank()
{
Student tmp[MAX_STUDENT];
memcpy(tmp, students, sizeof(students)); /* 将学生数组复制到临时数组中 */
int i, j;
for (i = 0; i < studentCount - 1; i++) {
for (j = 0; j < studentCount - i - 1; j++) {
if (tmp[j].score < tmp[j + 1].score) {
Student temp = tmp[j];
tmp[j] = tmp[j + 1];
tmp[j + 1] = temp;
}
}
}
printf("成绩排名:\n");
for (i = 0; i < studentCount; i++) {
printf("%d. %s\t%.2f\n", i + 1, tmp[i].name, tmp[i].score);
}
}
/* 主函数 */
int main()
{
int menu;
while (1) {
printf("\n学生成绩管理系统\n");
printf("------------------------\n");
printf("1.添加学生记录\n");
printf("2.删除学生记录\n");
printf("3.修改学生记录\n");
printf("4.查询学生记录\n");
printf("5.计算成绩排名\n");
printf("6.退出\n");
printf("------------------------\n");
printf("请选择菜单:");
scanf("%d", &menu);
switch (menu) {
case 1:
addStudent();
break;
case 2:
deleteStudent();
break;
case 3:
modifyStudent();
break;
case 4:
queryStudent();
break;
case 5:
calculateRank();
break;
case 6:
exit(EXIT_SUCCESS);
break;
default:
printf("请输入正确的菜单号!\n");
break;
}
}
return 0;
}