怎么加入修改修改用戶資訊還有修改用戶密碼的功能!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define USERNAME_LEN 32
// 用戶資訊結構體
typedef struct user{
char * username; // 用戶名稱
char * password; // 用戶密碼
char * name; // 用戶姓名
// 其他資訊...
struct user* next; // 下一個節點
}User;
/**
* 列印用戶資訊
* @param head 頭節點
*/
void show_user(User* head){
User* temp = head;
if(temp == NULL){
printf("暫無用戶資訊,請先注冊\n");
return;
}
printf("姓名\t用戶名\t密碼\n");
while (temp){
printf("%s\t%s\t%s\n", temp->name, temp->username, temp->password);
temp = temp->next;
}
}
/**
* 銷毀用戶資訊
* @param head 頭節點
*/
void release(User* head){
User* temp = head;
if(temp == NULL){
return;
}
User* next = temp->next;
while (temp){
printf("%s已銷毀\n", temp->username);
free(temp->name);
free(temp->username);
free(temp->password);
free(temp);
temp = next;
if(temp != NULL){
next = temp->next;
}
}
}
/**
* 保存用戶資訊
* @param head 頭節點
* @param user 保存的用戶資訊
*/
User* insert(User* head, User * user){
if(head == NULL){
return user;
}
head->next = user;
return head;
}
/**
* 根據用戶名查找
* @param head 頭節點
* @param username 用戶名
*/
User* query1(User* head, const char* username){
User* temp = head;
int r = 0;
while (temp){
r = strcmp(temp->username, username);
if(r == 0){
return temp;
}
temp = temp->next;
}
return NULL;
}
/**
* 根據用戶名和密碼查找
* @param head 頭節點
* @param username 用戶名
* @param password 密碼
*/
User* query2(User* head, const char* username, const char* password){
User* temp = head;
int r = 0;
while (temp){
r = strcmp(temp->username, username);
if(r == 0){
r = strcmp(temp->password, password);
if(r == 0){
return temp;
}
return NULL;
}
temp = temp->next;
}
return NULL;
}
/**
* 注冊
* @param head 頭節點(沒有傳NULL)
* @return 頭節點
*/
User* sign(User* head){
char* username = NULL;
char* password = NULL;
char* name = NULL;
printf("請輸入用戶名(英文和數字,最長%d位):\n", USERNAME_LEN);
username = (char*)calloc(USERNAME_LEN, sizeof(char));
scanf("%s", username);
User* user = query1(head, username);
int flag = (user != NULL);
while(flag){
printf("用戶名已存在,請重新輸入:\n");
scanf("%s", username);
flag = (strcmp(user->username, username) == 0);
}
printf("username:%s\n", username);
printf("請輸入密碼(最長%d位):\n", USERNAME_LEN);
password = (char*)calloc(USERNAME_LEN, sizeof(char));
scanf("%s", password);
printf("password:%s\n", password);
printf("請輸入姓名(最長%d位):\n", USERNAME_LEN);
name = (char*)calloc(USERNAME_LEN, sizeof(char));
scanf("%s", name);
printf("name:%s\n", name);
User* new_user = (User*)calloc(1, sizeof(User));
new_user->username = username;
new_user->password = password;
new_user->name = name;
new_user->next = NULL;
head = insert(head, new_user);
printf("注冊完成\n");
return head;
}
/**
* 登錄
* @param head 頭節點
* @return 登錄成功后的用戶資訊 登錄失敗回傳NULL
*/
User* login(User* head){
char* username = NULL;
char* password = NULL;
int flag = 1;
User* current_user = NULL;
while (current_user == NULL)
{
printf("請輸入用戶名:\n");
username = (char*)calloc(USERNAME_LEN, sizeof(char));
scanf("%s", username);
printf("請輸入密碼:\n");
password = (char*)calloc(USERNAME_LEN, sizeof(char));
scanf("%s", password);
current_user = query2(head, username, password);
if(current_user == NULL){
printf("用戶名或密碼錯誤,輸入1繼續登錄,輸入0取消登錄:");
scanf("%d", &flag);
if(flag == 0){
return NULL;
}
}
}
printf("登錄成功,歡迎您:%s\n", current_user->name);
return current_user;
}
int main(int argc, char* argv[]){
User* head = NULL;
int num = 1;
printf("\n");
printf("***************歡迎進入***************\n");
printf("0:退出系統 \t1:注冊新用戶\n");
printf("\n");
printf("2:展示所有用戶\t3:清除所有用戶\n");
printf("4:登錄\t\n");
printf("\n");
printf("**************************************\n");
printf("\n");
while (num)
{
printf("輸入編號,執行操作:");
scanf("%d", &num);
switch (num)
{
case 0:
release(head);
printf("再見,歡迎下次登陸\n");
break;
case 1:
head = sign(head);
break;
case 2:
show_user(head);
break;
case 3:
release(head);
head = NULL;
break;
case 4:
login(head);
break;
default:
printf("不支持的操作\n");
break;
}
}
return 0;
}
uj5u.com熱心網友回復:
這個是之前一個大佬寫的,看了我還是不會寫uj5u.com熱心網友回復:
所以,還是要自己寫, 然后別人幫你改錯誤
否則,結果還是這樣
最終就是找人要完整的原始碼
那還學個屁啊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/130104.html
標籤:C語言
上一篇:這個warning: left-hand operand of comma expression has no effect是怎么回事?
下一篇:大佬們救救我吧
