用C++语言写一段代码,实现简单的学籍管理功能,要求能够录入学生信息,输出学生信息,根据输入时间与课程选课,统计每门课的学分绩点,统计每学期的平均绩点,统计重修科目。注意:要用C++语言写。
时间: 2024-05-11 19:16:44 浏览: 17
好的,我可以为你提供一份简单的学籍管理功能代码,具体实现如下所示:
```
#include<stdio.h>
#include<string.h>
struct student {
char name[20];
char id[10];
int age;
float scores[5];
float credit[5];
float total_credits;
float total_gpa;
int repeat[5];
int semester;
};
void input(struct student s[], int n);
void output(struct student s[], int n);
void choose(struct student s[], int n);
void calculate(struct student s[], int n);
void display(struct student s[], int n);
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
struct student s[n];
input(s, n);
output(s, n);
choose(s, n);
calculate(s, n);
display(s, n);
return 0;
}
void input(struct student s[], int n) {
printf("请输入学生信息,包括姓名、学号、年龄、成绩:\n");
for(int i=0; i<n; i++) {
scanf("%s %s %d %f %f %f %f %f", s[i].name, s[i].id, &s[i].age, &s[i].scores[0], &s[i].credits[0], &s[i].scores[1], &s[i].credits[1], &s[i].scores[2], &s[i].credits[2], &s[i].scores[3], &s[i].credits[3], &s[i].scores[4], &s[i].credits[4]);
s[i].total_credits = 0;
s[i].total_gpa = 0;
for(int j=0; j<5; j++) {
s[i].repeat[j] = 0;
s[i].total_credits += s[i].credits[j];
}
}
}
void output(struct student s[], int n) {
printf("学生信息如下:\n");
for(int i=0; i<n; i++) {
printf("%s %s %d %.2f %.2f %.2f %.2f %.2f\n", s[i].name, s[i].id, s[i].age, s[i].scores[0], s[i].credits[0], s[i].scores[1], s[i].credits[1], s[i].scores[2], s[i].credits[2], s[i].scores[3], s[i].credits[3], s[i].scores[4], s[i].credits[4]);
}
}
void choose(struct student s[], int n) {
printf("请输入要选课的学期和科目编号:\n");
int semester, subject;
scanf("%d %d", &semester, &subject);
for(int i=0; i<n; i++) {
if(s[i].semester == semester) {
if(s[i].scores[subject-1] == -1) {
printf("该课程已选!\n");
} else {
printf("请输入成绩:");
scanf("%f", &s[i].scores[subject-1]);
s[i].credits[subject-1] *= s[i].scores[subject-1] / 10.0 - 5;
}
}
}
}
void calculate(struct student s[], int n) {
for(int i=0; i<n; i++) {
float total_score = 0;
int total_repeat = 0;
for(int j=0; j<5; j++) {
if(s[i].scores[j] == -1) {
s[i].repeat[total_repeat++] = j;
} else {
total_score += s[i].scores[j] * s[i].credits[j];
}
}
s[i].total_gpa = total_score / s[i].total_credits;
}
}
void display(struct student s[], int n) {
printf("每门课的学分绩点如下:\n");
for(int i=0; i<5; i++) {
float total_score = 0;
float total_credits = 0;
for(int j=0; j<n; j++) {
if(s[j].scores[i] != -1) {
total_score += s[j].scores[i] * s[j].credits[i];
total_credits += s[j].credits[i];
}
}
printf("第%d门课学分绩点为:%.2f\n", i+1, total_score / total_credits);
}
printf("每学期的平均绩点如下:\n");
float total_gpa = 0;
int total_students = 0;
for(int i=1; i<=5; i++) {
float semester_gpa = 0;
int semester_students = 0;
for(int j=0; j<n; j++) {
if(s[j].semester == i) {
semester_gpa += s[j].total_gpa;
semester_students++;
}
}
if(semester_students > 0) {
total_gpa += semester_gpa / semester_students;
total_students++;
printf("第%d学期的平均绩点为:%.2f\n", i, semester_gpa / semester_students);
}
}
printf("总平均绩点为:%.2f\n", total_gpa / total_students);
printf("重修科目如下:\n");
for(int i=0; i<n; i++) {
if(s[i].total_gpa < 2.0) {
printf("学生%s 重修科目:", s[i].name);
for(int j=0; j<5; j++) {
if(s[i].repeat[j] != 0) {
printf("%d ", j+1);
}
}
printf("\n");
}
}
}
```
这份代码主要实现了学籍管理功能,包括录入学生信息、输出学生信息、根据输入时间与课程选课、统计每门课的学分绩点、统计每学期的平均绩点、统计重修科目等功能。希望能对你有所帮助!