A comprehensive full-stack student management application built with Java backend and Flutter frontend. This system provides role-based access for administrators, teachers, and students to manage courses, assignments, grades, and academic activities.
- Features
- Architecture
- Technologies
- Prerequisites
- Installation
- Usage
- Project Structure
- Testing
- Known Issues & Limitations
- Future Enhancements
- Contributing
- License
- Authors
- Acknowledgments
- Contact
- Add and remove teachers
- Create and manage courses
- Assign teachers to courses
- View system-wide statistics
- Manage user accounts
- View assigned courses
- Create and manage assignments
- Grade student submissions
- Track student progress
- Post announcements and news
- Manage course materials
- Enroll in courses
- View course materials and assignments
- Submit assignments
- Track grades and progress
- View personalized news feed
- Birthday notifications
- Task management (to-do list)
This project follows a client-server architecture:
- Backend: Java-based HTTP server handling business logic, data persistence, and API endpoints
- Frontend: Flutter mobile application providing cross-platform UI (Android/iOS)
- Communication: RESTful API with JSON data exchange
- Data Storage: File-based persistence system (text files)
┌─────────────────┐ HTTP/REST API ┌──────────────────┐
│ │ ◄──────────────────────────► │ │
│ Flutter App │ JSON Data │ Java Server │
│ (Frontend) │ │ (Backend) │
│ │ │ │
└─────────────────┘ └──────────────────┘
│
▼
┌──────────────────┐
│ File Storage │
│ (data/*.txt) │
└──────────────────┘
- Language: Java
- Server: Custom HTTP server implementation
- Data Storage: File-based (text files)
- Architecture: Object-oriented design with MVC pattern
- Framework: Flutter 3.3.3+
- Language: Dart
- UI: Material Design
- State Management: StatefulWidget
- HTTP Client:
httppackage - Dependencies:
intl- Internationalization and date formattingurl_launcher- Opening URLsfile_picker- File selectionhtml- HTML parsingconfetti- Celebration animations
- Java Development Kit (JDK) 11 or higher
- IntelliJ IDEA (recommended) or any Java IDE
- Basic understanding of Java and HTTP protocols
- Flutter SDK 3.3.3 or higher
- Dart SDK (included with Flutter)
- Android Studio or VS Code with Flutter extensions
- Android SDK (for Android development)
- Xcode (for iOS development on macOS)
git clone https://github.com/yourusername/student-management-system.git
cd student-management-systemcd backend
# Compile the Java project
javac -d out src/*.java
# Or open in IntelliJ IDEA and build the projectConfigure Data Directory:
- Ensure the
data/directory exists - Sample data files will be created on first run
- Default server port:
8080(configurable inServer.java)
cd frontend
# Install dependencies
flutter pub get
# Verify Flutter installation
flutter doctor
# Run on connected device/emulator
flutter runConfigure Backend URL:
- Open
lib/info.dartor relevant configuration file - Update the server URL to match your backend address:
static const String baseUrl = 'http://localhost:8080'; // For Android emulator: 'http://10.0.2.2:8080' // For physical device: 'http://YOUR_IP:8080'
- Navigate to the backend directory
- Run the
Main.javafile:java -cp out Main
- Choose your role:
- Admin (1)
- Teacher (2)
- The server will start on
http://localhost:8080
- Ensure the backend server is running
- Start the Flutter app:
cd frontend flutter run - On the login screen:
- Sign up for a new account
- Login with existing credentials
- Navigate through the app based on your role
Admin:
Username: admin
Password: admin123
Teacher:
Username: teacher1
Password: teacher123
Student:
Username: student1
Password: student123
student-management-system/
│
├── backend/ # Java Backend
│ ├── src/
│ │ ├── Main.java # Entry point and CLI interface
│ │ ├── Server.java # HTTP server implementation
│ │ ├── DB.java # Database/file operations
│ │ ├── Student.java # Student model
│ │ ├── Teacher.java # Teacher model
│ │ ├── Course.java # Course model
│ │ └── Assignment.java # Assignment model
│ ├── data/ # Data storage
│ │ ├── studentsFile.txt
│ │ ├── teachersFile.txt
│ │ ├── courseFile.txt
│ │ ├── assignmentFile.txt
│ │ ├── birthday.txt
│ │ └── todoFile.txt
│ ├── Mini/ # Dart model files (for reference)
│ ├── .gitignore
│ └── ApProject1403.iml
│
├── frontend/ # Flutter Frontend
│ ├── lib/
│ │ ├── main.dart # App entry point
│ │ ├── login_page.dart # Login screen
│ │ ├── signup_page.dart # Registration screen
│ │ ├── home_page.dart # Home dashboard
│ │ ├── classes_page.dart # Course listing
│ │ ├── tasks_page.dart # Assignment/task management
│ │ ├── news_page.dart # News feed
│ │ ├── birthday_page.dart # Birthday notifications
│ │ ├── news_handler.dart # News data handling
│ │ ├── info.dart # Configuration and constants
│ │ └── theme.dart # App theming
│ ├── images/ # Image assets
│ ├── android/ # Android-specific configuration
│ ├── test/ # Unit tests
│ ├── pubspec.yaml # Flutter dependencies
│ ├── analysis_options.yaml # Dart linting rules
│ └── .gitignore
│
├── README.md # This file
└── .gitignore # Root gitignore
cd backend
# Run unit tests (if implemented)
java -cp out:junit.jar org.junit.runner.JUnitCore TestSuitecd frontend
# Run unit tests
flutter test
# Run integration tests
flutter test integration_test/
# Run with coverage
flutter test --coverage- File-based storage (not suitable for production; consider migrating to a database)
- No authentication token expiration
- Limited error handling in some edge cases
- No real-time updates (requires manual refresh)
- Single-threaded server (may not handle high concurrency)
- Migrate to PostgreSQL/MySQL database
- Implement JWT-based authentication
- Add real-time notifications using WebSockets
- Implement file upload for assignments
- Add video conferencing integration
- Create admin dashboard with analytics
- Implement email notifications
- Add multi-language support
- Create web version using Flutter Web
- Implement automated testing suite
- Add Docker containerization
- Create CI/CD pipeline
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Java: Follow Oracle Java Code Conventions
- Dart/Flutter: Follow official Dart style guide
- Write meaningful commit messages
- Add comments for complex logic
- Update documentation for new features
This project is licensed under the MIT License - see the LICENSE file for details.
- Amirreza Yazdanpanah
- Aryan Pira
- Flutter team for the amazing framework
- Java community for extensive documentation
- All contributors and testers
For questions or support, please contact:
- Email: a.yazdanpanah1383@gmail.com
- GitHub: @AYazdan21
- LinkedIn: Amirreza Yazdanpanah
⭐ If you find this project helpful, please consider giving it a star!
Last Updated: May 2025