用c语言写一个学生选修课程系统
时间: 2023-10-10 10:07:40 浏览: 67
好的,我可以为您提供一个简单的学生选修课程系统的代码示例,基于C语言实现。以下是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COURSES 5
#define MAX_NAME_LEN 20
typedef struct {
char name[MAX_NAME_LEN];
int credits;
float grade;
} Course;
typedef struct {
char name[MAX_NAME_LEN];
int id;
int num_courses;
Course courses[MAX_COURSES];
} Student;
void add_course(Student* student);
void print_courses(Student student);
void print_gpa(Student student);
int main() {
Student student;
student.num_courses = 0;
printf("Enter student name: ");
scanf("%s", student.name);
printf("Enter student ID: ");
scanf("%d", &student.id);
int choice = 0;
do {
printf("\n1. Add course\n");
printf("2. Print courses taken\n");
printf("3. Print GPA\n");
printf("4. Quit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch(choice) {
case 1:
add_course(&student);
break;
case 2:
print_courses(student);
break;
case 3:
print_gpa(student);
break;
case 4:
printf("Quitting program...\n");
break;
default:
printf("Invalid choice. Try again.\n");
break;
}
} while(choice != 4);
return 0;
}
void add_course(Student* student) {
if(student->num_courses >= MAX_COURSES) {
printf("Cannot add more courses. Maximum limit reached.\n");
return;
}
Course course;
printf("\nEnter course name: ");
scanf("%s", course.name);
printf("Enter credits for course: ");
scanf("%d", &course.credits);
printf("Enter grade for course (out of 4.0): ");
scanf("%f", &course.grade);
student->courses[student->num_courses++] = course;
}
void print_courses(Student student) {
if(student.num_courses == 0) {
printf("No courses taken yet.\n");
return;
}
printf("\nCourses taken by %s:\n", student.name);
for(int i = 0; i < student.num_courses; i++) {
printf("%s (%d credits) - Grade: %.2f\n", student.courses[i].name, student.courses[i].credits, student.courses[i].grade);
}
}
void print_gpa(Student student) {
if(student.num_courses == 0) {
printf("No courses taken yet.\n");
return;
}
float total_credits = 0, total_grade_points = 0;
for(int i = 0; i < student.num_courses; i++) {
total_credits += student.courses[i].credits;
total_grade_points += student.courses[i].credits * student.courses[i].grade;
}
printf("\nGPA for %s (ID: %d) is %.2f\n", student.name, student.id, total_grade_points/total_credits);
}
```
这个程序定义了两个结构体,`Course` 和 `Student`,`Course` 结构体表示一个课程,包含课程名称、学分和成绩;`Student` 结构体表示一个学生,包含学生姓名、学号、选修的课程数量和课程列表。程序主要通过一个菜单驱动式的界面与用户交互,提供添加课程、打印选修课程和计算 GPA 等功能。