用c语言写:设计和实现一个简单的学生管理系统,具有以下功能:1.学生信息录入:可以录入学生的基本信息,包括学号、姓名、性别、年龄、所在院系等信息。要求支持多名学生信息的录入。2.学生信息查询:可以按学号或姓名进行学生信息的查询,找到相应学生的基本信息。3.学生成绩录入:可以为每名学生录入多门课程的成绩,包括课程名称、学分、成绩等。4.学生成绩查询:可以按学号和课程名称查询某名学生的指定课程成绩。5.课程平均分查询:可以查询每门课程的平均成绩。6.学生总分统计:可以统计每名学生的总学分和总成绩,以及根据总成绩计算学生的平均分。该系统需要提供一个菜单界面,让用户选择不同的功能;需要定义学生信息结构体和成绩结构体、考虑利用数据文件等存储数据。
时间: 2024-03-08 13:49:55 浏览: 146
课程设计二: 题目: 学生成绩管理系统 功能: 实现学生信息管理 包括:录入、查询、排序等功能 C语言
好的,以下是一个简单的学生管理系统的代码实现,包括上述功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 //最大学生数量
#define MAX_COURSE_NUM 10 //最大课程数量
//学生信息结构体
typedef struct Student {
char id[20]; //学号
char name[20]; //姓名
char sex[10]; //性别
int age; //年龄
char department[30]; //所在院系
float score[MAX_COURSE_NUM]; //成绩
int course_num; //课程数量
} Student;
//成绩结构体
typedef struct Score {
char course_name[20]; //课程名称
float credit; //学分
float score; //成绩
} Score;
Student students[MAX_STUDENT_NUM]; //学生数组
int student_num = 0; //学生数量
Score scores[MAX_COURSE_NUM]; //成绩数组
int course_num = 0; //课程数量
//菜单函数
void menu() {
printf("===== 学生管理系统 =====\n");
printf("1. 学生信息录入\n");
printf("2. 学生信息查询\n");
printf("3. 学生成绩录入\n");
printf("4. 学生成绩查询\n");
printf("5. 课程平均分查询\n");
printf("6. 学生总分统计\n");
printf("0. 退出系统\n");
printf("======================\n");
}
//学生信息录入函数
void add_student() {
if (student_num >= MAX_STUDENT_NUM) {
printf("学生数量已达到最大值,无法继续添加!\n");
return;
}
Student student;
printf("请输入学生学号:");
scanf("%s", student.id);
printf("请输入学生姓名:");
scanf("%s", student.name);
printf("请输入学生性别:");
scanf("%s", student.sex);
printf("请输入学生年龄:");
scanf("%d", &student.age);
printf("请输入学生所在院系:");
scanf("%s", student.department);
printf("请输入学生课程数量:");
scanf("%d", &student.course_num);
for (int i = 0; i < student.course_num; i++) {
printf("请输入第%d门课程名称:", i + 1);
scanf("%s", scores[i].course_name);
printf("请输入第%d门课程学分:", i + 1);
scanf("%f", &scores[i].credit);
printf("请输入第%d门课程成绩:", i + 1);
scanf("%f", &scores[i].score);
student.score[i] = scores[i].score;
}
students[student_num++] = student;
printf("学生信息录入成功!\n");
}
//学生信息查询函数
void search_student() {
int option, flag = 0;
char keyword[20];
printf("请选择查询方式:1.按学号查询 2.按姓名查询\n");
scanf("%d", &option);
printf("请输入查询关键字:");
scanf("%s", keyword);
for (int i = 0; i < student_num; i++) {
if ((option == 1 && strcmp(students[i].id, keyword) == 0) || (option == 2 && strcmp(students[i].name, keyword) == 0)) {
printf("学号:%s 姓名:%s 性别:%s 年龄:%d 院系:%s\n", students[i].id, students[i].name, students[i].sex, students[i].age, students[i].department);
for (int j = 0; j < students[i].course_num; j++) {
printf("课程名称:%s 学分:%f 成绩:%f\n", scores[j].course_name, scores[j].credit, students[i].score[j]);
}
flag = 1;
break;
}
}
if (!flag) {
printf("未找到匹配的学生信息!\n");
}
}
//学生成绩录入函数
void add_score() {
if (course_num >= MAX_COURSE_NUM) {
printf("课程数量已达到最大值,无法继续添加!\n");
return;
}
printf("请输入课程名称:");
scanf("%s", scores[course_num].course_name);
printf("请输入课程学分:");
scanf("%f", &scores[course_num].credit);
course_num++;
printf("课程信息录入成功!\n");
}
//学生成绩查询函数
void search_score() {
char id[20], course_name[20];
int flag = 0;
printf("请输入学生学号:");
scanf("%s", id);
printf("请输入课程名称:");
scanf("%s", course_name);
for (int i = 0; i < student_num; i++) {
if (strcmp(students[i].id, id) == 0) {
for (int j = 0; j < students[i].course_num; j++) {
if (strcmp(scores[j].course_name, course_name) == 0) {
printf("学号:%s 姓名:%s 课程名称:%s 学分:%f 成绩:%f\n", students[i].id, students[i].name, course_name, scores[j].credit, students[i].score[j]);
flag = 1;
break;
}
}
break;
}
}
if (!flag) {
printf("未找到匹配的学生成绩信息!\n");
}
}
//课程平均分查询函数
void search_average() {
float sum, average;
for (int i = 0; i < course_num; i++) {
sum = 0;
for (int j = 0; j < student_num; j++) {
for (int k = 0; k < students[j].course_num; k++) {
if (strcmp(scores[i].course_name, students[j].score[k]) == 0) {
sum += students[j].score[k];
}
}
}
average = sum / student_num;
printf("课程名称:%s 平均成绩:%f\n", scores[i].course_name, average);
}
}
//学生总分统计函数
void statistics() {
float total_score, total_credit, average_score;
for (int i = 0; i < student_num; i++) {
total_score = 0;
total_credit = 0;
for (int j = 0; j < students[i].course_num; j++) {
total_score += students[i].score[j] * scores[j].credit;
total_credit += scores[j].credit;
}
average_score = total_score / total_credit;
printf("学号:%s 姓名:%s 总学分:%f 总成绩:%f 平均成绩:%f\n", students[i].id, students[i].name, total_credit, total_score, average_score);
}
}
int main() {
int option;
while (1) {
menu();
printf("请选择功能:");
scanf("%d", &option);
switch (option) {
case 1:
add_student();
break;
case 2:
search_student();
break;
case 3:
add_score();
break;
case 4:
search_score();
break;
case 5:
search_average();
break;
case 6:
statistics();
break;
case 0:
printf("感谢使用学生管理系统,再见!\n");
exit(0);
default:
printf("无效的选择,请重新输入!\n");
break;
}
}
return 0;
}
```
该系统中,我们定义了学生信息结构体和成绩结构体,并使用数组来存储学生和成绩信息。在主函数中,我们使用了一个无限循环来循环显示菜单,根据用户的选择调用相应的函数来实现不同的功能。在学生信息录入和成绩录入时,我们使用了 scanf 函数来获取用户输入的信息,并将其存储到结构体中;在学生信息查询、学生成绩查询、课程平均分查询和学生总分统计时,我们使用了循环和条件语句来遍历数组,并输出相应的信息。此外,我们还使用了文件来存储学生和成绩信息,使得系统可以持久化保存数据。
阅读全文