在这里插入代码片
```#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define pf printf
#define sf scanf
#define NNN 1000
//学生基本信息
typedef struct Student
{
char sno[9]; // 学号
char name[20];//姓名
char sex[3];//性别
char dept[30]; //专业
}STU;
//课程基本信息
typedef struct Course
{
char cno[4]; // 课程号
char cname[20];//课程名
float credit; // 学分
}COUR;
//选课基本信息
typedef struct SC
{
char sno[9];//学号
char cno[4];//课程号
float grade; // 成绩
}SC;
//身份
typedef struct USER
{
char sno[9]; // 学号
int flag; //标记身份
char username[20];// 账号
char password[20];// 密码
}USER;
//身份的结构体数组
typedef struct LNode_user
{
USER u[NNN];//账号结构体
int length; //账号数量
}LNode_user;
STU stu[NNN];//学生结构体数组
COUR cour[NNN];//课程结构体数组
SC sc[NNN];//选课结构体数组
int count_stu = 0; //学生人数初始化
int count_cour = 0; //课程数初始化
int count_sc = 0; //选课信息初始化
void load_user(LNode_user *user);//导入身份信息
void admin_login(LNode_user *user);//管理员注册
void admin_enter(LNode_user *user);//管理员登录
void teather_login(LNode_user *user);//教师注册
void teather_enter(LNode_user *user);//教师登录
void student_login(LNode_user *user);//学生注册
void student_enter(LNode_user *user);//学生登录
void admin_menu();//管理员菜单
void teather_menu();//教师菜单
void add_stu();//录入学生基本信息
void add_cour();//录入课程信息
void Query_stu();//查询学生基本信息
void add_score();//录入学生成绩
void alert_score();//修改学生成绩
void show_score();//打印学生成绩单
void statictis();//按课程名进行成绩统计
void load_stu();//导入学生基本信息
void load_cour();//导入课程基本信息
void loar_sc();//导入学生选课信息
void save_stu();//导出学生基本信息
void save_cour();//导出课程基本信息
void save_sc();//导出学生选课信息
//导入身份信息
void load_user(LNode_user *user)
{
FILE *fp;
int i = 0;
user -> length = 0;
if((fp = fopen("password.txt" , "r")) == NULL)
{
return ;
}
while(!feof(fp))
{
fscanf(fp,"%d%s%s",&user->u[i].flag,user->u[i].username,user->u[i].password);
if(user->u[i].flag == 3)
fscanf(fp,"%s\n",user->u[i].sno);
else
fscanf(fp,"\n");
i++;
}
fclose(fp);
user->length = i;
}
//管理员注册
void admin_login(LNode_user *user)
{
FILE *fp;
int i;
USER t;
pf("请输入您的账号: ");
sf("%s",t.username);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 1))
{
break;
}
}
if(i != user->length)
{
pf("该管理员账号已经存在\n\n");
system("pause");
return ;
}
pf("请输入您的密码: ");
sf("%s",t.password);
t.flag= 1;
user->u[user->length++] = t;
pf("注册成功\n\n");
system("pause");
fp = fopen("password.txt","a");
fprintf(fp,"%d %s %s\n",t.flag,t.username,t.password);
fclose(fp);
}
//管理员登录
void admin_enter(LNode_user *user)
{
int i;
USER t;
pf("请输入您的账号: ");
sf("%s",t.username);
pf("请输入您的密码: ");
sf("%s",t.password);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 1)
&&(strcmp(t.password , user->u[i].password) == 0))
{
break;
}
}
if(i == user->length)
{
pf("该管理员账号不存在\n\n");
system("pause");
return ;
}
pf("登录成功\n\n");
system("pause");
admin_menu();//管理员菜单
}
//教师注册
void teather_login(LNode_user *user)
{
FILE *fp;
int i;
USER t;
pf("请输入您的账号: ");
sf("%s",t.username);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 2))
{
break;
}
}
if(i != user->length)
{
pf("该教师账号已经存在\n\n");
system("pause");
return ;
}
pf("请输入您的密码: ");
sf("%s",t.password);
t.flag= 2;
pf("注册成功\n\n");
user->u[user->length++] = t;
system("pause");
fp = fopen("password.txt","a");
fprintf(fp,"%d %s %s\n",t.flag,t.username,t.password);
fclose(fp);
}
//教师登录
void teather_enter(LNode_user *user)
{
int i;
USER t;
pf("请输入您的账号: ");
sf("%s",t.username);
pf("请输入您的密码: ");
sf("%s",t.password);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 2)
&&(strcmp(t.password , user->u[i].password) == 0))
{
break;
}
}
if(i == user->length)
{
pf("该教师账号不存在\n\n");
system("pause");
return ;
}
pf("登录成功\n\n");
system("pause");
teather_menu();//教师菜单
}
//学生注册
void student_login(LNode_user *user)
{
FILE *fp;
int i;
USER t;
pf("请输入您的学号: ");
sf("%s",t.sno);
for(i=0;i<count_stu;i++)
{
if(strcmp(t.sno , stu[i].sno) == 0)
{
break;
}
}
if(i == count_stu)
{
pf("该学号不存在,无法注册账号\n\n");
system("pause");
return ;
}
pf("请输入您的账号: ");
sf("%s",t.username);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 3))
{
break;
}
}
if(i != user->length)
{
pf("该学生账号已经存在\n\n");
system("pause");
return ;
}
pf("请输入您的密码: ");
sf("%s",t.password);
t.flag = 3;
pf("注册成功\n\n");
user->u[user->length++] = t;
system("pause");
fp = fopen("password.txt","a");
fprintf(fp,"%d %s %s %s\n",t.flag,t.username,t.password,t.sno);
fclose(fp);
}
//学生登录
void student_enter(LNode_user *user)
{
SC s;
int i ,j ,q;
USER t;
STU S;
pf("请输入您的账号: ");
sf("%s",t.username);
pf("请输入您的密码: ");
sf("%s",t.password);
for(i=0;i<user->length;i++)
{
if((strcmp(t.username , user->u[i].username) == 0)&&(user->u[i].flag == 3)
&&(strcmp(t.password , user->u[i].password) == 0))
{
break;
}
}
if(i == user->length)
{
pf("该学生账号不存在\n\n");
system("pause");
return ;
}
pf("登录成功\n\n");
for(j=0;j<count_stu;j++)
{
if(strcmp(stu[j].sno , user->u[i].sno) == 0)
{
S = stu[j];
}
}
pf("你选择的课程和课程成绩如下:\n\n");
for(j=0;j<count_sc;j++)
{
if(strcmp(sc[j].sno , S.sno) == 0)
{
for(q=0; q < count_cour; q++)
{
if(strcmp(sc[j].cno , cour[q].cno) == 0)
{
pf("课程号:%s \t 课程名:%s \t",cour[q].cno,cour[q].cname);
break;
}
}
pf("成绩: %.0f\n",sc[j].grade);
}
}
pf("\n\n");
system("pause");
//显示课程信息和成绩
system("pause");
}
//管理员菜单
void admin_menu()
{
int choose;
while(1)
{
system("cls");
pf("\n\t\t* * * * * * * * 管理员菜单 * * * * * * * * * *\n");
pf("\t\t* *\n");
pf("\t\t* 1.录入学生基本信息 *\n");
pf("\t\t* 2.录入课程信息 *\n");
pf("\t\t* 3.查询学生基本信息 *\n");
pf("\t\t* 0.退出系统 *\n");
pf("\t\t* *\n");
pf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n\n\n");
pf("\t\t请选择: ");
sf("%d",&choose);
switch(choose)
{
case 1:
{
add_stu();//录入学生基本信息
break;
}
case 2:
{
add_cour();//录入课程信息
break;
}
case 3:
{
Query_stu();//查询学生基本信息
break;
}
case 0:
{
return;
}
}
}
}
//录入学生基本信息
void add_stu()
{
STU s;
int i;
pf("请输入学号:");
sf("%s",s.sno);
for(i=0;i<count_stu;i++)
{
if(strcmp(s.sno , stu[i].sno) == 0)
break;
}
if(i != count_stu)
{
pf("该学号的学生已经存在\n\n");
system("pause");
return ;
}
pf("请输入姓名:");
sf("%s",s.name);
pf("请输入性别:");
sf("%s",s.sex);
pf("请输入专业:");
sf("%s",s.dept);
stu[count_stu++] = s;
pf("添加成功\n\n");
save_stu();//导出学生基本信息
system("pause");
}
//录入课程信息
void add_cour()
{
COUR s;
int i;
pf("请输入课程号:");
sf("%s",s.cno);
for(i=0;i<count_cour;i++)
{
if(strcmp(s.cno , cour[i].cno) == 0)
break;
}
if(i != count_cour)
{
pf("该课程号已经存在\n\n");
system("pause");
return ;
}
pf("请输入课程名:");
sf("%s",s.cname);
pf("请输入学分:");
sf("%f",&s.credit);
cour[count_cour++] = s;
pf("添加成功\n\n");
save_cour();//导出课程基本信息
system("pause");
}
//查询学生基本信息
void Query_stu()
{
STU s;
int i;
pf("请输入查询的学生的学号:");
sf("%s",s.sno);
for(i=0;i<count_stu;i++)
{
if(strcmp(s.sno , stu[i].sno) == 0)
{
pf("学号\t\t姓名\t\t性别\t专业\n");
pf("%9s\t%9s\t%s\t%s\n\n",stu[i].sno,stu[i].name,stu[i].sex,stu[i].dept);
pf("查找成功\n\n");
system("pause");
return ;
}
}
pf("查询失败,没有此学生\n\n");
system("pause");
}
//教师菜单
void teather_menu()
{
int choose;
while(1)
{
system("cls");
pf("\n\t\t* * * * * * * * * 教师菜单 * * * * * * * * * *\n");
pf("\t\t* *\n");
pf("\t\t* 1.录入学生成绩 *\n");
pf("\t\t* 2.修改学生成绩 *\n");
pf("\t\t* 3.打印学生成绩单 *\n");
pf("\t\t* 4.按课程名进行成绩统计 *\n");
pf("\t\t* 0.退出系统 *\n");
pf("\t\t* *\n");
pf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n\n\n");
pf("\t\t请选择: ");
sf("%d",&choose);
switch(choose)
{
case 1:
{
add_score();//录入学生成绩
break;
}
case 2:
{
alert_score();//修改学生成绩
break;
}
case 3:
{
show_score();//打印学生成绩单
break;
}
case 4:
{
statictis();//按课程名进行成绩统计
break;
}
case 0:
{
return;
}
}
}
}
//录入学生成绩
void add_score()
{
SC s;
int i;
pf("请输入学号:");
sf("%s",s.sno);
for(i=0;i<count_stu;i++)
{
if(strcmp(s.sno , stu[i].sno) == 0)
break;
}
if(i == count_stu)
{
pf("没有该学号的学生信息\n\n");
system("pause");
return ;
}
pf("请输入课程号:");
sf("%s",s.cno);
for(i=0;i<count_cour;i++)
{
if(strcmp(s.cno , cour[i].cno) == 0)
break;
}
if(i == count_cour)
{
pf("没有该课程的信息\n\n");
system("pause");
return ;
}
pf("请输入成绩:");
sf("%f",&s.grade);
sc[count_sc++] = s;
pf("添加学生课程成绩信息成功\n\n");
save_sc();//导出学生选课信息
system("pause");
}
//修改学生成绩
void alert_score()
{
SC s;
int i;
pf("请输入修改的学生的学号:");
sf("%s",s.sno);
pf("请输入修改的课程号:");
sf("%s",s.cno);
for(i=0;i<count_sc;i++)
{
if((strcmp(s.cno , sc[i].cno) == 0)&&(strcmp(s.sno , sc[i].sno) == 0))
{
pf("请输入修改后的成绩: ");
sf("%f",&sc[i].grade);
pf("修改成功\n\n");
system("pause");
save_sc();//导出学生选课信息
return ;
}
}
pf("修改失败,找不到该学号或该学号的学生还没有该课程的成绩\n\n");
system("pause");
}
//打印学生成绩单
void show_score()
{
int i;
pf("学号\t\t课程名\t成绩\n\n");
for(i=0;i<count_sc;i++)
{
pf("%9s\t%s\t%.0f\n",sc[i].sno,sc[i].cno,sc[i].grade);
}
pf("\n\n打印完成\n\n");
system("pause");
}
//按课程名进行成绩统计
void statictis()
{
COUR c;
SC s;
int i,j;
float aveg = 0;//平均分
float max = 0;//最高分
float min = 101.0;//最低分
int number[5]={0};//各分数段人数
int sum = 0;//该课程总人数
pf("请输入您要统计的课程名: ");
sf("%s",c.cname);
for(i=0;i<count_cour;i++)
{
if(strcmp(c.cname , cour[i].cname) == 0)
break;
}
if(i == count_cour)
{
pf("无此课程\n\n");
system("pause");
return ;
}
for(j = 0;j<count_sc;j++)
{
if(strcmp(sc[j].cno , cour[i].cno) == 0)
{
if(sc[j].grade > max)
{
max = sc[j].grade;
}
if(sc[j].grade < min)
{
min = sc[j].grade;
}
aveg += sc[j].grade;
sum++;
if(sc[j].grade >= 90)
{
number[0]++;
}
else if((sc[j].grade >= 80)&&(sc[j].grade < 90))
{
number[1]++;
}
else if((sc[j].grade >= 70)&&(sc[j].grade < 80))
{
number[2]++;
}
else if((sc[j].grade >= 60)&&(sc[j].grade < 70))
{
number[3]++;
}
else
{
number[4]++;
}
}
}
pf("该课程的平均成绩是:%.2f\n",aveg / (sum * 1.0));
pf("该课程的最高分是:%.2f\n",max);
pf("该课程的最低分是:%.2f\n",min);
pf("该课程的不及格的人数有:%d人\n",number[4]);
pf("该课程的60~69分的人数有:%d人\n",number[3]);
pf("该课程的70~79分的人数有:%d人\n",number[2]);
pf("该课程的80~89分的人数有:%d人\n",number[1]);
pf("该课程的90分以上的人数有:%d人\n",number[0]);
system("pause");
}
//导入学生基本信息
void load_stu()
{
FILE *fp;
int i=0;
if((fp = fopen("stu.txt" , "r")) == NULL)
{
return ;
}
while( !feof(fp) )
{
fscanf(fp,"%s%s%s%s\n",stu[i].sno,stu[i].name,stu[i].sex,stu[i].dept);
i++;
}
fclose(fp);
count_stu = i;
}
//导入课程基本信息
void load_cour()
{
FILE *fp;
int i=0;
if((fp = fopen("cour.txt" , "r")) == NULL)
{
return ;
}
while( !feof(fp) )
{
fscanf(fp,"%s%s%f\n",cour[i].cno,cour[i].cname,&cour[i].credit);
i++;
}
fclose(fp);
count_cour = i;
}
//导入学生选课信息
void loar_sc()
{
FILE *fp;
int i=0;
if((fp = fopen("sc.txt" , "a+")) == NULL)
{
return ;
}
while( !feof(fp) )
{
fscanf(fp,"%s%s%f\n",sc[i].sno,sc[i].cno,&sc[i].grade);
i++;
}
fclose(fp);
count_sc = i;
}
//导出学生基本信息
void save_stu()
{
FILE *fp;
int i=0;
if((fp = fopen("stu.txt" , "w")) == NULL)
{
return ;
}
for(i=0;i<count_stu;i++)
{
fprintf(fp,"%s %s %s %s\n",stu[i].sno,stu[i].name,stu[i].sex,stu[i].dept);
}
fclose(fp);
}
//导出课程基本信息
void save_cour()
{
FILE *fp;
int i=0;
if((fp = fopen("cour.txt" , "r")) == NULL)
{
pf("导出时打开课程信息文档失败");
return ;
}
for(i=0;i<count_cour;i++)
{
fprintf(fp,"%s %s %f\n",cour[i].cno,cour[i].cname,cour[i].credit);
}
fclose(fp);
}
//导出学生选课信息
void save_sc()
{
FILE *fp;
int i=0;
if((fp = fopen("sc.txt" , "a+")) == NULL)
{
return ;
}
for(i=0;i<count_sc;i++)
{
fprintf(fp,"%s %s %f\n",sc[i].sno,sc[i].cno,sc[i].grade);
}
fclose(fp);
}
int main()
{
LNode_user user;
int choose;
user.length = 0;
load_user(&user); //导入账号信息
load_stu(); //导入学生基本信息
load_cour(); //导入课程基本信息
loar_sc(); //导入学生选课信息
while(1)
{
system("cls");
pf("\n\t\t* * * * * * 学生选课管理系统 * * * * * * * * *\n");
pf("\t\t* *\n");
pf("\t\t* 1.管理员注册 *\n");
pf("\t\t* 2.管理员登录 *\n");
pf("\t\t* 3.教师注册 *\n");
pf("\t\t* 4.教师登录 *\n");
pf("\t\t* 5.学生注册 *\n");
pf("\t\t* 6.学生登录 *\n");
pf("\t\t* 0.退出系统 *\n");
pf("\t\t* *\n");
pf("\t\t* * * * * * * * * * * * * * * * * * * * * * *\n\n\n");
pf("\t\t请选择: ");
sf("%d",&choose);
switch(choose)
{
case 1:
{
admin_login(&user);//管理员注册
break;
}
case 2:
{
admin_enter(&user);//管理员登录
break;
}
case 3:
{
teather_login(&user); //教师注册
break;
}
case 4:
{
teather_enter(&user); //教师登录
break;
}
case 5:
{
student_login(&user);//学生注册
break;
}
case 6:
{
student_enter(&user);//学生登录
break;
}
case 0:
{
return 0;
}
}
}
return 0;
}
学生管理系统
最新推荐文章于 2023-06-15 09:55:53 发布