fp = fopen("books.dat", "rb+")
时间: 2023-07-19 15:54:00 浏览: 160
这段代码是用来打开一个二进制文件 "books.dat",并以二进制读写方式打开文件。其中,"fp" 是一个指向文件的指针,可以通过调用 fread() 和 fwrite() 函数来对文件进行读写操作。需要注意的是,如果文件不存在,则会返回 NULL;如果文件已经存在,则会以读写方式打开文件,即可以进行读取和写入操作。同时,文件指针的位置可以通过 fseek() 函数进行移动,以便进行读写操作。
相关问题
simulink中u~=0什么意思
fp);
break;
}
}
if (i == n) {
printf("未找到要借阅的书号在Simulink中,符号"~="表示不等于的意思。因此,u~=0表示u不等!\n");
}
fclose(fp);
}
void return_book(struct book books[], int n) {
char id[20];
int i;
FILE *fp;
fp = fopen("books.dat", "rb+");
if (fp == NULL) {
printf于0。在控制系统中,u通常表示输入信号,因此u~=0表示输入信号不等于0。
某学校拟建立一个小型的图书管理系统(学生不超过1000人,图书不超过5000册),实现图书入库,图书查询、旧书的删除、创建用户、查询用户、借书、还书、续借、修改用户密码等. 1.要求系统提供系统管理员、图书管理员、学生和教师4种不同角色的权限管理.不同用户拥有“浏览用户”、“添加用户”、“删除用户”、“浏览图书”、“添加图书”、“删除图书”“初始化用户密码”“修改密码”等权限. 3.用c语言
好的,这是一个比较典型的图书管理系统,以下是一个简单的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct Book {
char name[50]; // 书名
char author[20]; // 作者
int id; // 图书编号
int count; // 数量
struct Book *next; // 指向下一本书的指针
} Book;
// 定义用户结构体
typedef struct User {
char username[20]; // 用户名
char password[20]; // 密码
int role; // 角色:1-学生,2-教师,3-图书管理员,4-系统管理员
struct User *next; // 指向下一个用户的指针
} User;
// 定义全局变量
Book *books = NULL; // 图书链表
User *users = NULL; // 用户链表
User *currentUser = NULL; // 当前用户
// 函数声明
void displayMenu();
void initBooks();
void initUsers();
void saveBooks();
void saveUsers();
void addBook();
void deleteBook();
void showBooks();
void addUser();
void deleteUser();
void showUsers();
void changePassword();
void login();
void logout();
void borrowBook();
void returnBook();
void renewBook();
void showBorrowedBooks();
void showMenuByRole();
void showBooksByRole();
int main() {
initBooks();
initUsers();
displayMenu();
return 0;
}
// 显示菜单
void displayMenu() {
int choice;
do {
printf("欢迎使用图书管理系统!\n");
printf("1. 添加图书\n");
printf("2. 删除图书\n");
printf("3. 查看图书\n");
printf("4. 添加用户\n");
printf("5. 删除用户\n");
printf("6. 查看用户\n");
printf("7. 修改密码\n");
printf("8. 登录\n");
printf("9. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook();
break;
case 2:
deleteBook();
break;
case 3:
showBooksByRole();
break;
case 4:
addUser();
break;
case 5:
deleteUser();
break;
case 6:
showUsers();
break;
case 7:
changePassword();
break;
case 8:
login();
break;
case 9:
logout();
break;
default:
printf("无效的选项,请重新选择!\n");
break;
}
} while (choice != 9);
saveBooks();
saveUsers();
printf("再见!\n");
}
// 初始化图书
void initBooks() {
FILE *fp = fopen("books.dat", "rb");
if (fp != NULL) {
Book *p = NULL;
while (!feof(fp)) {
Book *book = (Book *)malloc(sizeof(Book));
fread(book, sizeof(Book), 1, fp);
if (books == NULL) {
books = book;
p = books;
} else {
p->next = book;
p = p->next;
}
p->next = NULL;
}
fclose(fp);
}
}
// 初始化用户
void initUsers() {
FILE *fp = fopen("users.dat", "rb");
if (fp != NULL) {
User *p = NULL;
while (!feof(fp)) {
User *user = (User *)malloc(sizeof(User));
fread(user, sizeof(User), 1, fp);
if (users == NULL) {
users = user;
p = users;
} else {
p->next = user;
p = p->next;
}
p->next = NULL;
}
fclose(fp);
} else {
// 初始化管理员账号
User *admin = (User *)malloc(sizeof(User));
strcpy(admin->username, "admin");
strcpy(admin->password, "admin");
admin->role = 4;
admin->next = NULL;
users = admin;
}
}
// 保存图书
void saveBooks() {
FILE *fp = fopen("books.dat", "wb");
if (fp != NULL) {
Book *p = books;
while (p != NULL) {
fwrite(p, sizeof(Book), 1, fp);
p = p->next;
}
fclose(fp);
}
}
// 保存用户
void saveUsers() {
FILE *fp = fopen("users.dat", "wb");
if (fp != NULL) {
User *p = users;
while (p != NULL) {
fwrite(p, sizeof(User), 1, fp);
p = p->next;
}
fclose(fp);
}
}
// 添加图书
void addBook() {
if (currentUser == NULL || currentUser->role != 3) {
printf("权限不足!\n");
return;
}
Book *book = (Book *)malloc(sizeof(Book));
printf("请输入书名:");
scanf("%s", book->name);
printf("请输入作者:");
scanf("%s", book->author);
printf("请输入编号:");
scanf("%d", &book->id);
printf("请输入数量:");
scanf("%d", &book->count);
book->next = NULL;
if (books == NULL) {
books = book;
} else {
Book *p = books;
while (p->next != NULL) {
p = p->next;
}
p->next = book;
}
printf("添加成功!\n");
}
// 删除图书
void deleteBook() {
if (currentUser == NULL || currentUser->role != 3) {
printf("权限不足!\n");
return;
}
int id;
printf("请输入编号:");
scanf("%d", &id);
Book *p = books;
if (p == NULL) {
printf("没有找到该书!\n");
return;
}
if (p->id == id) {
books = p->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL) {
if (p->next->id == id) {
Book *q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("没有找到该书!\n");
}
// 查看图书
void showBooks() {
Book *p = books;
while (p != NULL) {
printf("书名:%s\t作者:%s\t编号:%d\t数量:%d\n", p->name, p->author, p->id, p->count);
p = p->next;
}
}
// 添加用户
void addUser() {
if (currentUser == NULL || currentUser->role != 4) {
printf("权限不足!\n");
return;
}
User *user = (User *)malloc(sizeof(User));
printf("请输入用户名:");
scanf("%s", user->username);
printf("请输入密码:");
scanf("%s", user->password);
printf("请输入角色(1-学生,2-教师,3-图书管理员,4-系统管理员):");
scanf("%d", &user->role);
user->next = NULL;
if (users == NULL) {
users = user;
} else {
User *p = users;
while (p->next != NULL) {
p = p->next;
}
p->next = user;
}
printf("添加成功!\n");
}
// 删除用户
void deleteUser() {
if (currentUser == NULL || currentUser->role != 4) {
printf("权限不足!\n");
return;
}
char username[20];
printf("请输入用户名:");
scanf("%s", username);
User *p = users;
if (p == NULL) {
printf("没有找到该用户!\n");
return;
}
if (strcmp(p->username, username) == 0) {
users = p->next;
free(p);
printf("删除成功!\n");
return;
}
while (p->next != NULL) {
if (strcmp(p->next->username, username) == 0) {
User *q = p->next;
p->next = q->next;
free(q);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("没有找到该用户!\n");
}
// 查看用户
void showUsers() {
User *p = users;
while (p != NULL) {
printf("用户名:%s\t密码:%s\t角色:%d\n", p->username, p->password, p->role);
p = p->next;
}
}
// 修改密码
void changePassword() {
if (currentUser == NULL) {
printf("请先登录!\n");
return;
}
char password[20];
printf("请输入新密码:");
scanf("%s", password);
strcpy(currentUser->password, password);
printf("密码修改成功!\n");
}
// 登录
void login() {
if (currentUser != NULL) {
printf("您已经登录了!\n");
return;
}
char username[20], password[20];
printf("请输入用户名:");
scanf("%s", username);
printf("请输入密码:");
scanf("%s", password);
User *p = users;
while (p != NULL) {
if (strcmp(p->username, username) == 0 && strcmp(p->password, password) == 0) {
currentUser = p;
printf("登录成功!\n");
showMenuByRole();
return;
}
p = p->next;
}
printf("用户名或密码错误!\n");
}
// 退出
void logout() {
if (currentUser == NULL) {
printf("请先登录!\n");
return;
}
currentUser = NULL;
printf("退出成功!\n");
}
// 借书
void borrowBook() {
if (currentUser == NULL || currentUser->role != 1) {
printf("权限不足!\n");
return;
}
int id;
printf("请输入编号:");
scanf("%d", &id);
Book *p = books;
while (p != NULL) {
if (p->id == id) {
if (p->count > 0) {
p->count--;
printf("借书成功!\n");
return;
} else {
printf("该书已经全部借出!\n");
return;
}
}
p = p->next;
}
printf("没有找到该书!\n");
}
// 还书
void returnBook() {
if (currentUser == NULL || currentUser->role != 1) {
printf("权限不足!\n");
return;
}
int id;
printf("请输入编号:");
scanf("%d", &id);
Book *p = books;
while (p != NULL) {
if (p->id == id) {
p->count++;
printf("还书成功!\n");
return;
}
p = p->next;
}
printf("没有找到该书!\n");
}
// 续借
void renewBook() {
if (currentUser == NULL || currentUser->role != 1) {
printf("权限不足!\n");
return;
}
int id;
printf("请输入编号:");
scanf("%d", &id);
Book *p = books;
while (p != NULL) {
if (p->id == id) {
printf("续借成功!\n");
return;
}
p = p->next;
}
printf("没有找到该书!\n");
}
// 查看借阅情况
void showBorrowedBooks() {
if (currentUser == NULL || currentUser->role != 1) {
printf("权限不足!\n");
return;
}
printf("借阅情况:\n");
// TODO: 根据当前用户查找借阅记录
}
// 根据角色显示菜单
void showMenuByRole() {
switch (currentUser->role) {
case 1:
printf("1. 借书\n");
printf("2. 还书\n");
printf("3. 续借\n");
printf("4. 查看借阅情况\n");
break;
case 2:
printf("教师功能正在开发中...\n");
break;
case 3:
printf("1. 添加图书\n");
printf("2. 删除图书\n");
printf("3. 查看图书\n");
break;
case 4:
printf("1. 添加用户\n");
printf("2. 删除用户\n");
printf("3. 查看用户\n");
printf("4. 修改密码\n");
break;
}
}
// 根据角色显示图书
void showBooksByRole() {
switch (currentUser->role) {
case 1:
showBooks();
break;
case 2:
printf("教师功能正在开发中...\n");
break;
case 3:
showBooks();
break;
case 4:
showBooks();
break;
}
}
```
以上代码实现了图书入库、图书查询、旧书的删除、创建用户、查询用户、借书、还书、续借、修改用户密码等功能,并且实现了系统管理员、图书管理员、学生和教师4种不同角色的权限管理。注意,这只是一个简单的示例,实际应用中需要根据具体需求进行适当的修改和扩展。
阅读全文