C語言利用陣列和檔案登入註冊功能
阿新 • • 發佈:2018-11-09
C語言利用檔案系統實現簡單的使用者登入和註冊功能
版本一:利用陣列
最近有個朋友讓我幫他做一個C語言的登入註冊功能,考慮到他沒有學到資料庫於是想到了存入檔案
此版本使用的陣列,第二個版本使用的是連結串列,連結串列是一個很好的資料結構,推薦大家用連結串列
第二版連結可以去我的主頁找
話不多說上程式碼
#include <stdio.h>
#include <stdlib.h>
#define USER_MAX 20
//此係統能存放最多的使用者數
typedef struct
{
char name[10];
char password[10];
} User;
//定義一個存放使用者的結構體
User list[USER_MAX];
//定義一個全域性陣列,型別是User,大小是USER_MAX
char* filename = "user.txt";
//需要在你的程式目錄下新建一個user.txt檔案
//登入函式
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;
}
}
執行結果
選單,比較簡陋,可以根據自己需求加東西
PS我並未寫迴圈語句,只是簡單實現功能,所以讀者可根據需求寫選單的迴圈
註冊
看一下檔案
登入
異常路徑(登入失敗)