2021-07-19学生成绩管理系统中的教师模块

这个系统主要考察的是文件的读写应用,我写的比较简单,只有最基本的功能
其中包括:
1、第一次登录强制修改密码。
2、添加学生(学生的学号自动生成)
单个添加
从文件批量导入
3、删除学生
输入两次学号确定
删除的学生要记录保存在已退学的文件中
4、查找学生
按姓名查找
按学号查找
5、修改学生信息
修改学生基础信息
修改学生成绩
6、录入学生成绩
单个录入
批量导入
7、重置学生密码
8、解锁学生
9、显示所有在校学生信息
10、显示所有退出学生信息
11、三次密码错误锁定帐号,由校长解锁
利用比较多的几个功能把他封装成函数可以减少代码量
读取学生文件信息:

void read_stu(void)//读取学生信息
{
	FILE* frp=fopen("student.txt","r");
	int i = 0;
	for(i=0;i<100;i++)
	{   
			fscanf(frp,"%s %s %d %s %d %d %f %f %f\n",stu[i].name,stu[i].sex,&stu[i].id,stu[i].passwd,&stu[i].school,&stu[i].unlock,&stu[i].chinese,&stu[i].math,&stu[i].english);
	}//从左到右依次为姓名,性别,学号,密码,是否在校,账号是否锁定,语文成绩,数学成绩,英语成绩
}
void read_tch(void)//读取教师信息
{
	FILE* frp=fopen("teacher.txt","r");
	int i=0;
	for(i=0;i<100;i++)
	{
		fscanf(frp,"%d %s %s %s %d %d\n",&ls[i].id,ls[i].name,ls[i].sex,ls[i].passwd,&ls[i].job,&ls[i].lock);从左到右依次为教师工号,教师姓名,教师性别,教师密码,教师在职标志位,教师账号是否锁定,
	}
}

然后是写入文件,有重写和末尾写入两种方式:

void rewrite_tch(void)//重写教师信息
{
	FILE* fwp=fopen("teacher.txt","w");//w权限,清空重写文件
	int i=0;
	for(i=0;i<100;i++)
	{  
		if(ls[i].id)
		fprintf(fwp,"%d %s %s %s %d %d\n",ls[i].id,ls[i].name,ls[i].sex,ls[i].passwd,ls[i].job,ls[i].lock);
	}   
}
//学生重写和教师重写就差变量就不放出来占地方了,放一个从末尾写入学生信息的函数
void write_stu(int i)//末尾写入文件
{
	FILE* fap=fopen("student.txt","a");
			fprintf(fap,"%s %s %d %s %d %d %4.1f %4.1f %4.1f\n",stu[i].name,stu[i].sex,stu[i].id,stu[i].passwd,stu[i].school,stu[i].unlock,stu[i].chinese,stu[i].math,stu[i].english);
}
//在linux系统中若要替换全文的变量名可以用:%s/修改内容/新内容/
//但是这个东西不智能,比如%s/in/un/他会把include改成unclude,

然后是教师登录函数:

void land(void)//登录功能
{
	read_tch();
	printf("请输入教师账号:\n");
	int id,i,j=1;
	char x[20];
	scanf("%d",&id);
	for(i=0;i<100;i++)
	{
		if(id==ls[i].id&&!ls[i].lock)
		{
			printf("请输入密码:\n");
			scanf("%s",x);
			for(j=0;j<4;j++)
			{
				if(!strcmp(x,ls[i].passwd)&&!strcmp(ls[i].passwd,"123456"))
				{
					printf("首次登录请修改密码\n");
					scanf("%s",ls[i].passwd);
					while(!strcmp(ls[i].passwd,"123456"))
					{
						printf("密码不能与初始密码相同修改失败,请重新输入\n");
						scanf("%s",ls[i].passwd);
					}
					meun();
					rewrite_tch();
				}
				else if(!strcmp(x,ls[i].passwd))
				{
					meun();//菜单函数
				}
				else if(j<3&&strcmp(x,ls[i].passwd))
					{
						printf("密码输入错误请重试,还有%d次机会:\n",(3-j));
						scanf("%s",x);
					}
				else
				{
					ls[i].lock=1;
					printf("输入3次错误,账号锁定,请联系校长解锁。\n");
					rewrite_tch();
				}
			}
		}
		if(id==ls[i].id&&ls[i].lock)
		{
			printf("该账号已锁定,无法登录\n");
		}
		
	}
	if(j)
		printf("账号输入有误\n");

}

大致上教师登录系统就是这样,而修改密码功能函数在这其中也有,就不单独发出来了
就按上面的功能首先是添加功能:

void add_stu(void)//单个添加学生
{
	read_stu();
	printf("%s",stu[0].name);
	int i=0;
	for(i=0;i<100;i++)
	{
		if(0==stu[i].id)
		{
			printf("%d\n",i);
			printf("请输入学生姓名:\n");
			scanf("%s",stu[i].name);
			getchar();
			printf("请输入学生性别:\n");
			scanf("%s",stu[i].sex);
			getchar();
			stu[i].id=i+1000000;//学号从小到大自动生成
			strcat(stu[i].passwd,"123456");//初始密码默认123456
			stu[i].school=1;//在校标志位非0为在校
			stu[i].unlock=1;//锁定标志位非0为正常未锁
			stu[i].chinese=0;//初始成绩均为0
			stu[i].math=0;
			stu[i].english=0;
			printf("添加学生成功:%s %s %d %s \n",stu[i].name,stu[i].sex,stu[i].id,stu[i].passwd);
			write_stu(i);
			break;
		}
		if(i==101)
			printf("系统已满\n");
	}	
}
void add_fstu(char* file,int s)//按文件批量添加
{
	read_stu();
	FILE* path;
	FILE* fap=fopen("student.txt","a");
	int i,j;
	path = fopen(file,"r");
	for(i=0;i<100;i++)
	{
			fscanf(path,"%s %s",stuf[i].name,stuf[i].sex);
	}
	for(i=0;i<100;i++)
	{
		if(0==stu[i].id)
		{		
			for(j=0;j<s;j++)
			{
					stuf[j].id=i+1000000;
					i++;
					strcat(stuf[j].passwd,"123456");
					stuf[j].school=1;
					stuf[j].unlock=1;
					stuf[j].unlock=1;
					stuf[j].chinese=0;
					stuf[j].math=0;
					stuf[j].english=0;
					printf("添加学生成功:%s %s %d %s \n",stuf[j].name,stuf[j].sex,stuf[j].id,stuf[j].passwd);
					fprintf(fap,"%s %s %d %s %d %d %4.1f %4.1f %4.1f\n",stuf[j].name,stuf[j].sex,stuf[j].id,stuf[j].passwd,stuf[j].school,stuf[j].unlock,stuf[j].chinese,stuf[j].math,stuf[j].english);
			}
			break;
		}
	}
	if(i==101)
		printf("系统已满\n");
}
void add(void)
{
	char s[20];
	int x,j;
	printf("请输入命令:\n 1:单个导入\n 2:批量导入\n");
	scanf("%d",&x);
	if(1==x)
		add_stu();
	else if(2==x)
	{	
		printf("请输入要导入的文件名:\n");
		scanf("%s",s);
		printf("请输入要导入个数:\n");
		scanf("%d",&j);
		add_fstu(s,j);
	}
	else
	{
		printf("命令错误\n");
	}
}

删除命令:

void del_stu(void)//删除学生,school标志位置0表示离校
{
	read_stu();
	FILE* ufap = fopen("ustudent.txt","a");
	printf("请输入要删除学生学号:");
	int id1,id2;
	scanf("%d",&id1);
	int i,j=1;
	for(i=0;i<100;i++)
	{
		if(id1==stu[i].id)
		{
			printf("请再次输入学号以确定");
			scanf("%d",&id2);
			if(id1==id2)
			{
				stu[i].school=false;
				j=0;
				printf("成功删除:%s\n",stu[i].name);
				fprintf(ufap,"%s %s %d %s %d\n",stu[i].name,stu[i].sex,stu[i].id,stu[i].passwd,stu[i].school,stu[i]);
				break;
			}
			else
				printf("输入错误\n");
		}
	}
	rewrite_stu();

	if(j)
		printf("查无此人\n");
}

查找功能:

void seek_stu (void)//按姓名查找,模糊查询
{
	read_stu();
	printf("请输入要查询学生姓名\n");
	char x[12]={};
	scanf("%s",x);
	getchar();
	int i,j=1;
	for(i=0;i<100;i++)
	{
		if(strstr(stu[i].name,x)&&stu[i].school)
		{
			printf("已找到学生:");
			printf("%s %s %d\n",stu[i].name,stu[i].sex,stu[i].id);
		    j=0;

		}
	}

	if(j)
		printf("找不到此人\n");
	
}
void seek_fstu (void)//按学号查找精确查询
{
	read_stu();
	printf("请输入要查询学生的学号\n");
	int id;
	scanf("%d",&id);
	int i,j=1;
	for(i=0;i<100;i++)
	{
		if(x==stu[i].id&&stu[i].school)
		{
			printf("已找到学生:");
			printf("%s %s %d\n",stu[i].name,stu[i].sex,stu[i].id);
			j=0;
		}
	}
	if(j)
		printf("找不到此人\n");
}
void seek(void)
{
	char s[20];
	int x,j;
	printf("请输入命令:\n 1:按姓名查找\n 2:按学号查找\n");
	scanf("%d",&x);
	if(1==x)
		seek_stu();
	else if(2==x)
		seek_fstu();   
	else
	{   
		printf("命令错误\n");
	}
}

修改功能分别修改学生基本信息和成绩两项功能差不多就写一起了。

void mod_stu(void)//修改
{
	read_stu();
	int i=0,j=1;
	printf("请输入要修改信息的学生学号");
	int x;
	scanf("%d",&x);
	for(i=0;i<100;i++)
	{
		if(x==stu[i].id&&stu[i].school)
		{
			printf("已找到请输入修改内容\n");
			printf("请输入姓名:");
			scanf("%s",stu[i].name);
			printf("请输入性别:");
			scanf("%s",stu[i].sex);
			getchar();
			printf("修改成功:%s %s\n",stu[i].name,stu[i].sex);
			j=0;
			break;
		}
	}
	rewrite_stu();
	if(j)
		printf("查无此人\n");
}
void mods_stu(void)//修改成绩
{
	read_stu();
	int i=0,j=1;
	printf("请输入要修改学生的学号");
	int x;
	scanf("%d",&x);
	getchar();
	for(i=0;i<100;i++)
	{
		if(x==stu[i].id&&stu[i].school)
		{	
			printf("已找到请输入修改内容\n");
			printf("请输入语文成绩:");
			scanf("%f",&stu[i].chinese);
			printf("请输入数学成绩:");
			scanf("%f",&stu[i].math);
			printf("请输入英语成绩:");
		    scanf("%f",&stu[i].english);
			getchar();
			printf("修改学生成功:%4.1f %4.1f %4.1f\n",stu[i].chinese,stu[i].math,stu[i].english);
			j=0;
			break;
		}
	}
	rewrite_stu();
	if(j)
		printf("查无此人\n");
}

录入成绩:

void ent_stu(void)//录入成绩
{
	int i=0,j=1;
	printf("请输入要登录成绩的学生学号");
	int x;
	scanf("%d",&x);
	getchar();
	for(i=0;i<100;i++)
	{

		if(x==stu[i].id&&stu[i].school)
		{
			printf("已找到请输入学生成绩\n");
			printf("请输入语文成绩:");
			scanf("%f",&stu[i].chinese);
			printf("请输入数学成绩:");
			scanf("%f",&stu[i].math);
			printf("请输入英语成绩:");
			scanf("%f",&stu[i].english);
			getchar();
			printf("修改学生成功:%4.1f %4.1f %4.1f\n",stu[i].chinese,stu[i].math,stu[i].english);
			j=0;
			break;
		}
	}
	rewrite_stu();
	if(j)
		printf("查无此人\n");
}
void ent_fstu(char* file)
{
	read_stu();
	FILE* path;
	int i,j;
	path = fopen(file,"r");
	for(i=0;i<100;i++)
		fscanf(path,"%d %f %f %f",&stuf[i].id,&stuf[i].chinese,&stuf[i].math,&stuf[i].english);
	for(i=0;i<100;i++)
	{
		if(stu[i].id)//判断此人是否存在
		{
			for(j=0;j<100;j++)
			{
				if(stuf[j].id==stu[i].id)
				{
					stu[i].chinese=stuf[j].chinese;
					stu[i].math=stuf[j].math;
					stu[i].english=stuf[j].english;
					break;
				}
			}
		}
	}
	rewrite_stu();
}
void entall(void)
{
	printf("请输入功能\n 1:单个录入成绩\n 2:按文件批量录入\n");
	char x[20];
	int a,i,j;
	scanf("%d",&a);
	if(a==1)
		ent_stu();
	else if(a==2)
	{
		printf("请输入文件名:\n");
		scanf("%s",x);
		ent_fstu(x);
	}
	else
		printf("命令错误\n");
}

学生密码重置功能:

void reset_stu(void)
{
	int i;
	read_stu();
	printf("请输入要重置学生的学号:\n");
	int x;
	scanf("%d",&x);
	for(i=0;i<100;i++)
	{	
		if(x==stu[i].id&&stu[i].school)//判断id以及是否在校
		{
			strcpy(stu[i].passwd,"123456");
		}
	}
	rewrite_stu();
}

学生账号解锁函数:

void ulock_stu(void)
{
	int i;
	read_stu();
	printf("请输入要解锁学生的学号:\n");
	int x;
	scanf("%d",&x);
	for(i=0;i<100;i++)
	{   
		if(x==stu[i].id&&stu[i].school)
		{
			stu[i].unlock=1;
		}
	}   
	rewrite_stu();
}

显示在校学生:

void list_stu(void)
{
	read_stu();
	int i;
	for(i=0;i<100;i++)
	{   
		if(stu[i].school)
		{   
			printf("%s %s %d\n",stu[i].name,stu[i].sex,stu[i].id);
		}   
	} 	
	if(i==100)
	printf("显示完毕\n");
}

显示离校学生:

void list_unstu(void)
{
	read_stu();
	int i;
	for(i=0;i<100;i++)
	{
		if(!stu[i].school&&stu[i].id)
		{
			printf("%s %s %d\n",stu[i].name,stu[i].sex,stu[i].id);
		}
		
	}
	if(i==100)
		printf("显示完毕\n");
}

meun函数:

void meun(void)
{
	char x;  
	for(;;)
	{
		printf("a:添加学生\n");
		printf("b:删除学生\n");
		printf("c:查询在校学生\n");
		printf("d:修改在校学生\n");
		printf("e:修改在校学生成绩\n");
		printf("f:录入学生成绩\n");
		printf("g:重置学生密码\n");
		printf("h:解锁学生账号\n");
		printf("i:显示在校学生\n");
		printf("j:显示离校学生\n");
		printf("k:退出\n");
		scanf("%c",&x);
		switch(x)
		{
			case 'a':add();
			break;
			case 'b':del_stu();
			break;
			case 'c':seek();
			break;
			case 'd':mod_stu();
			break;
			case 'e':mods_stu();
			break;
			case 'f':entall();
			break;
			case 'g':reset_stu();
			break;
			case 'h':ulock_stu();
			break;
			case 'i':list_stu();	
			break;
			case 'j':list_unstu();
			break;
			default:return ;
		}  
	}
}

以上就是这些,基本上meun函数就能查证所以函数,头文件那些就不放出来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值