用c语言编写图书馆管理系统中注册账号,账号登录,密码修改,密码查找代码和代码注释
时间: 2024-09-20 18:05:29 浏览: 35
在C语言中,实现一个简单的图书馆管理系统涉及到数据库操作的部分通常会借助于外部库,如SQLite或者直接读写文件。这里我们仅提供基础的功能实现,例如使用数组模拟简单数据存储。由于C语言本身不支持高级的数据结构和复杂功能,我们将使用字符数组来表示账户信息。
```c
#include <stdio.h>
#include <stdlib.h> // 包含内存分配函数
// 定义用户账户结构体,包含用户名、初始密码和状态
typedef struct {
char username[50];
char password[50]; // 密码应加密存储,此处简化示例
int is_active; // 用于标记账户是否激活
} User;
// 初始化用户数组,假设最大账户数为10
User users[10] = {{"user1", "123456", 1}, {"user2", "", 0}}; // 第二个用户未激活
int num_users = 2;
// 注册新用户
void register_user(char* username, char* password) {
if (num_users >= sizeof(users)/sizeof(users[0])) {
printf("已达最大账户数,无法注册。\n");
return;
}
strncpy(users[num_users].username, username, sizeof(users[num_users].username) - 1);
strncpy(users[num_users].password, password, sizeof(users[num_users].password) - 1);
users[num_users].is_active = 1;
num_users++;
printf("用户 '%s' 已成功注册。\n", username);
}
// 检查并登录
int login(char* username, char* password) {
for (int i = 0; i < num_users; i++) {
if (!strcmp(users[i].username, username) && !strcmp(users[i].password, password)) {
printf("用户 '%s' 登录成功。\n", username);
return 1; // 成功标志
}
}
printf("用户 '%s' 或密码错误。\n", username);
return 0; // 失败标志
}
// 修改密码
void change_password(char* username, char* old_password, char* new_password) {
int found = 0;
for (int i = 0; i < num_users; i++) {
if (!strcmp(users[i].username, username) && !strcmp(users[i].password, old_password)) {
strncpy(users[i].password, new_password, sizeof(users[i].password) - 1);
printf("用户 '%s' 的密码已更新为 '%s'。\n", username, new_password);
found = 1;
break;
}
}
if (!found) {
printf("旧密码错误。\n");
}
}
// 查找密码
void find_password(char* username) {
for (int i = 0; i < num_users; i++) {
if (!strcmp(users[i].username, username)) {
printf("用户 '%s' 的密码为: %s\n", username, users[i].password);
return;
}
}
printf("未找到该用户。\n");
}
int main() {
// 使用示例
register_user("testuser", "newpass");
login("testuser", "newpass"); // 应该成功
change_password("testuser", "newpass", "newpass123"); // 密码更改
find_password("testuser"); // 寻找密码
login("testuser", "oldpass"); // 应该失败
return 0;
}
```
注意:这只是一个非常简化的示例,并不适合大规模生产环境。实际应用中应使用更安全的方式来存储和处理密码,如哈希和盐值。同时,对于数据库管理系统的实现,会涉及SQL查询和其他高级特性。
阅读全文