# twee3y/kursachjava architecture

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

- Interactive diagram: https://gitdiagram.com/twee3y/kursachjava
- Repository: https://github.com/twee3y/kursachjava

## Overview

This is a console application for tracking an organization’s office equipment by department. The user launches the program, initializes demo data if needed, and uses the menu to manage departments and devices or run searches and reports; the service applies the business rules and persists changes in text files. The graph reflects the sampled source: it does not assume additional capabilities beyond the service contract and menu. Data-file interactions are shown where FileWorker makes them explicit.

Main entry points: [`src/utils/FileWorker.java`](https://github.com/twee3y/kursachjava/blob/master/src/utils/FileWorker.java) (Text file access), [`src/service/UchetService.java`](https://github.com/twee3y/kursachjava/blob/master/src/service/UchetService.java) (Inventory and reports), [`src/ui/MainMenu.java`](https://github.com/twee3y/kursachjava/blob/master/src/ui/MainMenu.java) (Console menu), [`src/Main.java`](https://github.com/twee3y/kursachjava/blob/master/src/Main.java) (Program entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and UI"]
  node_main["Program entry<br/>[Main.java]"]
  node_demo["Demo initializer<br/>[DemoData.java]"]
  node_menu["Console menu<br/>[MainMenu.java]"]
end

subgraph group_business["Accounting service"]
  node_contract["Service contract<br/>[IUchetService.java]"]
  node_service["Inventory and reports<br/>[UchetService.java]"]
end

subgraph group_domain["Domain models"]
  node_department["Department<br/>[Otdel.java]"]
  node_device["Equipment device<br/>[Ustroystvo.java]"]
  node_base["Entity base<br/>[BazaModel.java]"]
end

subgraph group_persistence["File persistence"]
  node_files["Text file access<br/>[FileWorker.java]"]
  node_departmentdata[("Department records<br/>[otdely.txt]")]
  node_equipmentdata[("Equipment records<br/>[tehnika.txt]")]
end

node_user(("User"))

node_user -->|"launches"| node_main
node_main -->|"initializes"| node_demo
node_main -->|"starts"| node_menu
node_user -->|"uses"| node_menu
node_menu -->|"invokes"| node_service
node_menu -->|"depends on"| node_contract
node_service -->|"implements"| node_contract
node_service -->|"manages"| node_department
node_service -->|"manages and searches"| node_device
node_service -->|"loads and saves"| node_files
node_demo -->|"writes samples"| node_files
node_files -->|"parses and serializes"| node_department
node_files -->|"parses and serializes"| node_device
node_files -->|"reads and writes"| node_departmentdata
node_files -->|"reads and writes"| node_equipmentdata
node_department -->|"extends"| node_base
node_device -->|"extends"| node_base

click node_main "https://github.com/twee3y/kursachjava/blob/master/src/Main.java"
click node_demo "https://github.com/twee3y/kursachjava/blob/master/src/utils/DemoData.java"
click node_menu "https://github.com/twee3y/kursachjava/blob/master/src/ui/MainMenu.java"
click node_contract "https://github.com/twee3y/kursachjava/blob/master/src/service/IUchetService.java"
click node_service "https://github.com/twee3y/kursachjava/blob/master/src/service/UchetService.java"
click node_department "https://github.com/twee3y/kursachjava/blob/master/src/model/Otdel.java"
click node_device "https://github.com/twee3y/kursachjava/blob/master/src/model/Ustroystvo.java"
click node_base "https://github.com/twee3y/kursachjava/blob/master/src/model/BazaModel.java"
click node_files "https://github.com/twee3y/kursachjava/blob/master/src/utils/FileWorker.java"
click node_departmentdata "https://github.com/twee3y/kursachjava/blob/master/otdely.txt"
click node_equipmentdata "https://github.com/twee3y/kursachjava/blob/master/tehnika.txt"

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_main,node_demo,node_menu,node_user toneBlue
class node_contract,node_service toneAmber
class node_department,node_device,node_base toneMint
class node_files,node_departmentdata,node_equipmentdata toneRose
```

## Components

### Application and UI

- [Program entry](https://github.com/twee3y/kursachjava/blob/master/src/Main.java): `src/Main.java`
- [Demo initializer](https://github.com/twee3y/kursachjava/blob/master/src/utils/DemoData.java): `src/utils/DemoData.java`
- [Console menu](https://github.com/twee3y/kursachjava/blob/master/src/ui/MainMenu.java): `src/ui/MainMenu.java`

### Accounting service

- [Service contract](https://github.com/twee3y/kursachjava/blob/master/src/service/IUchetService.java): `src/service/IUchetService.java`
- [Inventory and reports](https://github.com/twee3y/kursachjava/blob/master/src/service/UchetService.java): `src/service/UchetService.java`

### Domain models

- [Department](https://github.com/twee3y/kursachjava/blob/master/src/model/Otdel.java): `src/model/Otdel.java`
- [Equipment device](https://github.com/twee3y/kursachjava/blob/master/src/model/Ustroystvo.java): `src/model/Ustroystvo.java`
- [Entity base](https://github.com/twee3y/kursachjava/blob/master/src/model/BazaModel.java): `src/model/BazaModel.java`

### File persistence

- [Text file access](https://github.com/twee3y/kursachjava/blob/master/src/utils/FileWorker.java): `src/utils/FileWorker.java`
- [Department records](https://github.com/twee3y/kursachjava/blob/master/otdely.txt): `otdely.txt`
- [Equipment records](https://github.com/twee3y/kursachjava/blob/master/tehnika.txt): `tehnika.txt`

### Other components

- **User**

## Connections

- User → Program entry: launches (evidence: `src/Main.java`)
- Program entry → Demo initializer: initializes (evidence: `src/Main.java`)
- Program entry → Console menu: starts (evidence: `src/Main.java`)
- User → Console menu: uses (evidence: `src/ui/MainMenu.java`)
- Console menu → Inventory and reports: invokes (evidence: `src/ui/MainMenu.java`)
- Console menu → Service contract: depends on (evidence: `src/ui/MainMenu.java`)
- Inventory and reports → Service contract: implements (evidence: `src/service/UchetService.java`)
- Inventory and reports → Department: manages (evidence: `src/service/UchetService.java`)
- Inventory and reports → Equipment device: manages and searches (evidence: `src/service/UchetService.java`)
- Inventory and reports → Text file access: loads and saves (evidence: `src/service/UchetService.java`)
- Demo initializer → Text file access: writes samples (evidence: `src/utils/DemoData.java`)
- Text file access → Department: parses and serializes (evidence: `src/utils/FileWorker.java`)
- Text file access → Equipment device: parses and serializes (evidence: `src/utils/FileWorker.java`)
- Text file access → Department records: reads and writes (evidence: `src/utils/FileWorker.java`)
- Text file access → Equipment records: reads and writes (evidence: `src/utils/FileWorker.java`)
- Department → Entity base: extends (evidence: `src/model/Otdel.java`)
- Equipment device → Entity base: extends (evidence: `src/model/Ustroystvo.java`)
