学生管理系统

在这里插入代码片
```#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值