#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 = 0i <leni++)
{
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=0i<sizei++)
{
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
}
/ /你看到自己专门为你烫一下注册和登录系统1新用户注册
2登录
3退出
1
注册帐号:
请输入您的姓名:
KA西瓜
请输入您的密码:!
注册成功
注册和登录系统
1新用户注册
2登录
3退出
2
登录帐号:
请输入用户名:
KA西瓜
请输入密码:
确定登录成功
欢迎回来,KA西瓜
按任意键继续
! >#包括中
#包括的
无效新用户注册()/ /用户注册功能
无效登录()/ /用户登录功能
的main()
{
整数selectNum
的printf(“\ nRegistered和登录系统\ n \ n已”)
printf(“请1新用户注册\ N”)
printf(“请2登录\ N”)
printf(“请3退出\ n”)
的scanf(“%d个”,&selectNum)
开关(selectNum)
{
案例1:新用户注册()
突破
案例2:登录()
突破案例3:printf(“请!退出程序\ n”)
出口(1)
突破
无效新用户注册()
{
文件*计划生育
字符Linedata [50] = {0},用户[20],通[20]
计划生育=打开(“data.dat文件”,“在”)
printf(“请注册帐号:\ n”)
printf(“请输入你的姓名:\ n”)
FFLUSH(标准输入)
得到(用户)
printf(“请输入您的密码:\ n”)
FFLUSH(标准输入)
得到(通行证)
的strcpy(Linedata,用户)
的strcat(Linedata,“,”)
strcat的(Linedata,通行证)
strcat的(Linedata,“\ N”)
FPUTS(Linedata,FP)
FCLOSE(FP)
printf(“请!注册成功\ n”)
的main()
}
无效登录()
{
文件*计划生育
整型发现= 0
用户的char [20],通[20],Userstrcat [50] = {0}
字符使用用户数据[50] = {0}
计划生育=打开(“data.dat文件”,“R”)
printf(“请登录帐号:\ n”)
printf(“请输入用户名:\ n”)
FFLUSH(标准输入)
得到(用户)
printf(“请输入密码:\ n”)
FFLUSH(标准输入)
得到(通行证)
的strcpy(Userstrcat,用户)
的strcat(Userstrcat,“,”)
strcat的(Userstrcat,通行证)
strcat的(Userstrcat,“\ N”)!
而(的feof(计划生育))
{
与fgets(使用用户数据,19,FP)
如果(STRCMP(保留使用者,Userstrcat)== 0)
{
printf(“请确定登录成功\ n!”)
printf(“请欢迎回来,%s的\ n!”,用户)
发现= 1
突破
如果
(find!){
的printf(“用户名或密码不正确\ n”)
FCLOSE(FP)
}
#include "Head.h"#include "Chinese.c"
#include "Mouse.c"
#include "Login.c"
#include "Exit.c"
#include "Window.c"
#include "OtIT.c"
#include "Scanf.c"void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0 /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver)/* 注册BGI驱动后没成绩不需求.BGI文档的支持运行 */
initgraph(&gd, &gm, "")
if(graphresult())
{
printf ("Graphics isn't available...")
getch()exit(1)
}
MskindMath()/* 计算鼠标的样子*/
Msinit()
}void main(void)
{
initgr()/* 初始化*/
Login()/* 登录*/
Exit() /* 退出*/
}
。。。。。。。。。。。