# 任务目标
请帮我实现一个完整的“图书信息管理 Android APP”,包含读者端和管理员端功能。
## 一、核心功能要求
### 1. 读者管理
- 读者注册:字段包括 读者编号(唯一)、姓名、性别、照片(可选用系统相册或拍照)、出生时间(日期选择器)
- 读者登录:使用 账号(读者编号) + 密码 登录
- 登录后功能:
- 修改个人信息(姓名、性别、照片、出生时间)
- 修改密码(需要旧密码验证)
- 查询图书(按书名/作者模糊查询)
- 借书(校验库存 > 0,同时校验读者未超限(如最多5本))
- 还书
- 续借(仅限未超期图书,最多续借1次,延长30天)
- 注意:读者不能修改读者编号
### 2. 图书管理(管理员功能)
- 管理员账号预置:admin / 123456
- 图书上架:输入 书名、作者、出版社、库存量
- 图书修改:修改任意字段
- 图书删除:从数据库中移除
- 图书信息展示:列表展示,支持点击查看详情
### 3. 管理员查看所有借阅信息
- 显示字段:借阅ID、读者姓名、图书名称、借书日期、应还日期、实际归还日期、状态(借出中/已归还)
- 支持按状态筛选(借出中 / 全部)
---
## 二、数据库设计(SQLite)
请设计以下三张表,并提供建表语句:
### 表1:读者表 (readers)
| 字段 | 类型 | 说明 |
|------|------|------|
| reader_id | TEXT PRIMARY KEY | 读者编号(用于登录) |
| name | TEXT | 姓名 |
| gender | TEXT | 性别 |
| photo_path | TEXT | 照片本地路径 |
| birth_date | TEXT | 出生时间 yyyy-MM-dd |
| password | TEXT | 密码(加密存储) |
### 表2:图书表 (books)
| 字段 | 类型 | 说明 |
|------|------|------|
| book_id | INTEGER PRIMARY KEY AUTOINCREMENT | 自增主键 |
| title | TEXT | 书名 |
| author | TEXT | 作者 |
| publisher | TEXT | 出版社 |
| stock | INTEGER | 库存量(≥0) |
### 表3:借阅记录表 (borrow_records)
| 字段 | 类型 | 说明 |
|------|------|------|
| record_id | INTEGER PRIMARY KEY AUTOINCREMENT |
| reader_id | TEXT | 关联读者编号 |
| book_id | INTEGER | 关联图书ID |
| borrow_date | TEXT | 借书日期 yyyy-MM-dd |
| due_date | TEXT | 应还日期 |
| return_date | TEXT | 实际归还日期,NULL表示未还 |
| renew_count | INTEGER DEFAULT 0 | 续借次数(0或1) |
| status | INTEGER | 0-借出中,1-已归还 |
---
## 三、Android 技术实现要求
- 最小 SDK:API 21 (Android 5.0)
- 使用语言:Java 或 Kotlin (推荐 Java)
- UI 布局:LinearLayout / RelativeLayout + RecyclerView
- 图片处理:使用 Glide 或内置 ImageView + 文件存储路径
- 数据库操作:SQLiteOpenHelper + ContentValues / Cursor
- 日期处理:Calendar 或 LocalDate (需API 26+兼容性处理)
- 密码加密:简单对称加密 或 明文(作业可接受,但建议 MD5/SHA-1)
---
## 四、界面模块规划(至少包含以下 Activity)
1. **登录界面**(选择读者或管理员入口)
2. **注册界面**
3. **读者主界面**(底部或侧边栏:图书查询、我的借阅、个人信息、修改密码)
4. **图书查询列表界面**(RecyclerView + 搜索栏)
5. **图书详情界面**(显示完整信息 + 借书/还书/续借按钮,根据状态动态显示)
6. **我的借阅界面**(列出当前借阅,支持还书/续借)
7. **个人信息界面**(展示并可修改)
8. **修改密码界面**
9. **管理员主界面**(图书管理、全部借阅记录)
10. **图书上架/编辑界面**
---
## 五、业务逻辑关键规则(请在代码中实现)
- 借书前校验:
- 库存 > 0
- 当前借阅数量 < 5(查询 status=0 的记录数)
- 无超期未还图书(due_date < 今天 且 return_date IS NULL)
- 还书时:
- 设置 return_date = 今天
- status = 1
- books.stock + 1
- 续借条件:
- 状态为借出中
- renew_count = 0
- 未超期
- 执行后:due_date = due_date + 30天,renew_count = 1
- 管理员删除图书时:检查是否有未还记录,如有则禁止删除并提示
---
## 六、交付内容期望
1. Android Studio 项目完整代码(结构化包路径)
2. 所有布局文件 (.xml)
3. 数据库帮助类 (DBHelper.java)
4. 关键业务逻辑的 Activity 和 Adapter
5. 一个简单的 README 说明登录测试账号(读者/管理员)
---
## 七、补充说明
- 本程序为期末大作业,不要求网络通信,仅本地 SQLite
- 照片功能可使用选择本地图片 + 保存路径到数据库(不必上传服务器)
- 代码风格整洁,重要方法添加注释
- 保证基本功能无崩溃,逻辑正确
请根据上述要求,生成完整的 Android 项目代码。