用c语言写:设计和实现一个简单的学生管理系统,具有以下功能:1.学生信息录入:可以录入学生的基本信息,包括学号、姓名、性别、年龄、所在院系等信息。要求支持多名学生信息的录入。2.学生信息查询:可以按学号或姓名进行学生信息的查询,找到相应学生的基本信息。3.学生成绩录入:可以为每名学生录入多门课程的成绩,包括课程名称、学分、成绩等。4.学生成绩查询:可以按学号和课程名称查询某名学生的指定课程成绩。5.课程平均分查询:可以查询每门课程的平均成绩。6.学生总分统计:可以统计每名学生的总学分和总成绩,以及根据总成绩计算学生的平均分。该系统需要提供一个菜单界面,让用户选择不同的功能;需要定义学生信息结构体和成绩结构体、考虑利用数据文件等存储数据。
时间: 2024-03-10 16:43:13 浏览: 54
选用c#实现:学生信息管理系统,本系统包括两类用户:学生、管理员.zip
好的,下面是一个简单的学生管理系统的C语言代码示例,实现了上述的所有功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义学生信息结构体
struct student {
char id[20]; // 学号
char name[30]; // 姓名
char gender[10]; // 性别
int age; // 年龄
char department[50]; // 所在院系
};
// 定义成绩结构体
struct score {
char course[50]; // 课程名称
float credit; // 学分
float grade; // 成绩
};
// 添加学生信息
void add_student(struct student *stu, int *num) {
printf("请输入学生信息:\n");
printf("学号:");
scanf("%s", stu[*num].id);
printf("姓名:");
scanf("%s", stu[*num].name);
printf("性别:");
scanf("%s", stu[*num].gender);
printf("年龄:");
scanf("%d", &stu[*num].age);
printf("所在院系:");
scanf("%s", stu[*num].department);
(*num)++;
printf("添加成功!\n");
}
// 查询学生信息
void query_student(struct student *stu, int num) {
char query[20];
printf("请输入要查询的学生学号或姓名:");
scanf("%s", query);
int flag = 0;
for (int i = 0; i < num; i++) {
if (strcmp(query, stu[i].id) == 0 || strcmp(query, stu[i].name) == 0) {
printf("学号:%s\n姓名:%s\n性别:%s\n年龄:%d\n所在院系:%s\n", stu[i].id, stu[i].name, stu[i].gender, stu[i].age, stu[i].department);
flag = 1;
break;
}
}
if (!flag) {
printf("未找到该学生!\n");
}
}
// 添加学生成绩
void add_score(struct student *stu, struct score *sco, int num, int *count) {
char id[20], course[50];
printf("请输入要添加成绩的学生学号和课程名称:");
scanf("%s%s", id, course);
int flag = 0, index = -1;
for (int i = 0; i < num; i++) {
if (strcmp(id, stu[i].id) == 0) {
flag = 1;
index = i;
break;
}
}
if (!flag) {
printf("未找到该学生!\n");
return;
}
for (int i = 0; i < *count; i++) {
if (strcmp(id, sco[i].course) == 0 && strcmp(course, sco[i].course) == 0) {
printf("该学生已经录入该门课程成绩!\n");
return;
}
}
printf("请输入课程学分和成绩:");
scanf("%f%f", &sco[*count].credit, &sco[*count].grade);
strcpy(sco[*count].course, course);
(*count)++;
printf("添加成功!\n");
}
// 查询学生成绩
void query_score(struct student *stu, struct score *sco, int num, int count) {
char id[20], course[50];
printf("请输入要查询成绩的学生学号和课程名称:");
scanf("%s%s", id, course);
int flag = 0;
for (int i = 0; i < count; i++) {
if (strcmp(id, sco[i].course) == 0 && strcmp(course, sco[i].course) == 0) {
printf("学号:%s\n姓名:%s\n课程:%s\n学分:%.1f\n成绩:%.1f\n", stu[i].id, stu[i].name, sco[i].course, sco[i].credit, sco[i].grade);
flag = 1;
break;
}
}
if (!flag) {
printf("未找到该学生该门课程成绩!\n");
}
}
// 查询课程平均分
void query_average(struct score *sco, int count) {
char course[50];
printf("请输入要查询的课程名称:");
scanf("%s", course);
float sum = 0, num = 0;
for (int i = 0; i < count; i++) {
if (strcmp(course, sco[i].course) == 0) {
sum += sco[i].grade;
num++;
}
}
if (num == 0) {
printf("该课程暂无成绩!\n");
} else {
printf("该课程平均分为:%.1f\n", sum / num);
}
}
// 统计学生总分
void count_score(struct student *stu, struct score *sco, int num, int count) {
printf("学号\t姓名\t总学分\t总成绩\t平均分\n");
for (int i = 0; i < num; i++) {
float sum_credit = 0, sum_grade = 0;
for (int j = 0; j < count; j++) {
if (strcmp(stu[i].id, sco[j].course) == 0) {
sum_credit += sco[j].credit;
sum_grade += sco[j].grade;
}
}
printf("%s\t%s\t%.1f\t%.1f\t%.1f\n", stu[i].id, stu[i].name, sum_credit, sum_grade, sum_grade / sum_credit);
}
}
int main() {
struct student stu[100];
struct score sco[500];
int num = 0, count = 0;
int choice;
while (1) {
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("--------------------\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student(stu, &num);
break;
case 2:
query_student(stu, num);
break;
case 3:
add_score(stu, sco, num, &count);
break;
case 4:
query_score(stu, sco, num, count);
break;
case 5:
query_average(sco, count);
break;
case 6:
count_score(stu, sco, num, count);
break;
case 7:
exit(0);
default:
printf("无效的操作!\n");
break;
}
}
return 0;
}
```
注意,该代码中所有数据都是存储在内存中的,如果需要实现数据的永久存储,可以考虑使用文件操作。
阅读全文