# mindskip/xzs architecture

> Architecture diagram of the GitHub repository mindskip/xzs, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mindskip/xzs
- Repository: https://github.com/mindskip/xzs

## Overview

学之思（XZS）是面向学校的前后端分离考试系统，提供管理端、学生 Web 端和微信小程序。管理员维护学科、题库、试卷与任务；学生登录后参加考试或练习、提交答案并查看记录与错题。后端提供这些客户端共用的 REST API，并处理认证、用户、消息和答卷。README 说明的主要功能用于补足未采样模块；具体服务调用及持久化实现未在所给源码摘录中展示，相关连线因此保持在可确认的 API 边界。

Main entry points: [`source/xzs/src/main/java/com/mindskip/xzs/controller/student`](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/student) (学生 API), [`source/xzs/src/main/java/com/mindskip/xzs/controller/admin`](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/admin) (管理 API), [`source/vue/xzs-admin/src/views`](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views) (管理功能), [`source/vue/xzs-student/src/views`](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-student/src/views) (学生功能)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["用户端"]
  node_student["学生 Web<br/>[main.js]"]
  node_miniapp["微信小程序<br/>[app.js]"]
end

subgraph group_authoring["考试管理"]
  node_admin["管理端<br/>[main.js]"]
  node_adminviews["管理功能"]
  node_subject["学科管理"]
  node_questions["题目管理"]
  node_papers["试卷管理"]
  node_tasks["任务管理"]
end

subgraph group_learning["学习答题"]
  node_studentviews["学生功能"]
  node_takeexam["考试答题<br/>[do.vue]"]
  node_practice["试卷练习<br/>[index.vue]"]
  node_records["记录与错题<br/>[index.vue]"]
end

subgraph group_backend["服务端 API"]
  node_adminapi["管理 API"]
  node_studentapi["学生 API"]
  node_wxapi["小程序 API"]
  node_examanswers["答卷处理"]
  node_services["业务服务"]
end

subgraph group_identity["身份与消息"]
  node_auth["认证服务"]
  node_userservice["用户服务<br/>[UserService.java]"]
  node_messages["消息功能"]
end

node_database[("PostgreSQL")]
node_administrator(("管理员"))
node_learner(("学生"))
node_wechat(("微信平台"))

node_administrator -->|"uses"| node_admin
node_admin -->|"navigates"| node_adminviews
node_adminviews -->|"manages"| node_subject
node_adminviews -->|"manages"| node_questions
node_adminviews -->|"manages"| node_papers
node_adminviews -->|"manages"| node_tasks
node_subject -->|"requests"| node_adminapi
node_questions -->|"requests"| node_adminapi
node_papers -->|"requests"| node_adminapi
node_tasks -->|"requests"| node_adminapi
node_adminapi -->|"delegates"| node_services
node_learner -->|"uses"| node_student
node_student -->|"navigates"| node_studentviews
node_studentviews -->|"opens"| node_takeexam
node_studentviews -->|"opens"| node_practice
node_takeexam -->|"requests"| node_studentapi
node_practice -->|"requests"| node_studentapi
node_studentapi -->|"submits to"| node_examanswers
node_examanswers -->|"calculates via"| node_services
node_examanswers -->|"returns score"| node_records
node_studentviews -->|"views"| node_records
node_records -->|"requests"| node_studentapi
node_learner -->|"uses"| node_miniapp
node_wechat -->|"hosts"| node_miniapp
node_miniapp -->|"requests"| node_wxapi
node_wxapi -->|"submits to"| node_examanswers
node_adminapi -->|"reads/writes"| node_database
node_studentapi -->|"reads/writes"| node_database
node_wxapi -->|"reads/writes"| node_database
node_studentapi -->|"authenticates"| node_auth
node_adminapi -->|"authenticates"| node_auth
node_studentapi -->|"uses"| node_userservice
node_adminapi -->|"uses"| node_userservice
node_studentapi -->|"serves messages"| node_messages

click node_admin "https://github.com/mindskip/xzs/blob/master/source/vue/xzs-admin/src/main.js"
click node_student "https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/main.js"
click node_miniapp "https://github.com/mindskip/xzs/blob/master/source/wx/xzs-student/app.js"
click node_adminviews "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views"
click node_subject "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/education/subject"
click node_questions "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/exam/question"
click node_papers "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/exam/paper"
click node_tasks "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/task"
click node_studentviews "https://github.com/mindskip/xzs/tree/master/source/vue/xzs-student/src/views"
click node_takeexam "https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/exam/paper/do.vue"
click node_practice "https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/paper/index.vue"
click node_records "https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/record/index.vue"
click node_adminapi "https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/admin"
click node_studentapi "https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/student"
click node_wxapi "https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student"
click node_examanswers "https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student/ExamPaperAnswerController.java"
click node_services "https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/service"
click node_auth "https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/service/AuthenticationService.java"
click node_userservice "https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/service/UserService.java"
click node_messages "https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/controller/student/UserController.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_student,node_miniapp toneBlue
class node_admin,node_adminviews,node_subject,node_questions,node_papers,node_tasks,node_database toneAmber
class node_studentviews,node_takeexam,node_practice,node_records toneMint
class node_adminapi,node_studentapi,node_wxapi,node_examanswers,node_services toneRose
class node_auth,node_userservice,node_messages,node_administrator,node_learner,node_wechat toneIndigo
```

## Components

### 用户端

- [学生 Web](https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/main.js): `source/vue/xzs-student/src/main.js`
- [微信小程序](https://github.com/mindskip/xzs/blob/master/source/wx/xzs-student/app.js): `source/wx/xzs-student/app.js`

### 考试管理

- [管理端](https://github.com/mindskip/xzs/blob/master/source/vue/xzs-admin/src/main.js): `source/vue/xzs-admin/src/main.js`
- [管理功能](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views): `source/vue/xzs-admin/src/views`
- [学科管理](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/education/subject): `source/vue/xzs-admin/src/views/education/subject`
- [题目管理](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/exam/question): `source/vue/xzs-admin/src/views/exam/question`
- [试卷管理](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/exam/paper): `source/vue/xzs-admin/src/views/exam/paper`
- [任务管理](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-admin/src/views/task): `source/vue/xzs-admin/src/views/task`

### 学习答题

- [学生功能](https://github.com/mindskip/xzs/tree/master/source/vue/xzs-student/src/views): `source/vue/xzs-student/src/views`
- [考试答题](https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/exam/paper/do.vue): `source/vue/xzs-student/src/views/exam/paper/do.vue`
- [试卷练习](https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/paper/index.vue): `source/vue/xzs-student/src/views/paper/index.vue`
- [记录与错题](https://github.com/mindskip/xzs/blob/master/source/vue/xzs-student/src/views/record/index.vue): `source/vue/xzs-student/src/views/record/index.vue`

### 服务端 API

- [管理 API](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/admin): `source/xzs/src/main/java/com/mindskip/xzs/controller/admin`
- [学生 API](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/student): `source/xzs/src/main/java/com/mindskip/xzs/controller/student`
- [小程序 API](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student): `source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student`
- [答卷处理](https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student/ExamPaperAnswerController.java): `source/xzs/src/main/java/com/mindskip/xzs/controller/wx/student/ExamPaperAnswerController.java`
- [业务服务](https://github.com/mindskip/xzs/tree/master/source/xzs/src/main/java/com/mindskip/xzs/service): `source/xzs/src/main/java/com/mindskip/xzs/service`

### 身份与消息

- [认证服务](https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/service/AuthenticationService.java): `source/xzs/src/main/java/com/mindskip/xzs/service/AuthenticationService.java`
- [用户服务](https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/service/UserService.java): `source/xzs/src/main/java/com/mindskip/xzs/service/UserService.java`
- [消息功能](https://github.com/mindskip/xzs/blob/master/source/xzs/src/main/java/com/mindskip/xzs/controller/student/UserController.java): `source/xzs/src/main/java/com/mindskip/xzs/controller/student/UserController.java`

### Other components

- **PostgreSQL**
- **管理员**
- **学生**
- **微信平台**

## Connections

- 管理员 → 管理端: uses
- 管理端 → 管理功能: navigates
- 管理功能 → 学科管理: manages
- 管理功能 → 题目管理: manages
- 管理功能 → 试卷管理: manages
- 管理功能 → 任务管理: manages
- 学科管理 → 管理 API: requests
- 题目管理 → 管理 API: requests
- 试卷管理 → 管理 API: requests
- 任务管理 → 管理 API: requests
- 管理 API → 业务服务: delegates
- 学生 → 学生 Web: uses
- 学生 Web → 学生功能: navigates
- 学生功能 → 考试答题: opens
- 学生功能 → 试卷练习: opens
- 考试答题 → 学生 API: requests
- 试卷练习 → 学生 API: requests
- 学生 API → 答卷处理: submits to
- 答卷处理 → 业务服务: calculates via
- 答卷处理 → 记录与错题: returns score
- 学生功能 → 记录与错题: views
- 记录与错题 → 学生 API: requests
- 学生 → 微信小程序: uses
- 微信平台 → 微信小程序: hosts
- 微信小程序 → 小程序 API: requests
- 小程序 API → 答卷处理: submits to
- 管理 API → PostgreSQL: reads/writes
- 学生 API → PostgreSQL: reads/writes
- 小程序 API → PostgreSQL: reads/writes
- 学生 API → 认证服务: authenticates
- 管理 API → 认证服务: authenticates
- 学生 API → 用户服务: uses
- 管理 API → 用户服务: uses
- 学生 API → 消息功能: serves messages
