结构体和文件读写----------学生管理系统

学生管理系统项目总结分析(附代码)

这是第一次和团队完成一个小项目,代码又臭又长,而且功能未完全实现,操作方式不统一,限制条件不充分,在过多输入时会发生段错误,仅供参考。
后期我们团队会优化代码减少代码量。让代码更加简洁,方便阅读。本次只是上传代码,希望大家多多批评提出建议 感谢!!!

界面函数

//学生 教师 管理员 界面程序
#include
#include
#include
#include
#include"tool.h"
#include "interface.h"
#include"teacher.h"
#include"admin.h"
//主界面显示
void interface_enum(void)
{
	printf("--------------主  界  面---------------\n\n");
	printf("          1.学   生   登   录                  \n\n");
	printf("          2.教   师   登   录                  \n\n");
	printf("          3.管  理  员 登  录                  \n\n");
	printf("          4.退   出   系   统                   \n\n");
	printf("------------无敌工作室出品------------\n");
}
//学生界面显示
void student_enum(void)
{
	printf("--------------同学您好,欢迎登录学生信息管理系统----------\n\n");
    printf("                   1.查 询 成 绩                      \n\n");
	printf("                   2.修 改 密 码                      \n\n");
	printf("                   3.查看个人信息                      \n\n");
	printf("                   4.返回首页面                        \n\n");
}
//教师界面显示
void teacher_enum(void)
{
   printf("--------------尊敬的老师欢迎登录学生管理系统----------- \n\n");
   printf("                     1.添 加 学 生                      \n\n");
   printf("                     2.删 除 学 生                      \n\n");
   printf("                     3.查 找 学 生                      \n\n");
   printf("                     4.修改学生信息                     \n\n");
   printf("                     5.录入学生成绩                     \n\n");
   printf("                     6.重置学生密码                     \n\n");
   printf("                     7.显示所有在校学生信息             \n\n");
   printf("                     8.显示所有退学学生信息             \n\n");
   printf("                     9.给学生解锁                      \n\n");
   printf("                     0.返回主页面                      \n\n");
}
//管理员界面显示
void admin_enum(void)
{
   printf("--------------尊敬的管理员欢迎登录学生管理系统----------- \n\n");
   printf("                     1.添 加 教 师                     \n\n");
   printf("                     2.删 除 教 师                     \n\n");
   printf("                     3.修改教师密码                     \n\n");
   printf("                     4.修改管理员密码                     \n\n");
   printf("                     5.显示所有在职教师                  \n\n");
   printf("                     6.显示所有离职教师                   \n\n");
   printf("                     7.给教师解锁                       \n\n");
   printf("                     8.返回主页面                       \n\n");
}
//学生登录
void student_in(void)
{
	int miscount=0;//错误次数
	s_count=0;//人数
	FILE *fwwp = fopen("student.txt","r");
	if(NULL==fwwp)
	{
		printf("文件打开失败!!!");
		return;
	}
	while(!feof(fwwp))
	{
		fscanf(fwwp,"%s %c %s %s %d %d %d %d %d\n",stu[s_count].name,&stu[s_count].sex,stu[s_count].number,stu[s_count].password,&stu[s_count].chinese,&stu[s_count].math,&stu[s_count].english,&stu[s_count].landing,&stu[s_count].Account_status);
		s_count++;
	}
	fclose(fwwp);
	char number[T_NUMBER];//学号
	char password[T_PASS];//密码
	printf("请输入你的学号:");
	scanf("%s",number);
	for(int i=0;i<S_COUNT;i++)
	{
		if(strcmp(stu[i].number,number)==0&&stu[i].sex!=0)//判断学号是否存在
		{
			if(stu[i].Account_status==0)//判断锁定
			{
				printf("账号已锁定,请联系老师解锁!!");
				anykey_continue();
				return;
			}
			while(true)
			{
				printf("请输入你的密码:");
				scanf("%s",password);
				if(strcmp(password,stu[i].password)==0)
				{
					printf("登录成功!!!!");
					s=stu[i];
                    s.sum=s.chinese+s.math+s.english;
					s_position=i;//结构体位置
					anykey_continue();
					if(s.landing==0)//登陆次数
					{
						printf("\n第一次登录请更改你的密码:");
						while(true)
						{
							scanf("%s",password);
							if(islegal_pass(password))
							{
								strcpy(s.password,password);
								printf("修改成功!!");
								s.landing=1;
								anykey_continue();
								break;						
							}
							else
							{
								printf("输入有误请重新输入!!!\n");
								anykey_continue();
							}
						}				
					}
					student_show();
					return;
				}
				else
				{
					miscount++;
					if(miscount>=3)
					{
						stu[i].Account_status=0;
						printf("密码错误超过3次,账号已锁定,请联系教师解锁!!");
						FILE *fwp = fopen("student.txt","w");
						if(NULL==fwp)
						{
							printf("文件打开失败!!!");
							return;
						}
						for(int i=0;i<S_COUNT;i++)
						{
							if(stu[i].sex!=0)
							{
								fprintf(fwp,"%s %c %s %s %d %d %d %d %d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].password,stu[i].chinese,stu[i].math,stu[i].english,stu[i].landing,stu[i].Account_status);
							}//再次更新
						}
						fclose(fwp);
						anykey_continue();
						return;
					}
				}
			}
		}
	}
}

//学生操作
void student_show(void)
{
	system("clear");
	while(true)
	{
		system("clear");
		student_enum();
		switch(getch())
		{
			case '1':sorce();
			break;
			case '2':Pass();
			break;
			case '3':Allmessage();
			break;
			case '4':
			{
				stu[s_position]=s;
				FILE *fwp = fopen("student.txt","w");
				if(NULL==fwp)
				{
					printf("文件打开失败!!!");
					return;
				}
				for(int i=0;i<S_COUNT;i++)
				{
					if(stu[i].sex!=0)
					fprintf(fwp,"%s %c %s %s %d %d %d %d %d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].password,stu[i].chinese,stu[i].math,stu[i].english,stu[i].landing,stu[i].Account_status);
				}
				fclose(fwp);
				return;
			}
			default:printf("输入有误,请重新输入!!!");
			break;
		}
	}
}

//教师登录
void teacher_in(void)
{
	int miscount=0;
	s_count=0;
	t_count=0;
	FILE *frp = fopen("teacher.txt","r");
	if(NULL==frp)
	{
		printf("文件打开失败!!!");
		return;
	}
	while(!feof(frp))
	{
		fscanf(frp,"%s %c %s %s %d %d\n",tea[t_count].name,&tea[t_count].sex,tea[t_count].number,tea[t_count].password,&tea[t_count].landing,&tea[t_count].Account_status);
		t_count++;
	}
	fclose(frp);

	FILE *fwwp = fopen("student.txt","r");
	if(NULL==fwwp)
	{
		printf("文件打开失败!!!");
		return;
	}
	while(!feof(fwwp))
	{
		fscanf(fwwp,"%s %c %s %s %d %d %d %d %d\n",stu[s_count].name,&stu[s_count].sex,stu[s_count].number,stu[s_count].password,&stu[s_count].chinese,&stu[s_count].math,&stu[s_count].english,&stu[s_count].landing,&stu[s_count].Account_status);
		s_count++;
	}
	fclose(fwwp);
	char number[T_NUMBER];
	char password[T_PASS];
	printf("请输入你的工号:");
	scanf("%s",number);
	for(int i=0;i<T_COUNT;i++)
	{
		if(strcmp(tea[i].number,number)==0&&tea[i].sex!=0)
		{
			if(tea[i].Account_status==0)
			{
				printf("账号已锁定,请联系管理员解锁!!");
				anykey_continue();
				return;
			}
			while(true)
			{
				printf("请输入你的密码:");
				scanf("%s",password);
				if(strcmp(password,tea[i].password)==0)
				{
					printf("登录成功!!!!");
					t=tea[i];
					t_position=i;
					anykey_continue();
					if(t.landing==0)
					{
						printf("\n第一次登录请更改你的密码:");
						while(true)
						{
							scanf("%s",password);
							if(islegal_pass(password))
							{
								strcpy(t.password,password);
								printf("修改成功!!");
								t.landing=1;
								anykey_continue();
								break;						
							}
							else
							{
								printf("输入有误请重新输入!!!\n");
								anykey_continue();
							}
						}				
					}
					teacher_show();
					return;
				}
				else
				{
					miscount++;
					if(miscount>=3)
					{
						tea[i].Account_status=0;
						printf("密码错误超过3次,账号已锁定,请联系管理员解锁!!");
						FILE *fwp = fopen("teacher.txt","w");
						if(NULL==fwp)
						{
							printf("文件打开失败!!!");
							return;
						}
						for(int i=0;i<T_COUNT;i++)
						{
							if(tea[i].sex!=0)
							{
								fprintf(fwp,"%s %c %s %s %d %d\n",tea[i].name,tea[i].sex,tea[i].number,tea[i].password,tea[i].landing,tea[i].Account_status);
							}
						}
						fclose(fwp);
						anykey_continue();
						return;
					}
				}
			}
		}
	}
}

//教师操作
void teacher_show(void)
{
	system("clear");
	while(true)
	{
		system("clear");
		teacher_enum();
		switch(getch())
		{
			case '1':t_add_stu();
			anykey_continue();
			break;
			case '2':t_delete_stu();
			anykey_continue();
			break;
			case '3':t_psearch_stu();
			anykey_continue();
			break;
			case '4':t_modify_stu();
			anykey_continue();
			break;
			case '5':t_import_stu_score();
			anykey_continue();
			break;
			case '6':t_reset_stu_pass();
			anykey_continue();
			break;
			case '7':t_show_stu();
			anykey_continue();
			break;
			case '8':t_show_drop_stu();
			anykey_continue();
			break;
			case '9':t_unlock();
			break;
			case '0':
			{
				tea[t_position]=t;
				FILE *fwp = fopen("student.txt","w");
				if(NULL==fwp)
				{
					printf("文件打开失败!!!");
					return;
				}
				FILE *fw=fopen("teacher.txt","w");
				if(NULL==fw)
				{
					printf("文件打开失败!!!");
					return;
				}
				for(int i=0;i<T_COUNT;i++)
				{
					if(tea[i].sex!=0)
					fprintf(fw,"%s %c %s %s %d %d\n",tea[i].name,tea[i].sex,tea[i].number,tea[i].password,tea[i].landing,tea[i].Account_status);
				}
				for(int i=0;i<S_COUNT;i++)
				{
					if(stu[i].sex!=0)
					fprintf(fwp,"%s %c %s %s %d %d %d %d %d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].password,stu[i].chinese,stu[i].math,stu[i].english,stu[i].landing,stu[i].Account_status);
				}
				fclose(fwp);
				fclose(fw);	
				return;
				break;
			}
			default:printf("输入有误,请重新输入!!!");
			break;
		}
	}
}

//管理员登录
void admin_in(void)
{
	t_count=0;
	char number[A_NUMBER];
	char password[A_PASS];
	printf("请输入你的账号:");
	scanf("%s",number);
	if(strcmp(adm.number,number)==0)
	{
		FILE *frp= fopen("admin.txt","r");
		if(NULL==frp)
		{
			printf("文件打开失败!!");
			return;
		}
		char passwordr[A_PASS];
		int landing;
		fscanf(frp,"%s %s %d\n",number,passwordr,&landing);
		strcpy(adm.password,passwordr);
		adm.landing=landing;
		printf("请输入你的密码:");
		scanf("%s",password);
		if(strcmp(adm.password,password)==0)
		{
			printf("登录成功!!");
			FILE *frp = fopen("teacher.txt","r");
			if(NULL==frp)
			{
				printf("文件打开失败!!!");
				return;
			}
			while(!feof(frp))
			{
				fscanf(frp,"%s %c %s %s %d %d\n",tea[t_count].name,&tea[t_count].sex,tea[t_count].number,tea[t_count].password,&tea[t_count].landing,&tea[t_count].Account_status);
				t_count++;
			}
			fclose(frp);
			anykey_continue();
			if(adm.landing==0)
			{
				printf("\n第一次登录请更改你的密码:");
				while(true)
				{
					scanf("%s",password);
					if(islegal_pass(password))
					{
						strcpy(adm.password,password);
						printf("修改成功!!");
						adm.landing=1;
						anykey_continue();
						break;						
					}
					else
					{
						printf("输入有误请重新输入!!!");
					}
				}				
			}
			admin_show();
			return;
		}
	}
	printf("密码或者账号错误!!!!");
	anykey_continue();
	return;
}

//管理员操作
void admin_show(void)
{
	system("clear");
	while(true)
	{
		system("clear");
		admin_enum();
		switch(getch())
		{
			case '1':a_add_teacher();
			break;
			case '2':a_delete_teacher();
			break;
			case '3':a_reset_password_teacher();
			break;
			case '4':a_change_password_myself();
			break;
			case '5':a_show_in_teacher();
			break;
			case '6':a_show_down_teacher();
			break;
			case '7':a_unlock();
			break;
			case '8':
			{
				FILE *fwp = fopen("teacher.txt","w");
				if(NULL==fwp)
				{
					printf("文件打开失败!!!");
					return;
				}
				FILE *fw=fopen("admin.txt","w");
				if(NULL==fw)
				{
					printf("文件打开失败!!!");
					return;
				}
				for(int i=0;i<T_COUNT;i++)
				{
					if(tea[i].sex!=0)
					fprintf(fwp,"%s %c %s %s %d %d\n",tea[i].name,tea[i].sex,tea[i].number,tea[i].password,tea[i].landing,tea[i].Account_status);
				}
				fprintf(fw,"%s %s %d",adm.number,adm.password,adm.landing);
				fclose(fwp);
				fclose(fw);	
				return;
				break;
			}
			default:printf("输入有误,请重新输入!!!");
			break;
		}
	}
}

管理员功能函数实现

#include"admin.h"
#include"tool.h"
#include"teacher.h"

Admin adm={"xixi",'m',"9527","123456",0};
//修改自己的密码
void a_change_password_myself(void)
{
	char new[A_PASS];
	while(true)
	{
		printf("请输入新的密码:");
		scanf("%s",new);
		if(islegal_pass(new))
		{
			strcpy(adm.password,new);
			printf("修改成功!!");
			anykey_continue();
			return;
		}
		else
		{
			printf("密码不合法,重新输入!!!");
			anykey_continue();
		}
	}
}

//重置自己的密码
//void a_reset_password_myself(void)
//{
//	printf("是否确定重置密码!!!!(y/n)");
//	char temp=getchar();
//	if(temp=='Y'||temp=='y')
//	{
//		strcpy(adm.password,"123456");
//		printf("初始化成功!!初始密码为123456");
//		anykey_continue();
//		return;
//	}
//}

//重置教师密码
void a_reset_password_teacher(void)
{
	char number[T_NUMBER];
	char new[T_PASS];
	printf("请输入要修改的教师的工号:");
	scanf("%s",number);
	for(int i=0;i<T_COUNT;i++)
	{
		if(strcmp(tea[i].number,number)==0&&tea[i].sex!=0)
		{
			while(true)
			{
				printf("\n请输入修改后该教师的密码:");
				scanf("%s",new);
				if(islegal_pass(new))
				{
					strcpy(tea[i].password,new);
					printf("修改成功!!!");
					anykey_continue();
					return;
				}
				else
				{
					printf("密码不合法,请重新输入!!!");
					anykey_continue();
				}
			}
		}
	}
	printf("未找到该教师,请重新确认后再进行修改!!!");
	anykey_continue();
	return;
}

//添加教师
void a_add_teacher(void)
{
	if(t_count>T_COUNT)
	{
		printf("vip可享受更多存储空间!!!");
		return;
	}
	int the_number=0;
	for(int i=0;i<T_COUNT;i++)
	{
		if(tea[i].sex==0)
		{
			the_number=i;
			break;
		}
	}
	char name[T_NAME];
	char sex;
	char number[T_NUMBER];
	printf("请输入教师姓名:");
	scanf("%s",name);
	strcpy(tea[the_number].name,name);
	printf("请输入教师性别: ");
	while(true)
	{
		scanf(" %c",&sex);
		if('w'==sex||'m'==sex)
		{
			tea[the_number].sex=sex;
			break;
		}
		printf("输入有误请重新输入!!!\n");
	}
	printf("请输入教师的工号:");
	while(true)
	{
		int f=0;
		scanf("%s",number);
		for(int i=0;i<t_count;i++)
		{
			if(strcmp(tea[i].number,number)==0)
			{
				printf("该工号已存在,请重新输入!!!\n");
				f=1;
				break;
			}
		}
		if(f==0)
		{
			strcpy(tea[the_number].number,number);
			break;
		}
	}
	printf("请输入教师的密码:");
	while(true)
	{
		char password[T_PASS];
		scanf("%s",password);
		if(islegal_pass(password))
		{
			strcpy(tea[the_number].password,password);
			break;
		}
		else
		{
			printf("密码不合法请重新输入!!!\n");
			anykey_continue();
		}
	}
	tea[the_number].landing=0;
	tea[the_number].Account_status=1;
	printf("录入成功");
	t_count++;
	anykey_continue();
}

//删除教师
void a_delete_teacher(void)
{
	char number[T_NUMBER];
	printf("请输入要删除的教师的工号:");
	scanf("%s",number);
	for(int i=0;i<T_COUNT;i++)
	{
		if(strcmp(tea[i].number,number)==0&&tea[i].sex!=0)
		{
			//文件存储离职教师的信息
			//删除离职老师的信息
			FILE *fwp = fopen("downteacher.txt","a");
			if(NULL==fwp)
			{
				printf("文件打开失败!!");
				return;
			}
			fprintf(fwp,"%s %c %s\n",tea[i].name,tea[i].sex,tea[i].number);
			fclose(fwp);
			tea[i].sex=0;
			t_count--;
			printf("删除成功!!!");
			anykey_continue();
			return;
		}
	}
	printf("未找到该老师的工号!!");
	anykey_continue();
}

//显示所有在职教师
void a_show_in_teacher(void)
{
	for(int i=0;i<T_COUNT;i++)
	{
		if(tea[i].sex!=0)
		{
			printf("姓名:%s 性别:%s 编号:%s\n",tea[i].name,tea[i].sex=='w'?"女":"男",tea[i].number);
		}
	}
	anykey_continue();
}

//显示所有离职教师
void a_show_down_teacher(void)
{
	char name[T_NAME];
	char sex;
	char number[T_NUMBER];
	FILE *frp = fopen("downteacher.txt","r");
	if(NULL==frp)
	{
		printf("文件打开失败!!");
		return;
	}
	while(!feof(frp))
	{
		fscanf(frp,"%s %c %s",name,&sex,number);
		printf("姓名:%s 性别:%s 编号:%s\n",name,sex=='w'?"女":"男",number);
	}anykey_continue();
	fclose(frp);
}

//给教师解锁
void a_unlock(void)
{
	char number[T_NUMBER];
	printf("请输入要解锁的教师工号:");
	scanf("%s",number);
	while(true)
	{
		for(int i=0;i<T_COUNT;i++)
		{
			if(strcmp(tea[i].number,number)==0)
			{
				if(tea[i].Account_status==0)
				{
					tea[i].Account_status=1;
					printf("解锁成功!!");
					anykey_continue();
					return;
				}
				else
				{
					printf("你输入的教师状态为未锁定请重新确认!!");
					anykey_continue();
					return;
				}
			}
		}
		printf("你找到工号不存在!!!");
		anykey_continue();
		return;
	}
}

主函数

#include
#include
#include"tool.h"
#include"interface.h"

int main()
{
	system("clear");
	while(true)
	{
		system("clear");
		interface_enum();
		switch(getch())
		{
			case '1':student_in();
			break;
			case '2':teacher_in();
			break;
			case '3':admin_in();
			break;
			case '4':printf("欢迎下次使用!!\n");
			anykey_continue();
			exit(0);
			break;
			default:
			printf("输入有误,请重新输入!!");
			anykey_continue();
			break;
		}
	}
	return 0;
}

学生功能函数实现

#include
#include
#include
#include
#include"student.h"
#include"tool.h"

Student stu[S_COUNT];
Student s;

int s_position=0;

int s_count=0;

void sorce(void)
{
	int ranking=1;
	Student a;
	int max=-1,min=101;
	for(int i=0;i<S_COUNT;i++)
	{
		if(stu[i].sex!=0)
		{
	 	    stu[i].sum=stu[i].math+stu[i].chinese+stu[i].english;
			if(stu[i].sum>max) max=stu[i].sum;
			if(stu[i].sum<min) min=stu[i].sum;
			if(s.sum<stu[i].sum) ranking++;
		}
	}	
	printf("1.排名 2.平均分 3.最高分 4.最低分\n");
        printf("请输入你需要查询的内容\n");
	switch(getch())
	{
		case '1':printf("\n你的排名为:%d",ranking);
		anykey_continue();
		break;
		case '2':printf("\n你的平均分为:%d",s.sum/3);
		anykey_continue();
		break;
		case '3':printf("\n最高分为:%d",max);
		anykey_continue();
		break;
		case '4':printf("\n最低分为:%d",min);
		anykey_continue();
		break;
	}
}



void Pass(void)//更改密码
{
	char pass1[S_PASS],pass2[S_PASS],pass3[S_PASS];
	for(;;)
	{
		printf("输入原密码:\n");
		scanf("%s",pass1);
		if(strcmp(pass1,s.password)==0)
		{
			printf("输入要更改的密码:\n");
			scanf("%s",pass2);
		}
		else
	    {
    	    printf("原密码错误重新输入:\n");
			continue;
             }
		if(islegal_pass(pass2))
		{
			printf("再次输入密码:\n");
			scanf("%s",pass3);
		}
	    else
	    {
     	     printf("输入不合法\n");
			 continue;
	    }
		if(strcmp(pass3,pass2)==0)
		{
			strcpy(s.password,pass3);
                        for(int i=0;i<S_COUNT;i++)
			  {
				  if(strcmp(s.number,stu[i].number)==0)
				  {
					stu[i]=s;
					 stu[i].landing=1;
				  }
			  }
			printf("修改成功\n");
			anykey_continue();
			return;
		}
		else
		{
			printf("修改失败,请重新输入\n");
			anykey_continue();
			continue;
	    }
    }		
}

void Allmessage(void)
{
     for(int i=0;i<S_COUNT;i++)	        
     {
         if(strcmp(s.number,stu[i].number)==0)
         {
             printf("姓名:%s 性别:%c 学号:%s 语文:%d 数学:%d 英语:%d\n",stu[i].name,stu[i].sex,stu[i].number,stu[i].chinese,stu[i].math,stu[i].english);
			anykey_continue();
         }
      }
}

教师功能函数实现

#include
#include
#include"tool.h"
#include"teacher.h"
#include"student.h"
Teacher tea[T_COUNT];
Teacher t;
	
int t_position=0;
int t_count=0;
int index_stu=0;

bool t_add_stu()
{
		
	if (s_count >= S_COUNT)
	return false;
	printf("请选择你要添加的方式\n");
	printf("1、单个添加\n");
	printf("2、批量导入\n");
	printf("3、退出添加\n");
	int ch;
	do
	{
		scanf("%d", &ch);
		if (1 != ch && 2 != ch && 3 != ch)
		{
			printf("输入错误请重新输入\n");
		}
		fflush(stdout);
	} while (1 != ch && 2 != ch && 3 != ch);

	if (1 == ch)
	{


		int i = 0;
		while (0 != stu[i].sex)i++;
		Student s;
		do
		{
			printf("请输入你要添加的学生的姓名\n");
			scanf("%s", s.name);
			printf("请输入你要添加的学生的性别(w:女||m:男)\n");
			scanf(" %c", &s.sex);
			printf("请输入你要添加的学生的学号\n");
			scanf("%s", s.number);
			if (!islegal_pass(s.number))
			{
				printf("学生学号错误\n");
				continue;
			}
			printf("请输入你要添加的学生的密码\n");
			scanf("%s", s.password);
			if (!islegal_pass(s.password))
			{
				printf("学生密码错误\n");
				continue;
			}
			if (!is_legalstu(s))
				printf("学生信息有误,请重新输入\n");
		} while (!is_legalstu(s));
		s.chinese=0;
		s.math=0;
		s.english=0;
		s.landing=0;
		s.Account_status=1;
		stu[i] = s;
	}
	else if (2 == ch)
	{
		printf("请输入你要添加的文件的路径\n");
		char path[20];
		scanf("%s", path);
		int cnt = 0;
		
		FILE* f = fopen(path, "r");//导入文件
		if (NULL == f)
		{
			printf("文件路径错误\n");
			return false;
		}
		int i = 0;
		while(stu[i].sex!=0)i++;
		while (!feof(f)) //读数据
		{
				
			fscanf(f, "%s %c%s%s%d%d%d%d%d", stu[i].name,
				&stu[i].sex, stu[i].number, stu[i].password,
				&stu[i].chinese, &stu[i].math, &stu[i].english,
				&stu[i].landing, &stu[i].Account_status);
				printf("读入:%s\n",stu[i].name);
				i++;
			if (i >= s_count)
				s_count++;

		}
		fclose(f);
	}
	else if (3 == ch)
	{
		printf("正在退出\n");
		fflush(stdout);
		usleep(1000);
		return false;
	}
	printf("添加成功\n");
	return true;
}


bool t_search_stu()//查找学生,返回false 失败,返回true成功
		{
				printf("请选择你要查找的方式\n");
				printf("1、姓名查找\n");
				printf("2、学号查找\n");
				printf("3、退出查找\n");
				int  ch;
				do
				{
					scanf("%d",&ch);
					anykey_continue();
					if(1!=ch&&2!=ch&&3!=ch)
					{
						printf("输入错误请重新输入\n");
						
					}
				}while(1!=ch&&2!=ch&&3!=ch);
				
				if(1==ch)//按照姓名查找
				{
					printf("请输入你要查找的学生的姓名\n");
					char name[20];
					scanf("%s",name);
					for(int i=0;i<S_COUNT;i++)
					{
						if(0==strcmp(name,stu[i].name)&&stu[i].sex!=0)
						{
							 index_stu=i; //保存查找到的学生的下标
							 printf("查找成功\n");
							return true;
						}
					}
				}
				else if (2==ch)//按学号查找
				{
					
					char number[20];
					do
					{
						printf("请输入你要查找的学生的学号\n");
						scanf("%s",number);
						if(!islegal_pass(number))
						printf("输入错误请重新输入\n");
					}while(!islegal_pass(number));
					
					for(int i=0;i<S_COUNT;i++)
					{
						if(0==strcmp(number,stu[i].number)&&stu[i].sex!=0)
						{
							index_stu=i; 
							printf("查找成功\n");
							return true;
						}
					}
				}
				else if(3==ch)
				{
					printf("正在退出\n");
					fflush(stdout);
					usleep(1000);
					return false;
				}
				printf("查找失败\n");
				return false;
		}



void t_psearch_stu()//显示查找到的学生
{
	if(!t_search_stu())
	return ;
    printf("姓名:%s 性别:%s 学号:%s 语文:%3d 英语:%3d 数学:%3d\n",stu[index_stu].name,
    stu[index_stu].sex == 'w' ? "女" : "男",stu[index_stu].number,
    stu[index_stu].chinese,stu[index_stu].english,
    stu[index_stu].math);
}

  
bool t_delete_stu() //删除学生 ,返回false 失败,返回true成功
{
	printf("查找你要删除的学生的信息\n");
	if (!t_search_stu())
	{
		printf("删除失败\n");
		return false;
	}
	int cnt = 1,n=0;
	char numbers[20];
	while (cnt <= 2)
	{
		printf("请输入学号加以确认,第%d次: \n", cnt);
		scanf("%s", numbers);
		cnt++;
		if (0 != strcmp(numbers, stu[index_stu].number))
			cnt--;
			n++;
			if(n>=3)
		       {
			printf("三次错误返回教师界面\n");
				return false;
		       }
	}
	
	FILE* ds = fopen("downstudent.txt", "a");
	if (NULL == ds)
	{
		perror("fopen:");
		return false;
	}

		fprintf(ds, "%s %c %s\n", stu[index_stu].name,
			stu[index_stu].sex, stu[index_stu].number);
	fclose(ds);
	stu[index_stu].sex =0;
	//更新两张表
	
	printf("删除成功\n");
	//fflush(stdout);
	//usleep(1000);
	return true;
}


bool t_reset_stu_pass()//重置学生密码,返回false 失败,返回true成功
{
	printf("请选择你要重置密码的学生\n");
	if (!t_search_stu())
	{
		printf("重置密码失败\n");
		return false;
	}
	strcpy(stu[index_stu].password, "123456");
	printf("重置为:%s\n","123456");
	printf("重置成功\n");
	return true;
}


void t_show_stu()//显示所有在校学生
{
	for (int i = 0; i < S_COUNT; i++)
	{
		if (0 != stu[i].sex)
		{
			printf("姓名:%s 性别:%s 学号:%s 语文:%d 数学:%d 英语:%d\n", stu[i].name, stu[i].sex == 'w' ? "女" : "男", stu[i].number,stu[i].chinese,stu[i].math,stu[i].english);
		}
	}
}

bool t_import_stu_score()//录入学生成绩,返回false 失败,返回true成功
{
	printf("请选择你要添加的方式\n");
	printf("1、单个录入\n");
	printf("2、退出录入\n");
	int  ch;
	do
	{
		scanf("%d", &ch);
		anykey_continue();
		if (1 != ch && 2 != ch)
		{
			printf("输入错误请重新输入\n");
		}
	} while (1 != ch && 2 != ch);

	if (1 == ch)
	{
		printf("请选择你要录入成绩的对象\n");
		if (!t_search_stu())
		{
			printf("录入失败\n");
			return false;
		}
		int flag = 1;
		printf("姓名:%s 性别:%c 学号:%s\n",stu[index_stu].name,
                       stu[index_stu].sex,stu[index_stu].number);
		do
		{
			flag = 0;
			printf("输入学生的语文成绩\n");
			scanf("%d", &stu[index_stu].chinese);
				anykey_continue();
			if (0 > stu[index_stu].chinese ||
				stu[index_stu].chinese > 100)
			{
				printf("语文成绩非法\n");
				flag = 1;
				continue;
			}

			printf("输入学生的英语成绩\n");
			scanf("%d", &stu[index_stu].english);
					anykey_continue();

			if (0 > stu[index_stu].english ||
				stu[index_stu].english > 100)
			{
				printf("英语成绩非法\n");
				flag = 1;
				continue;
			}

			printf("输入学生的数学成绩\n");
			scanf("%d", &stu[index_stu].math);
				anykey_continue();

			if (0 > stu[index_stu].math ||
				stu[index_stu].math > 100)
			{
				printf("数学成绩非法\n");
				flag = 1;
				continue;
			}
		} while (flag);
		printf("录入成功\n");
		return true;
	}
	else if (2 == ch)
	{
		printf("正在退出\n");
		fflush(stdout);
		//usleep(1000);
		return false;
	}
	return false;

}


void t_show_drop_stu()//显示退出学生
	{
		Student s;
		FILE* f = fopen("downstudent.txt", "r");
		while (!feof(f))
		{
			fscanf(f, "%s %c %s\n", s.name,
				&s.sex, s.number);
			printf("姓名:%s 性别:%s 学号:%s\n", s.name, s.sex == 'w' ? "女" : "男", s.number);
		}
		fclose(f);
	}


bool t_modify_stu()//修改学生信息,返回false 失败,返回true成功
{
	printf("请输入你要修改的学生信息\n");
	if (!t_search_stu())
	{
		printf("修改失败\n");
		return false;
	}
	printf("请选择你要修改信息\n");
	printf("1、学生基础信息修改\n");
	printf("2、学生成绩修改\n");
	printf("3、退出修改\n");
	int  ch;
	do
	{
		scanf("%d", &ch);
		anykey_continue();
		if (1 != ch && 2 != ch && 3 != ch)
		{
			printf("输入错误请重新输入\n");
		}
	} while (1 != ch && 2 != ch && 3 != ch);


	if (1 == ch)
	{
		
		do
		{
		printf("请输入你要修改的学生的姓名\n");
		scanf("%s", stu[index_stu].name);
		printf("请输入你要修改的学生的性别(w:女||m:男)\n");
		scanf(" %c", &stu[index_stu].sex);
		/*printf("请输入你要修改的学生的学号\n");
		scanf("%s", stu[index_stu].number);
		if (!islegal_pass(stu[index_stu].number))
		{
			printf("学生学号错误\n");
			continue;
		}*/
		printf("请输入你要修改的学生的密码\n");
		scanf("%s", stu[index_stu].password);
		if (!islegal_pass(stu[index_stu].password))
		{
			printf("学生密码错误\n");
			continue;
		}
		if (!is_legalstu(stu[index_stu]))
			printf("学生信息有误,请重新输入\n");
	} while (!is_legalstu(stu[index_stu]));
	printf("修改成功\n");
}
				else if (2 == ch)
				{
				int flag = 1;
				do
				{
					flag = 0;
					printf("输入学生的语文成绩\n");
					scanf("%d", &stu[index_stu].chinese);
						anykey_continue();

					if (0 > stu[index_stu].chinese ||
						stu[index_stu].chinese > 100)
					{
						printf("语文成绩非法\n");
						flag = 1;
						continue;
					}

					printf("输入学生的英语成绩\n");
					scanf("%d", &stu[index_stu].english);
						anykey_continue();

					if (0 >stu[index_stu].english ||
						stu[index_stu].english > 100)
					{
						printf("英语成绩非法\n");
						flag = 1;
						continue;
					}

					printf("输入学生的数学成绩\n");
					scanf("%d", &stu[index_stu].math);
						anykey_continue();

					if (0 > stu[index_stu].math ||
						stu[index_stu].math > 100)
					{
						printf("数学成绩非法\n");
						flag = 1;
						continue;
					}
				} while (flag);
				printf("修改成功\n");
				}
				else if (3 == ch)
				{
				printf("正在退出\n");
				fflush(stdout);
				usleep(1000);
				return false;
				}
				return false;

		}

//给学生解锁
void t_unlock(void)
{
	char number[S_NUMBER];
	printf("请输入要解锁的学生学号:");
	scanf("%s",number);
	while(true)
	{
		for(int i=0;i<S_COUNT;i++)
		{
			if(strcmp(stu[i].number,number)==0)
			{
				if(stu[i].Account_status==0)
				{
					stu[i].Account_status=1;
					printf("解锁成功!!");
					anykey_continue();
					return;
				}
				else
				{
					printf("你输入的学生状态为未锁定请重新确认!!");
					anykey_continue();
					return;
				}
			}
		}
		printf("你找到学号不存在!!!");
		anykey_continue();
		return;
	}
}
#include"tool.h"

void anykey_continue(void)
{
	stdin->_IO_read_ptr=stdin->_IO_read_end;
	printf("请按任意键继续...\n");
	getch();
}

//判断密码长度是否大于6或者小于20
//判断面是否只包含数字和字母
bool islegal_pass(const char*pass) //合法返回true,不合法返回false
{
	if (6 > strlen(pass) || strlen(pass) > 19)
	return  false;
	for (; *pass != '\0'; pass++)
	{
		if (!isalnum(*pass))//如果不是数字字符或者字母字符
		return false;
	}
	return true;
}

bool is_legalstu(Student s)
{
	if(islegal_pass(s.password)&&0<strlen(s.name)&&strlen(s.name)<20&&(s.sex=='w'||s.sex=='m')&&(islegal_pass(s.number)))
	return true;
	return false;
}

你可能感兴趣的:(c语言)