关于Turbo C, 是不用安装的, 直接在网上下载下来就可以
关于Visual C++, 其实这个环境的编译器主要针对c++, 但是也兼容c, 所以也可以用 这个需要安装, 安装好之后, 直接就可以用了
由于Visual C++60在win7,win8存在兼容性问题,因此,右击安装程序选择以管理员身份运行。
接着在d出的窗口选择是,在兼容性问题的对话框中把不再显示此提示勾上,点确定
接着一路默认就行了
安装完后,进入Visual C++60的安装路径C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\MSDEVEXE(一般默认是C盘,以自己选的安装路径为准)把MSDEVEXE改成MSDEV1EXE并右击选属性->兼容性,在兼容模式中把以兼容模式运行这个程序的勾勾上,并选windows XP(Service Park 2)或windows XP(Service Park 3),点击确定。(win7不用把MSDEVEXE改成MSDEV1EXE)
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。就加个函数而已。
void login()
{
printf("请输入帐号密码");
scanf("%s%s",&name,&pwd);
if(strcmp(name,s1)==0&&strcmp(pwd,s2)==0)
{
原来的函数;
}else
{
login();
}
}
int main()
{
login();
return 0;
}
我写的代码功能:实现整个登陆模块,使用链表存储临时用户数据(实际软件,链表应该从数据库中加载数据)。管理员登陆可以查看所有用户信息。
实现注册、登陆、验证、注销、查询。
登陆用户分:普通用户和管理员用户。默认我初始一个管理员,你不需要可以删。
验证规则,你可以在我的验证函数中改。
登陆成功以后,具体做什么我没写,留给你自己发挥!!你在我相关注释的位置添加代码。
注意:如果是实际软件开发,注册需要写入数据库,登陆需要读取数据库,你需要在我相关位置添加数据库写入和读取代码。
#include <stdioh>#include <malloch>
#include <stringh>
#include <conioh>
#define SIZE 20
typedef struct userInfo//用户信息
{
char uName[SIZE];//用户名
char uPSW[SIZE];//用户密码
int uType;//用户类型:0普通用户;1管理员
struct userInfo next;
}USERINFO;
int checkUINFO(char uName,char uPSW);//验证用户信息合理性,合理返回1,不合理返回0。
USERINFO regUser(char uName,char uPSW,USERINFO userHead,USERINFO userTail,int uType);//注册用户,返回尾节点
int showMeu1(USERINFO userHead,USERINFO userTail);//显示1级菜单
int showMeu2(int n,USERINFO userHead,USERINFO userTail);//显示2级菜单
void printfList(USERINFO userHead);//测试用函数,打印链表所有数据,正常用户不使用
int login(char uName,char uPSW,USERINFO userHead);//登陆,登陆成功返回1,失败返回0
void initUser();//初始化登陆状态
USERINFO loginUser=
{
{0},
{0},
0,
NULL
};// 全局变量当前登陆的用户
int main()
{
int m;
USERINFO userHead,userTail=NULL;
userHeadnext=NULL;
//-----测试用添加了一个管理员账户,不需要可以删!!---------------
userTail=regUser("admin123","admin123",&userHead,userTail,1);
//-----------------------------------------------------------------
while(1)
{
//printf("loginUseruName[0]=%d,loginUseruType=%d\n",loginUseruName[0],loginUseruType);
//getch();
if(loginUseruName[0]==0)
showMeu1(&userHead,&userTail);
else if(loginUseruName[0]!=0 && loginUseruType==0)//普通用户登陆,登陆以后想做的 *** 作添加在这里!!!!!!!!
{
printf("退出登陆输入0\n");
scanf("%d",&m);
if(m==0)
initUser();
continue;
}
else if(loginUseruName[0]!=0 && loginUseruType==1)//管理员登陆,直接打印全部用户数据
{
system("cls");
printf("当前为管理员登陆,打印所有用户信息:\n");
printfList(&userHead);//测试用函数,打印链表所有数据,正常用户不使用
printf("退出登陆输入0\n");
scanf("%d",&m);
if(m==0)
initUser();
continue;
}
}
return 0;
}
void initUser()//初始化登陆状态
{
memset(loginUseruName,0,SIZE);
memset(loginUseruPSW,0,SIZE);
loginUseruType=0;
loginUsernext=NULL;
}
int showMeu1(USERINFO userHead,USERINFO userTail)//显示1级菜单
{
int n;
while(1)
{
system("cls");
printf("1、注册账户\n2、登陆账户\n");
scanf("%d",&n);
if(n!=1 && n!=2)
continue;
return showMeu2(n,userHead,userTail);
}
}
int showMeu2(int n,USERINFO userHead,USERINFO userTail)//显示2级菜单
{
int m;
char uName[100]={0}, uPSW[100]={0};
if(n==1)//注册界面
while(1)
{
system("cls");
printf("注册要求:用户名只包含数字、字母及下划线。\n 密码必须包含数字及字母。\n 用户名密码大于6个字符且小于%d!\n",SIZE);
printf("请输入用户名:");
scanf("%s",uName);
printf("请输入密码:");
scanf("%s",uPSW);
userTail=regUser(uName,uPSW,userHead,userTail,0);
if(!userTail)
{
printf("注册失败!输入0重新注册,输入1返回主菜单\n");
while(1)
{
scanf("%d",&m);
if(m==0)
break;
if(m==1)
return n;
}
if(m==0)
continue;
}
else
{
printf("注册成功!按任意键返回。。。。。。\n");
getch();
return n;
}
}
else//登陆界面
while(1)
{
system("cls");
printf("用户名:");
scanf("%s",uName);
printf("密码:");
scanf("%s",uPSW);
if(!login(uName,uPSW,userHead))
continue;
else
{
return n;
}
}
return 1;
}
void printfList(USERINFO userHead)//测试用函数,打印链表所有数据,正常用户不使用
{
USERINFO userSave=userHead;
while(userSave->next)
{
printf("用户名:%s\n",userSave->next->uName);
printf("密码:%s\n",userSave->next->uPSW);
printf("类型:%s\n\n",userSave->next->uType"管理员":"普通用户");
userSave=userSave->next;
}
}
int login(char uName,char uPSW,USERINFO userHead)//登陆,登陆成功返回1,失败返回0
{
USERINFO userSave=userHead;
while(userSave->next)
{
if(!strcmp(userSave->next->uName,uName) && !strcmp(userSave->next->uPSW,uPSW))
{
printf("登陆成功");
strcpy(loginUseruName,uName);
strcpy(loginUseruPSW,uPSW);
loginUseruType=userSave->next->uType;
return 1;
}
userSave=userSave->next;
}
printf("用户名密码不正确或不存在!按任意键继续。。。。。。\n");
getch();
return 0;
}
int checkUINFO(char uName,char uPSW)//验证用户信息合理性,合理返回1,不合理返回0。
{
//用户名和密码的输入规则,在这里添加,要改规则自己加!!!!!!!!!
//我默认规则,用户名大于6个字符且只包含数字、字母及下划线,密码大于6个字符且必须包含数字及字母,用户名密码小于数组上限
int i,len1=strlen(uName),len2=strlen(uPSW),flag1=0,flag2=0;
if(len1>SIZE || len2>SIZE)
{
printf("用户名或密码过长,不得超过%d个字符!!\n",SIZE);
return 0;
}
if(len1<6 || len2<6)
{
printf("用户名或密码必须大于6个字符\n");
return 0;
}
for(i=0;i<len1;i++)
{
if(!(uName[i]>=48 && uName[i]<=57) && !(uName[i]>=65 && uName[i]<=90) &&!(uName[i]>=97 && uName[i]<=122) && uName[i]!='_')
{
printf("用户名只能包含数字、字母及下划线!!\n");
return 0;
}
}
for(i=0;i<len2;i++)
{
if(uPSW[i]>=48 && uPSW[i]<=57)
flag1=1;
if((uPSW[i]>=65 && uPSW[i]<=90) || (uPSW[i]>=97 && uPSW[i]<=122))
flag2=1;
}
if(flag1==0 || flag2==0)
{
printf("密码必须包含数字及字母!!\n");
return 0;
}
return 1;
}
USERINFO regUser(char uName,char uPSW,USERINFO userHead,USERINFO userTail,int uType)//注册用户,返回尾节点
{
USERINFO userNew=NULL;
if(checkUINFO(uName,uPSW))//通过验证
{
userNew=(USERINFO )malloc(sizeof(USERINFO));
userNew->next=NULL;
strcpy(userNew->uName,uName);
strcpy(userNew->uPSW,uPSW);
userNew->uType=uType;
}
else
return NULL;
if(userHead->next==NULL)
userHead->next=userNew;
else
userTail->next=userNew;
userTail=userNew;
//如果是正常软件,这里应该把注册信息写入数据库,数据库insert语句写在这里!!!!
//-----------------------------------------------------------------------------------
return userTail;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)