C語言利用數(shù)組和文件實現(xiàn)登錄注冊功能
C語言利用文件系統(tǒng)實現(xiàn)簡單的用戶登錄和注冊功能
版本一:利用數(shù)組
最近有個朋友讓我?guī)退鲆粋€C語言的登錄注冊功能,考慮到他沒有學到數(shù)據(jù)庫于是想到了存入文件
此版本使用的數(shù)組,第二個版本使用的是鏈表,鏈表是一個很好的數(shù)據(jù)結構,推薦大家用鏈表
第二版:鏈接
話不多說上代碼
#include <stdio.h>
#include <stdlib.h>
#define USER_MAX 20
//此系統(tǒng)能存放最多的用戶數(shù)
typedef struct
{
char name[10];
char password[10];
} User;
//定義一個存放用戶的結構體
User list[USER_MAX];
//定義一個全局數(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;
}
}
運行結果
菜單,比較簡陋,可以根據(jù)自己需求加東西
PS我并未寫循環(huán)語句,只是簡單實現(xiàn)功能,所以讀者可根據(jù)需求寫菜單的循環(huán)

注冊

看一下文件

登錄

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C++實現(xiàn)LeetCode(10.正則表達式匹配)
這篇文章主要介紹了C++實現(xiàn)LeetCode(10.正則表達式匹配),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
C++中靜態(tài)初始化數(shù)組與動態(tài)初始化數(shù)組詳解
今天小編就為大家分享一篇C++中靜態(tài)初始化數(shù)組與動態(tài)初始化數(shù)組詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
C++?ffmpeg實現(xiàn)將視頻幀轉換成jpg或png等圖片
有時播放實時流的時候有截圖的需求,需要將解碼出來的圖片保存本地或上傳服務器,這時就需要將avframe中的數(shù)據(jù)編碼成png、jpg等格式的圖片,我們使用ffmpeg的相關編碼器就可以實現(xiàn)功能,下面就來講講具體實現(xiàn)方法吧2023-03-03
C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)
這篇文章主要介紹了C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02

