A student management application with a Java backend (TCP server + file-based persistence) and a Flutter frontend.
The backend exposes a simple command-based protocol over a TCP socket. The Flutter client (UI) uses this protocol to implement student workflows such as authentication, profile viewing, course selection, assignments, and personal task management.
Note: The ZIP attached in this repository contains the Java backend source files only (no Flutter code was present in the uploaded archive). The Flutter app requirements/specification are documented in the provided PDF. fileciteturn0file0
The Flutter application should provide (at minimum):
- Login / Sign up with validation and proper error feedback (e.g., toast/snackbar style notifications). fileciteturn0file0
- Profile page: show and edit user information. fileciteturn0file0
- Home with a simple dashboard and navigation to other pages. fileciteturn0file0
- Calendar / tasks: add tasks with date/time and local notifications. fileciteturn0file0
- Courses / classes: list available classes, display details, and allow selecting/taking courses. fileciteturn0file0
- News / web content: show a web page inside the app via WebView. fileciteturn0file0
- Assignments: list assignments, view deadlines/status, and mark as done. fileciteturn0file0
Implemented server-side capabilities (based on current source code):
- TCP server listening on port 8080
- Null-terminated request framing (client sends a command string ending with byte
0) - Command parsing with
~as the field delimiter - File-based storage under a configured data directory (currently hard-coded Windows paths)
- Supported commands:
loginsign inviewProfdelete accountchangePassviewSaramyCoursestakeCourseviewCoursesassignmentsdoAssignmentaddWorkdoWorkdeleteWorkviewWorks
Flutter App <---- TCP (8080) ----> Java Server (Server.java)
UI + UX |
pages (login, ...) |
-> File-based persistence (txt files)
- The backend uses
ServerSocketand spawns aClientHandlerthread per connection. - Each connection handles one command, sends a response, then closes the socket.
- The client writes the command string byte-by-byte and ends it with a null byte (
\0). - The server reads until it reaches
0and treats the collected bytes as the command string.
Requests use ~ as a separator:
login~<studentId>~<password>sign in~<studentId>~<password>~<fullName>viewProf~<studentId>changePass~<studentId>~<newPassword>- ...
- Some endpoints return status codes as plain text, e.g.
200,401,404. - Some endpoints return data separated by
~.
Known data response formats from the server implementation:
viewProf→fullName~totalUnits~averageviewSara→assignmentCount~highestGrade~lowestGradeassignments→ repeated groups ofcourseName~deadline~statusseparated by~myCourses/takeCourse→~-separated course details (teacher name, units, assignments count, ...)
The backend currently uses hard-coded Windows paths such as:
D:\University\AP\project\project files\Student info.txtD:\University\AP\project\project files\teachers\...D:\University\AP\project\project files\courses\...D:\University\AP\project\project files\assignments\...
Replace hard-coded absolute paths with:
- a relative path (e.g.,
./data/...), or - a configurable base path via environment variable / config file.
This makes the project runnable on any OS and easier to deploy.
- JDK 17+ (or JDK 11+ should also work if no newer APIs are used)
From the directory containing the .java files:
javac *.javajava ServerThe server listens on localhost:8080.
Because the Flutter source code is not included in the uploaded archive, the recommended structure is:
- A
flutter/folder (or separate repository) containing the Flutter app - A TCP client service that:
- connects to the server,
- sends the null-terminated command string,
- reads the response until EOF (since the server closes the connection after responding)
The PDF describes a phased delivery plan and UI requirements (login/signup, profile, calendar with notifications, courses, assignments, webview, etc.). fileciteturn0file0
- Server runs but requests fail: ensure the server data directory exists and file paths are correct.
- Connection issues: confirm port
8080is free and firewall rules allow local connections. - Cross-platform issues: replace
D:\...paths with relative paths or a configurable base directory.
Mahan Baneshi (Backend part) & Mohammad Mahdi Arjmandnia (Frontend part)
Course project (Advanced Programming) — Java backend + Flutter frontend.