C语言学生成绩管理系统

功能说明:

学生:
姓名 性别 学号 密码 语文 数学 英语
1、第一次登录强制修改密码。
2、查询成绩
排名 不显示姓名和学号。
平均分
最高分
最低分
3、修改密码
4、查看个人信息
5、三次密码错误锁定帐号,由教师解锁

教师:
姓名 性别 工号 密码
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
批量导入
3、删除学生
输入两人次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、显示所有在校学生信息
9、显示所有退出学生信息
10、三次密码错误锁定帐号,由校长解锁

校长:
admin
1、第一次登录强制修改密码。
2、能重置自己的密码
3、能重置教师密码
4、添加教师
5、删除教师
6、显示所有在职教师
7、显示所有离职教师

操作说明:

1.同一目录下新建一个data.txt文档存储数据.
2.注意操作名字密码时不要越界.

代码:*

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
#include <string.h>
//学生结构体
typedef struct Stu
{
	char name[20];
	char sex;
	int num;
	char password[7];
	int chinese;
	int math;
	int english;
	int lock;
}Stu;

//离开学生结构体
typedef struct Str
{
	char name[20];
	char sex;
	int num;
}Str;


//设计老师的结构体
typedef struct Tch
{
	char name[20];
	char sex;
	int num;
	char password[7];
	int lock;
}Tch;

//设计离职老师的结构体
typedef struct Tch_exit
{
	char name[20];
	char sex;
	int num;
}Tch_exit;

Stu stu[100];//学生
Str str[100];//离开学生
Tch ste[100];//教师
Tch_exit stb[100];//离职教师

int count=0;
int cnt=0;
int a=0;//记录教师数
int b=0;//记录离职教师数
char master_password[20];

//	按任意按键继续
void anykey_continue(void)
{
	puts("按任意按键继续...");
	stdin->_IO_read_ptr = stdin->_IO_read_end;
	getch();
}

//	显示提示信息几秒
void show_msg(const char* msg,float sec)
{
	printf("%s",msg);
	fflush(stdout);
	usleep(sec*1000000);
}

//学生
void list()
{
	for(int i = 0;i<100;i++)
	{
		if(stu[i].sex)	
		{
			printf("姓名:%s 性别:%s 学号:%d 语文:%d 数学:%d 英语:%d\n",stu[i].name,'w' == stu[i].sex?"女":"男",stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
		}
	}
	anykey_continue();
}

void find()
{	
	int max=0,min=100;
    double avg=0;
	printf("请输入学号:\n");
	int number;
	scanf("%d",&number);
	int i=0;
	for(i=0;i<100;i++)
	{
		if(stu[i].num==number)
		{
			printf("语文:%d数学:%d英语:%d\n",stu[i].chinese,stu[i].math,stu[i].english);
			break;
		}
	}
	if(i==99)
	{
		printf("输入有误,请重新输入\n");
		anykey_continue();
		return;
	}
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)
		{
			if(stu[i].chinese>max)
			{
				max=stu[i].chinese;
			}
			if(stu[i].chinese<min)
			{
				min=stu[i].chinese;
			}
			avg=stu[i].chinese+avg;
		}
	}
	printf("语文 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
	 max=0;
	 min=100;
	 avg=0;
	//数学
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)
		{
			if(stu[i].math>max)
			{
				max=stu[i].math;
			}
			if(stu[i].chinese<min)
			{
				min=stu[i].math;
			}
			avg=stu[i].math+avg;
		}
	}
	printf("数学 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
	//英语 
	max=0;
	min=100;
	avg=0;
	for(int i=0;i<100;i++)
	{
		if(stu[i].english)
		{
			if(stu[i].english>max)
			{
				max=stu[i].english;
			}
			if(stu[i].english<min)
			{
				min=stu[i].english;
			}
			avg=stu[i].english+avg;
		}
	}
	printf("英语 最高分: %d 最低分:%d 平均分:%f\n",max,min,avg/100);
	anykey_continue();
}

void change()
{
	printf("请输入你的学号:\n");
	int number;
	scanf("%d",&number);
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)
		{
			if(stu[i].num==number)
			{
				printf("请输入重置后的密码");
				char a[20]={};
				scanf("%s",a);
				strcpy(stu[i].password,a);
				printf("重置成功!\n");
				anykey_continue();
				return;
			}
			else
			{
				printf("查无此人,检查查询条件\n");
				anykey_continue();
				return;
			}
		}	
	}
}
//教师
void add()
{
	int a;
	printf("请输入添加的学生个数:\n");
	scanf("%d",&a);
	for(int i=0;i<a;i++)
	{
		int j=0;
		while(stu[j].sex) j++;
		printf("请输入学生姓名性别学号:\n");
		scanf("%s%s%d",stu[j].name,&stu[j].sex,&stu[j].num);
		cnt++;
		anykey_continue();
	}
}


void del()
{
	printf("请输入要删除学生姓名:\n");
	char key[20] = {};
	scanf("%s",key);
	for(int i = 0; i<100 ;i++)
	{
		if(stu[i].sex)	
		{
			if(!strcmp(key,stu[i].name))
			{
				printf("删除%s %s %d成功\n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num);
				int j=0;
				while(str[j].sex) j++;
				strcpy(str[j].name,stu[i].name);
				strcpy(&str[j].sex,&stu[i].sex);
				//strcpy(&str[j].num,&stu[i].num);
				str[j].num=stu[i].num;
				stu[i].sex = 0;
				cnt--;
				anykey_continue();
				return;
			}
		}
	}
	show_msg("没找到该学生,检查删除条件",1.5);
	
}
void found()
{
	char name[20];
	printf("请输入要查询的姓名:\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)
		{
			if(!strcmp(stu[i].name,name))
			{
				printf("%s %s %d \n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num);
				anykey_continue();
				return;
			}
		}
	}
	printf("查无此人\n");
	anykey_continue();	
}
void modify()
{
	char key[20] = {};
	printf("请输入要修改的学生姓名:\n");
	scanf("%s",key);
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)	
		{
			if(!strcmp(key,stu[i].name))
			{
				printf("请重新输入该学生姓名 性别 学号:\n");
				scanf("%s%s%d",stu[i].name,&stu[i].sex,&stu[i].num);
				printf("修改成功\n");
				anykey_continue();
				return;
			}
		}
	}
	show_msg("没找该学生,检查查询条件",1.5);
}
void input()
{
	int a;
	printf("请输入录入的学生个数:\n");
	scanf("%d",&a);
	for(int i=0;i<a;i++)
	{
		char name[20]={};
		printf("请输入录入学生的姓名\n");
		scanf("%s",name);
		for(int j=0;j<100;j++)
		{
			if(!strcmp(stu[j].name,name))
			{
				printf("请输入成绩语文数学英语:\n");
				scanf("%d%d%d",&stu[j].chinese,&stu[j].math,&stu[j].english);
				printf("录入成功\n");
				anykey_continue();
			}
		}
	}
}
void reset()
{
	char name[20];
	printf("请输入您想重置的学生姓名:\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(!strcmp(stu[i].name,name))
		{
			printf("请输入重置后的密码");
			char a[10];
			scanf("%s",a);
			strcpy(stu[i].password,a);
			printf("重置成功!\n");
			anykey_continue();
			return;
		}
		else
		{
			printf("没找该学生,检查查询条件\n");
			anykey_continue();
			return;
		}
	}
}
void online(void)
{
	for(int i = 0;i<100;i++)
	{
		if(stu[i].sex)	
		{
			printf("%s %s %d %d %d %d\n",stu[i].name,'w'==stu[i].sex?"女":"男",stu[i].num,stu[i].chinese,stu[i].math,stu[i].english);
		}
	}
	anykey_continue();
}

void leave()
{
	for(int i=0;i<100;i++)
	{
		if(str[i].sex)
		{
			printf("%s %s %d\n",str[i].name,'w'==str[i].sex?"女":"男",str[i].num);
		}
	}
	anykey_continue();
}
//校长
void chongzhi_a(void)//重置自己的密码
{
		printf("请输入重置后的密码:\n");
		scanf("%s",master_password);
		printf("设置成功,请重新登录!\n");
		anykey_continue();
}
void chongzhi_j(void)//重置教师的密码
{
	char name[20];
	printf("请输入需要重置的教师姓名:\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(!strcmp(name,ste[i].name))
		{
			printf("请输入重置后的教师的密码\n");
			ste[i].lock=0;
			char a[20];
			scanf("%s",a);
			strcpy(ste[i].password,a);
			printf("重置成功\n");
			anykey_continue();
			return;
		}
		else 
		{
			printf("查无此人,检查查询条件\n");
			anykey_continue();
			return;
		}
	}
}
void tianjia_js(void)//添加教师
{
	for(int i=0;i<100;i++)
	{
		if(!ste[i].sex)
		{
			printf("请输入要添加的教师的姓名性别工号\n");
			scanf("%s%s%d",ste[i].name,&ste[i].sex,&ste[i].num);
			a++;
			printf("添加成功\n");
			anykey_continue();
			return;
		}
	}
	printf("人数已满,请升级\n");
	anykey_continue();
}
void shanchu_js(void)//删除教师
{
	char name[20]={};
	printf("请输入删除的教师的姓名\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(!strcmp(name,ste[i].name))
		{
			printf("删除成功\n");
			int j=0;
			while(stb[j].sex) j++;
			strcpy(stb[j].name,ste[i].name);
			strcpy(&stb[j].sex,&ste[i].sex);
			//strcpy(&stb[j].num,&ste[i].num);
			stb[j].num=ste[i].num;
			ste[i].sex=0;
			a--;
			anykey_continue();
			return;
		}
	}
	printf("查无此人,检查查询条件\n");
	anykey_continue();
}
void xianshi_zxjs(void)//显示所有在校教师
{
	for(int i=0;i<100;i++)
	{
		if(ste[i].sex)
		{
			printf("%s %s %d\n",ste[i].name,'w'==ste[i].sex?"女":"男",ste[i].num);
			
		}
	}
	anykey_continue();
	return;
}
void xianshi_txjs(void)//显示所有退休教师
{
	for(int i=0;i<100;i++)
	{
		if(stb[i].sex)
		{
			printf("%s %c %d\n",stb[i].name,stb[i].sex,stb[i].num);
		}
	}
	anykey_continue();
	return;
}
void master(void)
{
	int cnt=0;
	char password[20];
	if(0 == master_password[0])
	{
		printf("这是您第一次登录,请设置您的密码:\n");
		scanf("%s",master_password);
		printf("设置成功,请重新登录!\n");
		anykey_continue();
	}
	else
	{
		while(cnt<3)
		{
			printf("请输入您的密码:\n");
			scanf("%s",password);
			if(!strcmp(password,master_password))
			{
				printf("密码正确!\n");
				anykey_continue();
				for(;;)
				{
					system("clear");
					printf("-------------------------------\n");
					printf("   1、重置密码\n");
					printf("-------------------------------\n");
					printf("   2、重置教师密码\n");
					printf("-------------------------------\n");
					printf("   3、添加教师\n");
					printf("-------------------------------\n");
					printf("   4、删除教师\n");
					printf("-------------------------------\n");
					printf("   5、显示所有在职教师\n");
					printf("-------------------------------\n");
					printf("   6、显示所有离职教师\n");
					printf("-------------------------------\n");
					printf("   7、退出管理员模式\n");
					printf("-------------------------------\n");
					switch(getch())
					{
						case '1': chongzhi_a();break;//重置自己的密码
						case '2': chongzhi_j();break;//重置教师的密码
						case '3': tianjia_js();break;//添加教师
						case '4': shanchu_js();break;//删除教师
						case '5': xianshi_zxjs();break;//显示所有在校教师
						case '6': xianshi_txjs();break;//显示所有退休教师
						case '7':return;
					}
				}
			}
			else
			{	
				printf("密码错误,请重试!\n");
				cnt++;
				anykey_continue();
			}
		}
		printf("你已三次输错密码,请想清楚后重试\n");
		anykey_continue();
	}
}


void teacher()
{
	int cnt=0;
	char name[10];
	char password[7];
	printf("请输入您的姓名\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(ste[i].sex)
		{
			if(!strcmp(ste[i].name,name))
			{
				if(ste[i].lock==1)
				{
					printf("帐号已锁定,请解锁\n");
					anykey_continue();
					return;
				}
				if(ste[i].password[0])
				{
					while(cnt<3)
					{
						printf("请输入您的密码\n");
						scanf("%s",password);
						if(!strcmp(password,ste[i].password))
						{
							printf("密码正确!\n");
							for(;;)
							{
								system("clear");
								printf("-------------------------------\n");
								printf("1、添加学生\n");
								printf("-------------------------------\n");
								printf("2、删除学生\n");
								printf("-------------------------------\n");
								printf("3、查找学生\n");
								printf("-------------------------------\n");
								printf("4、修改学生信息\n");
								printf("-------------------------------\n");
								printf("5、录入学生成绩\n");
								printf("-------------------------------\n");
								printf("6、重置学生密码\n");
								printf("-------------------------------\n");
								printf("7、显示所有在校学生信息\n");
								printf("-------------------------------\n");
								printf("8、显示所有退出学生信息\n");
								printf("-------------------------------\n");
								printf("0、退出系统\n");
								printf("-------------------------------\n");
								switch(getch())
								{
									case '1':add();break;
									case '2':del();break;
									case '3':found();break;
									case '4':modify();break;
									case '5':input();break;
									case '6':reset();break;
									case '7':online();break;
									case '8':leave();break;
									case '0':return;
								}
							}
						}
						else
						{
							printf("密码错误!\n");
							cnt++;
						}
					}
					ste[i].lock=1;
					printf("帐号已锁定,请解锁\n");
					anykey_continue();
					return;
				}	
				else
				{
					printf("这是您第一次登录,请设置您的密码!:\n");
					scanf("%s",ste[i].password);
					printf("设置成功!请重新登录!\n");
					anykey_continue();
					return;
				}
			}	
		}
	}
	//若直至退出循环仍未找到该用户名,则此人尚未录入
	printf("查无此人!\n");
	anykey_continue();
	
}
void sTudent()
{
	int cnt=0;
	char name[20];
	char password[7];
	printf("请输入您的姓名\n");
	scanf("%s",name);
	for(int i=0;i<100;i++)
	{
		if(stu[i].sex)
		{
			if(!strcmp(stu[i].name,name))
			{
				if(stu[i].lock==1)
				{
					printf("帐号已锁定,请解锁\n");
					anykey_continue();
					return;
				}
				if(stu[i].password[0])
				{
					while(cnt<3)
					{
						printf("请输入您的密码\n");
						scanf("%s",password);
						if(!strcmp(password,stu[i].password))
						{
							printf("密码正确!\n");
							for(;;)
							{
								system("clear");
								printf("-------------------------------\n");
								printf("   1、查询成绩\n");
								printf("-------------------------------\n");
								printf("   2、修改密码\n");
								printf("-------------------------------\n");
								printf("   3、查询个人信息\n");
								printf("-------------------------------\n");
								printf("   0、退出系统\n");
								printf("-------------------------------\n");
								switch(getch())
								{
									case '1':find();  break;
									case '2':change();break;
									case '3':list();break;
									case '0':return ;
								}
							}
						}
						else
						{
							printf("密码错误!\n");
							cnt++;
						}
					}
					printf("帐号已锁定,请解锁\n");
					stu[i].lock=1;
					anykey_continue();
					return;
				}	
				else
				{
					printf("这是您第一次登录,请设置您的密码!:\n");
					scanf("%s",stu[i].password);
					printf("设置成功!请重新登录!\n");
					anykey_continue();
					return;
				}
			}	
		}
	}
	//若直至退出循环仍未找到该用户名,则此人尚未录入
	printf("查无此人!\n");
	anykey_continue();
}


int main(int argc,const char* argb[])
{
	FILE *fp;
	fp=fopen("data.txt","r");
	fread(master_password,sizeof(master_password),1,fp);
	fread(ste,sizeof(ste),1,fp);
	fread(stb,sizeof(stb),1,fp);
	fread(stu,sizeof(stu),1,fp);
	fread(str,sizeof(str),1,fp);
	fclose(fp);
	for(;;)
	{
		system("clear");
		printf("-----------------------------\n");
		printf("   欢迎使用学生管理系统!\n");
		printf("-----------------------------\n");	
		printf("     1、校长系统\n");
		printf("-----------------------------\n");
		printf("     2、教师系统\n");
		printf("-----------------------------\n");
		printf("     3、学生系统\n");
		printf("-----------------------------\n");
		printf("     0、退出系统\n");
		printf("-----------------------------\n");
		switch(getch())
		{
			case '1':master();break;
			case '2':teacher();break;
			case '3':sTudent();break;
			case '0':
				fp=fopen("data.txt","w");
				fwrite(master_password,sizeof(master_password),1,fp);
				fwrite(ste,sizeof(ste),1,fp);
				fwrite(stb,sizeof(stb),1,fp);
				fwrite(stu,sizeof(stu),1,fp);
				fwrite(str,sizeof(str),1,fp);
				fclose(fp);
			return 0;
		}
	}
}

更多详细内容请访问:https://gitee.com/sunny-xsm/sunny/tree/master/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值