2022年c语言程序设计密码模块设 .pdf
#include conio.h#include string.h#include stdio.h int gb=0;void error()window(12,10,68,10);textbackground(15);textcolor(132);clrscr();cprintf(file or system error!you cant enter the system!);while(1);/*若有错误就进入死循环*/*查看 autoexec.bat 文件里有没有引用这个密码程序,没有就添加进去*/void look()FILE*fauto;/*指向 autoexec.bat 的文件指针*/FILE*fbak;/*用来指向hecfback 的文件指针*/char*pass=c:windowspassword.exe;/*本程序的位置*/char a25,ch;char*au=autoexec.bat,*bname=hecfback.;/*hecfback是 autoexec.bat 的备份*/setdisk(2);/*设置当前盘为C 盘*/chdir();/*设置当前目录为根目录*/fauto=fopen(au,r+);/*以读写方式打开autoexec.bat 文件*/if(fauto=NULL)/*若不存在就新建一个autoexec.bat 文件*/fauto=fopen(au,w+);if(fauto=NULL)error();/*若新建失败就调用error()函数*/fread(a,23,1,fauto);/*读取 autoexec.bat 前 23 各字符并存入a数组中*/a23=0;/*把 a 数组的第24 个位置添加结束符0*/if(strcmp(a,pass)=0)/*若读取的a 数组和 pass指针一样就关闭文件,表示下次启动计算机会运行该程序,不然就添加*/fclose(fauto);else fbak=fopen(bname,w+);/*新建一个hecfback.文件,用来保存autoexec.bat 的文件内容*/if(fbak=NULL)error();/*失败就调用error()函数*/fwrite(pass,23,1,fbak);/*把 pass指针指向本程序路径的字符串写入hecfback.文件里*/fputc(nr,fbak);/*加上回车符*/rewind(fauto);/*把 autoexec.bat 的文件指针指向文件头*/while(!feof(fauto)/*当 没 有 到 达autoexec.bat 文 件 尾 时 逐 个 读 取 出 来 并 写 入hecfback.文件里,而刚才新建的文件最前面已写入了本程序的位置了*/名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -ch=fgetc(fauto);/*读 autoexec.bat 文件的一个字节*/fputc(ch,fbak);/*向 fbak 指向的 hecfback.文件写入刚读出来的字节*/rewind(fauto);/*把 autoexec.bat 的文件指针指向文件头*/rewind(fbak);/*把 hecfback.文件指针指向文件头*/*把 hecfback.文件内容写入autoexec.bat 内*/while(!feof(fbak)/*当 没 有 到 达hecfback.文 件 尾 时 逐 个 读 取 出 来 并 写 入autoexec.bat 文件里*/ch=fgetc(fbak);fputc(ch,fauto);fclose(fauto);/*关闭文件*/fclose(fbak);remove(bname);/*删除 hecfback 文件*/*从 ppp.文件中读出密码*/void readpass(char*pass)FILE*fp;int i=0;char*p=88888888;/*原始密码*/setdisk(2);chdir();/*设置当前盘为C 盘*/chdir(c:windows);/*设置当前目录为c:windows*/fp=fopen(ppp.,r+);/*打开 ppp.文件*/if(fp=NULL)/*假如不存在就新建一个,并把原始密码写进去*/fp=fopen(ppp.,w+);if(fp=NULL)error();fwrite(p,strlen(p),1,fp);strcpy(pass,p);/*把形参 pass设为原始密码*/pass8=0;/*最后一位以 0结尾*/else while(!feof(fp)/*假如存在就把他读出来,存入pass中*/passi=fgetc(fp);i+;passi-1=0;/*我也不太清楚为什么要减一,但这样才正确*/fclose(fp);printf(input the password please!n);/*输入密码的函数*/void inputpass(char*pass)int n=0;/*控制密码个数*/名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -while(1)passn=getch();/*把输入的一个字符存入input 中的第 n个数组元素中*/if(passn=0)passn=getch();if(passn=94)gb=1;continue;/*假如是控制键就把后面那一个字符吃掉,假如是ctrl+f1 就把 gb 置 1,用在 pass函数里输入密码时的,并重新开始循环,注:输入控制键时,系统会给出两个字符的,第一个为 0*/if(n23)putchar(7);break;/*若字符多于23 个字符就结束本次输入,并发出一声响*/if(passn=13)break;/*假如是回车就结束*/if(passn=32&passn0)/*假如是删除键,且至少输入了一个字符就在屏幕上删除前一个*号,且 input数组也前进一位*/cprintf(b b);/*b为光标在屏幕上前移一位,但并不删除前一位,所以用空格删除,再前一位*/passn=0;/*并把数组中的数据清0*/n-;/*密码个数也减一*/passn=0;/*改变密码函数*/void gbpass()FILE*fp;int i;char a25,b25;system(cls);fp=fopen(ppp.,r+);/*打开 ppp.文件*/if(fp=NULL)error();for(i=0;i40;i+)/*把文件里的内容清零*/fputc(0,fp);do window(10,12,70,12);textbackground(1);textcolor(15);clrscr();cprintf(please input new password:);inputpass(a);/*调用 inputpass函数,输入a 的值*/window(10,14,70,14);textbackground(1);名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 5 页 -textcolor(15);clrscr();cprintf(please input again:);inputpass(b);/*输入 b 的值*/if(strcmp(a,b)!=0)window(10,16,20,16);textbackground(1);textcolor(15);clrscr();cprintf(error!);getch();/*假如 a、b 不等,提示error*/while(strcmp(a,b);rewind(fp);fwrite(a,strlen(a),1,fp);/*把密码写入ppp.文件*/fclose(fp);void pass()char password25;char input25;/*输入密码的数组*/while(1)window(1,1,80,25);textbackground(0);textcolor(15);clrscr();/*清屏*/readpass(password);window(20,12,60,12);textbackground(1);textcolor(15);clrscr();cprintf(password:);/*以蓝背景黑字画一个窗口,并写出password:提示*/inputpass(input);if(strcmp(password,input)=0)/*输入完后,输入的密码和程序里的密码一样就通过,并退出 本程序*/if(gb=1)gbpass();break;else/*若不一样就提示*/putchar(7);window(30,14,50,14);textbackground(15);textcolor(132);/*132为闪烁的字*/clrscr();cprintf(password error!);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -getch();main()look();pass();名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -