140 lines
3.3 KiB
Markdown
140 lines
3.3 KiB
Markdown
# 问卷调查系统
|
||
|
||
功能完善的在线问卷调查系统,支持多种题型、随机抽题、免注册答题等特性。
|
||
|
||
## 功能特性
|
||
|
||
### 用户端功能
|
||
- **免注册答题**:用户无需注册,填写基本信息即可开始答题
|
||
- **信息验证**:严格的姓名和手机号格式验证
|
||
- **多种题型**:支持单选、多选、判断、文字描述四种题型
|
||
- **随机抽题**:根据配置随机生成试卷,确保题目多样性
|
||
- **实时反馈**:答题完成后立即显示得分和答案详情
|
||
|
||
### 管理端功能
|
||
- **题库管理**:支持Excel导入和手动编辑题目
|
||
- **题型配置**:灵活设置各题型比例和试卷总分
|
||
- **数据统计**:详细的答题记录和统计分析
|
||
- **数据导出**:支持导出答题记录和统计报表
|
||
|
||
## 技术架构
|
||
|
||
- **前端**:React 18 + TypeScript + Ant Design + Tailwind CSS
|
||
- **后端**:Express.js + TypeScript
|
||
- **数据库**:SQLite3
|
||
- **构建工具**:Vite
|
||
- **文件处理**:Multer + XLSX
|
||
|
||
## 快速开始
|
||
|
||
### 安装依赖
|
||
```bash
|
||
npm install
|
||
```
|
||
|
||
### 启动开发服务器
|
||
```bash
|
||
npm run dev
|
||
```
|
||
|
||
### 构建生产版本
|
||
```bash
|
||
npm run build
|
||
```
|
||
|
||
### 启动生产服务器
|
||
```bash
|
||
npm start
|
||
```
|
||
|
||
## 管理员账号
|
||
|
||
- 用户名:admin
|
||
- 密码:admin123
|
||
|
||
## API接口
|
||
|
||
### 用户相关
|
||
- `POST /api/users` - 创建用户
|
||
- `GET /api/users/:id` - 获取用户信息
|
||
- `POST /api/users/validate` - 验证用户信息
|
||
|
||
### 题库管理
|
||
- `GET /api/questions` - 获取题目列表
|
||
- `POST /api/questions` - 创建题目
|
||
- `PUT /api/questions/:id` - 更新题目
|
||
- `DELETE /api/questions/:id` - 删除题目
|
||
- `POST /api/questions/import` - Excel导入题目
|
||
|
||
### 答题相关
|
||
- `POST /api/quiz/generate` - 生成随机试卷
|
||
- `POST /api/quiz/submit` - 提交答题
|
||
- `GET /api/quiz/records/:userId` - 获取用户答题记录
|
||
|
||
### 管理员相关
|
||
- `POST /api/admin/login` - 管理员登录
|
||
- `GET /api/admin/config` - 获取抽题配置
|
||
- `PUT /api/admin/config` - 更新抽题配置
|
||
- `GET /api/admin/statistics` - 获取统计数据
|
||
|
||
## 数据库设计
|
||
|
||
### 用户表 (users)
|
||
- id: 用户ID
|
||
- name: 姓名
|
||
- phone: 手机号
|
||
- created_at: 创建时间
|
||
|
||
### 题目表 (questions)
|
||
- id: 题目ID
|
||
- content: 题目内容
|
||
- type: 题型
|
||
- options: 选项(JSON)
|
||
- answer: 标准答案
|
||
- score: 分值
|
||
- created_at: 创建时间
|
||
|
||
### 答题记录表 (quiz_records)
|
||
- id: 记录ID
|
||
- user_id: 用户ID
|
||
- total_score: 总得分
|
||
- correct_count: 正确题数
|
||
- total_count: 总题数
|
||
- created_at: 创建时间
|
||
|
||
### 答题答案表 (quiz_answers)
|
||
- id: 答案ID
|
||
- record_id: 记录ID
|
||
- question_id: 题目ID
|
||
- user_answer: 用户答案
|
||
- score: 得分
|
||
- is_correct: 是否正确
|
||
- created_at: 创建时间
|
||
|
||
## Excel导入格式
|
||
|
||
Excel文件需要包含以下列:
|
||
- 题目内容(必填)
|
||
- 题型(单选/多选/判断/文字描述)
|
||
- 标准答案(根据题型格式要求)
|
||
- 分值(数字类型)
|
||
- 选项(单选/多选题需要,用|分隔)
|
||
|
||
## 开发规范
|
||
|
||
- 使用TypeScript进行类型检查
|
||
- 遵循React最佳实践
|
||
- 使用ESLint进行代码检查
|
||
- 使用Prettier进行代码格式化
|
||
|
||
## 部署说明
|
||
|
||
1. 构建项目:`npm run build`
|
||
2. 上传构建文件到服务器
|
||
3. 安装生产依赖:`npm ci --only=production`
|
||
4. 启动服务:`npm start`
|
||
5. 配置反向代理(如Nginx)
|
||
|
||
## 许可证
|
||
|
||
MIT License |