某学校拟建立一个小型的图书管理系统(学生不超过1000人,图书不超过5000册),实现图书入库,图书查询、旧书的删除、创建用户、查询用户、借书、还书、续借、修改用户密码等. 1.要求系统提供系统管理员、图书管理员、学生和教师4种不同角色的权限管理.不同用户拥有“浏览用户”、“添加用户”、“删除用户”、“浏览图书”、“添加图书”、“删除图书”“初始化用户密码”“修改密码”等权限. 3.用c语言

时间: 2023-08-07 13:06:53 浏览: 40
好的,这是一个比较典型的图书管理系统,以下是一个简单的 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种不同角色的权限管理。注意,这只是一个简单的示例,实际应用中需要根据具体需求进行适当的修改和扩展。

相关推荐

最新推荐

recommend-type

西文图书管理系统课程设计报告

试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。 要求: (1)每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。 (2)作为演示系统,不必使用文件,全部数据可以都在内存存放。...
recommend-type

图书管理系统课程设计说明书.doc

数据结构课程设计设计一个计算机管理系统完成图书管理基本业务。设计内容如下: (1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量; (2) 读者信息包括读者编号、姓名、借阅记录; (3) 对书号建立索引...
recommend-type

图书管理系统《数据结构课程设计报告》

【设计要求】对图书进行管理,系统具有如下功能 1.图书入库:新购一种书,确定书号后,登记到图书目录表中,如果表中已有,则只将库存量增加;图书数据包括图书书号,书名,作者,数量,单价等; 2.排序:以书号按...
recommend-type

图书管理系统_业务描述

2.1 图书入库 由采购员将图书采购回来后,由采编人员编目,...学生可以续借图书,但考虑续借的次数不能超过三次,且每次续借的天数不一样,第一次为30,第二次为20,第三次为10天;提示是否还有其它已到期未还的书。
recommend-type

[软件工程课程设计] 简易图书管理系统详细设计

图书馆是存放大量不同时期,不同作者,不同学科书籍的地方,如果不能有一套科学的数据库管理系统,就会使借书,还书,冻结等工作的效率大大降低,为此,我开发了一个图书馆数据库管理系统,使图书馆的书籍管理变得...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

get() { return this.photoState },

这是一个 JavaScript 中的方法定义,它定义了一个名为 `get` 的方法。这个方法没有参数,它返回了 `this.photoState`。在这个方法中,`this` 是指当前对象,而 `photoState` 是该对象的一个属性。通常情况下,`get` 方法用于获取对象的属性值,并且可以在获取属性值之前进行一些逻辑操作。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。