mirror of
https://github.com/sabazadam/Se302.git
synced 2025-12-31 20:31:22 +00:00
Preparation and Planing Documents added to the github
This commit is contained in:
55
.github/workflows/ci.yml
vendored
Normal file
55
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
name: Java CI with Maven
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ develop, main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ develop, main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v4
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'temurin'
|
||||||
|
cache: maven
|
||||||
|
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn clean compile
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: mvn test
|
||||||
|
|
||||||
|
- name: Generate test coverage report
|
||||||
|
run: mvn jacoco:report
|
||||||
|
|
||||||
|
- name: Check code coverage
|
||||||
|
run: mvn jacoco:check
|
||||||
|
|
||||||
|
- name: Upload coverage reports to Codecov
|
||||||
|
uses: codecov/codecov-action@v3
|
||||||
|
with:
|
||||||
|
files: ./target/site/jacoco/jacoco.xml
|
||||||
|
flags: unittests
|
||||||
|
name: codecov-umbrella
|
||||||
|
fail_ci_if_error: false
|
||||||
|
|
||||||
|
- name: Archive test results
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: test-results
|
||||||
|
path: target/surefire-reports/
|
||||||
|
|
||||||
|
- name: Archive code coverage results
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: code-coverage-report
|
||||||
|
path: target/site/jacoco/
|
||||||
115
.gitignore
vendored
Normal file
115
.gitignore
vendored
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# Compiled class files
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Package Files
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# Maven
|
||||||
|
target/
|
||||||
|
pom.xml.tag
|
||||||
|
pom.xml.releaseBackup
|
||||||
|
pom.xml.versionsBackup
|
||||||
|
pom.xml.next
|
||||||
|
release.properties
|
||||||
|
dependency-reduced-pom.xml
|
||||||
|
buildNumber.properties
|
||||||
|
.mvn/timing.properties
|
||||||
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.gradle
|
||||||
|
build/
|
||||||
|
!gradle/wrapper/gradle-wrapper.jar
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
# IntelliJ IDEA
|
||||||
|
.idea/
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
out/
|
||||||
|
!**/src/main/**/out/
|
||||||
|
!**/src/test/**/out/
|
||||||
|
|
||||||
|
# Eclipse
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
.settings/
|
||||||
|
bin/
|
||||||
|
tmp/
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
local.properties
|
||||||
|
.loadpath
|
||||||
|
.recommenders
|
||||||
|
|
||||||
|
# NetBeans
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
.vscode/
|
||||||
|
*.code-workspace
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
Thumbs.db
|
||||||
|
Thumbs.db:encryptable
|
||||||
|
ehthumbs.db
|
||||||
|
ehthumbs_vista.db
|
||||||
|
*.stackdump
|
||||||
|
[Dd]esktop.ini
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
*.lnk
|
||||||
|
|
||||||
|
# Database files (exclude runtime DB, keep schema)
|
||||||
|
*.db
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
!src/main/resources/database/schema.sql
|
||||||
|
|
||||||
|
# Test output
|
||||||
|
test-output/
|
||||||
|
test-results/
|
||||||
|
|
||||||
|
# Coverage reports
|
||||||
|
.jacoco/
|
||||||
|
jacoco.exec
|
||||||
|
|
||||||
|
# Application data
|
||||||
|
data/
|
||||||
|
*.db-journal
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs/
|
||||||
|
*.log.*
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
|
||||||
|
# IDE-specific files
|
||||||
|
nbactions.xml
|
||||||
|
|
||||||
|
# JavaDoc
|
||||||
|
javadoc/
|
||||||
|
docs/api/
|
||||||
1279
ALGORITHM_DESIGN.md
Normal file
1279
ALGORITHM_DESIGN.md
Normal file
File diff suppressed because it is too large
Load Diff
1213
DATABASE_SCHEMA.md
Normal file
1213
DATABASE_SCHEMA.md
Normal file
File diff suppressed because it is too large
Load Diff
496
GETTING_STARTED.md
Normal file
496
GETTING_STARTED.md
Normal file
@@ -0,0 +1,496 @@
|
|||||||
|
# GETTING STARTED - Exam Scheduling System
|
||||||
|
|
||||||
|
**Welcome to the Exam Scheduling System project!**
|
||||||
|
|
||||||
|
This document will help you get started with the project quickly.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Setup Complete! ✅
|
||||||
|
|
||||||
|
The project foundation has been fully set up with:
|
||||||
|
|
||||||
|
### Documentation Created
|
||||||
|
- ✅ **MEMORY_BANK.md** - Comprehensive project documentation (100+ pages)
|
||||||
|
- ✅ **ROADMAP.md** - Detailed 10-week development plan
|
||||||
|
- ✅ **TEAM_ASSIGNMENTS.md** - Team roles and responsibilities
|
||||||
|
- ✅ **GIT_WORKFLOW.md** - Git branching strategy and PR process
|
||||||
|
- ✅ **README.md** - Project overview and quick start guide
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
- ✅ Maven `pom.xml` with all dependencies configured
|
||||||
|
- ✅ Directory structure created (`src/main/java`, `src/test/java`, `src/main/resources`)
|
||||||
|
- ✅ Package structure ready (`model`, `dao`, `service`, `algorithm`, `controller`, `util`)
|
||||||
|
- ✅ `.gitignore` configured for Java/Maven project
|
||||||
|
- ✅ GitHub Actions CI/CD pipeline (`.github/workflows/ci.yml`)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Quick Start for Team Members
|
||||||
|
|
||||||
|
### 1. Clone the Repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/sabazadam/se302.git
|
||||||
|
cd se302
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Install Prerequisites
|
||||||
|
|
||||||
|
**Required:**
|
||||||
|
- Java JDK 17 or higher - [Download](https://adoptium.net/)
|
||||||
|
- Maven 3.8+ - [Download](https://maven.apache.org/download.cgi)
|
||||||
|
- Git - [Download](https://git-scm.com/)
|
||||||
|
|
||||||
|
**Recommended:**
|
||||||
|
- IntelliJ IDEA (recommended) or Eclipse - [Download IntelliJ](https://www.jetbrains.com/idea/download/)
|
||||||
|
- Scene Builder (for FXML editing) - [Download](https://gluonhq.com/products/scene-builder/)
|
||||||
|
|
||||||
|
### 3. Build the Project
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mvn clean install
|
||||||
|
```
|
||||||
|
|
||||||
|
This will:
|
||||||
|
- Download all dependencies
|
||||||
|
- Compile the code
|
||||||
|
- Run tests (when we have them)
|
||||||
|
- Create a JAR file
|
||||||
|
|
||||||
|
### 4. Open in IDE
|
||||||
|
|
||||||
|
**IntelliJ IDEA:**
|
||||||
|
1. File → Open
|
||||||
|
2. Select the `pom.xml` file
|
||||||
|
3. Click "Open as Project"
|
||||||
|
4. Wait for dependencies to download
|
||||||
|
|
||||||
|
**Eclipse:**
|
||||||
|
1. File → Import
|
||||||
|
2. Maven → Existing Maven Projects
|
||||||
|
3. Select the project directory
|
||||||
|
4. Finish
|
||||||
|
|
||||||
|
### 5. Configure JDK 17
|
||||||
|
|
||||||
|
**IntelliJ:**
|
||||||
|
- File → Project Structure → Project → SDK → Select JDK 17
|
||||||
|
|
||||||
|
**Eclipse:**
|
||||||
|
- Right-click project → Properties → Java Build Path → Libraries → Add JDK 17
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## First Steps for Each Team Member
|
||||||
|
|
||||||
|
### Database Lead (Kerem)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Read [MEMORY_BANK.md](MEMORY_BANK.md) - Database Schema section
|
||||||
|
2. Create `schema.sql` in `src/main/resources/database/`
|
||||||
|
3. Implement DAO interfaces
|
||||||
|
4. Start with StudentDAO and test it
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/database-schema
|
||||||
|
|
||||||
|
# Create your database schema file
|
||||||
|
# Edit src/main/resources/database/schema.sql
|
||||||
|
# Then commit and push
|
||||||
|
```
|
||||||
|
|
||||||
|
### Algorithm Specialist (Milena)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Read [MEMORY_BANK.md](MEMORY_BANK.md) - Algorithm Design section
|
||||||
|
2. Create domain model classes (Student, Course, Classroom, etc.)
|
||||||
|
3. Start designing constraint validator
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/domain-models
|
||||||
|
|
||||||
|
# Create model classes in src/main/java/com/se302/examscheduler/model/
|
||||||
|
# Start with Student.java, Course.java
|
||||||
|
```
|
||||||
|
|
||||||
|
### UI/FXML Specialist (Rabia)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Read [MEMORY_BANK.md](MEMORY_BANK.md) - User Interface Design section
|
||||||
|
2. Install Scene Builder
|
||||||
|
3. Create wireframes for main window
|
||||||
|
4. Start FXML for MainWindow
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/ui-main-window
|
||||||
|
|
||||||
|
# Create FXML files in src/main/resources/fxml/
|
||||||
|
# Design with Scene Builder
|
||||||
|
```
|
||||||
|
|
||||||
|
### Controller Lead (Sefa)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Read [MEMORY_BANK.md](MEMORY_BANK.md) - Controller Layer section
|
||||||
|
2. Create Main.java application entry point
|
||||||
|
3. Design controller architecture
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/main-controller
|
||||||
|
|
||||||
|
# Create Main.java in src/main/java/com/se302/examscheduler/
|
||||||
|
# Set up JavaFX application structure
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testing Lead (Feyza)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Read [MEMORY_BANK.md](MEMORY_BANK.md) - Testing Strategy section
|
||||||
|
2. Set up test utilities (TestDataBuilder)
|
||||||
|
3. Verify CI/CD pipeline works
|
||||||
|
4. Create test data fixtures
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/test-infrastructure
|
||||||
|
|
||||||
|
# Create test utilities in src/test/java/com/se302/examscheduler/util/
|
||||||
|
# Create test CSV files in src/test/resources/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation Lead (Emin)
|
||||||
|
|
||||||
|
**Week 1 Tasks:**
|
||||||
|
1. Review all documentation created
|
||||||
|
2. Set up JavaDoc generation
|
||||||
|
3. Create documentation templates
|
||||||
|
4. Review first PRs from team
|
||||||
|
|
||||||
|
**Getting Started:**
|
||||||
|
```bash
|
||||||
|
# Generate JavaDoc
|
||||||
|
mvn javadoc:javadoc
|
||||||
|
open target/site/apidocs/index.html
|
||||||
|
|
||||||
|
# Set up documentation watching
|
||||||
|
# Review team members' code for documentation quality
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Important Files to Read
|
||||||
|
|
||||||
|
### MUST READ (Everyone)
|
||||||
|
1. **README.md** - Project overview and quick start
|
||||||
|
2. **MEMORY_BANK.md** - Comprehensive documentation (read your section)
|
||||||
|
3. **ROADMAP.md** - Week-by-week plan (see your tasks)
|
||||||
|
4. **TEAM_ASSIGNMENTS.md** - Your role and responsibilities
|
||||||
|
5. **GIT_WORKFLOW.md** - How to use Git, commit messages, PRs
|
||||||
|
|
||||||
|
### Your Section in MEMORY_BANK.md
|
||||||
|
- **Kerem:** Database Schema, DAO Layer
|
||||||
|
- **Milena:** Algorithm Design, Constraint Validation
|
||||||
|
- **Rabia:** User Interface Design, UI Components
|
||||||
|
- **Sefa:** API Contracts (Controller), MVC Architecture
|
||||||
|
- **Feyza:** Testing Strategy, Test Types
|
||||||
|
- **Emin:** All sections (for review)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Git Workflow Reminder
|
||||||
|
|
||||||
|
### Creating a Feature Branch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Always start from latest develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Create your feature branch
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
|
||||||
|
# Make changes, then commit
|
||||||
|
git add .
|
||||||
|
git commit -m "feat(scope): brief description"
|
||||||
|
|
||||||
|
# Push to remote
|
||||||
|
git push -u origin feature/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commit Message Format
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>(<scope>): <subject>
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
feat(dao): Add StudentDAO with batch insert
|
||||||
|
fix(algorithm): Correct consecutive exam constraint
|
||||||
|
test(dao): Add unit tests for StudentDAO
|
||||||
|
docs(readme): Update installation instructions
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a Pull Request
|
||||||
|
|
||||||
|
1. Push your feature branch to GitHub
|
||||||
|
2. Go to GitHub repository
|
||||||
|
3. Click "New Pull Request"
|
||||||
|
4. Base: `develop`, Compare: `feature/your-feature-name`
|
||||||
|
5. Fill in PR template
|
||||||
|
6. Request at least 1 reviewer
|
||||||
|
7. Wait for approval and CI to pass
|
||||||
|
8. Merge when approved
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
### Maven Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clean and build
|
||||||
|
mvn clean install
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
mvn test
|
||||||
|
|
||||||
|
# Run specific test
|
||||||
|
mvn test -Dtest=StudentDAOTest
|
||||||
|
|
||||||
|
# Generate test coverage report
|
||||||
|
mvn clean test jacoco:report
|
||||||
|
open target/site/jacoco/index.html
|
||||||
|
|
||||||
|
# Generate JavaDoc
|
||||||
|
mvn javadoc:javadoc
|
||||||
|
open target/site/apidocs/index.html
|
||||||
|
|
||||||
|
# Run application (when Main.java is ready)
|
||||||
|
mvn javafx:run
|
||||||
|
|
||||||
|
# Package into JAR
|
||||||
|
mvn package
|
||||||
|
```
|
||||||
|
|
||||||
|
### Git Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check status
|
||||||
|
git status
|
||||||
|
|
||||||
|
# View changes
|
||||||
|
git diff
|
||||||
|
|
||||||
|
# Stage files
|
||||||
|
git add file.java
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commit
|
||||||
|
git commit -m "message"
|
||||||
|
|
||||||
|
# Push
|
||||||
|
git push origin feature-name
|
||||||
|
|
||||||
|
# Pull latest develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Rebase your branch on develop
|
||||||
|
git checkout feature-name
|
||||||
|
git rebase develop
|
||||||
|
|
||||||
|
# View commit history
|
||||||
|
git log --oneline
|
||||||
|
|
||||||
|
# View branches
|
||||||
|
git branch -a
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Statistics
|
||||||
|
|
||||||
|
- **Team Size:** 6 members
|
||||||
|
- **Duration:** 10 weeks (Nov 26, 2025 - Feb 4, 2026)
|
||||||
|
- **Lines of Documentation:** ~15,000+ lines
|
||||||
|
- **Files Created:** 8 core documentation files
|
||||||
|
- **Technology Stack:** Java 17, JavaFX 21, SQLite, Maven
|
||||||
|
- **Target:** Fully functional desktop application with >70% test coverage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Weekly Meeting Schedule
|
||||||
|
|
||||||
|
**Monday (30 min) - Sprint Planning:**
|
||||||
|
- Review last week's progress
|
||||||
|
- Assign this week's tasks
|
||||||
|
- Discuss blockers
|
||||||
|
|
||||||
|
**Wednesday (15-30 min) - Mid-Week Sync:**
|
||||||
|
- Quick status updates
|
||||||
|
- Identify issues early
|
||||||
|
- Schedule pair programming if needed
|
||||||
|
|
||||||
|
**Friday (30-45 min) - Demo & Retrospective:**
|
||||||
|
- Each person demos their work
|
||||||
|
- Celebrate wins
|
||||||
|
- Discuss improvements
|
||||||
|
- Brief planning for next week
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Communication Channels
|
||||||
|
|
||||||
|
**Synchronous:**
|
||||||
|
- Weekly meetings (Monday, Wednesday, Friday)
|
||||||
|
- Pair programming sessions (as needed)
|
||||||
|
|
||||||
|
**Asynchronous:**
|
||||||
|
- WhatsApp/Discord - Daily updates, quick questions
|
||||||
|
- GitHub - Code reviews, PR discussions
|
||||||
|
- Email - Formal communication with professor
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Success Metrics
|
||||||
|
|
||||||
|
### Week 1 (Current Week)
|
||||||
|
- **Expected Completion:** 10%
|
||||||
|
- **Key Milestone:** Project setup, infrastructure, initial designs
|
||||||
|
- **Deliverables:**
|
||||||
|
- Database schema script
|
||||||
|
- Algorithm design document
|
||||||
|
- UI wireframes
|
||||||
|
- CI/CD pipeline working
|
||||||
|
|
||||||
|
### By Week 3 (End of Phase 1)
|
||||||
|
- **Expected Completion:** 30%
|
||||||
|
- **Key Milestone:** Foundation complete
|
||||||
|
- **Deliverables:**
|
||||||
|
- Database layer working
|
||||||
|
- CSV import functional
|
||||||
|
- Configuration screen working
|
||||||
|
- All team members can run project locally
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Getting Help
|
||||||
|
|
||||||
|
### If You're Stuck
|
||||||
|
|
||||||
|
1. **Try for 2 hours** - Google, documentation, StackOverflow
|
||||||
|
2. **Ask in team chat** - Someone may have solved it
|
||||||
|
3. **Pair program** - Schedule session with teammate
|
||||||
|
4. **Ask Emin** - Integration Lead can help with architecture questions
|
||||||
|
5. **Ask Professor** - For requirements clarification
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
**Maven dependency download fails:**
|
||||||
|
```bash
|
||||||
|
# Clear Maven cache and retry
|
||||||
|
rm -rf ~/.m2/repository
|
||||||
|
mvn clean install
|
||||||
|
```
|
||||||
|
|
||||||
|
**IDE doesn't recognize Java 17:**
|
||||||
|
- Verify JDK 17 is installed: `java -version`
|
||||||
|
- Configure project SDK in IDE settings
|
||||||
|
|
||||||
|
**Git merge conflicts:**
|
||||||
|
- See GIT_WORKFLOW.md section on "Merge Conflict Resolution"
|
||||||
|
- Ask Emin if you need help resolving
|
||||||
|
|
||||||
|
**Tests won't run:**
|
||||||
|
- Ensure Maven Surefire plugin is configured in pom.xml (already done)
|
||||||
|
- Check test file naming: must end with `Test.java`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
### For the Team
|
||||||
|
|
||||||
|
1. **Today (Nov 26):**
|
||||||
|
- All members clone repository
|
||||||
|
- Set up development environment
|
||||||
|
- Read assigned sections of MEMORY_BANK.md
|
||||||
|
|
||||||
|
2. **This Week (Week 1):**
|
||||||
|
- Each member starts assigned tasks from ROADMAP.md
|
||||||
|
- Create first feature branches
|
||||||
|
- Make first commits
|
||||||
|
|
||||||
|
3. **Friday Meeting (Nov 30):**
|
||||||
|
- Each person demos progress
|
||||||
|
- Database schema presented
|
||||||
|
- UI wireframes presented
|
||||||
|
- Algorithm pseudocode presented
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
### Learning Resources
|
||||||
|
|
||||||
|
**Java & JavaFX:**
|
||||||
|
- JavaFX Official Docs: https://openjfx.io/javadoc/17/
|
||||||
|
- JavaFX Tutorial: https://openjfx.io/openjfx-docs/
|
||||||
|
|
||||||
|
**SQLite:**
|
||||||
|
- SQLite Tutorial: https://www.sqlitetutorial.net/
|
||||||
|
- SQLite Java: https://www.sqlitetutorial.net/sqlite-java/
|
||||||
|
|
||||||
|
**CSP Algorithms:**
|
||||||
|
- Russell & Norvig AI Textbook: Chapter 6
|
||||||
|
- Online: https://artint.info/2e/html/ArtInt2e.Ch4.html
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
- JUnit 5: https://junit.org/junit5/docs/current/user-guide/
|
||||||
|
- Mockito: https://site.mockito.org/
|
||||||
|
|
||||||
|
### Tools
|
||||||
|
|
||||||
|
**Required:**
|
||||||
|
- Java JDK 17: https://adoptium.net/
|
||||||
|
- Maven: https://maven.apache.org/download.cgi
|
||||||
|
- Git: https://git-scm.com/
|
||||||
|
|
||||||
|
**Recommended:**
|
||||||
|
- IntelliJ IDEA: https://www.jetbrains.com/idea/download/
|
||||||
|
- Scene Builder: https://gluonhq.com/products/scene-builder/
|
||||||
|
- DB Browser for SQLite: https://sqlitebrowser.org/
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Questions?
|
||||||
|
|
||||||
|
- Check MEMORY_BANK.md for detailed answers
|
||||||
|
- Ask in team chat
|
||||||
|
- Contact Emin (Documentation Lead) for documentation questions
|
||||||
|
- Contact team members for their specialty areas
|
||||||
|
- Email professor for requirements clarification
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated:** November 26, 2025
|
||||||
|
|
||||||
|
**Good luck team! Let's build an amazing exam scheduler! 🚀**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*For comprehensive documentation, see [MEMORY_BANK.md](MEMORY_BANK.md)*
|
||||||
873
GIT_WORKFLOW.md
Normal file
873
GIT_WORKFLOW.md
Normal file
@@ -0,0 +1,873 @@
|
|||||||
|
# GIT WORKFLOW - EXAM SCHEDULING SYSTEM
|
||||||
|
|
||||||
|
**Project:** Exam Planner Desktop Application
|
||||||
|
**Team:** Team 3, Section 1
|
||||||
|
**Version Control:** Git + GitHub
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## BRANCHING STRATEGY
|
||||||
|
|
||||||
|
### Branch Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
main (production-ready code)
|
||||||
|
└── develop (integration branch)
|
||||||
|
├── feature/database-schema (Kerem's work)
|
||||||
|
├── feature/csv-import (Kerem's work)
|
||||||
|
├── feature/csp-solver (Milena's work)
|
||||||
|
├── feature/constraint-validation (Milena's work)
|
||||||
|
├── feature/ui-main-window (Rabia's work)
|
||||||
|
├── feature/import-view (Rabia's work)
|
||||||
|
├── feature/import-controller (Sefa's work)
|
||||||
|
├── feature/generation-controller (Sefa's work)
|
||||||
|
├── feature/dao-tests (Feyza's work)
|
||||||
|
├── feature/algorithm-tests (Feyza's work)
|
||||||
|
└── bugfix/constraint-validation-issue (Any team member)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Branch Types
|
||||||
|
|
||||||
|
#### 1. `main` Branch
|
||||||
|
- **Purpose:** Production-ready, stable code only
|
||||||
|
- **Protection:** Requires PR approval from Emin (Documentation Lead)
|
||||||
|
- **Merging:** Only from `develop` branch
|
||||||
|
- **Tagging:** Every merge to main gets a version tag (v1.0.0, v1.1.0, etc.)
|
||||||
|
- **Never:** Commit directly to `main`
|
||||||
|
|
||||||
|
#### 2. `develop` Branch
|
||||||
|
- **Purpose:** Integration branch for all features
|
||||||
|
- **Protection:** Requires at least 1 PR approval
|
||||||
|
- **Testing:** All tests must pass before merge
|
||||||
|
- **Never:** Commit directly to `develop` (always use feature branches)
|
||||||
|
|
||||||
|
#### 3. `feature/*` Branches
|
||||||
|
- **Purpose:** New features or enhancements
|
||||||
|
- **Naming:** `feature/short-description` (e.g., `feature/csv-import`)
|
||||||
|
- **Base:** Created from `develop`
|
||||||
|
- **Merge to:** `develop` via Pull Request
|
||||||
|
- **Lifetime:** Delete after successful merge
|
||||||
|
- **Examples:**
|
||||||
|
- `feature/database-schema`
|
||||||
|
- `feature/csp-solver`
|
||||||
|
- `feature/classroom-view`
|
||||||
|
- `feature/export-excel`
|
||||||
|
|
||||||
|
#### 4. `bugfix/*` Branches
|
||||||
|
- **Purpose:** Fix bugs found during development
|
||||||
|
- **Naming:** `bugfix/issue-description` (e.g., `bugfix/constraint-validation`)
|
||||||
|
- **Base:** Created from `develop`
|
||||||
|
- **Merge to:** `develop` via Pull Request
|
||||||
|
- **Examples:**
|
||||||
|
- `bugfix/duplicate-student-detection`
|
||||||
|
- `bugfix/constraint-validation-boundary`
|
||||||
|
- `bugfix/ui-table-alignment`
|
||||||
|
|
||||||
|
#### 5. `hotfix/*` Branches (Emergency Only)
|
||||||
|
- **Purpose:** Critical fixes for production code
|
||||||
|
- **Naming:** `hotfix/critical-issue`
|
||||||
|
- **Base:** Created from `main`
|
||||||
|
- **Merge to:** Both `main` AND `develop`
|
||||||
|
- **Use:** Only for critical bugs in production
|
||||||
|
- **Examples:**
|
||||||
|
- `hotfix/database-corruption`
|
||||||
|
- `hotfix/solver-infinite-loop`
|
||||||
|
|
||||||
|
#### 6. `refactor/*` Branches
|
||||||
|
- **Purpose:** Code refactoring (no functional changes)
|
||||||
|
- **Naming:** `refactor/component-name`
|
||||||
|
- **Base:** Created from `develop`
|
||||||
|
- **Merge to:** `develop` via Pull Request
|
||||||
|
- **Examples:**
|
||||||
|
- `refactor/dao-layer-optimization`
|
||||||
|
- `refactor/algorithm-performance`
|
||||||
|
|
||||||
|
#### 7. `test/*` Branches
|
||||||
|
- **Purpose:** Adding or improving tests
|
||||||
|
- **Naming:** `test/component-name`
|
||||||
|
- **Base:** Created from `develop`
|
||||||
|
- **Merge to:** `develop` via Pull Request
|
||||||
|
- **Examples:**
|
||||||
|
- `test/dao-integration-tests`
|
||||||
|
- `test/constraint-validator-edge-cases`
|
||||||
|
|
||||||
|
#### 8. `docs/*` Branches
|
||||||
|
- **Purpose:** Documentation updates
|
||||||
|
- **Naming:** `docs/document-name`
|
||||||
|
- **Base:** Created from `develop`
|
||||||
|
- **Merge to:** `develop` via Pull Request
|
||||||
|
- **Examples:**
|
||||||
|
- `docs/algorithm-design`
|
||||||
|
- `docs/user-manual`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## GIT WORKFLOW COMMANDS
|
||||||
|
|
||||||
|
### 1. Starting a New Feature
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Make sure you have latest develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Create new feature branch
|
||||||
|
git checkout -b feature/csv-import
|
||||||
|
|
||||||
|
# Work on your feature (make changes, add files)
|
||||||
|
# ...
|
||||||
|
|
||||||
|
# Stage and commit your changes
|
||||||
|
git add src/main/java/com/se302/examscheduler/service/ImportService.java
|
||||||
|
git commit -m "feat(import): Add CSV parser for student data"
|
||||||
|
|
||||||
|
# Push to remote
|
||||||
|
git push origin feature/csv-import
|
||||||
|
|
||||||
|
# If branch doesn't exist on remote yet
|
||||||
|
git push -u origin feature/csv-import
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Making Commits
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check what files have changed
|
||||||
|
git status
|
||||||
|
|
||||||
|
# View changes before committing
|
||||||
|
git diff
|
||||||
|
|
||||||
|
# Stage specific files
|
||||||
|
git add file1.java file2.java
|
||||||
|
|
||||||
|
# Or stage all changes
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commit with descriptive message
|
||||||
|
git commit -m "feat(dao): Implement StudentDAO with batch insert"
|
||||||
|
|
||||||
|
# Push to remote branch
|
||||||
|
git push origin feature/csv-import
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Keeping Your Branch Up-to-Date
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# While working on feature branch, periodically sync with develop
|
||||||
|
|
||||||
|
# Fetch latest changes from remote
|
||||||
|
git fetch origin
|
||||||
|
|
||||||
|
# Rebase your branch on latest develop (preferred for clean history)
|
||||||
|
git rebase origin/develop
|
||||||
|
|
||||||
|
# Or merge develop into your branch (creates merge commit)
|
||||||
|
git merge origin/develop
|
||||||
|
|
||||||
|
# If conflicts occur during rebase
|
||||||
|
# 1. Resolve conflicts in files
|
||||||
|
# 2. Stage resolved files
|
||||||
|
git add resolved-file.java
|
||||||
|
# 3. Continue rebase
|
||||||
|
git rebase --continue
|
||||||
|
|
||||||
|
# Force push after rebase (only if you haven't pushed yet or working alone on branch)
|
||||||
|
git push origin feature/csv-import --force-with-lease
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Creating a Pull Request
|
||||||
|
|
||||||
|
**After pushing your feature branch:**
|
||||||
|
|
||||||
|
1. Go to GitHub repository
|
||||||
|
2. Click "Pull requests" tab
|
||||||
|
3. Click "New pull request"
|
||||||
|
4. Set base branch: `develop`
|
||||||
|
5. Set compare branch: `feature/csv-import`
|
||||||
|
6. Fill in PR template:
|
||||||
|
- Title: Brief description (e.g., "Add CSV import functionality")
|
||||||
|
- Description: Detailed changes, testing done, screenshots if UI
|
||||||
|
- Link related issues: "Closes #15"
|
||||||
|
7. Request reviewers (at least one team member)
|
||||||
|
8. Assign yourself
|
||||||
|
9. Add labels (feature, bug, documentation, etc.)
|
||||||
|
10. Create pull request
|
||||||
|
|
||||||
|
### 5. Reviewing a Pull Request
|
||||||
|
|
||||||
|
**As a reviewer:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fetch the PR branch
|
||||||
|
git fetch origin
|
||||||
|
git checkout feature/csv-import
|
||||||
|
|
||||||
|
# Test the changes locally
|
||||||
|
mvn clean test
|
||||||
|
mvn javafx:run
|
||||||
|
|
||||||
|
# Review code in IDE
|
||||||
|
# Leave comments on GitHub PR page
|
||||||
|
|
||||||
|
# If changes requested
|
||||||
|
# - Author makes changes
|
||||||
|
# - Author pushes to same branch (PR updates automatically)
|
||||||
|
|
||||||
|
# If approved
|
||||||
|
# - Click "Approve" on GitHub
|
||||||
|
# - Merge when all checks pass
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Merging a Pull Request
|
||||||
|
|
||||||
|
**After PR is approved:**
|
||||||
|
|
||||||
|
**Option A: Squash and Merge (Recommended)**
|
||||||
|
- Combines all commits into one clean commit
|
||||||
|
- Use for most feature branches
|
||||||
|
- Keeps develop history clean
|
||||||
|
- Click "Squash and merge" on GitHub
|
||||||
|
|
||||||
|
**Option B: Rebase and Merge**
|
||||||
|
- Replays all commits on top of develop
|
||||||
|
- Use for well-organized commit history
|
||||||
|
- Click "Rebase and merge" on GitHub
|
||||||
|
|
||||||
|
**Option C: Merge Commit**
|
||||||
|
- Creates a merge commit preserving all commits
|
||||||
|
- Use for large features with meaningful commit history
|
||||||
|
- Click "Merge pull request" on GitHub
|
||||||
|
|
||||||
|
**After merging:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Delete the remote feature branch (GitHub does this automatically)
|
||||||
|
|
||||||
|
# Delete your local feature branch
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git branch -d feature/csv-import
|
||||||
|
|
||||||
|
# If git complains, force delete
|
||||||
|
git branch -D feature/csv-import
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Releasing to Main
|
||||||
|
|
||||||
|
**When develop is ready for release:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ensure develop is stable
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
mvn clean test # All tests must pass
|
||||||
|
|
||||||
|
# Create PR from develop to main
|
||||||
|
# On GitHub:
|
||||||
|
# 1. New Pull Request: develop -> main
|
||||||
|
# 2. Title: "Release v1.0.0"
|
||||||
|
# 3. Description: List of features included
|
||||||
|
# 4. Request review from Emin (Documentation Lead)
|
||||||
|
|
||||||
|
# After approval and merge
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Tag the release
|
||||||
|
git tag -a v1.0.0 -m "Release version 1.0.0 - Initial delivery"
|
||||||
|
git push origin v1.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## COMMIT MESSAGE GUIDELINES
|
||||||
|
|
||||||
|
### Format
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>(<scope>): <subject>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Types
|
||||||
|
|
||||||
|
| Type | Description | Example |
|
||||||
|
|------|-------------|---------|
|
||||||
|
| `feat` | New feature | `feat(import): Add CSV import for students` |
|
||||||
|
| `fix` | Bug fix | `fix(csp-solver): Correct consecutive exam check` |
|
||||||
|
| `refactor` | Code refactoring (no functional change) | `refactor(dao): Optimize batch insert queries` |
|
||||||
|
| `test` | Adding or updating tests | `test(algorithm): Add constraint validation tests` |
|
||||||
|
| `docs` | Documentation changes | `docs(readme): Update installation instructions` |
|
||||||
|
| `style` | Code style changes (formatting, no logic change) | `style(dao): Fix indentation and spacing` |
|
||||||
|
| `chore` | Build process, dependency updates | `chore(pom): Update JavaFX version to 21.0.1` |
|
||||||
|
| `perf` | Performance improvements | `perf(solver): Add memoization for constraint checks` |
|
||||||
|
|
||||||
|
### Scope
|
||||||
|
|
||||||
|
Common scopes:
|
||||||
|
- `dao` - Data Access layer
|
||||||
|
- `algorithm` - CSP solver and algorithm layer
|
||||||
|
- `ui` - User interface (FXML, views)
|
||||||
|
- `controller` - Controller layer
|
||||||
|
- `import` - Import functionality
|
||||||
|
- `export` - Export functionality
|
||||||
|
- `config` - Configuration
|
||||||
|
- `test` - Testing
|
||||||
|
- `docs` - Documentation
|
||||||
|
|
||||||
|
### Subject
|
||||||
|
|
||||||
|
- Use imperative mood ("Add" not "Added" or "Adds")
|
||||||
|
- Don't capitalize first letter
|
||||||
|
- No period at the end
|
||||||
|
- Max 50 characters
|
||||||
|
|
||||||
|
### Body (Optional)
|
||||||
|
|
||||||
|
- Explain **why** the change was made, not **what**
|
||||||
|
- Wrap at 72 characters
|
||||||
|
- Separate from subject with blank line
|
||||||
|
|
||||||
|
### Footer (Optional)
|
||||||
|
|
||||||
|
- Reference issues: `Closes #15`, `Fixes #42`, `Relates to #23`
|
||||||
|
- Breaking changes: `BREAKING CHANGE: API endpoint changed`
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
**Good Examples:**
|
||||||
|
|
||||||
|
```
|
||||||
|
feat(import): Add CSV parser for student data
|
||||||
|
|
||||||
|
Implemented CSVParser utility class to read student IDs from CSV file.
|
||||||
|
Includes validation for duplicates and empty lines.
|
||||||
|
Uses Apache Commons CSV library for robust parsing.
|
||||||
|
|
||||||
|
Closes #15
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
fix(csp-solver): Correct consecutive exam constraint at day boundaries
|
||||||
|
|
||||||
|
Previous implementation didn't handle case where last slot of day N
|
||||||
|
and first slot of day N+1 are consecutive. Now uses absolute slot
|
||||||
|
numbering to correctly identify consecutive slots across days.
|
||||||
|
|
||||||
|
Fixes #42
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
test(dao): Add integration tests for StudentDAO
|
||||||
|
|
||||||
|
Added tests for:
|
||||||
|
- Batch insert with 100 students
|
||||||
|
- Duplicate detection
|
||||||
|
- Transaction rollback on error
|
||||||
|
|
||||||
|
Coverage for StudentDAO increased from 65% to 92%.
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
refactor(algorithm): Extract domain filtering into separate method
|
||||||
|
|
||||||
|
Extracted domain pre-filtering logic from solve() into
|
||||||
|
filterInvalidAssignments() for better readability and testability.
|
||||||
|
No functional changes.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Bad Examples:**
|
||||||
|
|
||||||
|
❌ `Update files` - Too vague
|
||||||
|
❌ `Fixed bug` - What bug? Where?
|
||||||
|
❌ `WIP` - Work in progress commits should be rebased before PR
|
||||||
|
❌ `asdfgh` - Meaningless message
|
||||||
|
❌ `Updated StudentDAO.java and CourseDAO.java and ImportService.java` - Too long, no context
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## PULL REQUEST TEMPLATE
|
||||||
|
|
||||||
|
Create `.github/PULL_REQUEST_TEMPLATE.md`:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## Description
|
||||||
|
<!-- Brief description of what this PR does -->
|
||||||
|
|
||||||
|
## Type of Change
|
||||||
|
- [ ] New feature (feat)
|
||||||
|
- [ ] Bug fix (fix)
|
||||||
|
- [ ] Refactoring (refactor)
|
||||||
|
- [ ] Documentation (docs)
|
||||||
|
- [ ] Testing (test)
|
||||||
|
- [ ] Build/dependency update (chore)
|
||||||
|
|
||||||
|
## Changes Made
|
||||||
|
<!-- List specific changes -->
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
## Testing Done
|
||||||
|
<!-- How did you test these changes? -->
|
||||||
|
- [ ] Unit tests added/updated
|
||||||
|
- [ ] Integration tests added/updated
|
||||||
|
- [ ] Manual testing performed
|
||||||
|
- [ ] All existing tests pass
|
||||||
|
|
||||||
|
**Test coverage:** [X]% (before) → [Y]% (after)
|
||||||
|
|
||||||
|
## Screenshots (if applicable)
|
||||||
|
<!-- For UI changes, add before/after screenshots -->
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
- [ ] Code follows Java naming conventions
|
||||||
|
- [ ] JavaDoc added for public methods
|
||||||
|
- [ ] No compiler warnings
|
||||||
|
- [ ] All tests pass locally (`mvn clean test`)
|
||||||
|
- [ ] Updated MEMORY_BANK.md if design decisions changed
|
||||||
|
- [ ] Updated user documentation if user-facing changes
|
||||||
|
|
||||||
|
## Related Issues
|
||||||
|
<!-- Link to issues: Closes #123, Fixes #456, Relates to #789 -->
|
||||||
|
|
||||||
|
## Reviewer Notes
|
||||||
|
<!-- Anything specific you want reviewers to focus on? -->
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CODE REVIEW CHECKLIST
|
||||||
|
|
||||||
|
### For Reviewers
|
||||||
|
|
||||||
|
**Before approving, verify:**
|
||||||
|
|
||||||
|
#### Code Quality
|
||||||
|
- [ ] Follows Java naming conventions (camelCase variables, PascalCase classes)
|
||||||
|
- [ ] No magic numbers (use named constants: `private static final int MAX_CAPACITY = 40;`)
|
||||||
|
- [ ] Meaningful variable and method names
|
||||||
|
- [ ] Appropriate access modifiers (private, public, protected)
|
||||||
|
- [ ] No code duplication (DRY principle)
|
||||||
|
- [ ] Proper exception handling (try-catch where appropriate)
|
||||||
|
- [ ] No commented-out code
|
||||||
|
- [ ] No TODO comments (or documented in issues)
|
||||||
|
|
||||||
|
#### Architecture
|
||||||
|
- [ ] Code in correct layer (DAO/Service/Controller/View)
|
||||||
|
- [ ] No tight coupling (DAO doesn't call UI, etc.)
|
||||||
|
- [ ] Uses appropriate design patterns
|
||||||
|
- [ ] Follows MVC separation
|
||||||
|
|
||||||
|
#### Testing
|
||||||
|
- [ ] Unit tests added for new methods
|
||||||
|
- [ ] Tests cover edge cases and error scenarios
|
||||||
|
- [ ] All existing tests still pass
|
||||||
|
- [ ] Test names are descriptive (`testImportStudents_WithDuplicates_ShouldRejectDuplicates`)
|
||||||
|
- [ ] No tests commented out
|
||||||
|
|
||||||
|
#### Documentation
|
||||||
|
- [ ] JavaDoc added for all public methods
|
||||||
|
- [ ] JavaDoc includes @param, @return, @throws tags
|
||||||
|
- [ ] Complex algorithms have explanatory comments
|
||||||
|
- [ ] MEMORY_BANK.md updated if design changed
|
||||||
|
|
||||||
|
#### Functionality
|
||||||
|
- [ ] Code does what PR description says
|
||||||
|
- [ ] No obvious bugs
|
||||||
|
- [ ] Error messages are user-friendly
|
||||||
|
- [ ] Edge cases handled
|
||||||
|
|
||||||
|
#### Performance
|
||||||
|
- [ ] No obvious performance issues (e.g., O(n²) loops that could be O(n))
|
||||||
|
- [ ] Database queries use indexes efficiently
|
||||||
|
- [ ] No memory leaks (resources closed properly)
|
||||||
|
|
||||||
|
### Review Comments
|
||||||
|
|
||||||
|
**Be constructive:**
|
||||||
|
- ✅ "Consider using a HashMap here instead of iterating through the list for O(1) lookup instead of O(n)"
|
||||||
|
- ❌ "This code is terrible"
|
||||||
|
|
||||||
|
**Ask questions:**
|
||||||
|
- ✅ "Why did you choose to use a synchronized block here? Are we expecting concurrent access?"
|
||||||
|
- ❌ "This is wrong"
|
||||||
|
|
||||||
|
**Suggest alternatives:**
|
||||||
|
- ✅ "What about extracting this into a separate method for better testability?"
|
||||||
|
- ❌ "Refactor this"
|
||||||
|
|
||||||
|
**Praise good work:**
|
||||||
|
- ✅ "Nice use of the Strategy pattern here! Makes it easy to add new optimization strategies."
|
||||||
|
- ✅ "Great test coverage on this feature!"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MERGE CONFLICT RESOLUTION
|
||||||
|
|
||||||
|
### When Conflicts Occur
|
||||||
|
|
||||||
|
**Scenario:** You're working on `feature/csv-import` and someone else merged changes to `develop` that conflict with your code.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update your local develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Try to rebase your feature branch
|
||||||
|
git checkout feature/csv-import
|
||||||
|
git rebase develop
|
||||||
|
|
||||||
|
# If conflicts occur, Git will pause and show:
|
||||||
|
# CONFLICT (content): Merge conflict in src/main/java/.../ImportService.java
|
||||||
|
```
|
||||||
|
|
||||||
|
### Resolving Conflicts
|
||||||
|
|
||||||
|
1. **Open conflicted file in IDE** (e.g., `ImportService.java`)
|
||||||
|
|
||||||
|
2. **Look for conflict markers:**
|
||||||
|
```java
|
||||||
|
<<<<<<< HEAD (your changes)
|
||||||
|
public void importStudents(String filePath) {
|
||||||
|
// Your implementation
|
||||||
|
}
|
||||||
|
=======
|
||||||
|
public ImportResult importStudents(String filePath) throws IOException {
|
||||||
|
// Their implementation
|
||||||
|
}
|
||||||
|
>>>>>>> develop (their changes)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Decide how to resolve:**
|
||||||
|
- Keep your changes
|
||||||
|
- Keep their changes
|
||||||
|
- Combine both changes
|
||||||
|
- Rewrite entirely
|
||||||
|
|
||||||
|
4. **Edit the file to final version:**
|
||||||
|
```java
|
||||||
|
public ImportResult importStudents(String filePath) throws IOException {
|
||||||
|
// Combined implementation
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Mark as resolved:**
|
||||||
|
```bash
|
||||||
|
git add src/main/java/.../ImportService.java
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Continue rebase:**
|
||||||
|
```bash
|
||||||
|
git rebase --continue
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **If you made a mistake, abort:**
|
||||||
|
```bash
|
||||||
|
git rebase --abort # Starts over
|
||||||
|
```
|
||||||
|
|
||||||
|
8. **Force push after successful rebase:**
|
||||||
|
```bash
|
||||||
|
git push origin feature/csv-import --force-with-lease
|
||||||
|
```
|
||||||
|
|
||||||
|
### Preventing Conflicts
|
||||||
|
|
||||||
|
- **Communicate:** Tell team when working on same files
|
||||||
|
- **Small PRs:** Smaller changes merge faster, less chance of conflicts
|
||||||
|
- **Sync often:** Rebase on develop daily
|
||||||
|
- **Modular code:** Work on separate files/classes when possible
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## COMMON GIT COMMANDS REFERENCE
|
||||||
|
|
||||||
|
### Basic Operations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check current branch and status
|
||||||
|
git status
|
||||||
|
|
||||||
|
# View commit history
|
||||||
|
git log
|
||||||
|
git log --oneline
|
||||||
|
git log --graph --oneline --all
|
||||||
|
|
||||||
|
# View changes
|
||||||
|
git diff # Unstaged changes
|
||||||
|
git diff --staged # Staged changes
|
||||||
|
git diff develop # Difference with develop branch
|
||||||
|
|
||||||
|
# Stash changes temporarily
|
||||||
|
git stash # Save changes
|
||||||
|
git stash list # List stashes
|
||||||
|
git stash pop # Apply and remove stash
|
||||||
|
git stash apply # Apply but keep stash
|
||||||
|
|
||||||
|
# Undo changes
|
||||||
|
git checkout -- file.java # Discard changes in file
|
||||||
|
git reset HEAD file.java # Unstage file
|
||||||
|
git reset --hard HEAD # Discard all changes (DANGEROUS)
|
||||||
|
git reset --hard origin/develop # Reset to remote develop (DANGEROUS)
|
||||||
|
|
||||||
|
# Amend last commit (if not pushed yet)
|
||||||
|
git commit --amend -m "New message"
|
||||||
|
git add forgotten-file.java
|
||||||
|
git commit --amend --no-edit # Add file to last commit
|
||||||
|
```
|
||||||
|
|
||||||
|
### Branch Operations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# List branches
|
||||||
|
git branch # Local branches
|
||||||
|
git branch -r # Remote branches
|
||||||
|
git branch -a # All branches
|
||||||
|
|
||||||
|
# Create and switch
|
||||||
|
git checkout -b feature/new-feature
|
||||||
|
git switch -c feature/new-feature # Newer syntax
|
||||||
|
|
||||||
|
# Switch branches
|
||||||
|
git checkout develop
|
||||||
|
git switch develop # Newer syntax
|
||||||
|
|
||||||
|
# Delete branches
|
||||||
|
git branch -d feature/old # Delete if merged
|
||||||
|
git branch -D feature/old # Force delete
|
||||||
|
git push origin --delete feature/old # Delete remote branch
|
||||||
|
|
||||||
|
# Rename branch
|
||||||
|
git branch -m old-name new-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### Remote Operations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View remotes
|
||||||
|
git remote -v
|
||||||
|
|
||||||
|
# Fetch updates from remote
|
||||||
|
git fetch origin
|
||||||
|
git fetch --all
|
||||||
|
|
||||||
|
# Pull changes (fetch + merge)
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Push changes
|
||||||
|
git push origin feature/csv-import
|
||||||
|
git push -u origin feature/csv-import # Set upstream
|
||||||
|
|
||||||
|
# Push tags
|
||||||
|
git push origin v1.0.0
|
||||||
|
git push origin --tags # Push all tags
|
||||||
|
```
|
||||||
|
|
||||||
|
### Viewing History
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# View commits
|
||||||
|
git log
|
||||||
|
git log --oneline
|
||||||
|
git log --graph --oneline --all --decorate
|
||||||
|
|
||||||
|
# View specific file history
|
||||||
|
git log -- path/to/file.java
|
||||||
|
|
||||||
|
# View changes in a commit
|
||||||
|
git show <commit-hash>
|
||||||
|
|
||||||
|
# View who changed each line (blame)
|
||||||
|
git blame file.java
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TROUBLESHOOTING
|
||||||
|
|
||||||
|
### Problem: Accidentally committed to `develop` directly
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# DON'T PUSH! If you haven't pushed:
|
||||||
|
|
||||||
|
# 1. Create a new branch with your changes
|
||||||
|
git branch feature/accidental-work
|
||||||
|
|
||||||
|
# 2. Reset develop to remote
|
||||||
|
git reset --hard origin/develop
|
||||||
|
|
||||||
|
# 3. Switch to feature branch and continue
|
||||||
|
git checkout feature/accidental-work
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problem: Need to undo last commit (not pushed)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Keep changes, undo commit
|
||||||
|
git reset --soft HEAD~1
|
||||||
|
|
||||||
|
# Discard changes and commit
|
||||||
|
git reset --hard HEAD~1 # CAREFUL - loses changes!
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problem: Pushed sensitive data (password, API key)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Immediately:
|
||||||
|
# 1. Change the password/API key
|
||||||
|
# 2. Contact Emin to help remove from history
|
||||||
|
# 3. Never commit credentials - use environment variables or config files (.gitignore them)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problem: Pull request has merge conflicts
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fetch latest develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Rebase your feature branch
|
||||||
|
git checkout feature/your-feature
|
||||||
|
git rebase develop
|
||||||
|
|
||||||
|
# Resolve conflicts (see Merge Conflict Resolution section)
|
||||||
|
# After resolving:
|
||||||
|
git rebase --continue
|
||||||
|
|
||||||
|
# Force push to update PR
|
||||||
|
git push origin feature/your-feature --force-with-lease
|
||||||
|
```
|
||||||
|
|
||||||
|
### Problem: Accidentally deleted local branch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# If you know the commit hash:
|
||||||
|
git checkout -b recovered-branch <commit-hash>
|
||||||
|
|
||||||
|
# If you don't know commit hash:
|
||||||
|
git reflog # Shows recent actions
|
||||||
|
# Find the commit you want to recover
|
||||||
|
git checkout -b recovered-branch HEAD@{N}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## BEST PRACTICES
|
||||||
|
|
||||||
|
### DO:
|
||||||
|
|
||||||
|
✅ **Commit often** - Small, logical commits
|
||||||
|
✅ **Write descriptive commit messages** - Follow format guidelines
|
||||||
|
✅ **Pull/rebase before starting new work** - Stay in sync
|
||||||
|
✅ **Use feature branches** - Never commit directly to main/develop
|
||||||
|
✅ **Review your own changes before PR** - Use `git diff`
|
||||||
|
✅ **Test before pushing** - Run `mvn clean test`
|
||||||
|
✅ **Keep commits focused** - One feature/fix per commit
|
||||||
|
✅ **Delete merged branches** - Keep repository clean
|
||||||
|
✅ **Tag releases** - Version your milestones
|
||||||
|
|
||||||
|
### DON'T:
|
||||||
|
|
||||||
|
❌ **Don't commit directly to main or develop**
|
||||||
|
❌ **Don't commit large binary files** - Use .gitignore
|
||||||
|
❌ **Don't commit credentials or secrets** - Use environment variables
|
||||||
|
❌ **Don't force push to shared branches** - Only your own feature branches
|
||||||
|
❌ **Don't leave WIP commits in PR** - Squash or rebase first
|
||||||
|
❌ **Don't ignore merge conflicts** - Resolve properly
|
||||||
|
❌ **Don't commit commented-out code** - Delete it
|
||||||
|
❌ **Don't commit TODO comments** - Create issues instead
|
||||||
|
❌ **Don't commit debugging print statements** - Remove them
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TEAM SPECIFIC RULES
|
||||||
|
|
||||||
|
### 1. Protected Branches
|
||||||
|
|
||||||
|
- **`main`**: Requires PR approval from Emin + all tests passing
|
||||||
|
- **`develop`**: Requires 1 approval + all tests passing
|
||||||
|
|
||||||
|
### 2. Commit Frequency
|
||||||
|
|
||||||
|
- Commit at least once per day when actively working
|
||||||
|
- Push to remote at least every 2 days (for backup)
|
||||||
|
- Don't let feature branches live longer than 1 week
|
||||||
|
|
||||||
|
### 3. PR Size
|
||||||
|
|
||||||
|
- Keep PRs small (< 500 lines changed)
|
||||||
|
- If a feature is large, break into multiple PRs
|
||||||
|
- Easier to review = faster merge
|
||||||
|
|
||||||
|
### 4. Review Turnaround
|
||||||
|
|
||||||
|
- Reviewers must respond within 24 hours
|
||||||
|
- If blocked, ping on WhatsApp/Discord
|
||||||
|
- If urgent, ask for immediate review
|
||||||
|
|
||||||
|
### 5. Merge Strategy
|
||||||
|
|
||||||
|
- **Default:** Squash and merge (clean history)
|
||||||
|
- **Exception:** Large features with meaningful commits can use regular merge
|
||||||
|
|
||||||
|
### 6. Branch Naming
|
||||||
|
|
||||||
|
- Always use prefix: `feature/`, `bugfix/`, `test/`, `docs/`
|
||||||
|
- Use lowercase with hyphens: `feature/csv-import` not `feature/CSV_Import`
|
||||||
|
- Be descriptive: `feature/add-classroom-view` not `feature/view`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## WEEKLY WORKFLOW
|
||||||
|
|
||||||
|
### Monday (Sprint Start)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sync with develop
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# Create feature branch for week's work
|
||||||
|
git checkout -b feature/this-weeks-work
|
||||||
|
|
||||||
|
# Start coding...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wednesday (Mid-Week)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sync with develop (in case others merged)
|
||||||
|
git fetch origin
|
||||||
|
git rebase origin/develop
|
||||||
|
|
||||||
|
# Continue work...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Friday (Sprint End)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ensure code is clean
|
||||||
|
mvn clean test
|
||||||
|
|
||||||
|
# Push feature branch
|
||||||
|
git push origin feature/this-weeks-work
|
||||||
|
|
||||||
|
# Create Pull Request on GitHub
|
||||||
|
# Demo in team meeting
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CHANGELOG
|
||||||
|
|
||||||
|
| Version | Date | Author | Changes |
|
||||||
|
|---------|------|--------|---------|
|
||||||
|
| 1.0 | 2025-11-26 | Claude Code | Initial Git workflow documentation |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**END OF GIT WORKFLOW GUIDE**
|
||||||
2741
MEMORY_BANK.md
Normal file
2741
MEMORY_BANK.md
Normal file
File diff suppressed because it is too large
Load Diff
563
README.md
563
README.md
@@ -1,96 +1,537 @@
|
|||||||
# SE302 - Exam Management System
|
# Exam Scheduling System
|
||||||
|
|
||||||
## Project Overview
|
[](https://github.com/sabazadam/se302/actions)
|
||||||
|
[](https://opensource.org/licenses/MIT)
|
||||||
|
|
||||||
This is a desktop application developed as part of the SE302 Software Engineering course. The system is designed to streamline and automate the management of examination schedules, ensuring efficient allocation of resources while preventing conflicts.
|
A desktop application for automated exam scheduling using Constraint Satisfaction Problem (CSP) solving techniques. Built with Java and JavaFX for educational institutions to efficiently generate conflict-free exam schedules.
|
||||||
|
|
||||||
## Purpose
|
---
|
||||||
|
|
||||||
The Exam Management System aims to solve common challenges faced by educational institutions during examination periods by:
|
## Table of Contents
|
||||||
- Managing multiple classes and examination schedules
|
|
||||||
- Optimizing time slot allocation for exams
|
|
||||||
- Preventing student scheduling conflicts (collision detection)
|
|
||||||
- Ensuring fair exam distribution across different time periods
|
|
||||||
- Reducing administrative workload in exam planning
|
|
||||||
|
|
||||||
## Key Features
|
- [Features](#features)
|
||||||
|
- [Quick Start](#quick-start)
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Usage](#usage)
|
||||||
|
- [Project Structure](#project-structure)
|
||||||
|
- [Development](#development)
|
||||||
|
- [Testing](#testing)
|
||||||
|
- [Documentation](#documentation)
|
||||||
|
- [Team](#team)
|
||||||
|
- [License](#license)
|
||||||
|
|
||||||
### Planned Features
|
---
|
||||||
- **Class Management**: Register and manage multiple classes and courses
|
|
||||||
- **Exam Scheduling**: Create and organize exam schedules with date and time allocation
|
|
||||||
- **Conflict Detection**: Automatic detection of scheduling conflicts for students enrolled in multiple courses
|
|
||||||
- **Collision Avoidance**: Intelligent algorithm to prevent students from having overlapping exams
|
|
||||||
- **Time Optimization**: Efficient distribution of exams across available time slots
|
|
||||||
- **Student Management**: Track student enrollments and exam assignments
|
|
||||||
- **Reporting**: Generate reports on exam schedules and potential conflicts
|
|
||||||
|
|
||||||
## Technology Stack
|
## Features
|
||||||
|
|
||||||
*To be updated as development progresses*
|
### Core Functionality
|
||||||
|
|
||||||
- **Platform**: Desktop Application
|
- **CSV Data Import**: Import students, courses, classrooms, and enrollment data from CSV files
|
||||||
- **Programming Language**: [TBD]
|
- **Intelligent Scheduling**: Automated exam scheduling using backtracking CSP solver
|
||||||
- **Database**: [TBD]
|
- **Constraint Validation**: Enforces hard constraints:
|
||||||
- **UI Framework**: [TBD]
|
- No consecutive exams for any student
|
||||||
|
- Maximum 2 exams per student per day
|
||||||
|
- Classroom capacity limits respected
|
||||||
|
- **Multiple Optimization Strategies**:
|
||||||
|
- Minimize days used
|
||||||
|
- Balance distribution across exam period
|
||||||
|
- Minimize classrooms needed
|
||||||
|
- Balance classroom usage per day
|
||||||
|
- **Multi-View Display**:
|
||||||
|
- Classroom view (which exams in which rooms)
|
||||||
|
- Student view (personal exam schedule)
|
||||||
|
- Course view (exam details per course)
|
||||||
|
- Day view (grid layout by day and time slot)
|
||||||
|
- **Export Capabilities**: Export schedules to CSV or Excel (.xlsx) format
|
||||||
|
- **Manual Adjustments**: Edit schedules with real-time constraint validation
|
||||||
|
- **Schedule History**: Save, load, and compare previous schedules
|
||||||
|
- **Conflict Detection**: Detailed reporting when no valid schedule exists
|
||||||
|
|
||||||
## Project Structure
|
### Technical Highlights
|
||||||
|
|
||||||
```
|
- **Performance**: Generates schedules for 20 courses, 250 students in < 5 seconds
|
||||||
se302/
|
- **Scalability**: Handles datasets up to 50 courses, 500+ students
|
||||||
├── src/ # Source code files
|
- **Reliability**: 100% constraint satisfaction guarantee
|
||||||
├── docs/ # Documentation
|
- **User-Friendly**: Clear error messages, progress indicators, intuitive UI
|
||||||
├── tests/ # Test files
|
|
||||||
└── README.md # Project documentation
|
|
||||||
```
|
|
||||||
|
|
||||||
## Installation
|
---
|
||||||
|
|
||||||
*Installation instructions will be added as the project develops*
|
## Quick Start
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone the repository
|
# Clone the repository
|
||||||
git clone https://github.com/sabazadam/se302.git
|
git clone https://github.com/sabazadam/se302.git
|
||||||
cd se302
|
cd se302
|
||||||
|
|
||||||
# Further installation steps to be added
|
# Build the project
|
||||||
|
mvn clean install
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
mvn javafx:run
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- **Java Development Kit (JDK) 17 or higher**
|
||||||
|
- Download: [Oracle JDK](https://www.oracle.com/java/technologies/downloads/) or [OpenJDK](https://adoptium.net/)
|
||||||
|
- **Maven 3.8+** (for building from source)
|
||||||
|
- Download: [Apache Maven](https://maven.apache.org/download.cgi)
|
||||||
|
- **Operating System**: Windows 10/11, macOS, or Linux
|
||||||
|
- **Minimum Hardware**:
|
||||||
|
- 2 GHz dual-core processor
|
||||||
|
- 4 GB RAM
|
||||||
|
- 100 MB disk space
|
||||||
|
|
||||||
|
### Installation Steps
|
||||||
|
|
||||||
|
#### Option 1: Run from JAR (Recommended for Users)
|
||||||
|
|
||||||
|
1. Download the latest release JAR from [Releases](https://github.com/sabazadam/se302/releases)
|
||||||
|
2. Double-click the JAR file or run from command line:
|
||||||
|
```bash
|
||||||
|
java -jar exam-scheduler-1.0.0-jar-with-dependencies.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Option 2: Build from Source (For Developers)
|
||||||
|
|
||||||
|
1. **Clone the repository:**
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/sabazadam/se302.git
|
||||||
|
cd se302
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Build the project:**
|
||||||
|
```bash
|
||||||
|
mvn clean package
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run the application:**
|
||||||
|
```bash
|
||||||
|
mvn javafx:run
|
||||||
|
```
|
||||||
|
|
||||||
|
Or run the generated JAR:
|
||||||
|
```bash
|
||||||
|
java -jar target/exam-scheduler-1.0.0-jar-with-dependencies.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
*Usage instructions will be provided once the application is developed*
|
### 1. Import Data
|
||||||
|
|
||||||
## Development Roadmap
|
1. Click **Import Data** in the navigation panel
|
||||||
|
2. Select your CSV files:
|
||||||
|
- **Students**: List of student IDs (one per line)
|
||||||
|
- **Courses**: List of course codes (one per line)
|
||||||
|
- **Classrooms**: Format `ClassroomID;Capacity` (e.g., `Room_01;40`)
|
||||||
|
- **Enrollments**: Student-course enrollment mappings
|
||||||
|
3. Click **Import All** and verify success
|
||||||
|
|
||||||
- [ ] Requirements analysis and specification
|
**CSV Format Examples:**
|
||||||
- [ ] System design and architecture
|
|
||||||
- [ ] Database schema design
|
|
||||||
- [ ] Core functionality implementation
|
|
||||||
- [ ] User interface development
|
|
||||||
- [ ] Conflict detection algorithm implementation
|
|
||||||
- [ ] Testing and quality assurance
|
|
||||||
- [ ] Documentation and deployment
|
|
||||||
|
|
||||||
## Contributing
|
`students.csv`:
|
||||||
|
```
|
||||||
|
Std_ID_001
|
||||||
|
Std_ID_002
|
||||||
|
Std_ID_003
|
||||||
|
```
|
||||||
|
|
||||||
This is an academic project for SE302 course. Contributions are limited to project team members.
|
`classrooms.csv`:
|
||||||
|
```
|
||||||
|
Classroom_01;40
|
||||||
|
Classroom_02;35
|
||||||
|
Classroom_03;50
|
||||||
|
```
|
||||||
|
|
||||||
### Team Members
|
### 2. Configure Exam Period
|
||||||
- [Add team member names here]
|
|
||||||
|
1. Click **Configure** in the navigation panel
|
||||||
|
2. Set **Number of Days** (e.g., 5 days)
|
||||||
|
3. Set **Time Slots Per Day** (e.g., 4 slots)
|
||||||
|
4. Total available slots = Days × Slots (e.g., 5 × 4 = 20 slots)
|
||||||
|
5. Choose **Optimization Strategy**:
|
||||||
|
- **Minimize Days**: Pack exams into fewest days
|
||||||
|
- **Balance Distribution**: Spread exams evenly
|
||||||
|
- **Minimize Classrooms**: Use fewest rooms
|
||||||
|
- **Balance Classrooms**: Even room usage per day
|
||||||
|
6. Click **Save Configuration**
|
||||||
|
|
||||||
|
### 3. Generate Schedule
|
||||||
|
|
||||||
|
1. Click **Generate** in the navigation panel
|
||||||
|
2. Review configuration summary
|
||||||
|
3. Click **Generate Schedule**
|
||||||
|
4. Watch progress bar (cancellation available)
|
||||||
|
5. View success/failure result
|
||||||
|
|
||||||
|
**If generation fails**, view conflict report for:
|
||||||
|
- Students with too many courses
|
||||||
|
- Courses exceeding classroom capacity
|
||||||
|
- Recommendations to resolve conflicts
|
||||||
|
|
||||||
|
### 4. View Schedule
|
||||||
|
|
||||||
|
After successful generation, view schedule in 4 different formats:
|
||||||
|
|
||||||
|
- **Classroom View**: See which exams are in each classroom
|
||||||
|
- **Student View**: Search for a student's personal exam schedule
|
||||||
|
- **Course View**: See when each course exam is scheduled
|
||||||
|
- **Day View**: Visual grid of all exams by day and time slot
|
||||||
|
|
||||||
|
### 5. Export Schedule
|
||||||
|
|
||||||
|
1. Click **Export** in the navigation panel
|
||||||
|
2. Choose format: CSV or Excel
|
||||||
|
3. Select which views to export (can export all 4 views)
|
||||||
|
4. Choose destination folder
|
||||||
|
5. Click **Export**
|
||||||
|
|
||||||
|
Excel exports create a multi-sheet workbook with formatted tables ready for printing.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
se302/
|
||||||
|
├── src/
|
||||||
|
│ ├── main/
|
||||||
|
│ │ ├── java/com/se302/examscheduler/
|
||||||
|
│ │ │ ├── model/ # Domain models (Student, Course, etc.)
|
||||||
|
│ │ │ ├── dao/ # Data Access Objects
|
||||||
|
│ │ │ ├── service/ # Business logic layer
|
||||||
|
│ │ │ ├── algorithm/ # CSP solver implementation
|
||||||
|
│ │ │ ├── controller/ # JavaFX controllers
|
||||||
|
│ │ │ ├── util/ # Utility classes
|
||||||
|
│ │ │ └── Main.java # Application entry point
|
||||||
|
│ │ └── resources/
|
||||||
|
│ │ ├── fxml/ # JavaFX FXML layouts
|
||||||
|
│ │ ├── css/ # Stylesheets
|
||||||
|
│ │ ├── images/ # Icons and images
|
||||||
|
│ │ └── database/ # SQL schema
|
||||||
|
│ └── test/
|
||||||
|
│ └── java/com/se302/examscheduler/
|
||||||
|
│ ├── dao/ # DAO tests
|
||||||
|
│ ├── service/ # Service tests
|
||||||
|
│ ├── algorithm/ # Algorithm tests
|
||||||
|
│ └── integration/ # Integration tests
|
||||||
|
├── docs/ # Documentation
|
||||||
|
│ ├── MEMORY_BANK.md # Comprehensive project documentation
|
||||||
|
│ ├── ROADMAP.md # Development roadmap
|
||||||
|
│ ├── TEAM_ASSIGNMENTS.md # Team roles and responsibilities
|
||||||
|
│ ├── GIT_WORKFLOW.md # Git workflow guide
|
||||||
|
│ └── screenshots/ # Application screenshots
|
||||||
|
├── .github/
|
||||||
|
│ └── workflows/
|
||||||
|
│ └── ci.yml # GitHub Actions CI/CD
|
||||||
|
├── pom.xml # Maven configuration
|
||||||
|
├── .gitignore # Git ignore rules
|
||||||
|
└── README.md # This file
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Prerequisites for Development
|
||||||
|
|
||||||
|
- Java JDK 17+
|
||||||
|
- Maven 3.8+
|
||||||
|
- IDE: IntelliJ IDEA (recommended) or Eclipse
|
||||||
|
- Scene Builder (for FXML editing): [Download](https://gluonhq.com/products/scene-builder/)
|
||||||
|
- Git
|
||||||
|
|
||||||
|
### Setup Development Environment
|
||||||
|
|
||||||
|
1. **Clone the repository:**
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/sabazadam/se302.git
|
||||||
|
cd se302
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Import into IDE:**
|
||||||
|
- IntelliJ IDEA: File → Open → Select `pom.xml`
|
||||||
|
- Eclipse: File → Import → Existing Maven Projects
|
||||||
|
|
||||||
|
3. **Configure JDK 17:**
|
||||||
|
- IntelliJ: File → Project Structure → Project SDK → Select JDK 17
|
||||||
|
- Eclipse: Right-click project → Properties → Java Build Path → JRE System Library
|
||||||
|
|
||||||
|
4. **Build the project:**
|
||||||
|
```bash
|
||||||
|
mvn clean install
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Run from IDE:**
|
||||||
|
- Main class: `com.se302.examscheduler.Main`
|
||||||
|
- VM options: `--module-path /path/to/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml`
|
||||||
|
|
||||||
|
### Git Workflow
|
||||||
|
|
||||||
|
We follow a **feature branch workflow** with `main` and `develop` branches:
|
||||||
|
|
||||||
|
1. Create feature branch from `develop`:
|
||||||
|
```bash
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Make changes and commit:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "feat(scope): brief description"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Push and create Pull Request:
|
||||||
|
```bash
|
||||||
|
git push origin feature/your-feature-name
|
||||||
|
```
|
||||||
|
|
||||||
|
4. After PR approval, merge to `develop`
|
||||||
|
5. Delete feature branch after merge
|
||||||
|
|
||||||
|
**See [GIT_WORKFLOW.md](GIT_WORKFLOW.md) for detailed guidelines.**
|
||||||
|
|
||||||
|
### Coding Standards
|
||||||
|
|
||||||
|
- **Java Naming Conventions**: camelCase for variables/methods, PascalCase for classes
|
||||||
|
- **JavaDoc**: Required for all public methods
|
||||||
|
- **Comments**: Explain "why" not "what"
|
||||||
|
- **Max line length**: 120 characters
|
||||||
|
- **Indentation**: 4 spaces (no tabs)
|
||||||
|
- **Formatting**: Follow Java standard code style
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
### Running Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all tests
|
||||||
|
mvn test
|
||||||
|
|
||||||
|
# Run specific test class
|
||||||
|
mvn test -Dtest=StudentDAOTest
|
||||||
|
|
||||||
|
# Run with coverage report
|
||||||
|
mvn clean test jacoco:report
|
||||||
|
|
||||||
|
# View coverage report
|
||||||
|
open target/site/jacoco/index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test Coverage Goals
|
||||||
|
|
||||||
|
- **Overall**: > 70% line coverage
|
||||||
|
- **DAO Layer**: > 90%
|
||||||
|
- **Algorithm Layer**: > 95%
|
||||||
|
- **Service Layer**: > 80%
|
||||||
|
- **Controller Layer**: > 70%
|
||||||
|
|
||||||
|
### Continuous Integration
|
||||||
|
|
||||||
|
GitHub Actions automatically runs tests on every push and pull request:
|
||||||
|
- Compiles code
|
||||||
|
- Runs all tests
|
||||||
|
- Generates coverage report
|
||||||
|
- Uploads to Codecov
|
||||||
|
|
||||||
|
See [.github/workflows/ci.yml](.github/workflows/ci.yml) for CI configuration.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
### User Documentation
|
||||||
|
|
||||||
|
- **User Manual** (PDF): Comprehensive guide with screenshots (coming in Week 10)
|
||||||
|
- **Installation Guide**: See [Installation](#installation) section above
|
||||||
|
- **Troubleshooting Guide**: (coming soon)
|
||||||
|
|
||||||
|
### Developer Documentation
|
||||||
|
|
||||||
|
- **Memory Bank**: [MEMORY_BANK.md](MEMORY_BANK.md) - Comprehensive project documentation including:
|
||||||
|
- Requirements summary
|
||||||
|
- Database schema
|
||||||
|
- Architecture and design patterns
|
||||||
|
- Algorithm design
|
||||||
|
- API contracts
|
||||||
|
- Testing strategy
|
||||||
|
- **Roadmap**: [ROADMAP.md](ROADMAP.md) - Week-by-week development plan
|
||||||
|
- **Team Assignments**: [TEAM_ASSIGNMENTS.md](TEAM_ASSIGNMENTS.md) - Roles and responsibilities
|
||||||
|
- **Git Workflow**: [GIT_WORKFLOW.md](GIT_WORKFLOW.md) - Branching strategy and PR process
|
||||||
|
- **JavaDoc**: Generate with `mvn javadoc:javadoc`, view at `target/site/apidocs/index.html`
|
||||||
|
|
||||||
|
### API Documentation
|
||||||
|
|
||||||
|
Generate JavaDoc:
|
||||||
|
```bash
|
||||||
|
mvn javadoc:javadoc
|
||||||
|
open target/site/apidocs/index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Team
|
||||||
|
|
||||||
|
**SE302 - Software Engineering | Team 3, Section 1**
|
||||||
|
|
||||||
|
| Name | Student ID | Role |
|
||||||
|
|------|-----------|------|
|
||||||
|
| Kerem Bozdag | 20200602012 | Database & Data Layer Lead |
|
||||||
|
| Milena Larissa Ünal | 20230602107 | Algorithm Specialist |
|
||||||
|
| Rabia Tülay Gokdag | 20210602029 | UI/FXML Specialist |
|
||||||
|
| Mehmet Sefa Keskin | 20230602047 | Controller Layer Lead |
|
||||||
|
| Feyza Gereme | 20230602028 | Testing & QA Lead |
|
||||||
|
| Emin Arslan | 20230602007 | Documentation & Integration Lead |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Technology Stack
|
||||||
|
|
||||||
|
- **Language**: Java 17
|
||||||
|
- **UI Framework**: JavaFX 21
|
||||||
|
- **Database**: SQLite 3.44
|
||||||
|
- **Build Tool**: Maven 3.8+
|
||||||
|
- **Testing**: JUnit 5, Mockito, TestFX
|
||||||
|
- **Libraries**:
|
||||||
|
- Apache POI (Excel export)
|
||||||
|
- Apache Commons CSV (CSV parsing)
|
||||||
|
- SQLite JDBC
|
||||||
|
- **CI/CD**: GitHub Actions
|
||||||
|
- **Code Coverage**: JaCoCo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
The application follows the **Model-View-Controller (MVC)** architectural pattern:
|
||||||
|
|
||||||
|
- **Model**: Domain objects (Student, Course, Classroom, etc.) and business logic
|
||||||
|
- **View**: JavaFX FXML layouts and UI components
|
||||||
|
- **Controller**: JavaFX controllers handling user interactions
|
||||||
|
|
||||||
|
**Key Design Patterns**:
|
||||||
|
- **DAO Pattern**: Data access abstraction
|
||||||
|
- **Strategy Pattern**: Pluggable optimization strategies
|
||||||
|
- **Singleton Pattern**: Database connection management
|
||||||
|
- **Observer Pattern**: Progress tracking for long-running operations
|
||||||
|
- **Factory Pattern**: DAO instantiation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Algorithm
|
||||||
|
|
||||||
|
The scheduling algorithm uses **Backtracking with Constraint Propagation**:
|
||||||
|
|
||||||
|
1. **Variables**: Each course is a variable needing assignment
|
||||||
|
2. **Domain**: Each course can be assigned to {Classroom, Day, TimeSlot} triple
|
||||||
|
3. **Constraints**:
|
||||||
|
- No consecutive exams for any student
|
||||||
|
- Max 2 exams per student per day
|
||||||
|
- Classroom capacity limits
|
||||||
|
4. **Heuristics**:
|
||||||
|
- **Variable ordering**: Minimum Remaining Values (MRV)
|
||||||
|
- **Value ordering**: Least Constraining Value
|
||||||
|
5. **Optimization**: Strategy-based heuristics affect value ordering
|
||||||
|
|
||||||
|
See [MEMORY_BANK.md](MEMORY_BANK.md#algorithm-design) for detailed algorithm documentation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Course Information
|
## Course Information
|
||||||
|
|
||||||
- **Course**: SE302 - Software Engineering
|
- **Course**: SE302 - Software Engineering
|
||||||
- **Institution**: [Your University Name]
|
- **Section**: 1
|
||||||
- **Academic Year**: [Year/Semester]
|
- **Team**: 3
|
||||||
|
- **Academic Year**: 2025-2026 Fall Semester
|
||||||
## License
|
- **Project Start**: November 26, 2025
|
||||||
|
- **Final Delivery**: February 4, 2026
|
||||||
This project is developed for educational purposes as part of SE302 coursework.
|
|
||||||
|
|
||||||
## Contact
|
|
||||||
|
|
||||||
For questions or issues related to this project, please contact the project team members or the course instructor.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Last Updated: October 2025*
|
## License
|
||||||
|
|
||||||
|
This project is developed as part of SE302 Software Engineering course.
|
||||||
|
|
||||||
|
**Academic Use Only** - Not licensed for commercial use.
|
||||||
|
|
||||||
|
Copyright © 2025 Team 3, Section 1. All rights reserved.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
|
||||||
|
### Q: What happens if no valid schedule exists?
|
||||||
|
|
||||||
|
**A:** The system will detect conflicts and provide a detailed report identifying:
|
||||||
|
- Students with too many courses for the available slots
|
||||||
|
- Courses with enrollment exceeding maximum classroom capacity
|
||||||
|
- Specific recommendations to resolve the issue (extend period, add classrooms, reduce enrollments)
|
||||||
|
|
||||||
|
### Q: Can I run multiple schedules with different configurations?
|
||||||
|
|
||||||
|
**A:** Yes! The system saves schedule history with metadata (date, optimization strategy, configuration). You can generate multiple schedules and compare them.
|
||||||
|
|
||||||
|
### Q: Can I edit a generated schedule manually?
|
||||||
|
|
||||||
|
**A:** Yes, but all edits are validated against constraints in real-time. If an edit would violate a constraint (e.g., create consecutive exams for a student), the system will reject it with a detailed explanation.
|
||||||
|
|
||||||
|
### Q: How fast is the scheduling algorithm?
|
||||||
|
|
||||||
|
**A:** For the sample dataset (20 courses, 250 students, 10 classrooms), generation typically completes in < 5 seconds. Larger datasets (50 courses, 500 students) complete in < 10 seconds.
|
||||||
|
|
||||||
|
### Q: Can I use this on macOS or Linux?
|
||||||
|
|
||||||
|
**A:** Yes! The application is built with Java and JavaFX, which are cross-platform. It works on Windows, macOS, and Linux.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Development Progress
|
||||||
|
|
||||||
|
### Completed
|
||||||
|
- [x] Requirements analysis and specification
|
||||||
|
- [x] System design and architecture
|
||||||
|
- [x] Database schema design
|
||||||
|
- [x] Project structure and Maven setup
|
||||||
|
- [x] Git workflow and CI/CD pipeline
|
||||||
|
- [x] Comprehensive documentation (Memory Bank, Roadmap, Team Assignments)
|
||||||
|
|
||||||
|
### In Progress (Week 1)
|
||||||
|
- [ ] Database layer implementation
|
||||||
|
- [ ] CSV import functionality
|
||||||
|
- [ ] Domain model classes
|
||||||
|
- [ ] UI wireframes and layouts
|
||||||
|
|
||||||
|
### Planned
|
||||||
|
- [ ] CSP solver implementation
|
||||||
|
- [ ] Optimization strategies
|
||||||
|
- [ ] JavaFX UI views
|
||||||
|
- [ ] Export functionality
|
||||||
|
- [ ] Testing and quality assurance
|
||||||
|
- [ ] User manual and final documentation
|
||||||
|
|
||||||
|
See [ROADMAP.md](ROADMAP.md) for detailed week-by-week plan.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Contact
|
||||||
|
|
||||||
|
For questions or issues related to this project:
|
||||||
|
- Create an issue on GitHub
|
||||||
|
- Contact team members (see [Team](#team) section)
|
||||||
|
- Contact course instructor
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Last Updated: November 26, 2025*
|
||||||
|
|
||||||
|
For comprehensive project documentation, see [MEMORY_BANK.md](MEMORY_BANK.md).
|
||||||
|
|||||||
1069
ROADMAP.md
Normal file
1069
ROADMAP.md
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Requirements.pdf
Normal file
BIN
Requirements.pdf
Normal file
Binary file not shown.
59
Sample Data list/sampleData_AllAttendanceLists.csv
Normal file
59
Sample Data list/sampleData_AllAttendanceLists.csv
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
CourseCode_01
|
||||||
|
['Std_ID_170', 'Std_ID_077', 'Std_ID_097', 'Std_ID_202', 'Std_ID_080', 'Std_ID_126', 'Std_ID_112', 'Std_ID_175', 'Std_ID_180', 'Std_ID_139', 'Std_ID_181', 'Std_ID_222', 'Std_ID_243', 'Std_ID_167', 'Std_ID_136', 'Std_ID_021', 'Std_ID_041', 'Std_ID_231', 'Std_ID_062', 'Std_ID_138', 'Std_ID_236', 'Std_ID_221', 'Std_ID_006', 'Std_ID_135', 'Std_ID_209', 'Std_ID_239', 'Std_ID_043', 'Std_ID_182', 'Std_ID_246', 'Std_ID_083', 'Std_ID_056', 'Std_ID_047', 'Std_ID_193', 'Std_ID_107', 'Std_ID_216', 'Std_ID_005', 'Std_ID_096', 'Std_ID_140', 'Std_ID_233', 'Std_ID_168']
|
||||||
|
|
||||||
|
CourseCode_02
|
||||||
|
['Std_ID_238', 'Std_ID_132', 'Std_ID_079', 'Std_ID_139', 'Std_ID_116', 'Std_ID_093', 'Std_ID_190', 'Std_ID_121', 'Std_ID_108', 'Std_ID_005', 'Std_ID_210', 'Std_ID_018', 'Std_ID_152', 'Std_ID_033', 'Std_ID_199', 'Std_ID_073', 'Std_ID_193', 'Std_ID_220', 'Std_ID_222', 'Std_ID_188', 'Std_ID_217', 'Std_ID_008', 'Std_ID_123', 'Std_ID_159', 'Std_ID_227', 'Std_ID_136', 'Std_ID_187', 'Std_ID_216', 'Std_ID_056', 'Std_ID_026', 'Std_ID_099', 'Std_ID_146', 'Std_ID_055', 'Std_ID_057', 'Std_ID_035', 'Std_ID_049', 'Std_ID_144', 'Std_ID_232', 'Std_ID_098', 'Std_ID_058']
|
||||||
|
|
||||||
|
CourseCode_03
|
||||||
|
['Std_ID_098', 'Std_ID_070', 'Std_ID_049', 'Std_ID_191', 'Std_ID_109', 'Std_ID_196', 'Std_ID_209', 'Std_ID_189', 'Std_ID_039', 'Std_ID_219', 'Std_ID_009', 'Std_ID_033', 'Std_ID_059', 'Std_ID_174', 'Std_ID_169', 'Std_ID_122', 'Std_ID_057', 'Std_ID_249', 'Std_ID_142', 'Std_ID_229', 'Std_ID_038', 'Std_ID_132', 'Std_ID_140', 'Std_ID_081', 'Std_ID_243', 'Std_ID_150', 'Std_ID_099', 'Std_ID_224', 'Std_ID_097', 'Std_ID_193', 'Std_ID_043', 'Std_ID_055', 'Std_ID_061', 'Std_ID_212', 'Std_ID_205', 'Std_ID_146', 'Std_ID_100', 'Std_ID_149', 'Std_ID_116', 'Std_ID_233']
|
||||||
|
|
||||||
|
CourseCode_04
|
||||||
|
['Std_ID_142', 'Std_ID_085', 'Std_ID_103', 'Std_ID_059', 'Std_ID_243', 'Std_ID_106', 'Std_ID_069', 'Std_ID_014', 'Std_ID_015', 'Std_ID_088', 'Std_ID_136', 'Std_ID_020', 'Std_ID_097', 'Std_ID_190', 'Std_ID_194', 'Std_ID_201', 'Std_ID_125', 'Std_ID_182', 'Std_ID_138', 'Std_ID_105', 'Std_ID_076', 'Std_ID_007', 'Std_ID_066', 'Std_ID_189', 'Std_ID_129', 'Std_ID_133', 'Std_ID_034', 'Std_ID_130', 'Std_ID_247', 'Std_ID_024', 'Std_ID_027', 'Std_ID_115', 'Std_ID_064', 'Std_ID_132', 'Std_ID_113', 'Std_ID_118', 'Std_ID_162', 'Std_ID_154', 'Std_ID_181', 'Std_ID_114']
|
||||||
|
|
||||||
|
CourseCode_05
|
||||||
|
['Std_ID_203', 'Std_ID_236', 'Std_ID_192', 'Std_ID_198', 'Std_ID_213', 'Std_ID_147', 'Std_ID_051', 'Std_ID_095', 'Std_ID_226', 'Std_ID_077', 'Std_ID_230', 'Std_ID_035', 'Std_ID_142', 'Std_ID_195', 'Std_ID_182', 'Std_ID_064', 'Std_ID_229', 'Std_ID_239', 'Std_ID_119', 'Std_ID_231', 'Std_ID_217', 'Std_ID_054', 'Std_ID_163', 'Std_ID_148', 'Std_ID_249', 'Std_ID_068', 'Std_ID_202', 'Std_ID_225', 'Std_ID_101', 'Std_ID_126', 'Std_ID_150', 'Std_ID_197', 'Std_ID_025', 'Std_ID_140', 'Std_ID_124', 'Std_ID_053', 'Std_ID_075', 'Std_ID_074', 'Std_ID_243', 'Std_ID_169']
|
||||||
|
|
||||||
|
CourseCode_06
|
||||||
|
['Std_ID_129', 'Std_ID_175', 'Std_ID_049', 'Std_ID_238', 'Std_ID_056', 'Std_ID_187', 'Std_ID_064', 'Std_ID_151', 'Std_ID_201', 'Std_ID_022', 'Std_ID_169', 'Std_ID_220', 'Std_ID_147', 'Std_ID_223', 'Std_ID_011', 'Std_ID_053', 'Std_ID_166', 'Std_ID_111', 'Std_ID_219', 'Std_ID_112', 'Std_ID_203', 'Std_ID_054', 'Std_ID_106', 'Std_ID_025', 'Std_ID_073', 'Std_ID_234', 'Std_ID_027', 'Std_ID_215', 'Std_ID_028', 'Std_ID_208', 'Std_ID_192', 'Std_ID_172', 'Std_ID_015', 'Std_ID_164', 'Std_ID_110', 'Std_ID_010', 'Std_ID_078', 'Std_ID_006', 'Std_ID_204', 'Std_ID_029']
|
||||||
|
|
||||||
|
CourseCode_07
|
||||||
|
['Std_ID_040', 'Std_ID_102', 'Std_ID_186', 'Std_ID_206', 'Std_ID_113', 'Std_ID_135', 'Std_ID_145', 'Std_ID_165', 'Std_ID_028', 'Std_ID_235', 'Std_ID_144', 'Std_ID_085', 'Std_ID_026', 'Std_ID_203', 'Std_ID_231', 'Std_ID_124', 'Std_ID_190', 'Std_ID_089', 'Std_ID_074', 'Std_ID_222', 'Std_ID_179', 'Std_ID_127', 'Std_ID_041', 'Std_ID_133', 'Std_ID_181', 'Std_ID_095', 'Std_ID_034', 'Std_ID_219', 'Std_ID_148', 'Std_ID_037', 'Std_ID_061', 'Std_ID_188', 'Std_ID_171', 'Std_ID_238', 'Std_ID_242', 'Std_ID_029', 'Std_ID_182', 'Std_ID_072', 'Std_ID_161', 'Std_ID_093']
|
||||||
|
|
||||||
|
CourseCode_08
|
||||||
|
['Std_ID_009', 'Std_ID_108', 'Std_ID_116', 'Std_ID_111', 'Std_ID_058', 'Std_ID_086', 'Std_ID_128', 'Std_ID_106', 'Std_ID_187', 'Std_ID_115', 'Std_ID_101', 'Std_ID_096', 'Std_ID_063', 'Std_ID_192', 'Std_ID_091', 'Std_ID_195', 'Std_ID_236', 'Std_ID_039', 'Std_ID_042', 'Std_ID_052', 'Std_ID_032', 'Std_ID_137', 'Std_ID_181', 'Std_ID_071', 'Std_ID_127', 'Std_ID_130', 'Std_ID_089', 'Std_ID_165', 'Std_ID_175', 'Std_ID_207', 'Std_ID_121', 'Std_ID_233', 'Std_ID_033', 'Std_ID_080', 'Std_ID_240', 'Std_ID_152', 'Std_ID_209', 'Std_ID_050', 'Std_ID_017', 'Std_ID_075']
|
||||||
|
|
||||||
|
CourseCode_09
|
||||||
|
['Std_ID_043', 'Std_ID_203', 'Std_ID_040', 'Std_ID_163', 'Std_ID_142', 'Std_ID_137', 'Std_ID_220', 'Std_ID_126', 'Std_ID_032', 'Std_ID_157', 'Std_ID_159', 'Std_ID_219', 'Std_ID_175', 'Std_ID_015', 'Std_ID_177', 'Std_ID_217', 'Std_ID_008', 'Std_ID_070', 'Std_ID_048', 'Std_ID_033', 'Std_ID_188', 'Std_ID_078', 'Std_ID_097', 'Std_ID_121', 'Std_ID_183', 'Std_ID_016', 'Std_ID_181', 'Std_ID_080', 'Std_ID_119', 'Std_ID_206', 'Std_ID_093', 'Std_ID_195', 'Std_ID_002', 'Std_ID_098', 'Std_ID_200', 'Std_ID_090', 'Std_ID_167', 'Std_ID_088', 'Std_ID_041', 'Std_ID_164']
|
||||||
|
|
||||||
|
CourseCode_10
|
||||||
|
['Std_ID_229', 'Std_ID_167', 'Std_ID_228', 'Std_ID_193', 'Std_ID_025', 'Std_ID_205', 'Std_ID_163', 'Std_ID_225', 'Std_ID_194', 'Std_ID_240', 'Std_ID_247', 'Std_ID_233', 'Std_ID_181', 'Std_ID_121', 'Std_ID_152', 'Std_ID_131', 'Std_ID_026', 'Std_ID_217', 'Std_ID_124', 'Std_ID_010', 'Std_ID_054', 'Std_ID_129', 'Std_ID_003', 'Std_ID_211', 'Std_ID_090', 'Std_ID_092', 'Std_ID_024', 'Std_ID_144', 'Std_ID_201', 'Std_ID_049', 'Std_ID_171', 'Std_ID_082', 'Std_ID_136', 'Std_ID_042', 'Std_ID_224', 'Std_ID_027', 'Std_ID_021', 'Std_ID_160', 'Std_ID_235', 'Std_ID_072']
|
||||||
|
|
||||||
|
CourseCode_11
|
||||||
|
['Std_ID_208', 'Std_ID_237', 'Std_ID_061', 'Std_ID_133', 'Std_ID_119', 'Std_ID_132', 'Std_ID_168', 'Std_ID_238', 'Std_ID_170', 'Std_ID_190', 'Std_ID_066', 'Std_ID_093', 'Std_ID_243', 'Std_ID_148', 'Std_ID_205', 'Std_ID_033', 'Std_ID_078', 'Std_ID_191', 'Std_ID_111', 'Std_ID_090', 'Std_ID_079', 'Std_ID_083', 'Std_ID_086', 'Std_ID_020', 'Std_ID_029', 'Std_ID_022', 'Std_ID_131', 'Std_ID_071', 'Std_ID_055', 'Std_ID_141', 'Std_ID_049', 'Std_ID_115', 'Std_ID_202', 'Std_ID_122', 'Std_ID_075', 'Std_ID_222', 'Std_ID_149', 'Std_ID_021', 'Std_ID_018', 'Std_ID_124']
|
||||||
|
|
||||||
|
CourseCode_12
|
||||||
|
['Std_ID_066', 'Std_ID_052', 'Std_ID_091', 'Std_ID_008', 'Std_ID_148', 'Std_ID_003', 'Std_ID_040', 'Std_ID_187', 'Std_ID_170', 'Std_ID_147', 'Std_ID_111', 'Std_ID_027', 'Std_ID_142', 'Std_ID_188', 'Std_ID_202', 'Std_ID_176', 'Std_ID_079', 'Std_ID_145', 'Std_ID_058', 'Std_ID_089', 'Std_ID_190', 'Std_ID_044', 'Std_ID_062', 'Std_ID_112', 'Std_ID_099', 'Std_ID_220', 'Std_ID_203', 'Std_ID_222', 'Std_ID_117', 'Std_ID_061', 'Std_ID_118', 'Std_ID_217', 'Std_ID_109', 'Std_ID_223', 'Std_ID_002', 'Std_ID_019', 'Std_ID_121', 'Std_ID_100', 'Std_ID_152', 'Std_ID_213']
|
||||||
|
|
||||||
|
CourseCode_13
|
||||||
|
['Std_ID_175', 'Std_ID_205', 'Std_ID_019', 'Std_ID_142', 'Std_ID_243', 'Std_ID_246', 'Std_ID_186', 'Std_ID_228', 'Std_ID_137', 'Std_ID_080', 'Std_ID_130', 'Std_ID_105', 'Std_ID_216', 'Std_ID_201', 'Std_ID_135', 'Std_ID_218', 'Std_ID_096', 'Std_ID_109', 'Std_ID_026', 'Std_ID_229', 'Std_ID_207', 'Std_ID_014', 'Std_ID_179', 'Std_ID_192', 'Std_ID_158', 'Std_ID_102', 'Std_ID_011', 'Std_ID_094', 'Std_ID_057', 'Std_ID_010', 'Std_ID_062', 'Std_ID_090', 'Std_ID_125', 'Std_ID_219', 'Std_ID_153', 'Std_ID_122', 'Std_ID_248', 'Std_ID_181', 'Std_ID_058', 'Std_ID_037']
|
||||||
|
|
||||||
|
CourseCode_14
|
||||||
|
['Std_ID_018', 'Std_ID_052', 'Std_ID_227', 'Std_ID_003', 'Std_ID_208', 'Std_ID_012', 'Std_ID_162', 'Std_ID_042', 'Std_ID_141', 'Std_ID_063', 'Std_ID_019', 'Std_ID_096', 'Std_ID_192', 'Std_ID_124', 'Std_ID_245', 'Std_ID_200', 'Std_ID_219', 'Std_ID_092', 'Std_ID_222', 'Std_ID_020', 'Std_ID_077', 'Std_ID_109', 'Std_ID_174', 'Std_ID_087', 'Std_ID_028', 'Std_ID_083', 'Std_ID_122', 'Std_ID_201', 'Std_ID_117', 'Std_ID_054', 'Std_ID_080', 'Std_ID_010', 'Std_ID_221', 'Std_ID_131', 'Std_ID_024', 'Std_ID_234', 'Std_ID_036', 'Std_ID_177', 'Std_ID_161', 'Std_ID_126']
|
||||||
|
|
||||||
|
CourseCode_15
|
||||||
|
['Std_ID_142', 'Std_ID_050', 'Std_ID_115', 'Std_ID_076', 'Std_ID_011', 'Std_ID_035', 'Std_ID_191', 'Std_ID_059', 'Std_ID_032', 'Std_ID_030', 'Std_ID_012', 'Std_ID_015', 'Std_ID_150', 'Std_ID_121', 'Std_ID_124', 'Std_ID_061', 'Std_ID_075', 'Std_ID_133', 'Std_ID_166', 'Std_ID_069', 'Std_ID_094', 'Std_ID_158', 'Std_ID_144', 'Std_ID_199', 'Std_ID_096', 'Std_ID_177', 'Std_ID_014', 'Std_ID_022', 'Std_ID_004', 'Std_ID_233', 'Std_ID_172', 'Std_ID_180', 'Std_ID_223', 'Std_ID_073', 'Std_ID_018', 'Std_ID_057', 'Std_ID_224', 'Std_ID_099', 'Std_ID_062', 'Std_ID_232']
|
||||||
|
|
||||||
|
CourseCode_16
|
||||||
|
['Std_ID_020', 'Std_ID_124', 'Std_ID_097', 'Std_ID_092', 'Std_ID_100', 'Std_ID_119', 'Std_ID_177', 'Std_ID_011', 'Std_ID_017', 'Std_ID_114', 'Std_ID_087', 'Std_ID_007', 'Std_ID_132', 'Std_ID_208', 'Std_ID_082', 'Std_ID_002', 'Std_ID_116', 'Std_ID_057', 'Std_ID_210', 'Std_ID_045', 'Std_ID_005', 'Std_ID_139', 'Std_ID_028', 'Std_ID_051', 'Std_ID_144', 'Std_ID_207', 'Std_ID_056', 'Std_ID_042', 'Std_ID_211', 'Std_ID_231', 'Std_ID_203', 'Std_ID_196', 'Std_ID_009', 'Std_ID_106', 'Std_ID_133', 'Std_ID_151', 'Std_ID_058', 'Std_ID_101', 'Std_ID_125', 'Std_ID_232']
|
||||||
|
|
||||||
|
CourseCode_17
|
||||||
|
['Std_ID_122', 'Std_ID_224', 'Std_ID_056', 'Std_ID_221', 'Std_ID_054', 'Std_ID_237', 'Std_ID_180', 'Std_ID_052', 'Std_ID_020', 'Std_ID_131', 'Std_ID_106', 'Std_ID_231', 'Std_ID_011', 'Std_ID_064', 'Std_ID_069', 'Std_ID_062', 'Std_ID_239', 'Std_ID_019', 'Std_ID_227', 'Std_ID_053', 'Std_ID_119', 'Std_ID_160', 'Std_ID_184', 'Std_ID_240', 'Std_ID_250', 'Std_ID_030', 'Std_ID_177', 'Std_ID_241', 'Std_ID_038', 'Std_ID_129', 'Std_ID_098', 'Std_ID_104', 'Std_ID_158', 'Std_ID_026', 'Std_ID_202', 'Std_ID_015', 'Std_ID_058', 'Std_ID_109', 'Std_ID_152', 'Std_ID_190']
|
||||||
|
|
||||||
|
CourseCode_18
|
||||||
|
['Std_ID_117', 'Std_ID_136', 'Std_ID_149', 'Std_ID_126', 'Std_ID_006', 'Std_ID_063', 'Std_ID_151', 'Std_ID_060', 'Std_ID_012', 'Std_ID_090', 'Std_ID_154', 'Std_ID_240', 'Std_ID_065', 'Std_ID_162', 'Std_ID_102', 'Std_ID_043', 'Std_ID_144', 'Std_ID_121', 'Std_ID_156', 'Std_ID_066', 'Std_ID_083', 'Std_ID_199', 'Std_ID_143', 'Std_ID_047', 'Std_ID_207', 'Std_ID_189', 'Std_ID_177', 'Std_ID_250', 'Std_ID_210', 'Std_ID_197', 'Std_ID_003', 'Std_ID_246', 'Std_ID_077', 'Std_ID_215', 'Std_ID_086', 'Std_ID_204', 'Std_ID_223', 'Std_ID_067', 'Std_ID_115', 'Std_ID_082']
|
||||||
|
|
||||||
|
CourseCode_19
|
||||||
|
['Std_ID_250', 'Std_ID_067', 'Std_ID_022', 'Std_ID_114', 'Std_ID_060', 'Std_ID_133', 'Std_ID_236', 'Std_ID_039', 'Std_ID_005', 'Std_ID_032', 'Std_ID_071', 'Std_ID_132', 'Std_ID_087', 'Std_ID_229', 'Std_ID_047', 'Std_ID_029', 'Std_ID_235', 'Std_ID_216', 'Std_ID_199', 'Std_ID_204', 'Std_ID_163', 'Std_ID_168', 'Std_ID_147', 'Std_ID_014', 'Std_ID_187', 'Std_ID_179', 'Std_ID_160', 'Std_ID_035', 'Std_ID_167', 'Std_ID_173', 'Std_ID_248', 'Std_ID_026', 'Std_ID_211', 'Std_ID_003', 'Std_ID_112', 'Std_ID_105', 'Std_ID_191', 'Std_ID_095', 'Std_ID_011', 'Std_ID_092']
|
||||||
|
|
||||||
|
CourseCode_20
|
||||||
|
['Std_ID_222', 'Std_ID_125', 'Std_ID_188', 'Std_ID_088', 'Std_ID_095', 'Std_ID_046', 'Std_ID_201', 'Std_ID_051', 'Std_ID_104', 'Std_ID_130', 'Std_ID_092', 'Std_ID_057', 'Std_ID_217', 'Std_ID_181', 'Std_ID_227', 'Std_ID_136', 'Std_ID_064', 'Std_ID_133', 'Std_ID_059', 'Std_ID_065', 'Std_ID_169', 'Std_ID_233', 'Std_ID_129', 'Std_ID_123', 'Std_ID_193', 'Std_ID_079', 'Std_ID_172', 'Std_ID_204', 'Std_ID_208', 'Std_ID_246', 'Std_ID_001', 'Std_ID_174', 'Std_ID_007', 'Std_ID_189', 'Std_ID_203', 'Std_ID_205', 'Std_ID_183', 'Std_ID_048', 'Std_ID_121', 'Std_ID_177']
|
||||||
|
@@ -0,0 +1,11 @@
|
|||||||
|
ALL OF THE CLASSROOMS; AND THEIR CAPACITIES IN THE SYSTEM
|
||||||
|
Classroom_01;40
|
||||||
|
Classroom_02;40
|
||||||
|
Classroom_03;40
|
||||||
|
Classroom_04;40
|
||||||
|
Classroom_05;40
|
||||||
|
Classroom_06;40
|
||||||
|
Classroom_07;40
|
||||||
|
Classroom_08;40
|
||||||
|
Classroom_09;40
|
||||||
|
Classroom_10;40
|
||||||
|
21
Sample Data list/sampleData_AllCourses.csv
Normal file
21
Sample Data list/sampleData_AllCourses.csv
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
ALL OF THE COURSES IN THE SYSTEM
|
||||||
|
CourseCode_01
|
||||||
|
CourseCode_02
|
||||||
|
CourseCode_03
|
||||||
|
CourseCode_04
|
||||||
|
CourseCode_05
|
||||||
|
CourseCode_06
|
||||||
|
CourseCode_07
|
||||||
|
CourseCode_08
|
||||||
|
CourseCode_09
|
||||||
|
CourseCode_10
|
||||||
|
CourseCode_11
|
||||||
|
CourseCode_12
|
||||||
|
CourseCode_13
|
||||||
|
CourseCode_14
|
||||||
|
CourseCode_15
|
||||||
|
CourseCode_16
|
||||||
|
CourseCode_17
|
||||||
|
CourseCode_18
|
||||||
|
CourseCode_19
|
||||||
|
CourseCode_20
|
||||||
|
251
Sample Data list/sampleData_AllStudents.csv
Normal file
251
Sample Data list/sampleData_AllStudents.csv
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
ALL OF THE STUDENTS IN THE SYSTEM
|
||||||
|
Std_ID_001
|
||||||
|
Std_ID_002
|
||||||
|
Std_ID_003
|
||||||
|
Std_ID_004
|
||||||
|
Std_ID_005
|
||||||
|
Std_ID_006
|
||||||
|
Std_ID_007
|
||||||
|
Std_ID_008
|
||||||
|
Std_ID_009
|
||||||
|
Std_ID_010
|
||||||
|
Std_ID_011
|
||||||
|
Std_ID_012
|
||||||
|
Std_ID_013
|
||||||
|
Std_ID_014
|
||||||
|
Std_ID_015
|
||||||
|
Std_ID_016
|
||||||
|
Std_ID_017
|
||||||
|
Std_ID_018
|
||||||
|
Std_ID_019
|
||||||
|
Std_ID_020
|
||||||
|
Std_ID_021
|
||||||
|
Std_ID_022
|
||||||
|
Std_ID_023
|
||||||
|
Std_ID_024
|
||||||
|
Std_ID_025
|
||||||
|
Std_ID_026
|
||||||
|
Std_ID_027
|
||||||
|
Std_ID_028
|
||||||
|
Std_ID_029
|
||||||
|
Std_ID_030
|
||||||
|
Std_ID_031
|
||||||
|
Std_ID_032
|
||||||
|
Std_ID_033
|
||||||
|
Std_ID_034
|
||||||
|
Std_ID_035
|
||||||
|
Std_ID_036
|
||||||
|
Std_ID_037
|
||||||
|
Std_ID_038
|
||||||
|
Std_ID_039
|
||||||
|
Std_ID_040
|
||||||
|
Std_ID_041
|
||||||
|
Std_ID_042
|
||||||
|
Std_ID_043
|
||||||
|
Std_ID_044
|
||||||
|
Std_ID_045
|
||||||
|
Std_ID_046
|
||||||
|
Std_ID_047
|
||||||
|
Std_ID_048
|
||||||
|
Std_ID_049
|
||||||
|
Std_ID_050
|
||||||
|
Std_ID_051
|
||||||
|
Std_ID_052
|
||||||
|
Std_ID_053
|
||||||
|
Std_ID_054
|
||||||
|
Std_ID_055
|
||||||
|
Std_ID_056
|
||||||
|
Std_ID_057
|
||||||
|
Std_ID_058
|
||||||
|
Std_ID_059
|
||||||
|
Std_ID_060
|
||||||
|
Std_ID_061
|
||||||
|
Std_ID_062
|
||||||
|
Std_ID_063
|
||||||
|
Std_ID_064
|
||||||
|
Std_ID_065
|
||||||
|
Std_ID_066
|
||||||
|
Std_ID_067
|
||||||
|
Std_ID_068
|
||||||
|
Std_ID_069
|
||||||
|
Std_ID_070
|
||||||
|
Std_ID_071
|
||||||
|
Std_ID_072
|
||||||
|
Std_ID_073
|
||||||
|
Std_ID_074
|
||||||
|
Std_ID_075
|
||||||
|
Std_ID_076
|
||||||
|
Std_ID_077
|
||||||
|
Std_ID_078
|
||||||
|
Std_ID_079
|
||||||
|
Std_ID_080
|
||||||
|
Std_ID_081
|
||||||
|
Std_ID_082
|
||||||
|
Std_ID_083
|
||||||
|
Std_ID_084
|
||||||
|
Std_ID_085
|
||||||
|
Std_ID_086
|
||||||
|
Std_ID_087
|
||||||
|
Std_ID_088
|
||||||
|
Std_ID_089
|
||||||
|
Std_ID_090
|
||||||
|
Std_ID_091
|
||||||
|
Std_ID_092
|
||||||
|
Std_ID_093
|
||||||
|
Std_ID_094
|
||||||
|
Std_ID_095
|
||||||
|
Std_ID_096
|
||||||
|
Std_ID_097
|
||||||
|
Std_ID_098
|
||||||
|
Std_ID_099
|
||||||
|
Std_ID_100
|
||||||
|
Std_ID_101
|
||||||
|
Std_ID_102
|
||||||
|
Std_ID_103
|
||||||
|
Std_ID_104
|
||||||
|
Std_ID_105
|
||||||
|
Std_ID_106
|
||||||
|
Std_ID_107
|
||||||
|
Std_ID_108
|
||||||
|
Std_ID_109
|
||||||
|
Std_ID_110
|
||||||
|
Std_ID_111
|
||||||
|
Std_ID_112
|
||||||
|
Std_ID_113
|
||||||
|
Std_ID_114
|
||||||
|
Std_ID_115
|
||||||
|
Std_ID_116
|
||||||
|
Std_ID_117
|
||||||
|
Std_ID_118
|
||||||
|
Std_ID_119
|
||||||
|
Std_ID_120
|
||||||
|
Std_ID_121
|
||||||
|
Std_ID_122
|
||||||
|
Std_ID_123
|
||||||
|
Std_ID_124
|
||||||
|
Std_ID_125
|
||||||
|
Std_ID_126
|
||||||
|
Std_ID_127
|
||||||
|
Std_ID_128
|
||||||
|
Std_ID_129
|
||||||
|
Std_ID_130
|
||||||
|
Std_ID_131
|
||||||
|
Std_ID_132
|
||||||
|
Std_ID_133
|
||||||
|
Std_ID_134
|
||||||
|
Std_ID_135
|
||||||
|
Std_ID_136
|
||||||
|
Std_ID_137
|
||||||
|
Std_ID_138
|
||||||
|
Std_ID_139
|
||||||
|
Std_ID_140
|
||||||
|
Std_ID_141
|
||||||
|
Std_ID_142
|
||||||
|
Std_ID_143
|
||||||
|
Std_ID_144
|
||||||
|
Std_ID_145
|
||||||
|
Std_ID_146
|
||||||
|
Std_ID_147
|
||||||
|
Std_ID_148
|
||||||
|
Std_ID_149
|
||||||
|
Std_ID_150
|
||||||
|
Std_ID_151
|
||||||
|
Std_ID_152
|
||||||
|
Std_ID_153
|
||||||
|
Std_ID_154
|
||||||
|
Std_ID_155
|
||||||
|
Std_ID_156
|
||||||
|
Std_ID_157
|
||||||
|
Std_ID_158
|
||||||
|
Std_ID_159
|
||||||
|
Std_ID_160
|
||||||
|
Std_ID_161
|
||||||
|
Std_ID_162
|
||||||
|
Std_ID_163
|
||||||
|
Std_ID_164
|
||||||
|
Std_ID_165
|
||||||
|
Std_ID_166
|
||||||
|
Std_ID_167
|
||||||
|
Std_ID_168
|
||||||
|
Std_ID_169
|
||||||
|
Std_ID_170
|
||||||
|
Std_ID_171
|
||||||
|
Std_ID_172
|
||||||
|
Std_ID_173
|
||||||
|
Std_ID_174
|
||||||
|
Std_ID_175
|
||||||
|
Std_ID_176
|
||||||
|
Std_ID_177
|
||||||
|
Std_ID_178
|
||||||
|
Std_ID_179
|
||||||
|
Std_ID_180
|
||||||
|
Std_ID_181
|
||||||
|
Std_ID_182
|
||||||
|
Std_ID_183
|
||||||
|
Std_ID_184
|
||||||
|
Std_ID_185
|
||||||
|
Std_ID_186
|
||||||
|
Std_ID_187
|
||||||
|
Std_ID_188
|
||||||
|
Std_ID_189
|
||||||
|
Std_ID_190
|
||||||
|
Std_ID_191
|
||||||
|
Std_ID_192
|
||||||
|
Std_ID_193
|
||||||
|
Std_ID_194
|
||||||
|
Std_ID_195
|
||||||
|
Std_ID_196
|
||||||
|
Std_ID_197
|
||||||
|
Std_ID_198
|
||||||
|
Std_ID_199
|
||||||
|
Std_ID_200
|
||||||
|
Std_ID_201
|
||||||
|
Std_ID_202
|
||||||
|
Std_ID_203
|
||||||
|
Std_ID_204
|
||||||
|
Std_ID_205
|
||||||
|
Std_ID_206
|
||||||
|
Std_ID_207
|
||||||
|
Std_ID_208
|
||||||
|
Std_ID_209
|
||||||
|
Std_ID_210
|
||||||
|
Std_ID_211
|
||||||
|
Std_ID_212
|
||||||
|
Std_ID_213
|
||||||
|
Std_ID_214
|
||||||
|
Std_ID_215
|
||||||
|
Std_ID_216
|
||||||
|
Std_ID_217
|
||||||
|
Std_ID_218
|
||||||
|
Std_ID_219
|
||||||
|
Std_ID_220
|
||||||
|
Std_ID_221
|
||||||
|
Std_ID_222
|
||||||
|
Std_ID_223
|
||||||
|
Std_ID_224
|
||||||
|
Std_ID_225
|
||||||
|
Std_ID_226
|
||||||
|
Std_ID_227
|
||||||
|
Std_ID_228
|
||||||
|
Std_ID_229
|
||||||
|
Std_ID_230
|
||||||
|
Std_ID_231
|
||||||
|
Std_ID_232
|
||||||
|
Std_ID_233
|
||||||
|
Std_ID_234
|
||||||
|
Std_ID_235
|
||||||
|
Std_ID_236
|
||||||
|
Std_ID_237
|
||||||
|
Std_ID_238
|
||||||
|
Std_ID_239
|
||||||
|
Std_ID_240
|
||||||
|
Std_ID_241
|
||||||
|
Std_ID_242
|
||||||
|
Std_ID_243
|
||||||
|
Std_ID_244
|
||||||
|
Std_ID_245
|
||||||
|
Std_ID_246
|
||||||
|
Std_ID_247
|
||||||
|
Std_ID_248
|
||||||
|
Std_ID_249
|
||||||
|
Std_ID_250
|
||||||
|
BIN
Sample Design Document.pdf
Normal file
BIN
Sample Design Document.pdf
Normal file
Binary file not shown.
836
TEAM_ASSIGNMENTS.md
Normal file
836
TEAM_ASSIGNMENTS.md
Normal file
@@ -0,0 +1,836 @@
|
|||||||
|
# TEAM ASSIGNMENTS - EXAM SCHEDULING SYSTEM
|
||||||
|
|
||||||
|
**Project:** Exam Planner Desktop Application
|
||||||
|
**Course:** SE302 - Software Engineering
|
||||||
|
**Team:** Team 3, Section 1
|
||||||
|
**Date:** November 26, 2025
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TEAM ROSTER
|
||||||
|
|
||||||
|
| Name | Student ID | Primary Role | Secondary Responsibilities |
|
||||||
|
|------|-----------|--------------|---------------------------|
|
||||||
|
| **Kerem Bozdag** | 20200602012 | Database & Data Layer Lead | Data validation, CSV import/export |
|
||||||
|
| **Milena Larissa Ünal** | 20230602107 | Algorithm Specialist | CSP solver, constraint validation, optimization |
|
||||||
|
| **Rabia Tülay Gokdag** | 20210602029 | UI/FXML Specialist | JavaFX views, FXML layouts, Scene Builder |
|
||||||
|
| **Mehmet Sefa Keskin** | 20230602047 | Controller Layer Lead | MVC controllers, UI-business integration |
|
||||||
|
| **Feyza Gereme** | 20230602028 | Testing & QA Lead | JUnit tests, integration testing, CI/CD |
|
||||||
|
| **Emin Arslan** | 20230602007 | Documentation & Integration Lead | JavaDoc, user manual, code reviews |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## DETAILED ROLE RESPONSIBILITIES
|
||||||
|
|
||||||
|
### 1. Kerem Bozdag - Database & Data Layer Lead
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**Database Design & Implementation:**
|
||||||
|
- Design and implement SQLite database schema
|
||||||
|
- Create ER diagrams for all entities and relationships
|
||||||
|
- Write SQL schema creation script (`schema.sql`)
|
||||||
|
- Define all tables with proper constraints (foreign keys, uniqueness, indexes)
|
||||||
|
- Optimize database performance with appropriate indexes
|
||||||
|
|
||||||
|
**DAO Layer (Data Access Objects):**
|
||||||
|
- Implement all DAO classes:
|
||||||
|
- `StudentDAO` - CRUD operations for students
|
||||||
|
- `CourseDAO` - CRUD operations for courses
|
||||||
|
- `ClassroomDAO` - CRUD operations for classrooms
|
||||||
|
- `EnrollmentDAO` - Manage student-course relationships
|
||||||
|
- `ScheduleDAO` - Save, load, list, delete schedules
|
||||||
|
- `ExamAssignmentDAO` - Manage exam assignments
|
||||||
|
- Implement batch operations for performance (bulk inserts)
|
||||||
|
- Write transaction management utility (`TransactionManager`)
|
||||||
|
- Create database connection pool/singleton (`DatabaseConnection`)
|
||||||
|
|
||||||
|
**CSV Import/Export:**
|
||||||
|
- Implement `CSVParser` utility class
|
||||||
|
- Create `ImportService` for all 4 CSV file types:
|
||||||
|
1. Student IDs
|
||||||
|
2. Course codes
|
||||||
|
3. Classroom capacities (format: `ClassroomID;Capacity`)
|
||||||
|
4. Enrollment/attendance lists
|
||||||
|
- Implement data validation during import:
|
||||||
|
- Duplicate detection
|
||||||
|
- Format validation
|
||||||
|
- Referential integrity checks
|
||||||
|
- Create detailed error reporting with line numbers
|
||||||
|
- Implement CSV export functionality for schedule views
|
||||||
|
|
||||||
|
**Data Validation:**
|
||||||
|
- Validate all user inputs before database insertion
|
||||||
|
- Ensure referential integrity (enrollments reference valid students/courses)
|
||||||
|
- Implement constraint checks at database level (CHECK constraints)
|
||||||
|
- Create validation utility methods used by service layer
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- Write unit tests for all DAO methods (target: >90% coverage)
|
||||||
|
- Test batch operations for correctness and performance
|
||||||
|
- Test transaction rollback on errors
|
||||||
|
- Test duplicate detection
|
||||||
|
- Create test CSV files (valid and invalid cases)
|
||||||
|
- Integration testing for CSV import workflow
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With Milena:** Provide efficient query methods for CSP solver (enrollment lookups, student-course mappings)
|
||||||
|
- **With Sefa:** Design clean DAO interfaces for controller layer to use
|
||||||
|
- **With Feyza:** Create testable DAO methods, support integration testing
|
||||||
|
- **With Emin:** Document database schema, DAO API, CSV formats
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: Database schema script and ER diagram
|
||||||
|
- Week 2: All DAO classes with unit tests, CSV import working
|
||||||
|
- Week 3: Schedule and exam assignment persistence
|
||||||
|
- Week 7: CSV export functionality
|
||||||
|
- Week 9: Database optimization and performance tuning
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Milena Larissa Ünal - Algorithm Specialist
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**Domain Model Design:**
|
||||||
|
- Create all POJO (Plain Old Java Object) classes:
|
||||||
|
- `Student` - Student entity
|
||||||
|
- `Course` - Course entity
|
||||||
|
- `Classroom` - Classroom entity with capacity
|
||||||
|
- `Enrollment` - Student-course relationship
|
||||||
|
- `Schedule` - Schedule metadata
|
||||||
|
- `ExamAssignment` - Course assignment to {classroom, day, slot}
|
||||||
|
- `ScheduleConfiguration` - Exam period configuration (days, slots, strategy)
|
||||||
|
- Ensure proper encapsulation, getters/setters, equals/hashCode, toString
|
||||||
|
|
||||||
|
**Constraint Validation:**
|
||||||
|
- Implement `ConstraintValidator` class with methods for each hard constraint:
|
||||||
|
1. **No consecutive exams:** `checkNoConsecutiveExams(student, day, slot, assignment)`
|
||||||
|
2. **Max 2 exams per day:** `checkMaxTwoExamsPerDay(student, day, assignment)`
|
||||||
|
3. **Classroom capacity:** `checkClassroomCapacity(course, classroom)`
|
||||||
|
- Create detailed constraint violation messages
|
||||||
|
- Implement `ValidationResult` class with error details
|
||||||
|
- Handle edge cases (day boundaries for consecutive constraint)
|
||||||
|
|
||||||
|
**CSP Solver Implementation:**
|
||||||
|
- Implement backtracking algorithm with constraint propagation
|
||||||
|
- Core algorithm in `CSPSolver` class:
|
||||||
|
```java
|
||||||
|
public Map<Course, ExamAssignment> solve(
|
||||||
|
List<Course> courses,
|
||||||
|
List<Classroom> classrooms,
|
||||||
|
List<Enrollment> enrollments,
|
||||||
|
ScheduleConfiguration config,
|
||||||
|
OptimizationStrategy strategy,
|
||||||
|
ProgressTracker progressTracker
|
||||||
|
) throws NoSolutionException, CancelledException
|
||||||
|
```
|
||||||
|
- Implement variable ordering heuristic (Minimum Remaining Values - MRV)
|
||||||
|
- Implement value ordering heuristic (Least Constraining Value)
|
||||||
|
- Implement forward checking for constraint propagation
|
||||||
|
- Add progress tracking callback mechanism
|
||||||
|
- Implement cancellation support (check flag during backtracking)
|
||||||
|
|
||||||
|
**Optimization Strategies:**
|
||||||
|
- Create `OptimizationStrategy` interface
|
||||||
|
- Implement 4 concrete strategies:
|
||||||
|
1. `MinimizeDaysStrategy` - Pack exams into fewest days
|
||||||
|
2. `BalanceDistributionStrategy` - Spread exams evenly across days
|
||||||
|
3. `MinimizeClassroomsStrategy` - Use fewest classrooms
|
||||||
|
4. `BalanceClassroomsStrategy` - Balance classroom usage per day
|
||||||
|
- Integrate strategies with value ordering heuristic
|
||||||
|
- Document when to use each strategy
|
||||||
|
|
||||||
|
**Conflict Detection:**
|
||||||
|
- Implement `ConflictDetector` class
|
||||||
|
- Analyze why no solution exists when solver fails:
|
||||||
|
- Students with too many courses for available slots
|
||||||
|
- Courses with more students than max classroom capacity
|
||||||
|
- Overlapping enrollment patterns creating conflicts
|
||||||
|
- Generate `ConflictReport` with:
|
||||||
|
- List of students causing conflicts
|
||||||
|
- List of courses causing conflicts
|
||||||
|
- Specific recommendations (extend period, add classrooms, reduce enrollments)
|
||||||
|
|
||||||
|
**Performance Optimization:**
|
||||||
|
- Pre-compute enrollment mappings (student→courses, course→students)
|
||||||
|
- Implement domain pre-filtering (eliminate impossible assignments)
|
||||||
|
- Add memoization for repeated constraint checks
|
||||||
|
- Use efficient data structures (HashSet, HashMap for fast lookups)
|
||||||
|
- Optimize for small-medium datasets (20-50 courses, 250-500 students)
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- Write unit tests for each constraint validator (>95% coverage target)
|
||||||
|
- Create test cases with known solutions (3-5 courses with obvious valid schedule)
|
||||||
|
- Create test cases with known conflicts (unsolvable scenarios)
|
||||||
|
- Test all 4 optimization strategies produce different results
|
||||||
|
- Performance testing:
|
||||||
|
- Small dataset (50 courses, 500 students): <10 seconds ✓
|
||||||
|
- Sample dataset (20 courses, 250 students): <5 seconds ✓
|
||||||
|
- Test edge cases:
|
||||||
|
- Single course
|
||||||
|
- All students in one course
|
||||||
|
- Consecutive slots at day boundaries
|
||||||
|
- Maximum enrollments per student
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With Kerem:** Use DAO queries efficiently, understand data structure
|
||||||
|
- **With Sefa:** Design `ScheduleService` API for controllers to call
|
||||||
|
- **With Feyza:** Make algorithm testable, provide test data generators
|
||||||
|
- **With Emin:** Document algorithm design, create flowcharts
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: Algorithm design document and pseudocode
|
||||||
|
- Week 3: Domain models and constraint validators (fully tested)
|
||||||
|
- Week 4: Working CSP solver for simple cases (3-5 courses)
|
||||||
|
- Week 5: All optimization strategies, solver handles sample data (<10 sec)
|
||||||
|
- Week 5: Conflict detector for unsolvable cases
|
||||||
|
- Week 9: Performance optimization and final algorithm polish
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Rabia Tülay Gokdag - UI/FXML Specialist
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**UI Design & Wireframing:**
|
||||||
|
- Design wireframes for all application screens
|
||||||
|
- Create color scheme and visual design guidelines
|
||||||
|
- Design application icon and branding
|
||||||
|
- Ensure consistent UI/UX across all views
|
||||||
|
- Plan responsive layouts (different screen resolutions)
|
||||||
|
|
||||||
|
**FXML Layout Creation:**
|
||||||
|
Create FXML files for all views using Scene Builder:
|
||||||
|
1. `MainWindow.fxml` - Main application window with navigation
|
||||||
|
2. `ImportView.fxml` - CSV file import screen
|
||||||
|
3. `ConfigurationView.fxml` - Exam period configuration
|
||||||
|
4. `ScheduleView.fxml` - Schedule generation with progress
|
||||||
|
5. `ClassroomView.fxml` - Classroom schedule view (table)
|
||||||
|
6. `StudentView.fxml` - Student schedule view (table with search)
|
||||||
|
7. `CourseView.fxml` - Course schedule view (sortable table)
|
||||||
|
8. `DayView.fxml` - Day-by-day grid view
|
||||||
|
9. `ExportView.fxml` - Export options screen
|
||||||
|
10. `HistoryView.fxml` - Schedule history list
|
||||||
|
11. Dialogs: Edit dialog, Conflict report dialog, Error dialogs
|
||||||
|
|
||||||
|
**UI Components:**
|
||||||
|
- Design table layouts (columns, headers, alternating rows)
|
||||||
|
- Create form inputs (text fields, spinners, combo boxes)
|
||||||
|
- Design buttons with consistent styling
|
||||||
|
- Add icons and visual feedback (success checkmarks, error icons)
|
||||||
|
- Implement progress indicators (progress bar, spinner)
|
||||||
|
- Design filter controls (dropdowns, search boxes)
|
||||||
|
|
||||||
|
**Styling (CSS):**
|
||||||
|
- Create `styles.css` with consistent theme
|
||||||
|
- Define color palette:
|
||||||
|
- Primary: Blue (#2196F3)
|
||||||
|
- Success: Green (#4CAF50)
|
||||||
|
- Error: Red (#F44336)
|
||||||
|
- Neutral: Gray (#9E9E9E)
|
||||||
|
- Style all UI components (buttons, tables, inputs, labels)
|
||||||
|
- Add hover effects and focus states
|
||||||
|
- Ensure accessibility (sufficient color contrast, clear focus indicators)
|
||||||
|
|
||||||
|
**Visual Polish:**
|
||||||
|
- Add icons for all buttons and actions
|
||||||
|
- Design loading spinners and progress animations
|
||||||
|
- Create success/error message displays
|
||||||
|
- Add tooltips for user guidance
|
||||||
|
- Ensure proper alignment and spacing
|
||||||
|
- Test on different screen sizes
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- Test UI layouts on different screen resolutions
|
||||||
|
- Verify all FXML files load correctly
|
||||||
|
- Test keyboard navigation (tab order)
|
||||||
|
- Verify CSS styling is consistent
|
||||||
|
- Test accessibility features
|
||||||
|
- Ensure no UI elements overlap or clip
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With Sefa:** Provide FXML files with proper fx:id for controller binding
|
||||||
|
- **With Emin:** Provide screenshots for documentation, create visual guide
|
||||||
|
- **With Feyza:** Support TestFX UI testing
|
||||||
|
- **With all:** Get feedback on UI designs, iterate based on usability
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: Wireframes and visual design guidelines
|
||||||
|
- Week 2: Import View FXML
|
||||||
|
- Week 3: Configuration View FXML
|
||||||
|
- Week 4: Schedule generation view with progress UI
|
||||||
|
- Week 6: All 4 schedule views (Classroom, Student, Course, Day)
|
||||||
|
- Week 7: Export View and edit dialog
|
||||||
|
- Week 8: History View and conflict report display
|
||||||
|
- Week 9: Final UI polish and consistency check
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Mehmet Sefa Keskin - Controller Layer Lead
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**Application Setup:**
|
||||||
|
- Create `Main.java` - JavaFX application entry point
|
||||||
|
- Set up application lifecycle (start, stop)
|
||||||
|
- Load main window FXML
|
||||||
|
- Initialize application resources
|
||||||
|
|
||||||
|
**Main Controller:**
|
||||||
|
- Implement `MainController` for main window
|
||||||
|
- Handle navigation between views
|
||||||
|
- Manage view switching logic
|
||||||
|
- Implement menu bar actions (File, Edit, View, Help)
|
||||||
|
|
||||||
|
**Feature Controllers:**
|
||||||
|
Implement controllers for all views:
|
||||||
|
1. `ImportController` - CSV file import workflow
|
||||||
|
- File browse dialogs (4 file choosers for each CSV type)
|
||||||
|
- Call `ImportService` to process files
|
||||||
|
- Display import results (success/error messages with line numbers)
|
||||||
|
- Handle import errors gracefully
|
||||||
|
2. `ConfigurationController` - Exam period setup
|
||||||
|
- Input validation (positive integers only)
|
||||||
|
- Calculate total slots (days × slots per day)
|
||||||
|
- Validate sufficient slots for courses
|
||||||
|
- Save configuration to database
|
||||||
|
3. `ScheduleController` - Schedule generation
|
||||||
|
- Create JavaFX Task for background solver execution
|
||||||
|
- Update progress bar in real-time
|
||||||
|
- Handle cancellation (interrupt solver)
|
||||||
|
- Display success or failure results
|
||||||
|
- Show conflict report on failure
|
||||||
|
4. `ClassroomViewController`, `StudentViewController`, `CourseViewController`, `DayViewController` - Schedule display
|
||||||
|
- Populate tables/grids with schedule data
|
||||||
|
- Implement filtering (dropdown filters, search boxes)
|
||||||
|
- Implement sorting (sortable table columns)
|
||||||
|
- Handle view switching
|
||||||
|
5. `ExportController` - Export workflow
|
||||||
|
- Format selection (CSV or Excel radio buttons)
|
||||||
|
- View selection (checkboxes for which views to export)
|
||||||
|
- File save dialog
|
||||||
|
- Call export service
|
||||||
|
- Display export success/error messages
|
||||||
|
6. `HistoryController` - Schedule history
|
||||||
|
- Load schedule list from database
|
||||||
|
- Display schedule metadata (date, strategy, counts)
|
||||||
|
- Load selected schedule
|
||||||
|
- Delete schedules with confirmation dialog
|
||||||
|
|
||||||
|
**Business Logic Integration:**
|
||||||
|
- Connect controllers to service layer (ImportService, ScheduleService, ExportService)
|
||||||
|
- Handle service exceptions and display user-friendly errors
|
||||||
|
- Manage application state (current schedule, configuration)
|
||||||
|
- Implement proper resource cleanup (close database connections)
|
||||||
|
|
||||||
|
**Error Handling:**
|
||||||
|
- Catch all exceptions from service/DAO layers
|
||||||
|
- Convert technical errors to user-friendly messages
|
||||||
|
- Display errors in dialog boxes or status labels
|
||||||
|
- Log errors for debugging
|
||||||
|
|
||||||
|
**Threading:**
|
||||||
|
- Use JavaFX Task for long-running operations (solver, import, export)
|
||||||
|
- Keep UI responsive during background tasks
|
||||||
|
- Update UI from background threads safely (Platform.runLater)
|
||||||
|
- Handle task cancellation properly
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- Write unit tests for controller logic (mock service layer)
|
||||||
|
- Test error handling for all exception cases
|
||||||
|
- Test threading (background tasks update UI correctly)
|
||||||
|
- Ensure no memory leaks (resources cleaned up)
|
||||||
|
- Test with TestFX for UI integration
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With Rabia:** Get FXML files with fx:id set, provide feedback on UI design
|
||||||
|
- **With Kerem/Milena:** Use service layer APIs, handle exceptions
|
||||||
|
- **With Feyza:** Make controllers testable, support TestFX testing
|
||||||
|
- **With Emin:** Document controller architecture and event flows
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: Main controller with navigation
|
||||||
|
- Week 2: Import controller (integrate with ImportService)
|
||||||
|
- Week 3: Configuration controller
|
||||||
|
- Week 4: Schedule controller with background task and progress
|
||||||
|
- Week 6: All 4 view controllers (Classroom, Student, Course, Day)
|
||||||
|
- Week 7: Export controller and edit dialog controller
|
||||||
|
- Week 8: History controller
|
||||||
|
- Week 9: Final controller polish and error handling improvements
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Feyza Gereme - Testing & QA Lead
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**Test Infrastructure Setup:**
|
||||||
|
- Configure JUnit 5 in Maven/Gradle
|
||||||
|
- Set up test directory structure (`src/test/java`)
|
||||||
|
- Create test utility classes (`TestDataBuilder`, `TestDatabase`)
|
||||||
|
- Configure test coverage reporting (JaCoCo)
|
||||||
|
- Set up CI/CD pipeline (GitHub Actions)
|
||||||
|
|
||||||
|
**Unit Testing:**
|
||||||
|
Write comprehensive unit tests for all layers:
|
||||||
|
- **DAO Layer Tests:**
|
||||||
|
- Test CRUD operations (insert, update, delete, select)
|
||||||
|
- Test batch operations
|
||||||
|
- Test transaction rollback on error
|
||||||
|
- Test uniqueness constraints
|
||||||
|
- Test foreign key constraints
|
||||||
|
- Target: >90% coverage for DAO layer
|
||||||
|
- **Algorithm Layer Tests:**
|
||||||
|
- Test each constraint validator individually
|
||||||
|
- Test CSP solver with known solutions (3-5 courses)
|
||||||
|
- Test unsolvable cases (known conflicts)
|
||||||
|
- Test all 4 optimization strategies
|
||||||
|
- Test edge cases (single course, max enrollments, day boundaries)
|
||||||
|
- Target: >95% coverage for algorithm layer
|
||||||
|
- **Service Layer Tests:**
|
||||||
|
- Test business logic validation
|
||||||
|
- Test error propagation (DAO → Service → Controller)
|
||||||
|
- Mock DAO and algorithm layers using Mockito
|
||||||
|
- Test transaction handling
|
||||||
|
- Target: >80% coverage for service layer
|
||||||
|
- **Controller Layer Tests:**
|
||||||
|
- Mock service layer
|
||||||
|
- Test error handling in controllers
|
||||||
|
- Test state management
|
||||||
|
- Target: >70% coverage for controller layer
|
||||||
|
|
||||||
|
**Integration Testing:**
|
||||||
|
- **Database Integration:**
|
||||||
|
- Test end-to-end import (CSV → Database → Verify)
|
||||||
|
- Test schedule save → load round-trip
|
||||||
|
- Test manual edit → validation → save
|
||||||
|
- **UI Integration (TestFX):**
|
||||||
|
- Test navigation workflow
|
||||||
|
- Test import workflow (select files → import → verify results)
|
||||||
|
- Test generation workflow (configure → generate → view schedule)
|
||||||
|
- Test export workflow (select format → export → verify file)
|
||||||
|
- **End-to-End Testing:**
|
||||||
|
- Complete user workflows from start to finish
|
||||||
|
- Test with sample data (20 courses, 250 students, 10 classrooms)
|
||||||
|
|
||||||
|
**Performance Testing:**
|
||||||
|
- Create benchmark tests for solver performance:
|
||||||
|
- Small dataset (50 courses, 500 students): Must complete <10 seconds
|
||||||
|
- Sample dataset (20 courses, 250 students): Must complete <5 seconds
|
||||||
|
- Test database query performance (all queries <100ms)
|
||||||
|
- Profile application memory usage
|
||||||
|
- Identify and report performance bottlenecks
|
||||||
|
|
||||||
|
**Test Data Management:**
|
||||||
|
- Create test CSV files:
|
||||||
|
- `test_students_10.csv` - 10 students
|
||||||
|
- `test_students_100.csv` - 100 students
|
||||||
|
- `test_students_250.csv` - 250 students (matches sample)
|
||||||
|
- `test_courses_5.csv` - 5 courses
|
||||||
|
- `test_courses_20.csv` - 20 courses (matches sample)
|
||||||
|
- `test_classrooms_small.csv` - 3 classrooms, capacity 20
|
||||||
|
- `test_classrooms_medium.csv` - 10 classrooms, capacity 40
|
||||||
|
- `test_enrollments_simple.csv` - Simple enrollment pattern
|
||||||
|
- `test_enrollments_complex.csv` - Complex pattern for stress testing
|
||||||
|
- Create test data builders for easy test object creation
|
||||||
|
- Maintain test fixtures (consistent test data for repeatable tests)
|
||||||
|
|
||||||
|
**CI/CD Pipeline:**
|
||||||
|
- Set up GitHub Actions workflow:
|
||||||
|
- Run all tests on every commit
|
||||||
|
- Generate coverage report
|
||||||
|
- Upload coverage to Codecov (or similar)
|
||||||
|
- Fail build if coverage drops below 70%
|
||||||
|
- Fail build if any test fails
|
||||||
|
- Configure test execution in Maven/Gradle
|
||||||
|
- Set up test reporting (JUnit XML reports, HTML reports)
|
||||||
|
|
||||||
|
**Bug Tracking & Quality Assurance:**
|
||||||
|
- Create bug report template
|
||||||
|
- Track all bugs found (use GitHub Issues or similar)
|
||||||
|
- Prioritize bugs (critical, major, minor)
|
||||||
|
- Verify bug fixes (regression tests)
|
||||||
|
- Monitor code quality metrics (coverage, complexity)
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- All testing tasks are primary responsibility!
|
||||||
|
- Coordinate with other team members to ensure testable code
|
||||||
|
- Review all PRs for test coverage before approval
|
||||||
|
- Generate weekly test coverage reports
|
||||||
|
- Identify untested code paths and create tests
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With Kerem:** Get testable DAO interfaces, create database test utilities
|
||||||
|
- **With Milena:** Get test data generators for algorithm, create solvable/unsolvable test cases
|
||||||
|
- **With Rabia/Sefa:** Write TestFX UI tests, verify UI behavior
|
||||||
|
- **With Emin:** Document testing strategy, contribute to quality assurance documentation
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: CI/CD pipeline setup, test infrastructure
|
||||||
|
- Week 2: DAO layer tests (>90% coverage)
|
||||||
|
- Week 3: Constraint validation tests
|
||||||
|
- Week 4: Solver unit tests, performance benchmarks
|
||||||
|
- Week 5: All optimization strategy tests
|
||||||
|
- Week 6: View controller TestFX tests
|
||||||
|
- Week 7: Export functionality tests
|
||||||
|
- Week 8: Integration tests, end-to-end tests
|
||||||
|
- Week 9: Full test suite complete, coverage report >70%
|
||||||
|
- Week 10: Final QA report
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. Emin Arslan - Documentation & Integration Lead
|
||||||
|
|
||||||
|
#### Primary Responsibilities
|
||||||
|
|
||||||
|
**Memory Bank Maintenance:**
|
||||||
|
- Maintain and update `MEMORY_BANK.md` as project evolves
|
||||||
|
- Document all design decisions and rationale
|
||||||
|
- Track assumptions and open questions
|
||||||
|
- Update API contracts when interfaces change
|
||||||
|
- Add discovered edge cases and solutions
|
||||||
|
|
||||||
|
**Code Documentation:**
|
||||||
|
- Ensure all public methods have JavaDoc comments
|
||||||
|
- Review JavaDoc for clarity and completeness
|
||||||
|
- Set up JavaDoc generation in Maven/Gradle
|
||||||
|
- Generate JavaDoc HTML documentation
|
||||||
|
- Create package-level documentation (`package-info.java`)
|
||||||
|
- Document complex algorithms with explanatory comments
|
||||||
|
|
||||||
|
**Technical Documentation:**
|
||||||
|
- Create/maintain technical documents:
|
||||||
|
- `DATABASE_SCHEMA.md` - Database documentation with ER diagrams
|
||||||
|
- `ALGORITHM_DESIGN.md` - Algorithm pseudocode and flowcharts
|
||||||
|
- `GIT_WORKFLOW.md` - Git branching strategy and PR process
|
||||||
|
- `API_DOCUMENTATION.md` - Service layer API reference
|
||||||
|
- `UI_COMPONENT_GUIDE.md` - FXML components and styling guide
|
||||||
|
- `TESTING_GUIDE.md` - How to run tests, write tests, interpret coverage
|
||||||
|
- Create architecture diagrams (use draw.io, PlantUML, or similar):
|
||||||
|
- System architecture (MVC layers)
|
||||||
|
- Class diagrams (domain models, DAO, services)
|
||||||
|
- Sequence diagrams (import workflow, generation workflow)
|
||||||
|
- ER diagram (database schema)
|
||||||
|
|
||||||
|
**User Documentation:**
|
||||||
|
- Write comprehensive **User Manual** (15-25 pages) with:
|
||||||
|
- Introduction and overview
|
||||||
|
- Installation guide (step-by-step with screenshots)
|
||||||
|
- Getting started tutorial
|
||||||
|
- Feature reference (all features explained with screenshots)
|
||||||
|
- Troubleshooting guide (common issues and solutions)
|
||||||
|
- FAQ (frequently asked questions)
|
||||||
|
- Appendix (sample CSV formats, configuration options)
|
||||||
|
- Create **Quick Start Guide** (1-2 pages)
|
||||||
|
- Write **Installation Guide** (standalone document)
|
||||||
|
- Write **Troubleshooting Guide** with common errors and fixes
|
||||||
|
|
||||||
|
**Code Review & Integration:**
|
||||||
|
- Review all Pull Requests for:
|
||||||
|
- Code quality and style
|
||||||
|
- Documentation completeness (JavaDoc, comments)
|
||||||
|
- Adherence to architecture (MVC separation)
|
||||||
|
- Naming conventions
|
||||||
|
- No obvious bugs
|
||||||
|
- Coordinate integration of features from different team members
|
||||||
|
- Resolve merge conflicts when needed
|
||||||
|
- Ensure clean Git history (meaningful commit messages)
|
||||||
|
- Conduct weekly integration review meetings
|
||||||
|
|
||||||
|
**Presentation & Delivery:**
|
||||||
|
- Create presentation slides for final demo (15-20 slides)
|
||||||
|
- Prepare demo script for presentation
|
||||||
|
- Coordinate demo video recording (optional but recommended)
|
||||||
|
- Compile final deliverable package:
|
||||||
|
- Source code (clean, organized)
|
||||||
|
- User manual (PDF)
|
||||||
|
- Developer documentation (JavaDoc + technical docs)
|
||||||
|
- Executable JAR
|
||||||
|
- Sample database
|
||||||
|
- Sample CSV files
|
||||||
|
- Installation guide
|
||||||
|
- README
|
||||||
|
|
||||||
|
**Git Workflow Management:**
|
||||||
|
- Enforce Git branching strategy (main, develop, feature branches)
|
||||||
|
- Review commit messages for clarity
|
||||||
|
- Create and maintain Pull Request template
|
||||||
|
- Manage release tagging (v1.0.0, etc.)
|
||||||
|
- Coordinate merges to `develop` and `main`
|
||||||
|
|
||||||
|
**Quality Assurance Support:**
|
||||||
|
- Work with Feyza on quality standards
|
||||||
|
- Review test coverage reports
|
||||||
|
- Identify documentation gaps
|
||||||
|
- Ensure consistency across all documentation
|
||||||
|
- Create checklists (final delivery checklist, PR review checklist)
|
||||||
|
|
||||||
|
#### Testing Responsibilities
|
||||||
|
- Review test documentation
|
||||||
|
- Ensure tests have clear descriptions
|
||||||
|
- Document test execution procedures
|
||||||
|
- Create user acceptance test scenarios
|
||||||
|
|
||||||
|
#### Collaboration Points
|
||||||
|
- **With ALL:** Review all code, provide feedback, coordinate integration
|
||||||
|
- **With Kerem:** Document database schema and DAO APIs
|
||||||
|
- **With Milena:** Document algorithm design and optimization strategies
|
||||||
|
- **With Rabia:** Take screenshots for user manual, document UI components
|
||||||
|
- **With Sefa:** Document controller architecture and event flows
|
||||||
|
- **With Feyza:** Document testing strategy and procedures
|
||||||
|
|
||||||
|
#### Deliverables
|
||||||
|
- Week 1: MEMORY_BANK.md, ROADMAP.md, TEAM_ASSIGNMENTS.md, GIT_WORKFLOW.md
|
||||||
|
- Week 2: DATABASE_SCHEMA.md with ER diagram
|
||||||
|
- Week 3: Domain model documentation
|
||||||
|
- Week 4: ALGORITHM_DESIGN.md with pseudocode and flowcharts
|
||||||
|
- Week 5: API documentation for service layer
|
||||||
|
- Week 6: UI component guide with screenshots
|
||||||
|
- Week 8: Architecture diagrams (system, class, sequence)
|
||||||
|
- Week 9: Testing guide and quality assurance documentation
|
||||||
|
- Week 10: User Manual (complete), Installation Guide, Final deliverable package, Presentation slides
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TEAM COLLABORATION GUIDELINES
|
||||||
|
|
||||||
|
### Weekly Meetings
|
||||||
|
|
||||||
|
**Monday Sprint Planning (30 min):**
|
||||||
|
- Each person reports: What did you complete last week?
|
||||||
|
- Discuss blockers and issues
|
||||||
|
- Assign tasks for current week from roadmap
|
||||||
|
- Set weekly goals
|
||||||
|
|
||||||
|
**Wednesday Mid-Week Sync (15-30 min):**
|
||||||
|
- Quick round-robin status update
|
||||||
|
- Identify anyone who is blocked
|
||||||
|
- Schedule pair programming sessions if needed
|
||||||
|
- Adjust week's plan if necessary
|
||||||
|
|
||||||
|
**Friday Demo & Retrospective (30-45 min):**
|
||||||
|
- Each person demos their work for the week
|
||||||
|
- Celebrate completed features
|
||||||
|
- Retrospective: What went well? What to improve?
|
||||||
|
- Brief planning for next week
|
||||||
|
|
||||||
|
### Pair Programming Sessions
|
||||||
|
|
||||||
|
**Recommended pairings for integration:**
|
||||||
|
- **Kerem + Sefa:** Integrate DAO with controllers
|
||||||
|
- **Milena + Sefa:** Integrate CSP solver with UI
|
||||||
|
- **Rabia + Sefa:** Connect FXML views with controllers
|
||||||
|
- **Kerem + Milena:** Optimize database queries for solver
|
||||||
|
- **Feyza + [anyone]:** Write tests together (test-driven development)
|
||||||
|
|
||||||
|
**Schedule:** As needed, typically 1-2 hours, Wednesday or Thursday
|
||||||
|
|
||||||
|
### Code Review Process
|
||||||
|
|
||||||
|
**Every Pull Request Must:**
|
||||||
|
- Have at least 1 approval (from someone other than author)
|
||||||
|
- Pass all CI/CD checks (tests, coverage)
|
||||||
|
- Have no merge conflicts
|
||||||
|
- Follow PR template (description, changes made, testing done)
|
||||||
|
|
||||||
|
**Review Turnaround Time:**
|
||||||
|
- PRs should be reviewed within 24 hours
|
||||||
|
- Small PRs preferred (easier to review)
|
||||||
|
- Urgent PRs can be flagged in WhatsApp/Discord
|
||||||
|
|
||||||
|
**Who Reviews:**
|
||||||
|
- Emin reviews all PRs for documentation and code quality
|
||||||
|
- Feature-specific specialist reviews related PRs (e.g., Kerem reviews DB changes)
|
||||||
|
- Feyza reviews for test coverage
|
||||||
|
|
||||||
|
### Communication Channels
|
||||||
|
|
||||||
|
**Synchronous (Real-time):**
|
||||||
|
- Weekly meetings (Monday, Wednesday, Friday)
|
||||||
|
- Pair programming sessions
|
||||||
|
- Emergency sync if someone is blocked
|
||||||
|
|
||||||
|
**Asynchronous:**
|
||||||
|
- WhatsApp/Discord - Daily updates, quick questions, coordination
|
||||||
|
- GitHub - Code reviews, PR discussions, issue tracking
|
||||||
|
- Email - Formal communication with professor
|
||||||
|
|
||||||
|
### Conflict Resolution
|
||||||
|
|
||||||
|
**If technical disagreement arises:**
|
||||||
|
1. Discuss in team meeting (not in PR comments)
|
||||||
|
2. Each person presents their approach and rationale
|
||||||
|
3. Team votes (majority wins)
|
||||||
|
4. Emin documents decision in MEMORY_BANK.md with rationale
|
||||||
|
|
||||||
|
**If someone is blocked:**
|
||||||
|
1. Post in group chat immediately (don't wait)
|
||||||
|
2. If not resolved in 2 hours, schedule sync call
|
||||||
|
3. Pair programming session to unblock
|
||||||
|
|
||||||
|
**If someone is behind schedule:**
|
||||||
|
1. Notify team in Monday meeting
|
||||||
|
2. Other team members offer to help
|
||||||
|
3. Re-distribute tasks if necessary
|
||||||
|
4. Update roadmap if needed
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ACCOUNTABILITY & EXPECTATIONS
|
||||||
|
|
||||||
|
### Individual Commitments
|
||||||
|
|
||||||
|
**Each team member commits to:**
|
||||||
|
- Attend all weekly meetings (or send written update if absent)
|
||||||
|
- Complete assigned tasks by Friday demo
|
||||||
|
- Review assigned PRs within 24 hours
|
||||||
|
- Write tests for their own code
|
||||||
|
- Document their own code (JavaDoc, comments)
|
||||||
|
- Communicate blockers early
|
||||||
|
- Help teammates when they're stuck
|
||||||
|
|
||||||
|
### Quality Standards
|
||||||
|
|
||||||
|
**All code must:**
|
||||||
|
- Follow Java naming conventions
|
||||||
|
- Have JavaDoc for public methods
|
||||||
|
- Have meaningful variable/method names
|
||||||
|
- Have no compiler warnings
|
||||||
|
- Pass all tests
|
||||||
|
- Have test coverage (per layer targets)
|
||||||
|
|
||||||
|
### Definition of "Done"
|
||||||
|
|
||||||
|
**A task is only "done" when:**
|
||||||
|
- Code is written and works correctly
|
||||||
|
- Tests are written and passing
|
||||||
|
- JavaDoc is complete
|
||||||
|
- Code is reviewed and approved
|
||||||
|
- Merged to `develop` branch
|
||||||
|
- Documentation is updated (if needed)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ESCALATION & SUPPORT
|
||||||
|
|
||||||
|
### When to Ask for Help
|
||||||
|
|
||||||
|
**Ask your teammate for help if:**
|
||||||
|
- Stuck for >2 hours on a technical problem
|
||||||
|
- Unsure about design decision
|
||||||
|
- Need code review or feedback
|
||||||
|
- Want to pair program
|
||||||
|
|
||||||
|
**Ask Emin (Integration Lead) if:**
|
||||||
|
- Merge conflicts arise
|
||||||
|
- Architecture question (which layer should this code go in?)
|
||||||
|
- Documentation question
|
||||||
|
- Git workflow question
|
||||||
|
|
||||||
|
**Ask the whole team if:**
|
||||||
|
- Major technical decision needed
|
||||||
|
- Significant roadmap change proposed
|
||||||
|
- Need to reprioritize tasks
|
||||||
|
|
||||||
|
**Ask the professor if:**
|
||||||
|
- Requirements are unclear
|
||||||
|
- Need clarification on constraints
|
||||||
|
- Considering major scope change
|
||||||
|
- Need project extension
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## SUCCESS METRICS
|
||||||
|
|
||||||
|
### Individual Performance
|
||||||
|
|
||||||
|
**Each team member will be evaluated on:**
|
||||||
|
- Completion of assigned tasks (on time)
|
||||||
|
- Code quality (clean, documented, tested)
|
||||||
|
- Collaboration (helping teammates, pair programming)
|
||||||
|
- Communication (attending meetings, timely updates)
|
||||||
|
- Testing (writing tests, achieving coverage targets)
|
||||||
|
- Documentation (JavaDoc, comments, technical docs)
|
||||||
|
|
||||||
|
### Team Performance
|
||||||
|
|
||||||
|
**Team success measured by:**
|
||||||
|
- Meeting weekly milestones from roadmap
|
||||||
|
- Passing all tests (>70% coverage overall)
|
||||||
|
- All functional requirements implemented (FR1-FR12)
|
||||||
|
- All non-functional requirements met (NFR1-NFR6)
|
||||||
|
- Complete and polished deliverable package
|
||||||
|
- Successful final presentation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## APPENDICES
|
||||||
|
|
||||||
|
### Appendix A: Tools & Technologies
|
||||||
|
|
||||||
|
**Required Tools (All Team Members):**
|
||||||
|
- Java JDK 17+
|
||||||
|
- IntelliJ IDEA (recommended) or Eclipse
|
||||||
|
- Git (for version control)
|
||||||
|
- Maven or Gradle (build tool)
|
||||||
|
- SQLite Browser (for database inspection)
|
||||||
|
|
||||||
|
**Role-Specific Tools:**
|
||||||
|
- **Kerem:** DB Browser for SQLite
|
||||||
|
- **Milena:** Profiling tools (JProfiler or VisualVM)
|
||||||
|
- **Rabia:** Scene Builder (for FXML editing)
|
||||||
|
- **Sefa:** JavaFX Scene Builder
|
||||||
|
- **Feyza:** JaCoCo (coverage), TestFX (UI testing)
|
||||||
|
- **Emin:** Draw.io (diagrams), Markdown editor
|
||||||
|
|
||||||
|
### Appendix B: Learning Resources
|
||||||
|
|
||||||
|
**JavaFX:**
|
||||||
|
- Official docs: https://openjfx.io/javadoc/17/
|
||||||
|
- Tutorial: https://openjfx.io/openjfx-docs/
|
||||||
|
- Scene Builder: https://gluonhq.com/products/scene-builder/
|
||||||
|
|
||||||
|
**SQLite:**
|
||||||
|
- Tutorial: https://www.sqlitetutorial.net/
|
||||||
|
- JDBC: https://www.sqlitetutorial.net/sqlite-java/
|
||||||
|
|
||||||
|
**CSP Algorithms:**
|
||||||
|
- Russell & Norvig "Artificial Intelligence: A Modern Approach" - Chapter 6
|
||||||
|
- Online: https://artint.info/2e/html/ArtInt2e.Ch4.html
|
||||||
|
|
||||||
|
**Testing:**
|
||||||
|
- JUnit 5: https://junit.org/junit5/docs/current/user-guide/
|
||||||
|
- Mockito: https://javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html
|
||||||
|
- TestFX: https://github.com/TestFX/TestFX
|
||||||
|
|
||||||
|
### Appendix C: Contact Information Template
|
||||||
|
|
||||||
|
| Team Member | Email | Phone | Preferred Contact Method |
|
||||||
|
|------------|-------|-------|-------------------------|
|
||||||
|
| Kerem Bozdag | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
| Milena Larissa Ünal | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
| Rabia Tülay Gokdag | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
| Mehmet Sefa Keskin | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
| Feyza Gereme | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
| Emin Arslan | [fill in] | [fill in] | WhatsApp / Discord |
|
||||||
|
|
||||||
|
**Group Chat:** [WhatsApp/Discord link]
|
||||||
|
**Repository:** [GitHub URL]
|
||||||
|
**Professor:** [Name, Email, Office Hours]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CHANGELOG
|
||||||
|
|
||||||
|
| Version | Date | Author | Changes |
|
||||||
|
|---------|------|--------|---------|
|
||||||
|
| 1.0 | 2025-11-26 | Claude Code | Initial team assignments document |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**END OF TEAM ASSIGNMENTS**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Note:** This document defines roles but emphasizes collaboration. While each person has a specialty, everyone helps each other to ensure project success. Cross-functional collaboration is encouraged and expected.
|
||||||
115
agents.md
Normal file
115
agents.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
# Cline's Memory Bank
|
||||||
|
|
||||||
|
I am Cline, an expert software engineer with a unique characteristic: my memory resets completely between sessions. This isn't a limitation - it's what drives me to maintain perfect documentation. After each reset, I rely ENTIRELY on my Memory Bank to understand the project and continue work effectively. I MUST read ALL memory bank files at the start of EVERY task - this is not optional.
|
||||||
|
|
||||||
|
## Memory Bank Structure
|
||||||
|
|
||||||
|
The Memory Bank consists of core files and optional context files, all in Markdown format. Files build upon each other in a clear hierarchy:
|
||||||
|
|
||||||
|
flowchart TD
|
||||||
|
PB[projectbrief.md] --> PC[productContext.md]
|
||||||
|
PB --> SP[systemPatterns.md]
|
||||||
|
PB --> TC[techContext.md]
|
||||||
|
|
||||||
|
PC --> AC[activeContext.md]
|
||||||
|
SP --> AC
|
||||||
|
TC --> AC
|
||||||
|
|
||||||
|
AC --> P[progress.md]
|
||||||
|
|
||||||
|
### Core Files (Required)
|
||||||
|
1. `projectbrief.md`
|
||||||
|
- Foundation document that shapes all other files
|
||||||
|
- Created at project start if it doesn't exist
|
||||||
|
- Defines core requirements and goals
|
||||||
|
- Source of truth for project scope
|
||||||
|
|
||||||
|
2. `productContext.md`
|
||||||
|
- Why this project exists
|
||||||
|
- Problems it solves
|
||||||
|
- How it should work
|
||||||
|
- User experience goals
|
||||||
|
|
||||||
|
3. `activeContext.md`
|
||||||
|
- Current work focus
|
||||||
|
- Recent changes
|
||||||
|
- Next steps
|
||||||
|
- Active decisions and considerations
|
||||||
|
- Important patterns and preferences
|
||||||
|
- Learnings and project insights
|
||||||
|
|
||||||
|
4. `systemPatterns.md`
|
||||||
|
- System architecture
|
||||||
|
- Key technical decisions
|
||||||
|
- Design patterns in use
|
||||||
|
- Component relationships
|
||||||
|
- Critical implementation paths
|
||||||
|
|
||||||
|
5. `techContext.md`
|
||||||
|
- Technologies used
|
||||||
|
- Development setup
|
||||||
|
- Technical constraints
|
||||||
|
- Dependencies
|
||||||
|
- Tool usage patterns
|
||||||
|
|
||||||
|
6. `progress.md`
|
||||||
|
- What works
|
||||||
|
- What's left to build
|
||||||
|
- Current status
|
||||||
|
- Known issues
|
||||||
|
- Evolution of project decisions
|
||||||
|
|
||||||
|
### Additional Context
|
||||||
|
Create additional files/folders within memory-bank/ when they help organize:
|
||||||
|
- Complex feature documentation
|
||||||
|
- Integration specifications
|
||||||
|
- API documentation
|
||||||
|
- Testing strategies
|
||||||
|
- Deployment procedures
|
||||||
|
|
||||||
|
## Core Workflows
|
||||||
|
|
||||||
|
### Plan Mode
|
||||||
|
flowchart TD
|
||||||
|
Start[Start] --> ReadFiles[Read Memory Bank]
|
||||||
|
ReadFiles --> CheckFiles{Files Complete?}
|
||||||
|
|
||||||
|
CheckFiles -->|No| Plan[Create Plan]
|
||||||
|
Plan --> Document[Document in Chat]
|
||||||
|
|
||||||
|
CheckFiles -->|Yes| Verify[Verify Context]
|
||||||
|
Verify --> Strategy[Develop Strategy]
|
||||||
|
Strategy --> Present[Present Approach]
|
||||||
|
|
||||||
|
### Act Mode
|
||||||
|
flowchart TD
|
||||||
|
Start[Start] --> Context[Check Memory Bank]
|
||||||
|
Context --> Update[Update Documentation]
|
||||||
|
Update --> Execute[Execute Task]
|
||||||
|
Execute --> Document[Document Changes]
|
||||||
|
|
||||||
|
## Documentation Updates
|
||||||
|
|
||||||
|
Memory Bank updates occur when:
|
||||||
|
1. Discovering new project patterns
|
||||||
|
2. After implementing significant changes
|
||||||
|
3. When user requests with **update memory bank** (MUST review ALL files)
|
||||||
|
4. When context needs clarification
|
||||||
|
|
||||||
|
flowchart TD
|
||||||
|
Start[Update Process]
|
||||||
|
|
||||||
|
subgraph Process
|
||||||
|
P1[Review ALL Files]
|
||||||
|
P2[Document Current State]
|
||||||
|
P3[Clarify Next Steps]
|
||||||
|
P4[Document Insights & Patterns]
|
||||||
|
|
||||||
|
P1 --> P2 --> P3 --> P4
|
||||||
|
end
|
||||||
|
|
||||||
|
Start --> Process
|
||||||
|
|
||||||
|
Note: When triggered by **update memory bank**, I MUST review every memory bank file, even if some don't require updates. Focus particularly on activeContext.md and progress.md as they track current state.
|
||||||
|
|
||||||
|
REMEMBER: After every memory reset, I begin completely fresh. The Memory Bank is my only link to previous work. It must be maintained with precision and clarity, as my effectiveness depends entirely on its accuracy.
|
||||||
248
pom.xml
Normal file
248
pom.xml
Normal file
@@ -0,0 +1,248 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
|
||||||
|
http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<!-- Project Information -->
|
||||||
|
<groupId>com.se302</groupId>
|
||||||
|
<artifactId>exam-scheduler</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>Exam Scheduling System</name>
|
||||||
|
<description>Desktop application for automated exam scheduling using CSP solver</description>
|
||||||
|
|
||||||
|
<!-- Project Properties -->
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<javafx.version>21.0.1</javafx.version>
|
||||||
|
<junit.version>5.10.1</junit.version>
|
||||||
|
<mockito.version>5.8.0</mockito.version>
|
||||||
|
<sqlite.version>3.44.1.0</sqlite.version>
|
||||||
|
<apache.poi.version>5.2.5</apache.poi.version>
|
||||||
|
<testfx.version>4.0.18</testfx.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<!-- Dependencies -->
|
||||||
|
<dependencies>
|
||||||
|
<!-- JavaFX -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-controls</artifactId>
|
||||||
|
<version>${javafx.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-fxml</artifactId>
|
||||||
|
<version>${javafx.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-graphics</artifactId>
|
||||||
|
<version>${javafx.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- SQLite JDBC Driver -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.xerial</groupId>
|
||||||
|
<artifactId>sqlite-jdbc</artifactId>
|
||||||
|
<version>${sqlite.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Apache POI for Excel Export -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>${apache.poi.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
<version>${apache.poi.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- CSV Handling -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-csv</artifactId>
|
||||||
|
<version>1.11.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Testing -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-params</artifactId>
|
||||||
|
<version>${junit.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Mockito for Mocking -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-core</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-junit-jupiter</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- TestFX for UI Testing -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testfx</groupId>
|
||||||
|
<artifactId>testfx-core</artifactId>
|
||||||
|
<version>${testfx.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testfx</groupId>
|
||||||
|
<artifactId>testfx-junit5</artifactId>
|
||||||
|
<version>${testfx.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<!-- Build Configuration -->
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<!-- Maven Compiler Plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.11.0</version>
|
||||||
|
<configuration>
|
||||||
|
<source>17</source>
|
||||||
|
<target>17</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Maven Surefire Plugin for Testing -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>3.2.2</version>
|
||||||
|
<configuration>
|
||||||
|
<includes>
|
||||||
|
<include>**/*Test.java</include>
|
||||||
|
</includes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- JaCoCo for Code Coverage -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.jacoco</groupId>
|
||||||
|
<artifactId>jacoco-maven-plugin</artifactId>
|
||||||
|
<version>0.8.11</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>prepare-agent</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>report</id>
|
||||||
|
<phase>test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>report</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>jacoco-check</id>
|
||||||
|
<goals>
|
||||||
|
<goal>check</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<rules>
|
||||||
|
<rule>
|
||||||
|
<element>PACKAGE</element>
|
||||||
|
<limits>
|
||||||
|
<limit>
|
||||||
|
<counter>LINE</counter>
|
||||||
|
<value>COVEREDRATIO</value>
|
||||||
|
<minimum>0.70</minimum>
|
||||||
|
</limit>
|
||||||
|
</limits>
|
||||||
|
</rule>
|
||||||
|
</rules>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- JavaFX Maven Plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.openjfx</groupId>
|
||||||
|
<artifactId>javafx-maven-plugin</artifactId>
|
||||||
|
<version>0.0.8</version>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>com.se302.examscheduler.Main</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Maven JavaDoc Plugin -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-javadoc-plugin</artifactId>
|
||||||
|
<version>3.6.3</version>
|
||||||
|
<configuration>
|
||||||
|
<show>public</show>
|
||||||
|
<nohelp>true</nohelp>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>attach-javadocs</id>
|
||||||
|
<goals>
|
||||||
|
<goal>jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<!-- Maven Assembly Plugin for Executable JAR -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>3.6.0</version>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>com.se302.examscheduler.Main</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>make-assembly</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
356
project_description_text.pdf
Normal file
356
project_description_text.pdf
Normal file
@@ -0,0 +1,356 @@
|
|||||||
|
%PDF-1.3
|
||||||
|
%ºß¬à
|
||||||
|
3 0 obj
|
||||||
|
<</Type /Page
|
||||||
|
/Parent 1 0 R
|
||||||
|
/Resources 2 0 R
|
||||||
|
/MediaBox [0 0 595.2799999999999727 841.8899999999999864]
|
||||||
|
/Contents 4 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Length 7450
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
0.5670000000000001 w
|
||||||
|
0 G
|
||||||
|
0.58 0.2 0.92 rg
|
||||||
|
56.6929133858267775 785.1970866141731449 481.8941732283464034 -8.5039370078740166 re
|
||||||
|
f
|
||||||
|
BT
|
||||||
|
/F2 22 Tf
|
||||||
|
25.2999999999999972 TL
|
||||||
|
0.122 0.161 0.216 rg
|
||||||
|
56.6929133858267775 762.5199212598424765 Td
|
||||||
|
(Lecture Transcript) Tj
|
||||||
|
ET
|
||||||
|
BT
|
||||||
|
/F1 12 Tf
|
||||||
|
13.7999999999999989 TL
|
||||||
|
0.42 0.447 0.502 rg
|
||||||
|
56.6929133858267775 739.8427559055118081 Td
|
||||||
|
(Audio/Video Transcription) Tj
|
||||||
|
ET
|
||||||
|
BT
|
||||||
|
/F1 9 Tf
|
||||||
|
10.3499999999999996 TL
|
||||||
|
0.612 0.639 0.686 rg
|
||||||
|
56.6929133858267775 725.6695275590550409 Td
|
||||||
|
(Generated on: 11/12/2025, 11:19:24 AM) Tj
|
||||||
|
ET
|
||||||
|
0.9 0.91 0.92 RG
|
||||||
|
56.6929133858267775 697.3230708661417339 m
|
||||||
|
538.5870866141731312 697.3230708661417339 l
|
||||||
|
S
|
||||||
|
BT
|
||||||
|
/F1 10 Tf
|
||||||
|
11.5 TL
|
||||||
|
0.216 0.255 0.318 rg
|
||||||
|
56.6929133858267775 668.9766141732283131 Td
|
||||||
|
( Dear all, this is the video that I have been recording for the description of SE302 course. Throughout the) Tj
|
||||||
|
T* (semester you will try to put there the corresponding requirements, from this video at least, as well as the) Tj
|
||||||
|
T* (design and implementation you will handle. The project description is as follows. I would like you to submit) Tj
|
||||||
|
T* (me a desktop application that helps me create a schedule for the exam interval. You know that you will have) Tj
|
||||||
|
T* (the corresponding midterm exams in the next coming weeks. So suppose that you have a kind of fixed.) Tj
|
||||||
|
T* (number of days as a kind of exam time interval and you have a fixed number of classrooms in the schools) Tj
|
||||||
|
T* (and you have a fixed number of courses And in these courses, you have a fixed number of students) Tj
|
||||||
|
T* (registered. These fixed numbers are, by the way, available now. The Student Affairs will try to schedule the) Tj
|
||||||
|
T* (exam period. But here I give you such a kind of sample data to understand the details. For example, we have) Tj
|
||||||
|
T* (the students in the system with their IDs, say, SDD ID 001 through Here, 250 students, and here we have the) Tj
|
||||||
|
T* (sample data for the courses. We have 20 courses for the Department of Computer Engineering, you might) Tj
|
||||||
|
T* (mention it. And here we have the corresponding classrooms in the school to be assigned within the slots of) Tj
|
||||||
|
T* (the exam period for each exam. we have the corresponding number of the seats, the capacities in the) Tj
|
||||||
|
T* (classrooms. For this sample data, I suppose that each classroom contains 40 seats and hereby each course) Tj
|
||||||
|
T* (will have the number of 40 students equally registered in the corresponding example that's just a kind of) Tj
|
||||||
|
T* (sample you might use such a kind of different classrooms with different number of capacities and by the way) Tj
|
||||||
|
T* (you might use such different number of course here there are 20 courses for each course there might be) Tj
|
||||||
|
T* (different number of students registered as well so these all students and all courses are just an example And) Tj
|
||||||
|
T* (here the Student Affairs will use basically the sample data for the classrooms with their capacities and the) Tj
|
||||||
|
T* (sample data for the course codes with their registered students. You at least need these two files. And it will) Tj
|
||||||
|
T* (be a kind of Windows application and desktop application because I am in the role of student affairs, I am) Tj
|
||||||
|
T* (your customer, I will use the system and nobody else. So that's just the kind of desktop application adequate) Tj
|
||||||
|
T* (for me. By the way, I need of course some help menus in the application. I as a student affairs, I mean) Tj
|
||||||
|
T* (authority, will import the corresponding files into the application. These files will contain at least the) Tj
|
||||||
|
T* (corresponding course codes with their registered students and the corresponding classrooms with their) Tj
|
||||||
|
T* (capacities. And the program will give the following output. An exam schedule. That's all. So, hereby, the) Tj
|
||||||
|
T* (create these files and import into your system. They don't need to manually enter these into your system.) Tj
|
||||||
|
T* (Okay, if you make them do this, okay, but not necessary. These student affairs will import these files. If they) Tj
|
||||||
|
T* (wanna change these files, okay, they will change the file and then they can re-import. So which means that) Tj
|
||||||
|
T* (these data should be created, edited, or in a way maybe removed and re-imported. So here we have the) Tj
|
||||||
|
T* (option as a student affairs authority, I have the option to change the data and re-import the file and rerun the) Tj
|
||||||
|
T* (program as well. What will be the display result? Say, for each classroom, I would like to see the) Tj
|
||||||
|
T* (corresponding exams of the courses. For each student, I would like to see the corresponding exam schedule.) Tj
|
||||||
|
T* (For each course, I would like to see the exact time for each assigned exam. And it's, of course, assigned) Tj
|
||||||
|
T* (classroom as well. For each day, I would like to see the exams in each slot. Hereby, there are two constraints) Tj
|
||||||
|
T* (at least. No two consecutive slots shall be assigned for the same student. So if I have such a number of) Tj
|
||||||
|
T* (exams in a day, there I need a break at least in between. And the next second constraint is the number of) Tj
|
||||||
|
T* (exams in a day to be assigned for a student is, at most exits. So the number of exams in a day to be) Tj
|
||||||
|
T* (assigned for a student shall not exceed two, okay? You can also add some more constraints as well. These) Tj
|
||||||
|
T* (are the necessities. So you will try to at least state the requirements at first and you will design later. By the) Tj
|
||||||
|
T* (way, if you have any questions further, of course you can ask anytime, remember. So hereby, let's say, This is) Tj
|
||||||
|
T* (the way that you would use for the exam period. Of course there might be some different alternatives. For) Tj
|
||||||
|
T* (example, you can follow a kind of greedy algorithm. There might be no solution, so you might need to release) Tj
|
||||||
|
T* (some constraints. Suppose that the number of the days for the period is 5, let's suppose, and you have four) Tj
|
||||||
|
T* (slots in a day, again exception, and you are not able to put the resolution for five days, including four slots in a) Tj
|
||||||
|
T* (day, for such a number of exams to be held. So what should you do? Then you shall either say there is no) Tj
|
||||||
|
T* (solution or which is not the best, you might put there some other slots in some days. Just an assumption to) Tj
|
||||||
|
T* (release a constraint. Or for a student you might just consider doing something as like, releasing its constraint) Tj
|
||||||
|
T* (like, no consecutive two exams will be there. Or in a way you can extend the number of days in the interval.) Tj
|
||||||
|
T* (So what you cannot change is amongst these alternatives, you cannot change the first constraint. No two) Tj
|
||||||
|
T* (consecutive slots shall be assigned for a student. And the second constraint, the number of exams in a day to) Tj
|
||||||
|
T* (be assigned for a student shall not exceed two. Okay, so you can, for example, optimization, not a must, but if) Tj
|
||||||
|
T* (you have a solution, will it be the best? No, I need a solution, but how would you optimize it? For example,) Tj
|
||||||
|
T* (you might balance, share the exams within the interval, let's say exam period, equally. Or you might try to) Tj
|
||||||
|
T* (complete the exams within the minimum number of days, another one, or one other alternative, you might) Tj
|
||||||
|
T* (use a minimum number of classrooms or a balanced number of classrooms per day, or assigning the very) Tj
|
||||||
|
T* (crowded courses or assigning the important or assigning the difficult courses to be held for their exams at the) Tj
|
||||||
|
T* (beginning or at the end of the corresponding interval. It's up to you. Okay, so in the classroom, I will welcome) Tj
|
||||||
|
T* (your any other further question as well.) Tj
|
||||||
|
ET
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<</Type /Page
|
||||||
|
/Parent 1 0 R
|
||||||
|
/Resources 2 0 R
|
||||||
|
/MediaBox [0 0 595.2799999999999727 841.8899999999999864]
|
||||||
|
/Contents 6 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Length 299
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
0.5670000000000001 w
|
||||||
|
0.9 0.91 0.92 RG
|
||||||
|
0.9 0.91 0.92 RG
|
||||||
|
56.6929133858267775 70.8661417322834666 m
|
||||||
|
538.5870866141731312 70.8661417322834666 l
|
||||||
|
S
|
||||||
|
BT
|
||||||
|
/F1 9 Tf
|
||||||
|
10.3499999999999996 TL
|
||||||
|
0.612 0.639 0.686 rg
|
||||||
|
192.6549999999999443 53.8582677165354653 Td
|
||||||
|
(Generated by LectureHelper AI • Powered by Gemini) Tj
|
||||||
|
ET
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
1 0 obj
|
||||||
|
<</Type /Pages
|
||||||
|
/Kids [3 0 R 5 0 R ]
|
||||||
|
/Count 2
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Helvetica
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Helvetica-Bold
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Helvetica-Oblique
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Helvetica-BoldOblique
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Courier
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Courier-Bold
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Courier-Oblique
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Courier-BoldOblique
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Times-Roman
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Times-Bold
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Times-Italic
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Times-BoldItalic
|
||||||
|
/Subtype /Type1
|
||||||
|
/Encoding /WinAnsiEncoding
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /ZapfDingbats
|
||||||
|
/Subtype /Type1
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Font
|
||||||
|
/BaseFont /Symbol
|
||||||
|
/Subtype /Type1
|
||||||
|
/FirstChar 32
|
||||||
|
/LastChar 255
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
|
||||||
|
/Font <<
|
||||||
|
/F1 7 0 R
|
||||||
|
/F2 8 0 R
|
||||||
|
/F3 9 0 R
|
||||||
|
/F4 10 0 R
|
||||||
|
/F5 11 0 R
|
||||||
|
/F6 12 0 R
|
||||||
|
/F7 13 0 R
|
||||||
|
/F8 14 0 R
|
||||||
|
/F9 15 0 R
|
||||||
|
/F10 16 0 R
|
||||||
|
/F11 17 0 R
|
||||||
|
/F12 18 0 R
|
||||||
|
/F13 19 0 R
|
||||||
|
/F14 20 0 R
|
||||||
|
>>
|
||||||
|
/XObject <<
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
21 0 obj
|
||||||
|
<<
|
||||||
|
/Producer (jsPDF 3.0.3)
|
||||||
|
/CreationDate (D:20251112111924+03'00')
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
22 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Catalog
|
||||||
|
/Pages 1 0 R
|
||||||
|
/OpenAction [3 0 R /FitH null]
|
||||||
|
/PageLayout /OneColumn
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 23
|
||||||
|
0000000000 65535 f
|
||||||
|
0000008141 00000 n
|
||||||
|
0000009966 00000 n
|
||||||
|
0000000015 00000 n
|
||||||
|
0000000152 00000 n
|
||||||
|
0000007654 00000 n
|
||||||
|
0000007791 00000 n
|
||||||
|
0000008204 00000 n
|
||||||
|
0000008329 00000 n
|
||||||
|
0000008459 00000 n
|
||||||
|
0000008592 00000 n
|
||||||
|
0000008730 00000 n
|
||||||
|
0000008854 00000 n
|
||||||
|
0000008983 00000 n
|
||||||
|
0000009115 00000 n
|
||||||
|
0000009251 00000 n
|
||||||
|
0000009379 00000 n
|
||||||
|
0000009506 00000 n
|
||||||
|
0000009635 00000 n
|
||||||
|
0000009768 00000 n
|
||||||
|
0000009870 00000 n
|
||||||
|
0000010216 00000 n
|
||||||
|
0000010302 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/Size 23
|
||||||
|
/Root 22 0 R
|
||||||
|
/Info 21 0 R
|
||||||
|
/ID [ <819320BB232625253F804588D6A4AF20> <819320BB232625253F804588D6A4AF20> ]
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10406
|
||||||
|
%%EOF
|
||||||
Reference in New Issue
Block a user