C語言利用數(shù)組和文件實現(xiàn)登錄注冊功能
C語言利用文件系統(tǒng)實現(xiàn)簡單的用戶登錄和注冊功能
版本一:利用數(shù)組
最近有個朋友讓我?guī)退鲆粋€C語言的登錄注冊功能,考慮到他沒有學(xué)到數(shù)據(jù)庫于是想到了存入文件
此版本使用的數(shù)組,第二個版本使用的是鏈表,鏈表是一個很好的數(shù)據(jù)結(jié)構(gòu),推薦大家用鏈表
第二版:鏈接
話不多說上代碼
#include <stdio.h>
#include <stdlib.h>
#define USER_MAX 20
//此系統(tǒng)能存放最多的用戶數(shù)
typedef struct
{
char name[10];
char password[10];
} User;
//定義一個存放用戶的結(jié)構(gòu)體
User list[USER_MAX];
//定義一個全局?jǐn)?shù)組,類型是User,大小是USER_MAX
char* filename = "user.txt";
//需要在你的程序目錄下新建一個user.txt文件
//登錄函數(shù)
User login()
{
char name[10];
char password[10];
User lg;
printf("enter name:");
scanf("%s",name);
strcpy(lg.name , name);
printf("enter password:");
scanf("%s",password);
strcpy(lg.password,password);
return lg;
}
//寫入txt文件,每一行存在一個用戶
void writeToFile(User u)
{
FILE *fw = fopen(filename,"a+");
fprintf(fw,u.name);
fprintf(fw,"\t");
fprintf(fw,u.password);
fprintf(fw,"\n");
}
//判斷是否存在該用戶
int exist(User u)
{
int i;
for(i=0; i<USER_MAX; i++)
{
if(0==strcmp(list[i].name ,u.name) && 0==strcmp(list[i].password ,u.password))
{
return 1;
}
}
return -1;
}
//注冊用戶
void registerUser()
{
char name[10];
char password[10];
User user;
int i;
printf("enter your name:");
scanf("%s",name);
strcpy(user.name , name);
//判斷注冊的用戶是否已存在
for(i=0; i<USER_MAX; i++)
{
if(0==strcmp(list[i].name ,name))
{
printf("USER ALREADY EXIST");
return;
}
}
printf("enter your password:");
scanf("%s",password);
strcpy(user.password , password);
writeToFile(user);
}
int menu()
{
int choice;
printf("1.login\n");
printf("2.register\n");
printf("#.exit\n");
printf("enter your choice:");
scanf("%d",&choice);
return choice;
}
int main()
{
User test[USER_MAX];
FILE *fp = fopen(filename,"r");
int i=0;
User u;
if(NULL == fp)
{
printf("FILE NOT FOUND");
return -1;
}
for(i=0; i<USER_MAX; i++)
{
char uname[10];
char upassword[10];
fscanf(fp,"%s%s",uname,upassword);
strcpy(list[i].name , uname);
strcpy(list[i].password , upassword);
}
int choice = menu();
if(1 == choice)
{
system("cls");
u=login();
if(1 == exist(u))
{
printf("success");
}
else
{
printf("WRONG USER OR PASS");
}
}
else if(2 == choice)
{
system("cls");
registerUser();
}
else
{
return 0;
}
}
運行結(jié)果
菜單,比較簡陋,可以根據(jù)自己需求加?xùn)|西
PS我并未寫循環(huán)語句,只是簡單實現(xiàn)功能,所以讀者可根據(jù)需求寫菜單的循環(huán)

注冊

看一下文件

登錄

異常路徑(登錄失?。?/p>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語言安全編碼之?dāng)?shù)值中的sizeof操作符
這篇文章主要介紹了C語言安全編碼的數(shù)值中的sizeof操作符用法注意事項,需要的朋友可以參考下2014-07-07
C語言庫函數(shù)qsort及bsearch快速排序算法使用解析
這篇文章主要為大家介紹了C語言庫函數(shù)qsort及bsearch快速排序算法的使用示例解析2022-02-02
C++中volatile和mutable關(guān)鍵字用法詳解
這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

