最近的一個課程設計要求的一個用戶登錄的程序,通常軟件網頁等的用戶登錄注冊都是涉及到數據庫。但像課程設計這種小程序要求的安全度不高就可以用c/c++實現。
首先,我們要清楚用戶登錄的流程。應該大家對這些並不陌生。
首先說說注冊流程
1、要求輸入用戶名(如果該用戶名已被注冊則重新輸入)
2、要求輸入密碼。
3、要求再次輸入密碼(如果兩次密碼輸入相同則注冊成功,否則重新注冊)。】
其次是登陸流程
1、輸入用戶名(如果該用戶名不存在則重新輸入)
2、輸入密碼(如果正確則進入程序,否則重新登錄)
那么下面就用代碼來實現:
有兩種方式實現,一、使用 fstream 文件讀寫流。二、使用結構體鏈表(該方法以后補充)
一、使用 fstream 文件讀寫流
1 void regist() 2 { //注冊 3 char *password = new char[20];//分配20個字節,然后返回首地址給password,即password可以看做一個20字節的字符數組,即字符串 4 string name; 5 /*struct user 6 { 7 string password; 8 string name; 9 };定義的用戶結構體*/ 10 user c; 11 ifstream fin;//聲明 ifstream 對象 12 fin.open("user.txr",ios::in);//關聯文件 13 cout << "請輸入用戶名:"; 14 cin>>name; 15 while(fin >> c.name >> c.password)//讀取成功返回1 16 { 17 if(c.name==name) 18 {cout << "該用戶名已被注冊" <<endl;regist();} 19 } 20 char test ;int i=0; 21 cout << "輸入密碼:"; 22 while((test=getch())!='\r') 23 { 24 if(test==8)//ASC2碼8為退格 25 { 26 if(i>0) 27 { 28 cout << test << " " << test; 29 password[i--]='\0'; 30 } 31 } 32 else 33 { 34 if(i<20) 35 { 36 cout << "*" ; 37 password[i]=test; 38 i++; 39 } 40 } 41 } 42 password[i] = '\0'; 43 cout << "再次輸入密碼" ; 44 char *password2 = new char[20]; 45 i=0; 46 while((test=getch())!='\r') 47 { 48 if(test==8) 49 { 50 if(i>0) 51 { 52 cout << test << " " << test ; 53 password2[i--]='\0'; 54 } 55 } 56 else 57 { 58 if(i<20) 59 { 60 cout << "*"; 61 password2[i]=test; 62 i++; 63 } 64 } 65 password2[i]='\0'; 66 } 67 if(strcmp(password,password2)!=0) 68 { 69 70 cout << "密碼兩次輸入不正確"; 71 regist(); 72 } 73 else 74 { 75 cout << "注冊成功"; 76 } 77 ofstream fout; 78 fout.open("user.txr",ios_base::out|ios_base::app); 79 fout << name << " " << password << endl; 80 fout.close();//關閉文件連接,但不會刪除流 81 cout << "三秒后返回登陸界面"; 82 nterface();//界面 83 }
1 void logo() 2 {//登錄 3 char *password = new char [20]; 4 string name; 5 cout << "用戶名:"<<endl; 6 cin>>name; 7 cout <<" 密碼:"<<endl; 8 char test;int i=0; 9 while((test=getch())!='\r') 10 { 11 if(test==8)//ASC2碼8為退格 12 { 13 if(i>0) 14 { 15 cout << test << " " << test; 16 password[i--]='\0'; 17 } 18 } 19 else 20 { 21 if(i<20) 22 cout << "*"; 23 password[i]=test; 24 i++; 25 } 26 } 27 password[i]='\0'; 28 ifstream fin; 29 fin.open("user.txr",ios_base::in); 30 if(fin.fail()) 31 { 32 cout << "文件打開失敗"; 33 } 34 user c;int f1; 35 while(fin>>c.name>>c.password) 36 { 37 if(c.name==name&&c.password==password) 38 { 39 cout << "登陸成功"; 40 f1=1;//登錄成功標志 41 nterface(); 42 } 43 } 44 if(f1==0)//f1==0登錄失敗 45 { 46 cout << "用戶名或密碼錯誤"; 47 logo(); 48 } 49 }