|
| 1 | +# CLHS Score Android — The Affiliated Zhongli Senior High School of National Central University |
| 2 | + |
| 3 | +[](https://opensource.org/licenses/MIT) |
| 4 | +[](https://deepwiki.com/alvin000009238/clhs_score) |
| 5 | + |
| 6 | +> [!IMPORTANT] |
| 7 | +> This project is an unofficial third-party service. We are not directly affiliated with CLHS or the ShinHer Smart Campus Platform. |
| 8 | +
|
| 9 | +This repository is centered on a native Android app built with Kotlin, Jetpack Compose, and Material 3. It provides grade lookup, analysis, trend comparison, and timetable widgets. |
| 10 | + |
| 11 | +## Highlights |
| 12 | + |
| 13 | +* **Native Android app**: Built with Kotlin, Jetpack Compose, and Material 3, with direct mobile-side access to the school system. |
| 14 | +* **Grade visualization**: Radar charts, bar charts, five-standard placement, and score distributions for quickly understanding academic performance. |
| 15 | +* **Dark mode and dynamic color**: Supports light mode, dark mode, AMOLED pure black mode, and Material You dynamic color. |
| 16 | +* **Grade simulator**: Adjust subject scores and included subjects to quickly estimate the recalculated average. |
| 17 | +* **Historical trend comparison**: Automatically compares the current exam with the previous one to track improvement or decline over time. |
| 18 | + |
| 19 | +## Architecture Overview |
| 20 | + |
| 21 | +```mermaid |
| 22 | +flowchart TB |
| 23 | +
|
| 24 | + %% ===== External Systems ===== |
| 25 | + subgraph EXT["External Systems"] |
| 26 | + API["School System API<br/>(shcloud2.k12ea.gov.tw)"] |
| 27 | + end |
| 28 | +
|
| 29 | + %% ===== Data Layer ===== |
| 30 | + subgraph DATA["Data Layer (Natural)"] |
| 31 | + CLIENT["SchoolGradeClient<br/>(OkHttp + Jsoup)"] |
| 32 | + REPO["GradeRepository"] |
| 33 | + CACHE["GradeCacheStore<br/>(DataStore)"] |
| 34 | +
|
| 35 | + CLIENT --> REPO |
| 36 | + REPO <--> CACHE |
| 37 | + end |
| 38 | +
|
| 39 | + %% ===== Logic & UI ===== |
| 40 | + subgraph UI["Logic & UI (Code Entity Space)"] |
| 41 | + VM["ScoreViewModel"] |
| 42 | + ANALYSIS["GradeAnalysis.kt"] |
| 43 | + SCREEN["Compose UI<br/>(GradesScreen)"] |
| 44 | +
|
| 45 | + VM <--> ANALYSIS |
| 46 | + VM --> SCREEN |
| 47 | + end |
| 48 | +
|
| 49 | + %% ===== Connections ===== |
| 50 | + CLIENT <--> |HTTPS/JSON| API |
| 51 | + REPO --> VM |
| 52 | +``` |
| 53 | + |
| 54 | +## Project Structure |
| 55 | + |
| 56 | +| Directory | Description | Documentation | |
| 57 | +| ------------------------------------------ | ------------------------------------------------------------------ | -------------------------------------- | |
| 58 | +| [`android/`](android/) | Native Kotlin / Jetpack Compose app | [android/README.md](android/README.md) | |
| 59 | +| [`demo/`](demo/) | Demo assets and screenshot pages | | |
| 60 | +| [`.github/workflows/`](.github/workflows/) | Workflows for Android releases, demo deployment, and code scanning | | |
| 61 | + |
| 62 | +## Quick Start |
| 63 | + |
| 64 | +See [`android/README.md`](android/README.md) for instructions on building and testing the Android app with Gradle. |
| 65 | + |
| 66 | +## Contributor |
| 67 | + |
| 68 | +[@alvin000009238](https://github.com/alvin000009238) |
| 69 | + |
| 70 | +## License |
| 71 | + |
| 72 | +[MIT](LICENSE) © 2026 alvin000009238 |
0 commit comments