C语言下的学生管理系统含密码加密和验证码.docx
- 文档编号:24816242
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:42
- 大小:19.24KB
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].no,s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 管理 系统 密码 加密 验证