C-class Week6.Day19

学生需求分析

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

#include <stdio.h>
#include <stdlib.h>
#include <getch.h>
#include <string.h>
#include "student.h"
#include "tools.h"

//控制面板
int stu_face(void)
{
	printf("-----------------------\n");
	printf("| 1.查询成绩           |\n");
	printf("| 2.修改密码           |\n");
	printf("| 3.查看个人信息       |\n");
	printf("| q.退出               |\n");
	printf("-----------------------\n");
	int cmd = getch()-'0';
	return cmd;
}


//分数排序,按高到低
int compare(const void* a,const void* b)
{
	return *(int*)b - *(int*)a;
}
void write_stu(Student stu[],int stui)
{
	FILE * fwp = fopen("./stuatschool.txt","w");
	if(fwp == NULL)
	{
		perror("fopen");
	}
	for(int i = 0; i<stui; i++)
	{
		fprintf(fwp,"%s %s %s %s %f %f %f %d %d\n",stu[i].name,stu[i].sex,stu[i].sid,stu[i].pwd,stu[i].chn,stu[i].math,stu[i].eng,stu[i].ver,stu[i].times);
	}
	fclose(fwp);
	fwp = NULL;
}

//读在校学生个数,并将其写到结构体中
int read_stu(Student stu[])
{
	FILE * frp = fopen("./stuatschool.txt","r");
	if(frp == NULL)
	{
		perror("fopen");
		return 0;
	}
	int ret,i=0,jud=1;
    while((ret = fgetc(frp) != EOF))
    {
    	if(jud == 1)
		{
			fseek(frp,-1,SEEK_CUR);
			jud = 0;
		}
		fscanf(frp,"%s %s %s %s %f %f %f %d %d",stu[i].name,stu[i].sex,stu[i].sid,stu[i].pwd,&stu[i].chn,&stu[i].math,&stu[i].eng,&stu[i].ver,&stu[i].times);
    	i++;
    }
	fclose(frp);
	frp = NULL;
	return i-1;
}


//	移到被锁定的学生文件
void add_stu_lock(Student stu[],int lock)
{
	FILE * fap = fopen("./stulock.txt","a");
	if(fap == NULL)
	{
		perror("fopen");
	}
	fprintf(fap,"%s %s %s %s %f %f %f %d %d\n",stu[lock].name,stu[lock].sex,stu[lock].sid,stu[lock].pwd,stu[lock].chn,stu[lock].math,stu[lock].eng,stu[lock].ver,stu[lock].times);
	fclose(fap);
	fap = NULL;
	return;
}

//强制改密码,	
int forceModify_stu(void)
{
	Student stu[256] = {};
	int stui = read_stu(stu);
	printf("请输入你的id号:\n");
	char k_id[20] = {};
    scanf("%s",k_id);
    int i=0;
	for(i = 0; i<stui; i++)
	{
		if(!strcmp(stu[i].sid,k_id))
		break;
	}
	if(i != stui)
	{
		if(stu[i].ver == 0)
		{
			FILE * fwp = fopen("./stuatschool.txt","w");
			if(fwp == NULL)
			{
				perror("fopen");
				return 0;
			}
			printf("第一次登陆强制修改密码!\n");
			printf("请输入新密码:\n");
			scanf("%s",stu[i].pwd);
			stu[i].ver = 1;
		rewind(fwp);
		for(int i = 0; i<stui; i++)
		{
			fprintf(fwp,"%s %s %s %s %f %f %f %d %d\n",stu[i].name,stu[i].sex,stu[i].sid,stu[i].pwd,stu[i].chn,stu[i].math,stu[i].eng,stu[i].ver,stu[i].times);
		} 
		fclose(fwp);
		fwp = NULL;
		}
	}
	if(i == stui)
	{
		printf("没有这个ID,请重试!\n");
		scanf("%*c");
		scanf("%*c");
		return -10;
	}
	int id = atoi(k_id); 
	return id;
	
}

//登录验证
int check_stu(int id)
{
	char k_pwd[15];
    system("clear");
	printf("------学生登录------\n");
    printf("请输入密码:\n");
    scanf("%*c");   
    coverKey(k_pwd);
	Student stu[256] = {};
	int stui=read_stu(stu);
    char k_id[20] = {};
    sprintf(k_id,"%d",id);
	int j=0;
	for(j=0;j<stui;j++)
	{
    	if(!strcmp(stu[j].sid,k_id))
    	{
    		if(!strcmp(stu[j].pwd,k_pwd))
    		{
    			break;
    		}
    		else
    		{
    			printf("\n密码不正确!\n");
    			scanf("%*c");
				return j;
    		}
    	}
	}
	return j-256;
}


//分数查询
void score(int ssi)
{
    system("clear");
    Student stu[256] = {};
    int stui=read_stu(stu);
    //分数集
    float cavg=0,mavg=0,eavg=0;
    int cmax=0,cmin=100;
    int mmax=0,mmin=100;
    int emax=0,emin=100;
    
    int chn = 1, math = 1,eng = 1;
    for(int j=0;j<stui;j++)
    {
    	//平均分
    	cavg+=stu[j].chn;
    	mavg+=stu[j].math;
    	eavg+=stu[j].eng;
    	//最高分
    	if(cmax<stu[j].chn)
    		cmax = stu[j].chn;
    	if(mmax<stu[j].math)
    		mmax = stu[j].math;
    	if(emax<stu[j].eng)
    		emax = stu[j].eng;
    	//最低分
    	if(cmin>stu[j].chn)
    		cmin = stu[j].chn;
    	if(mmin>stu[j].math)
    		mmin = stu[j].math;
    	if(emin>stu[j].eng)
    		emin = stu[j].eng;
    	//排名
    	if(stu[ssi].chn < stu[j].chn)  chn++;
    	if(stu[ssi].math < stu[j].math)  math++;
    	if(stu[ssi].eng < stu[j].eng)  eng++;
    }
	printf("语文成绩:%f 语文排名:%d\n",stu[ssi].chn,chn);
	printf("数学成绩:%f 数学排名:%d\n",stu[ssi].math,math);
	printf("英语成绩:%f 英语排名:%d\n\n",stu[ssi].eng,eng);
	printf("语文->最高分:%d 最低分:%d 平均分:%.1f \n",cmax,cmin,cavg/(stui));
	printf("数学->最高分:%d 最低分:%d 平均分:%.1f\n",mmax,mmin,mavg/(stui));
	printf("英语->最高分:%d 最低分:%d 平均分:%.1f \n\n",emax,emin,eavg/(stui));
	anykey_continue();
}
//学生重置密码  
void stuModify(int ssi)
{
	Student stu[256] = {};	
	int stui = read_stu(stu);
	printf("请输入新密码:\n");
	scanf("%s",stu[ssi].pwd);
	scanf("%*c");
	printf("密码修改成功!\n");
    anykey_continue();
	write_stu(stu,stui);
	return;
}

//    4、查看个人信息
void show_self(int ssi)
{
	Student stu[256] = {};	
	read_stu(stu);
	printf("姓名:%s\n性别:%s\nID:%s\n密码:%s\n",stu[ssi].name,stu[ssi].sex,stu[ssi].sid,stu[ssi].pwd);
	//scanf("%*c");
	anykey_continue();
	return;
}

void run_stu(void)
{
	int stucnt = 0,lock = 0,ssi = 0;
	while(stucnt < 3)
	{
		int fm = forceModify_stu();
		if(fm == -10)
		{
			return;
		}
		lock = check_stu(fm);
		ssi = lock + 256;
		if(lock<0)
		{
			//进入页面
			for(;;)
			{
				system("clear");
				switch(stu_face())
				{
					case 1:
						//分数查询 
						score(ssi);
					break;
					case 2:
						//修改密码
						stuModify(ssi);
					break;
					case 3:
						//查询个人信息,显示
						show_self(ssi);
					break;
					case 65:
						//退出
						exit(0);
				}
			}
		}
		else
		{
			stucnt++;
		}
	}
	Student stu[256] = {};
	int stui = read_stu(stu);
	stu[lock].ver = 2;
	write_stu(stu,stui);
	add_stu_lock(stu,lock);
	printf("三次密码错误锁定帐号,由教师解锁!\n");
	exit(0);
}

校长需求分析

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

#include "admin.h"
#include "tools.h"
#include <stdio.h>
#include "teacher.h"
#include <getch.h>
#include <string.h>
#include <stdlib.h>

//主页面
int admin_face(void)
{
	printf("-----------------------\n");
	printf("| 1.设置自己的密码     |\n");
	printf("| 2.修改教师密码       |\n");
	printf("| 3.添加老师           |\n");
	printf("| 4.删除教师           |\n");
	printf("| 5.显示在职教师       |\n");
	printf("| 6.显示离职教师       |\n");
	printf("| 7.解锁老师	       |\n");
	printf("| 8.退出	       |\n");
	printf(" -----------------------\n");
	int cmd = getch()-'0';
	return cmd;
}

//	读入在职教师文件
int readtch(Teacher tch[])
{
	FILE * frp = fopen("./tch.txt","r");
	if(frp == NULL)
	{
		perror("fopen");
		return 0;
	}
	int ret,i=0,jud=1;
	while((ret = fgetc(frp) != EOF))
	{
		if(jud == 1)
		{
			fseek(frp,-1,SEEK_CUR);
			jud = 0;
		}
		fscanf(frp,"%s %s %d %s %hhd",tch[i].name,tch[i].sex,&tch[i].id,tch[i].pwd,&tch[i].ver);
		i++;
	}
	int tchi = i-1;
	fclose(frp);
	frp = NULL;
	return tchi;
}
//	重写在职老师文件
void write_tch(Teacher tch[],int tchi) 
{
	FILE * fwp = fopen("./tch.txt","w");
	if(fwp == NULL)
	{
		perror("fopen");
	}
	for(int i = 0; i<tchi; i++)
	{
		if(tch[i].ver == 0 || tch[i].ver == 1)
		fprintf(fwp,"%s %s %d %s %hhd\n",tch[i].name,tch[i].sex,tch[i].id,tch[i].pwd,tch[i].ver);
	}
	fclose(fwp);
	fwp = NULL;
}
//	读取离职教师文件
int readtch_leave(Teacher tch[])
{
	FILE * frp = fopen("./tchleave.txt","r");
	if(frp == NULL)
	{
		perror("fopen");
		return 0;
	}
	int ret,i=0,jud=1;
	while((ret = fgetc(frp) != EOF))
	{
		if(jud == 1)
		{
			fseek(frp,-1,SEEK_CUR);
			jud = 0;
		}
		fscanf(frp,"%s %s %d %s %hhd",tch[i].name,tch[i].sex,&tch[i].id,tch[i].pwd,&tch[i].ver);
		i++;
	}
	int tchi = i-1;
	fclose(frp);
	frp = NULL;
	return tchi;
}

//读取被锁定的教师文件
int readtch_lock(Teacher tch[])		
{
	FILE * frp = fopen("./tchlock.txt","r");
	if(frp == NULL)
	{
		perror("fopen");
	}
	int ret,i=0,jud=1;
	while((ret = fgetc(frp) != EOF))
	{
		if(jud == 1)
		{
			fseek(frp,-1,SEEK_CUR);
			jud = 0;
		}
		fscanf(frp,"%s %s %d %s %hhd",tch[i].name,tch[i].sex,&tch[i].id,tch[i].pwd,&tch[i].ver);
		i++;
	}
	int tchi = i-1;
	fclose(frp);
	frp = NULL;
	return tchi;
}

//重写被锁定的教师文件
void write_unLock_tch(Teacher tch[], int tchi)
{
	int i = 0;
	FILE * fwp = fopen("./tchlock.txt","w");
	if(fwp == NULL)
	{
		perror("fopen");
	}
	for(i = 0; i<tchi; i++)
	{
		if(tch[i].ver != 0)
		{
			scanf("%*c");
			fprintf(fwp,"%s %s %d %s %hhd\n",tch[i].name,tch[i].sex,tch[i].id,tch[i].pwd,tch[i].ver);
		}
	}
	fclose(fwp);
	fwp = NULL;
}
	
//移到离职教师文件
void add_tch_leave(Teacher tch[],int tchi)
{
	FILE * fap = fopen("./tchleave.txt","a");
	if(fap == NULL)
	{
		perror("fopen");
	}
	for(int i = 0; i<tchi; i++)
	{
		if(tch[i].ver == -1)
		{
			fprintf(fap,"%s %s %d %s %hhd\n",tch[i].name,tch[i].sex,tch[i].id,tch[i].pwd,tch[i].ver);
		}
	}
	fclose(fap);
	fap = NULL;
	return;
}	

//移除被锁定教师
void add_tch_lock(Teacher tch[],int i)
{
	FILE * fap = fopen("./tch.txt","a");
	if(NULL == fap)
	{
		perror("fopen");
		return;
	}
	fprintf(fap,"%s %s %d %s %hhd\n",tch[i].name,tch[i].sex,tch[i].id,tch[i].pwd,tch[i].ver);
	fclose(fap);
	fap = NULL;
	return;
}

//读取校长文件
void read_ad(struct Admin *ad)
{
	FILE * fp = fopen("./ad.txt","r");
	if(fp == NULL)
	{
		perror("fopen");
		return;
	}
	fscanf(fp,"%d %s %hhd",&ad->id,ad->pwd,&ad->ver);
	fclose(fp);
	fp = NULL;
	return;
}

//重写校长文件
void write_ad(struct Admin *ad)
{
		FILE * fwp = fopen("./ad.txt","w");
		if(fwp == NULL)
		{
			perror("fopen");
			return;
		}
		fprintf(fwp,"%d %s %hhd\n",ad->id,ad->pwd,ad->ver);
		fclose(fwp);
		fwp = NULL;
		return;
}



//强制改密码,	
void forceModify_ad(void)
{
	Admin ad = {};
	read_ad(&ad);	//	读入校长
	if(ad.ver == 0)
	{

		printf("第一次登陆强制修改密码!\n");
		printf("请输入新密码: ");
		coverKey(ad.pwd);	//	隐藏密码
		ad.ver = 1;
		write_ad(&ad);		//	重写校长
		printf("修改成功!\n");
		anykey_continue();
	}
	return;
}

//登录验证
int check_ad(void)
{
	int k_id;		//	定义验证密码
	char k_pwd[15];
    Admin ad = {};
    read_ad(&ad);	//	读入校长文件
	printf("------校长登录------\n");
    printf("请输入id号:");
    scanf("%d",&k_id);
    scanf("%*c");
    printf("请输入密码:");
    coverKey(k_pwd);	//	隐藏密码
	if(ad.id == k_id)
    {
		if(strcmp(ad.pwd,k_pwd))    	
    	{
    		printf("\n密码不正确!\n");
			return 0;
    	}
    }
    else
    {
    	printf("没有这个ID,请重试!\n");
    	return 0;
    }
    return 1;
}


//修改自己的密码
void adModify(void)
{
	Admin ad = {};
	read_ad(&ad);		//	读入校长文件
	char oldpwd[15] = {};	
	strcpy(oldpwd,ad.pwd);
	FILE * fwp = fopen("./ad.txt","w");
	if(fwp == NULL)
	{
		perror("fopen");
		return;
	}
	printf("请输入新密码:");
	coverKey(ad.pwd);	//	隐藏密码
	char repwd[15] = {};
	printf("\n");
	fflush(stdout);
	printf("请再输一遍:\n");
	coverKey(repwd);	//	隐藏密码
	if(!strcmp(repwd,ad.pwd))
	{	
		fprintf(fwp,"%d %s %hhd\n",ad.id,ad.pwd,ad.ver);
		printf("修改成功!\n");
		fclose(fwp);
		fwp = NULL;
		anykey_continue();
	}
	else
	{
		fprintf(fwp,"%d %s %hhd\n",ad.id,oldpwd,ad.ver);
		printf("两次密码不相同,请重试!\n");
		scanf("%*c");
		fclose(fwp);
		fwp = NULL;
		return;
	}
}

//重置教师密码  
void tchModify(void)
{
	int i = 0,tchi = 0;
	Teacher tch[256] = {};
	tchi = readtch(tch);	//	读取在职教师文件,返回教师数量
	long tchid = 0;
	printf("请输入要修改密码的老师ID:");
	scanf("%ld",&tchid);
	for(i = 0; i<tchi; i++)
	{
		if(tchid == tch[i].id)
		{
			printf("请输入新密码:");
			scanf("%s",tch[i].pwd);
			break;
		}
	}
	if(i == tchi)
	{
		printf("输入的ID错误,请重试!\n");
		anykey_continue();
		return;
	}
	write_tch(tch,tchi);		//	重写在职老师文件
	printf("修改成功!\n");
	anykey_continue();
}

//添加教师	
void addtch(void)
{
	FILE * fap = fopen("./tch.txt","a");
	if(NULL == fap)
	{
		perror("fopen kk");
		return;
	}
	Teacher tch = {.pwd = "123456",.ver = 0};
	printf("输入要添加的教师姓名:");
	scanf("%s",tch.name);
	printf("输入要添加的教师性别:");
	scanf("%s",tch.sex);
	printf("输入要添加的教师ID:");
	scanf("%d",&tch.id);
	fprintf(fap,"%s %s %d %s %hhd\n",tch.name,tch.sex,tch.id,tch.pwd,tch.ver);
	fclose(fap);
	fap = NULL;
	printf("添加成功!\n");
	anykey_continue();
	return;
}

//删除教师   
void deltch(void)
{
	int tchi = 0, i = 0;
	Teacher tch[256] = {};
	tchi = readtch(tch);		//	读入在职教师文件
	int tchid = 0;
	printf("请输入要删除的老师ID:");
	scanf("%d",&tchid);
	for(i = 0; i<tchi; i++)
	{
		if(tchid == tch[i].id)
		{
			tch[i].ver = -1;
			break;
		}
	}
	if(i == tchi)
	{
		printf("输入的ID错误,请重试!\n");
		anykey_continue();
		return;
	}
	write_tch(tch,tchi);		//	重写在职教师文件
	add_tch_leave(tch,tchi);	//	移到离职教师文件
	printf("删除成功!");
	anykey_continue();
}


//显示在职教师的txt文件  
void show_tch_stay(void)
{
	int tchi = 0;
	Teacher tch[256] = {};
	tchi = readtch(tch);
	for(int i = 0; i<tchi; i++)
	{
		printf("姓名:%s 	性别:%s	 ID:%d\n",tch[i].name,tch[i].sex,tch[i].id);
	}
	anykey_continue();

}

//显示离职教师文件  
void show_tch_del(void)
{
	int tchi = 0;
	Teacher tch[256] = {};
	tchi = readtch_leave(tch);
	for(int i = 0; i<tchi; i++)
	{
		printf("姓名:%s 	性别:%s	 ID:%d\n",tch[i].name,tch[i].sex,tch[i].id);
	}
	anykey_continue();
}


//解锁老师
void unLock_tch(void)
{
	int i = 0,tchi = 0;
	Teacher tch[256] = {};
	tchi = readtch_lock(tch);	//读取被锁定的教师文件
	int tchid = 0;
	printf("请输入要解锁的教师ID:");
	scanf("%d",&tchid);
	for(i = 0; i<tchi; i++)
	{
		if(tch[i].id == tchid)
		{
			tch[i].ver = 0;
			break;
		}
	}
	if(i == tchi)
	{
		printf("ID有误!\n");
		anykey_continue();
		return;
	}
	add_tch_lock(tch,i);
	write_unLock_tch(tch,tchi);		//重写被锁定的教师文件
	printf("解锁成功!\n");
	anykey_continue();
}

void run_admin(void)
{
	forceModify_ad();	//	强制修改密码
	if(check_ad())		//	如果登入成功
	{
		for(;;)
		{
			system("clear");
			switch(admin_face())
			{
				case 1:
					adModify();
				break;
				case 2:
					tchModify();
				break;
				case 3:
					addtch();
				break;
				case 4:
					deltch();
				break;
				case 5:
					show_tch_stay();
				break;
				case 6:
					show_tch_del();
				break;
				case 7:
					unLock_tch();
				break;
				case 8:
					exit(0);
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值