网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月12日漏签0天
c语言吧 关注:798,805贴子:4,356,334
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 4回复贴,共1页
<<返回c语言吧
>0< 加载中...

计算机网络安全研究协会第二期部分程序代码

  • 只看楼主
  • 收藏

  • 回复
  • zfy0422
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
计算机网络安全研究协会第二期部分程序代码
       ———一个密码验证程序的编写
组稿人:赵飞宇

 
本程序由刘杨编写
#include<graphics.h>
#include<bios.h>
#include<stdio.h>
#include<ctype.h>
main(){
FILE *fp;
struct d_type{
  char name[13];
  char password[13];
}d[2];
long size;
int ch=-1,b=2,i=0,j=0,e=0,f,p;
int gr=DETECT,gm;
initgraph(&gr,&gm,"");
/* d[0].name,d[1].name分别存储键盘和文件输入的昵称记录
 * d[0].password,d[1].password分别存储键盘和文件输入的密码记录
 * ch接受键盘按键
 * b判断当前焦点位置:4=登陆(回车),1=注册,2=昵称,3=密码
 * i,j分别记录已输入昵称和密码的个数
 * e记录提示信息
 * f,p分别用于读取文件和加密数据的循环控制
 * gr那两行用来进入图形模式 */

cleardevice();
setbkcolor(9);
setfillstyle(9,1);
bar(240,160,440,280);
setfillstyle(1,7);
bar(220,140,420,260);
setfillstyle(1,1);
bar(220,140,420,160);
setcolor(8);
rectangle(221,161,421,261);
setcolor(15);
rectangle(220,140,420,260);
line(221,259,419,259);
line(419,162,419,259);
rectangle(240,230,310,247);
rectangle(330,230,400,247);
setcolor(8);
line(241,248,310,248);
line(311,231,311,248);
line(331,248,401,248);
line(401,231,401,248);
setfillstyle(1,9);
bar(304,180,407,215);
rectangle(303,179,408,216);
line(303,197,408,197);
setcolor(15);
rectangle(303,179,408,197);
outtextxy(225,145,"Land:");
setcolor(8);
outtextxy(230,185,"    Name:");
outtextxy(230,205,"Password:");
outtextxy(245,235," Login  ");
outtextxy(335,235,"Register");
setcolor(14);
rectangle(303,179,408,197);
/* 以上用于绘制图形界面 */
do{
  ch=-1;
  while(ch==-1){
    ch=bioskey(0);
  }
/* 等待用户按键并赋给变量ch */
  switch(ch){
    case 3592:/*退格键*/
      if(b==2&&i>0){
gotoxy(38+i,11);
        putchar(' ');
i=i-1;
      }
      if(b==3&&j>0){
gotoxy(38+j,12);
putchar(' ');
j=j-1;
      }
      break;
/* 删除一个当前焦点b所在的字符 */
    case 3849:/* Tab键 */
      switch(b){
        case 1:/*注册*/
          setcolor(15);
          rectangle(330,230,400,247);
          setcolor(14);
          rectangle(303,179,408,197);
          b=2;
          break;
        case 2:/* 昵称 */
          setcolor(8);
          rectangle(303,179,408,197);
          setcolor(14);
  rectangle(303,197,408,216);
          b=3;
          break;
        case 3:/* 密码 */
          setcolor(8);
          rectangle(303,197,408,216);
          setcolor(14);
  rectangle(240,230,310,247);
          b=4;
          break;
        case 4:/* 登陆 */
          setcolor(15);
          rectangle(240,230,310,247);
          setcolor(14);
  rectangle(330,230,400,247);
          b=1;
          break;
      }
      break;
/* 向下切换当前焦点位置 */
    case 7181:/* 回车键 */
      switch(b){
        case 2:
          setcolor(8);
  rectangle(303,197,408,179);
          setcolor(14);
  rectangle(240,230,310,247);
  b=4;
case 3:
          if(b==3){
            setcolor(8);
            rectangle(303,197,408,216);
            setcolor(14);
    rectangle(240,230,310,247);
    b=4;



  • zfy0422
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
          }
/* 还原用户昵称输入框状态,将焦点跳至登陆按钮 */
case 4:
  d[0].name[i]='\0';
  d[0].password[j]='\0';/* 将键盘输入的昵称,密码加上结束符 */
  gotoxy(30,17);   if((fp=fopen("db.dat","rb"))==NULL){    if((fp=fopen("db.dat","wb"))==NULL){
      printf("Cannot open file\n");
      exit(0);
    }
  }                     /* 读取磁盘文件“DB.DAT”,如不存在则新建 */
  fseek(fp,0L,2);
  size=ftell(fp);
          if(size%26!=0){
            fclose(fp);     if((fp=fopen("db.dat","wb"))==NULL){
      printf("Cannot open file\n");
      exit(0);
    }
   printf("数据库文件已损坏,已经重建");
   break;
          }
  fseek(fp,0L,0);       /* 测试数据文件长度,判断是否符合结构体定义的数据块长度,并将文件指针指向文件头 */
  for(f=0;f<(size/26);f++){
    fread(&d[1],sizeof(struct d_type),1,fp);     for(p=0;p<strlen(d[1].name);p++){
      d[1].name[p]=d[1].name[p]+4;
    }     for(p=0;p<strlen(d[1].password);p++){     d[1].password[p]=d[1].password[p]+4;
    }                   /* 读取数据文件记录,并解密用户昵称和密码数据 */    if(strlen(d[0].name)<=0||strlen(d[0].password)<=0){
      e=3;
      printf("请正确输入昵称和密码!    ");
      break;
    }     if(strcmp(d[0].name,d[1].name)==0){
e=1; if(strcmp(d[0].password,d[1].password)==0){
  e=2;
  break;
}
    }
  }
  fclose(fp);
if(e==0)printf("昵称不存在! ");
if(e==1)printf("密码错误! ");
if(e==2)printf("载入中...  ");
  e=0;                  /* 检查输入是否完整,判断昵称,密码是否正确 */
  break;
case 1:
  gotoxy(30,17);
  d[0].name[i]='\0';
  d[0].password[j]='\0';
  for(p=0;p<strlen(d[0].name);p++){
    d[0].name[p]=d[0].name[p]-4;
  }   for(p=0;p<strlen(d[0].password);p++){    d[0].password[p]=d[0].password[p]-4;
  }                     /* 加密输入昵称,密码数据 */   if((fp=fopen("db.dat","ab+"))==NULL){    if((fp=fopen("db.dat","wb+"))==NULL){
      printf("Cannot open file\n");
      exit(0);
    }
  }                     /* 打开数据文件并追加记录,如文件不存在则新建 */
  fseek(fp,0L,2);
  size=ftell(fp);
          if(size%26!=0){
            fclose(fp);     if((fp=fopen("db.dat","wb"))==NULL){
      printf("Cannot open file\n");
      exit(0);
    }
   printf("数据库文件已损坏,已经重建");
   break;              /* 判断是否符合结构体定义的数据块长度 */
          }
          fseek(fp,0L,0);
  for(f=0;f<(size/26);f++){
    fread(&d[1],sizeof(struct d_type),1,fp);     if(strlen(d[0].name)<=0||strlen(d[0].password)<=0){
      e=3;
printf("请正确输入昵称和密码! ");
      break;
    }     if(strcmp(d[0].name,d[1].name)==0){
      e=1;
      break;
    }
  }
  if(e==0){
            fseek(fp,0L,2);
            fwrite(&d[0],sizeof(struct d_type),1,fp);
    printf("注册成功! ");            
          }
  if(e==1)printf("昵称已存在!              ");
  e=0;
  fclose(fp);            /* 检查输入是否完整,读取文件记录判断昵称是否存在,如不存在则写入注册信息 */
          gotoxy(39,11);
          printf("            ");i=0;
          gotoxy(39,12);
          printf("            ");j=0;
          setcolor(8);
          line(303,197,408,197);
          setcolor(14);          /* 清除昵称,密码输入框信息 */
  break;
      }
    default:/* 其它按键 */
      if(b==2&&i<12){
gotoxy(39+i,11);
d[0].name[i]=ch;
        putchar(d[0].name[i]);
i=i+1;
      }
      if(b==3&&j<12){
        gotoxy(39+j,12);
d[0].password[j]=ch;
        putchar('*');
        j=j+1;
      }
      break;
/* 判断当前焦点,将除以上功能键的其它按键ch的值赋给昵称或密码 */
  }
}while(1);     /* 死循环,嘿嘿^_^,按Ctrl+Pause break键强制退出,PB键在右手编辑区 */
getch();
restorecrtmode();          /* 退出图形模式 */
} 

编者的话:
本期程序有一定的难度,所以我推迟了上交时间,但到现在仍有人未编写此程序。在几份程序中我选出了刘杨的程序打印出来,希望每个人都能够认真仔细的看一下。
由于最近很忙,本期程序未能及时打印,请大家原谅。
赵飞宇
2004.4.18



2025-06-12 11:33:05
广告
  • zfy0422
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
版主啊,看来小弟是不适合在这上面发这些东西的,以后我就不发了,免得招人讨厌,在此道歉。
小弟手中真的有许多好的程序,其中加密解密,密码验证,还有用c语言编写的画图工具都是不错的,如果谁感兴趣的话,可以发邮件给我,我发给你。
zfy0422@sina.com


  • assiss
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么了,又有人jjww了?
唉.不如意的事总会很多的.zfy,别太放在心上了.....

另外我看了你们协会的这些代码,
发现你们过于追求界面了,这会造成一些不必要的难度.
这样对于学习C语言是有害的,


  • zfy0422
  • 路人
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
是的,我们协会从第一期开始,我就说面向客户,树立一种商业化的思想,后来我们用开发工具做一些大点的程序的时候,我发现许多人都养成了很好的习惯,习惯于写代码的同时也习惯于写帮助文档,注意界面也是有好处的,不过却是如你所言,对c语言的学习没有什么好处


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示