#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//学生结构体
struct student {
char name[30];
char id[10];
char course[30][10];
double score[30];
};
//教师结构体
struct teacher {
char name[30];
char course[10];
char id[5];
};
//声明函数
void add_student();
void display_student(char id[]);
void add_teacher();
void display_teacher(char id[]);
void select_course(char id[]);
void input_score(char id[]);
void course_report(char course[]);
int main(){
int choice;
char id[10];
do{
printf("1.添加学生\n");
printf("2.查看学生信息\n");
printf("3.添加教师\n");
printf("4.查看教师信息\n");
printf("5.学生选课\n");
printf("6.教师录入成绩\n");
printf("7.课程报表\n");
printf("8.退出系统\n");
printf("\n请选择需要的操作:");
scanf("%d", &choice);
switch(choice){
case 1: add_student(); break;
case 2:
printf("请输入学生学号:");
scanf("%s", id);
display_student(id);
break;
case 3: add_teacher(); break;
case 4:
printf("请输入教师编号:");
scanf("%s", id);
display_teacher(id);
break;
case 5:
printf("请输入学生学号:");
scanf("%s", id);
select_course(id);
break;
case 6:
printf("请输入教师编号:");
scanf("%s", id);
input_score(id);
break;
case 7:
printf("请输入课程名称:");
char course[10];
scanf("%s", course);
course_report(course);
break;
case 8: exit(0); break;
default: printf("无效选择,请重新输入。\n");
}
} while(1);
return 0;
}
//添加学生
void add_student(){
struct student s;
printf("\n请输入学生姓名:");
scanf("%s", s.name);
printf("请输入学生学号:");
scanf("%s", s.id);
printf("请输入选修课程数量:");
int count;
scanf("%d", &count);
for(int i=0; i<count; i++){
printf("请输入选修课程%d的名称:", i+1);
scanf("%s", s.course[i]);
fflush(stdin);
s.score[i] = -1;
}
FILE *fp;
fp = fopen("students.dat", "ab+");
fwrite(&s, sizeof(s), 1, fp);
fclose(fp);
printf("学生添加成功。\n\n");
}
//查看学生信息
void display_student(char id[]){
struct student s;
int found = 0;
FILE *fp;
fp = fopen("students.dat", "rb");
while(fread(&s, sizeof(s), 1, fp)==1){
if(strcmp(s.id, id)==0){
found = 1;
printf("\n学生姓名:%s\n学生学号:%s\n选修课程及成绩:\n", s.name, s.id);
for(int i=0; i<30; i++){
if(strcmp(s.course[i], "")!=0){
if(s.score[i]==-1){
printf("%s:未选\n", s.course[i]);
}
else{
printf("%s:%2.1f\n", s.course[i], s.score[i]);
}
}
}
printf("\n");
break;
}
}
fclose(fp);
if(found==0){
printf("\n学生不存在。\n\n");
}
}
//添加教师
void add_teacher(){
struct teacher t;
printf("\n请输入教师姓名:");
scanf("%s", t.name);
printf("请输入教师编号:");
scanf("%s", t.id);
printf("请输入教授课程名称:");
scanf("%s", t.course);
FILE *fp;
fp = fopen("teachers.dat", "ab+");
fwrite(&t, sizeof(t), 1, fp);
fclose(fp);
printf("教师添加成功。\n\n");
}
//查看教师信息
void display_teacher(char id[]){
struct teacher t;
int found = 0;
FILE *fp;
fp = fopen("teachers.dat", "rb");
while(fread(&t, sizeof(t), 1, fp)==1){
if(strcmp(t.id, id)==0){
found = 1;
printf("\n教师姓名:%s\n教师编号:%s\n教授课程:%s\n", t.name, t.id, t.course);
printf("\n");
break;
}
}
fclose(fp);
if(found==0){
printf("\n教师不存在。\n\n");
}
}
//学生选课
void select_course(char id[]){
struct student s;
int found = 0;
FILE *fp;
fp = fopen("students.dat", "rb+");
while(fread(&s, sizeof(s), 1, fp)==1){
if(strcmp(s.id, id)==0){
found = 1;
printf("\n请选择需要选修的课程:\n");
for(int i=0; i<30; i++){
if(strcmp(s.course[i], "")==0){
char course[10];
printf("%d. ", i+1);
scanf("%s", course);
fflush(stdin);
strcpy(s.course[i], course);
s.score[i] = -1;
break;
}
}
fseek(fp, -sizeof(s), SEEK_CUR);
fwrite(&s, sizeof(s), 1, fp);
printf("选课成功。\n\n");
break;
}
}
fclose(fp);
if(found==0){
printf("\n学生不存在。\n\n");
}
}
//教师录入成绩
void input_score(char id[]){
struct student s;
int found = 0;
FILE *fp;
fp = fopen("students.dat", "rb+");
while(fread(&s, sizeof(s), 1, fp)==1){
for(int i=0; i<30; i++){
if(strcmp(s.course[i], "")!=0){
if(strcmp(s.course[i], id)==0){
found = 1;
printf("\n请输入学生成绩(0-100):");
double score;
scanf("%lf", &score);
fflush(stdin);
s.score[i] = score;
fseek(fp, -sizeof(s), SEEK_CUR);
fwrite(&s, sizeof(s), 1, fp);
printf("成绩录入成功。\n\n");
break; //找到对应课程后退出循环
}
}
}
}
fclose(fp);
if(found==0){
printf("\n该课程学生不存在。\n\n");
}
}
//课程报表
void course_report(char course[]){
int count = 0;
double sum = 0;
struct student s;
int found = 0;
FILE *fp;
fp = fopen("students.dat", "rb");
while(fread(&s, sizeof(s), 1, fp)==1){
for(int i=0; i<30; i++){
if(strcmp(s.course[i], "")!=0){
if(strcmp(s.course[i], course)==0){
found = 1;
count++;
if(s.score[i]!=-1){
sum += s.score[i];
}
}
}
}
}
fclose(fp);
if(found==0){
printf("\n该课程不存在。\n\n");
}
else{
printf("\n选修 %s 的学生数量:%d\n平均成绩:%.2f\n\n", course, count, sum/count);
}
}
欢迎订阅专栏,数据结构实验,期末大作业,前端后端都有哦,想我发哪个方面的资源或文章可以私信我,免费的哦