| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10707 人关注过本帖, 1 人收藏
标题:如何用c实现登录和注册的程序?
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
收藏(1)
已结贴  问题点数:50 回复次数:6 
如何用c实现登录和注册的程序?
呵呵,新手,感觉离我们还很远,只是感觉挺有意思的很多东东实现不了想问问大家!
登录
已用结构体实现
struct things
{
char accounts[20];
char password[20];
}a[200];
由于不会写注册的我只定义a[2]而且初始化了,可以登录并可以给出各类型的出错提醒!
注册
问题就在这想通过用户输入对a[i]中的元素赋值,可是注册是需要循环的(不能只用一次)但是循环了又要一次吧这么多帐号都注册完吗?有没有能让它注册一个可以用一个;想注册时还能再注册的那样!(像我们论坛这样);感觉自己想法太幼稚了,一直都没有接触过这种实际中的问题!大家莫笑啊!多送点分!
搜索更多相关主题的帖子: password 注册 accounts things 
2012-04-08 22:01
heifeng2012
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:53
专家分:113
注 册:2012-3-22
收藏
得分:3 
用链表啊, 动态申请空间
2012-04-08 22:42
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:3 
不是很明白楼主的要求……是指申请了空间后,想什么时候注册就什么时候注册码?可以设置一个有限机

酱油实习生
2012-04-08 23:02
新手菜鸟鸟
Rank: 2
等 级:论坛游民
帖 子:37
专家分:57
注 册:2012-1-15
收藏
得分:4 
我猜想是设计一个函数用链表动态申请空间    然后 用户点击了一个什么按钮就执行那那个函数了

同是新手

2012-04-08 23:25
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:15 
你可以定义一个全局变量,比如说int reg_count = 0;
然后写一个注册函数,比如说
/**
    函数功能:注册新用户
    参数:s -- things结构数组指针
          username -- 用户名字符串
          password -- 用户密码字符串
    返回值:int型, 0表示注册成功,-1表示空间已满,不能注册
 */
int register_user(struct things *s, char * user_name, char * password)
{
    if( reg_count < 200 ) //这里只是示例,实际上这里不应该出现200这个魔数,应该用const变量或是宏定义
    {
        strcpy(&(*(s + reg_count)->accounts), user_name); //拷贝字符串
        strcpy(&(*(s + reg_count)->password), password);
        reg_count ++;  //指向下一个未用空间。

        return 0;    //返回成功
    }
    return -1; //数组越界
}


这样每次注册完一个用户后,reg_count总是指向下一个未用的数组空间。
当然你不想用全局变量的话,可以修改函数参数,添加一个新的参数,用于计数。

我们都在路上。。。。。
2012-04-09 11:06
zhouping0105
Rank: 2
等 级:论坛游民
帖 子:3
专家分:30
注 册:2006-6-11
收藏
得分:25 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N 100
struct user
{
int user_id;
char user_name[19];//最大18位
char password[13];//最大13位
char like[255];
char sign[255];
};

/*
* 验证用户名长度是否合法
*/
int length_user_name(char *p)
{
int l;
l=strlen(p);
if(l>18||l<1)
{
   return 0;
}
else
   return l;
}

/*
* 判断用户名是否有效
*/
int valid_user_name(char *p)
{
int i=0;
int len = strlen(p);
if((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z')) //判断首字符是不是字母
{
   for(i = 0; i < len; i++)
   {
    if(!(p[i] == '_' || (p[i] >= 'a' && p[i] <= 'z') || (p[i] >= 'A' && p[i] <='Z')
     ||(p[i] >='0' && p[i] <= '9'))) //判断后面字符是否有效
     return 0;

   }
   return 1;
}
else
   return 0;

}

/*
* 判断用户名是否有效
*/
int is_username_valid(char *p)
{
if((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z'))
{
   p++;
   while(*p)
   {
    if(!(isalpha(*p) || *p == '_' || isdigit(*p)))
     return 0;
    p++;
   }

   return 1;
}
else
{
   return 0;
}
}

/*
* 密码长度有效性验证
*/
int length_password(char *p)
{
int len;
len = strlen(p);
if(len<6||len>12)
{
   return 0;
}
else
   return len;
}

/*
* 密码的有效性验证
*/
int is_password_valid(char *p)
{
int i=0;

for(;*p != '\0'; p++)
{
   if(!( (*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <='Z')
    ||(*p >='0' && *p <= '9'))) //判断字符是否有效
    return 0;
}
return 1;
}

int two_password_valid(char *p1,char*p2)
{
if(strcmp(p1,p2)==0)
   return 1;
else
   return 0;
}

/*
* 完成注册功能
*/
int user_register(struct user *ptr_user,int size)
{
char password[13];
char repassword[13];
if(size==N)
{
   puts("注册人数以满!");
   return 0;
}
printf("请输入注册姓名:");
fflush(stdin);
gets(ptr_user[size].user_name);
if(!(length_user_name(ptr_user[size].user_name)&&valid_user_name(ptr_user[size].user_name)))
{
   printf("您输入的姓名无效,用户名在1-18之间,首字符为字母,后面必须为字母,数字或下划线!!!");
   return 0;
}

printf("请输入注册密码:");
fflush(stdin);
gets(password);
printf("请再次输入注册密码:");
fflush(stdin);
gets(repassword);
if(!two_password_valid(password,repassword))
{
   printf("\n两次输入的密码不一致!");
   return 0;
}
else
{
   strcpy(ptr_user[size].password,password);
}

if(!(length_password(ptr_user[size].password)&&is_password_valid(ptr_user[size].password)))
{
   printf("您输入的密码无效,密码应在6-12之间,密码只能包含字母和数字!!!");
   return 0;
}

printf("请输入您的爱好:");
fflush(stdin);
gets(ptr_user[size].like);
printf("请输入您的个性签名:");
fflush(stdin);
gets(ptr_user[size].sign);
printf("您的编号为:%d,这将是您的登陆帐号.",ptr_user[size].user_id=10000+size);
return 1;
}

/*
* 如果登陆成功则返回第i+1个用户的信息,否则返回0
*/
int is_my_user(struct user *p,int size)
{
int i;
int zhanghu;
char mima[15];
printf("请输入您的帐号: ");
scanf("%d",&zhanghu);
fflush(stdin);
printf("请输入您的密码: ");
gets(mima);
for(i=0;i<size;i++)
{
   if((zhanghu == p[i].user_id)&&(strcmp(mima,p[i].password)==0))
   {

    return i + 1;
   }
}
return 0;
}

void display_user(struct user u)
{
printf("\n你的帐号是:%d",u.user_id);
printf("\n你注册姓名是:%s",u.user_name);
printf("\n你的爱好:%s",u.like);
printf("\n你的个性签名:%s",u.sign);
}

void update_password(struct user *ptr_user,int size)
{
char mima1[13],mima2[13];
int i = is_my_user(ptr_user,size);
if(i)
{
   i--;
}
else
{
   printf("\n帐号密码不存在!");
   return;
}

printf("请输入新密码: ");
scanf("%s",mima1);
printf("请再次输入新密码: ");
scanf("%s",mima2);

if(two_password_valid(mima1,mima2) && length_password(mima1) && is_password_valid(mima1))
{
   strcpy(ptr_user[i].password,mima1);//完成新旧密码的调换
   printf("\n您的的密码修改成功!");
}
else
   printf("\您的密码修改失败!");

}

//显示菜单
int show_menu()
{
int choice;
printf("\n1.注册");
printf("\n2.登陆");
printf("\n3.修改密码");
printf("\n4.退出");
printf("\n请选择1-4\n");
scanf("%d",&choice);

return choice;
}

int main()
{
struct user our_users[N];
int count = 0;
int current_user;
while(1)
{
   switch(show_menu())
   {
    case 1:
     if(user_register(our_users,count))
     {
      count++;
      printf("\n注册成功!");
     }
     break;
     //注册
    case 2:
     if((current_user = is_my_user(our_users,count)))
     {
      printf("\n登陆成功!");
      display_user(our_users[current_user - 1]);
     }
     else
      printf("\n登陆失败!");
      break;
     //登陆
    case 3:
     update_password(our_users,count);
      break;
     //修改密码
    case 4:
     exit(1);
     break;
     //退出
    default:
     printf("请正确输入");
   }
}
return 0;
}
2012-04-09 15:46
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
谢谢五楼六楼了,六楼的好详细!学习了不少东东!自己也写了一个,只实现了注册和登录,个人感觉无效率可言!

Stay hungry , Stay foolish!
2012-04-10 14:40
快速回复:如何用c实现登录和注册的程序?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098420 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved