C语言下的学生管理系统含密码加密和验证码.docx
《C语言下的学生管理系统含密码加密和验证码.docx》由会员分享,可在线阅读,更多相关《C语言下的学生管理系统含密码加密和验证码.docx(42页珍藏版)》请在冰点文库上搜索。
C语言下的学生管理系统含密码加密和验证码
#include
#include
#include
#include
#include
#defineN20
voidinput();//增加学生信息
voiddel();//删除学生信息
voidchange();//修改学生信息
voidfind();//查询学生信息
voidsorting();//排序
voidsave();//保存到文件
voidread();//读取文件
voidstu_search();//学生查询信息
voidmodify();//学生修改自己密码
structscore_stu//定义分数结构体
{
intscore1;
intscore2;
intscore3;
intsum;
}score;
structstudent//定义学生结构体
{
intno;
charname[20];
charspwd[20];
intclassnum;
structscore_stuscore;
intage;
intranking;
}stu[N],*p;
voidinputPasswd(charpasswd[])//隐藏密码
{
chars[20];
chartemp[2];
intn;
//strcpy(s,"");
s[0]='\0';
while
(1)
{
while
(1)
{
n=getch();
if(n==13)//13为回车'\r'
{
break;
}
printf("*");
memset(temp,0,sizeof(temp));//将temp里面的数据用0替换
sprintf(temp,"%c",n);//将n打印成一个字符保存到temp里面
strcat(s,temp);//把temp所指字符串添加到s结尾处(覆盖s结尾处的'\0')
}
break;
}
printf("\n");
strcpy(passwd,s);
}
voidcaptcha(charstr[],intn)//验证码
{
chara[]="1234567890abcdefghijkmnopqrstuvwxyzABCDEFGHIJLMNPQRSTUVWXYZ";
inti,j,k;
k=strlen(a);//k表示字符串的长度
srand(time(0));//随机数初始化
for(i=0;i{
j=rand()%k;//取0-58的随机数
str[i]=a[j];
}
str[i]='\0';
}
voidadmin()//管理员操作
{
intchoose1;
printf("\t\t1:
增加学生信息\t2:
删除学生信息\t3:
修改学生信息\t4:
查询学生信息\t5:
排序学生信息\t6:
退出程序\n");
printf("\t\t");
scanf("%d",&choose1);
printf("\t\t=========================================================================================\n");
fflush(stdin);
switch(choose1)
{
case1:
input();break;
case2:
del();break;
case3:
change();break;
case4:
find();break;
case5:
sorting();break;
case6:
printf("\t\t退出成功!
\n");
exit(0);
break;
default:
printf("\t\t你所选择的操作不是上述操作,请重新选择\n");
admin();
break;
}
}
voidadmin_login()//管理员登录
{
staticinti=0;
intj=3;
charusername[10];
charpwd[10];
charcode[N],str[N];
printf("\t\t**********************************欢迎进入管理员登录界面**********************************\n");
printf("\t\t请输入帐号:
\n");
printf("\t\t");
gets(username);
printf("\t\t=========================================================================================\n");
printf("\t\t请输入密码:
\n");
printf("\t\t");
inputPasswd(pwd);
printf("\t\t=========================================================================================\n");
fflush(stdin);
if((strcmp(username,"admin")==0)&&(strcmp(pwd,"admin")==0))
{
while
(1)
{
captcha(code,4);
printf("\t\t请输入验证码:
%s\n",code);
printf("\t\t");
scanf("%s",str);
printf("\t\t=========================================================================================\n");
if(strcmp(code,str)==0)
{
printf("\n\t\t您已成功登录\n");
printf("\t\t请选择你要执行的操作:
\n");
admin();
}
else
{
j--;
if(j==0)
{
printf("\t\t错误次数过多,系统自动退出\n");
exit(0);
}
}
}
}
else
{
while(i<2)
{
printf("\n用户名和/或密码无效请重新输入\n");
i++;
admin_login();
}
printf("登录次数超限,自动退出!
\n");
exit(0);
}
}
voidstudent(intuserNO)//学生操作
{
intx;
printf("\t\t1:
查询个人信息\t2:
修改密码\t3:
退出\n");
printf("\t\t");
scanf("%d",&x);
printf("\t\t=========================================================================================\n");
switch(x)
{
case1:
stu_search(userNO);break;
case2:
modify(userNO);break;
case3:
printf("\t\t退出成功!
\n");
exit(0);break;
default:
printf("\t\t你所选择的项目错误!
重新选择!
");
student(userNO);break;
}
}
intstudent_login()//学生登录
{
staticintj=0;
inti;
intk=3;
intuserNO;
charpwd[20];
charcode[N+1],str[N+1];
printf("\t\t**********************************欢迎进入学生登录界面**********************************\n");
printf("\t\t请输入学号:
\n");
printf("\t\t");
fflush(stdin);
scanf("%d",&userNO);
printf("\t\t=========================================================================================\n");
printf("\t\t请输入密码:
\n");
printf("\t\t");
fflush(stdin);
inputPasswd(pwd);
printf("\t\t=========================================================================================\n");
read();
for(i=0;i{
if((userNO==stu[i].no)&&(strcmp(pwd,stu[i].spwd)==0))
{
while
(1)
{
captcha(code,4);
printf("\t\t请输入验证码:
%s\n",code);
printf("\t\t");
scanf("%s",str);
printf("\t\t=========================================================================================\n");
if(strcmp(code,str)==0)
{
printf("\t\t登录成功!
\n");
printf("\t\t请选择操作!
\n");
student(userNO);
}
else
{
k--;
if(k==0)
{
printf("\t\t错误次数过多,系统自动退出\n");
exit(0);
}
}
}
}
else
{
while(j<2)
{
printf("\t\t登录失败,请重新登录!
\n");
j++;
student_login();
}
printf("\t\t登陆次数超限!
系统自动退出!
");
exit(0);
}
}
returnuserNO;
}
voidstu_ranking()//计算排名
{
inti,j;
intcount=1;
read();
for(i=0;stu[i].no!
=0;i++)
{
for(j=0;stu[j].no!
=0;j++)
{
if(stu[i].score.sum{
count++;
}
}
stu[i].ranking=count;
count=1;
}
save();
}
voidstu_search(intuserNO)//学生查询个人信息
{
inti,x;
read();
for(i=0;i{
if(userNO==stu[i].no)
{
printf("\t\t学号\t姓名\t密码\t班级\t成绩一\t成绩二\t成绩三\t总分\t年龄\t排名\n");
printf("\t\t%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n\n",stu[i].no,stu[i].name,stu[i].spwd,stu[i].classnum,
stu[i].score.score1,stu[i].score.score2,stu[i].score.score3,stu[i].score.sum,
stu[i].age,stu[i].ranking);
printf("\t\t=========================================================================================\n");
printf("\t\t请选择退出系统或返回主菜单\n");
printf("\t\t1:
返回主菜单\t2:
退出\n");
printf("\t\t");
scanf("%d",&x);
printf("\t\t=========================================================================================\n");
switch(x)
{
case1:
student(userNO);break;
case2:
printf("\t\t退出成功!
\n");
exit(0);
}
}
else
{
printf("\t\t输入错误,系统自动返回主菜单!
\n");
student(userNO);
}
}
}
voidmodify(intuserNO)//学生修改个人密码
{
fflush(stdin);
staticintk=0;
inti;
charpwd_old[20];
charpwd_new[20];
charpwd_new1[20];
read();
for(i=0;i{
if(userNO==stu[i].no)
{
printf("\t\t请输入旧密码:
\n");
printf("\t\t");
gets(pwd_old);
printf("\t\t=========================================================================================\n");
if(strcmp(pwd_old,stu[i].spwd)==0)
{
printf("\t\t请输入新密码:
\n");
printf("\t\t");
gets(pwd_new);
printf("\t\t=========================================================================================\n");
printf("\t\t请再次输入新密码:
\n");
printf("\t\t");
gets(pwd_new1);
printf("\t\t=========================================================================================\n");
if(strcmp(pwd_new,pwd_new1)==0)
{
printf("\t\t修改完成!
\n");
strcpy(stu[i].spwd,pwd_new);
printf("\t\t=========================================================================================\n");
break;
}
else
{
while
(1)
{
k++;
if(k==3)
{
printf("\t\t错误次数过多,自动返回主菜单!
\n");
printf("\t\t=========================================================================================\n");
student(userNO);
}
else
{
printf("\t\t输入两次密码不一致请重新进入!
\n");
printf("\t\t=========================================================================================\n");
modify(userNO);
}
}
}
}
else
{
printf("\t\t密码输入不正确!
自动返回主菜单\n");
printf("\t\t=========================================================================================\n");
student(userNO);
}
}
}
save();
student(userNO);
}
voidinput()//增加学生信息
{
charch;
inti,n,count=0;
printf("\t\t请输入添加学生信息的条数:
\n");
printf("\t\t");
scanf("%d",&n);
printf("\t\t=========================================================================================\n");
if(n<1||n>N)
{
printf("\t\t输入不合法,请重新输入:
\n");
input();
}
printf("\t\t请添加学生信息:
\n");
printf("\t\t学号\t姓名\t密码\t班级\t成绩一\t成绩二\t成绩三\t年龄\n");
read();
for(i=0;i{
if(count==n)
{
break;
}
if(stu[i].no==0)
{
fflush(stdin);
printf("\t\t");
scanf("%d%s%s%d%d%d%d%d",&stu[i].no,stu[i].name,stu[i].spwd,&stu[i].classnum,
&stu[i].score.score1,&stu[i].score.score2,&stu[i].score.score3,&stu[i].age);
stu[i].score.sum=stu[i].score.score1+stu[i].score.score2+stu[i].score.score3;
count++;
}
}
save();
stu_ranking();
printf("\t\t=========================================================================================\n");
printf("\t\t添加学生信息成功!
\n");
printf("\t\t是否继续?
(Y/N)\n");
fflush(stdin);
printf("\t\t");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
input();
}
admin();
}
voiddel()//删除学生信息
{
fflush(stdin);
inti,j;
charch;
intdel_no;
printf("\t\t请输入想要删除记录的ID:
\n");
printf("\t\t");
scanf("%d",&del_no);
printf("\t\t=========================================================================================\n");
read();
for(i=0;stu[i].no!
=0;i++)
{
if(del_no==stu[i].no)
{
for(j=i;j{
stu[j]=stu[j+1];
}
}
}
save();
stu_ranking();
printf("\t\t=========================================================================================\n");
printf("\t\t删除信息成功!
\n");
printf("\t\t是否继续?
(Y/N)\n");
fflush(stdin);
printf("\t\t");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
del();
}
admin();
}
voidchange()//修改学生信息
{
fflush(stdin);
inti;
charch;
intchange_no;
printf("\t\t请输入想要修改记录的ID:
\n");
printf("\t\t");
scanf("%d",&change_no);
printf("\t\t=========================================================================================\n");
read();
printf("\t\t学号\t姓名\t密码\t班级\t成绩一\t成绩二\t成绩三\t年龄\n");
for(i=0;stu[i].no!
=0;i++)
{
if(change_no==stu[i].no)
{
printf("\t\t%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\n",stu[i].no,stu[i].name,stu[i].spwd,
stu[i].classnum,stu[i].score.score1,stu[i].score.score2,stu[i].score.score3,stu[i].age);
printf("\t\t请输入你要修改后的信息!
\n");
printf("\t\t=========================================================================================\n");
printf("\t\t");
scanf("%d%s%s%d%d%d%d%d",&stu[i