Capstone Project 1
🏫 School Management System
Real-World Scenario
Greenfield Public School (CBSE-affiliated, Delhi) has 1,200 students across Classes I–XII. The administration currently maintains records in paper registers, leading to errors in fee tracking, lost attendance records, and delayed result processing. You are hired to build a comprehensive Excel-based School Management System that handles student registration, class allocation, fee collection, attendance tracking, and exam result management — all interlinked.
📋 Learning Objectives
- Design a multi-sheet relational database structure in Excel
- Use
VLOOKUP, INDEX-MATCH to link data across sheets
- Build dynamic dashboards with
COUNTIFS, SUMIFS
- Create a VBA UserForm for data entry with validation
- Apply conditional formatting for visual alerts
📊 Dataset Description & Sheet Structure
The workbook consists of 5 interlinked sheets plus a Dashboard sheet:
Sheet 1: Students (Master Data)
| StudentID | Name | Class | Section | DOB | Gender | Father's Name | Phone | Address | Admission Date |
| GFS001 | Aarav Sharma | 10 | A | 15-Mar-2010 | M | Rajesh Sharma | 9876543210 | Dwarka, Delhi | 01-Apr-2020 |
| GFS002 | Priya Gupta | 10 | A | 22-Jul-2010 | F | Amit Gupta | 9876543211 | Rohini, Delhi | 01-Apr-2020 |
| GFS003 | Rohan Patel | 9 | B | 08-Nov-2011 | M | Suresh Patel | 9876543212 | Janakpuri, Delhi | 01-Apr-2021 |
| GFS004 | Ananya Singh | 10 | B | 30-Jan-2010 | F | Vikram Singh | 9876543213 | Pitampura, Delhi | 01-Apr-2019 |
| GFS005 | Karan Mehta | 9 | A | 14-Sep-2011 | M | Dinesh Mehta | 9876543214 | Vasant Kunj, Delhi | 01-Apr-2021 |
Sheet 2: Classes (Structure)
| Class | Section | Class Teacher | Room No | Max Capacity | Current Strength |
| 9 | A | Mrs. Sunita Verma | 201 | 45 | 42 |
| 9 | B | Mr. Rakesh Kumar | 202 | 45 | 40 |
| 10 | A | Mrs. Kavita Joshi | 301 | 45 | 44 |
| 10 | B | Mr. Ashok Tiwari | 302 | 45 | 43 |
Sheet 3: Fees
| StudentID | Fee Type | Amount | Due Date | Paid Date | Status | Payment Mode |
| GFS001 | Tuition Q1 | 15000 | 15-Apr-2024 | 10-Apr-2024 | Paid | Online |
| GFS001 | Tuition Q2 | 15000 | 15-Jul-2024 | 20-Jul-2024 | Paid (Late) | Cash |
| GFS002 | Tuition Q1 | 15000 | 15-Apr-2024 | 12-Apr-2024 | Paid | Online |
| GFS003 | Tuition Q1 | 15000 | 15-Apr-2024 | | Pending | |
| GFS004 | Transport | 5000 | 15-Apr-2024 | 15-Apr-2024 | Paid | Cheque |
Sheet 4: Attendance
| StudentID | Date | Status | Remarks |
| GFS001 | 01-Jul-2024 | P | |
| GFS001 | 02-Jul-2024 | A | Sick Leave |
| GFS002 | 01-Jul-2024 | P | |
| GFS003 | 01-Jul-2024 | L | Family Function |
Sheet 5: Results
| StudentID | Exam | English | Hindi | Maths | Science | SST | Total | Percentage | Grade | Rank |
| GFS001 | Mid-Term | 85 | 78 | 92 | 88 | 76 | 419 | 83.8% | A | 2 |
| GFS002 | Mid-Term | 90 | 85 | 78 | 82 | 88 | 423 | 84.6% | A | 1 |
| GFS004 | Mid-Term | 72 | 68 | 65 | 70 | 74 | 349 | 69.8% | B | 3 |
🔧 Design — Sheet Layout Plan
Create a workbook named GFS_School_Management.xlsx with the following sheet tabs (colour-coded):
| Sheet Name | Tab Colour | Purpose | Key Columns |
| Dashboard | 🟢 Green | KPI summary with charts | Auto-calculated metrics |
| Students | 🔵 Blue | Master student data | StudentID (Primary Key) |
| Classes | 🟡 Yellow | Class structure & teachers | Class+Section (Composite Key) |
| Fees | 🔴 Red | Fee records | StudentID (Foreign Key) |
| Attendance | 🟠 Orange | Daily attendance log | StudentID + Date |
| Results | 🟣 Purple | Exam marks & grades | StudentID + Exam |
📐 Key Formulas Used
📊 Pivot Tables
- Class-wise Student Count: Rows = Class, Columns = Section, Values = Count of StudentID
- Fee Collection Summary: Rows = Fee Type, Columns = Status, Values = Sum of Amount
- Monthly Attendance Summary: Rows = StudentID+Name, Columns = Month, Values = Count of "P" status
- Subject-wise Average Marks: Rows = Class, Values = Average of each subject column
📈 Charts
- Bar Chart: Class-wise student strength (clustered by section)
- Pie Chart: Fee collection status distribution (Paid vs Pending vs Late)
- Line Chart: Monthly attendance trend per class
- Column Chart: Subject-wise average marks comparison across classes
🖥️ Dashboard Layout
[Screenshot: Dashboard with 4 KPI cards at top — Total Students, Fee Collection %, Average Attendance %, Pass Percentage — followed by 4 charts arranged in 2×2 grid]
The Dashboard sheet contains:
- Row 1-3: School header with logo placeholder, date, academic year
- Row 5-8: 4 KPI cards — Total Students (
=COUNTA(Students!A:A)-1), Total Fee Collected, Overall Attendance %, Overall Pass %
- Row 10-25: Left — Class strength bar chart; Right — Fee status pie chart
- Row 27-42: Left — Attendance trend line chart; Right — Subject average column chart
🤖 VBA Automation — Student Data Entry Form
VBA
' === UserForm: frmStudentEntry ===
' Controls: txtStudentID, txtName, cmbClass, cmbSection,
' txtDOB, cmbGender, txtFatherName, txtPhone, txtAddress
' btnSave, btnClear, btnClose
Private Sub UserForm_Initialize()
' Auto-generate next StudentID
Dim lastRow As Long
lastRow = Sheets("Students").Cells(Rows.Count, 1).End(xlUp).Row
If lastRow = 1 Then
txtStudentID.Value = "GFS001"
Else
Dim lastID As String
lastID = Sheets("Students").Cells(lastRow, 1).Value
Dim nextNum As Long
nextNum = CLng(Mid(lastID, 4)) + 1
txtStudentID.Value = "GFS" & Format(nextNum, "000")
End If
txtStudentID.Enabled = False
' Populate Class dropdown
Dim cls As Variant
For Each cls In Array(1,2,3,4,5,6,7,8,9,10,11,12)
cmbClass.AddItem cls
Next
' Populate Section dropdown
cmbSection.AddItem "A"
cmbSection.AddItem "B"
cmbSection.AddItem "C"
' Populate Gender
cmbGender.AddItem "M"
cmbGender.AddItem "F"
End Sub
Private Sub btnSave_Click()
' Validation
If txtName.Value = "" Then
MsgBox "Student Name is required!", vbExclamation
txtName.SetFocus: Exit Sub
End If
If cmbClass.Value = "" Then
MsgBox "Please select a Class!", vbExclamation
Exit Sub
End If
If Not IsDate(txtDOB.Value) Then
MsgBox "Enter valid Date of Birth (DD-MMM-YYYY)!", vbExclamation
txtDOB.SetFocus: Exit Sub
End If
If Len(txtPhone.Value) <> 10 Or Not IsNumeric(txtPhone.Value) Then
MsgBox "Enter valid 10-digit phone number!", vbExclamation
txtPhone.SetFocus: Exit Sub
End If
' Save to Students sheet
Dim ws As Worksheet
Set ws = Sheets("Students")
Dim nr As Long
nr = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(nr, 1).Value = txtStudentID.Value
ws.Cells(nr, 2).Value = txtName.Value
ws.Cells(nr, 3).Value = CLng(cmbClass.Value)
ws.Cells(nr, 4).Value = cmbSection.Value
ws.Cells(nr, 5).Value = CDate(txtDOB.Value)
ws.Cells(nr, 6).Value = cmbGender.Value
ws.Cells(nr, 7).Value = txtFatherName.Value
ws.Cells(nr, 8).Value = txtPhone.Value
ws.Cells(nr, 9).Value = txtAddress.Value
ws.Cells(nr, 10).Value = Date ' Admission Date = Today
MsgBox "Student " & txtName.Value & " registered successfully!" & vbCrLf & _
"ID: " & txtStudentID.Value, vbInformation
btnClear_Click ' Reset form
End Sub
Private Sub btnClear_Click()
txtName.Value = ""
cmbClass.Value = ""
cmbSection.Value = ""
txtDOB.Value = ""
cmbGender.Value = ""
txtFatherName.Value = ""
txtPhone.Value = ""
txtAddress.Value = ""
' Regenerate next ID
UserForm_Initialize
End Sub
📝 Step-by-Step Implementation Guide
- Create Workbook: Open Excel → Save As
GFS_School_Management.xlsm (Macro-Enabled)
- Create Sheets: Add 6 sheets — Dashboard, Students, Classes, Fees, Attendance, Results. Colour-code each tab.
- Set Up Students Sheet: Enter headers in Row 1. Apply Data Validation — Class (List: 1-12), Section (List: A,B,C), Gender (List: M,F). Format DOB column as Date.
- Set Up Classes Sheet: Enter class structure. Use
=COUNTIFS(Students!C:C, A2, Students!D:D, B2) for Current Strength column.
- Set Up Fees Sheet: Add headers. Use
=VLOOKUP(A2,Students!A:B,2,FALSE) in column B for auto-name lookup. Add Data Validation for Status (Paid/Pending/Late) and Payment Mode (Cash/Online/Cheque).
- Set Up Attendance Sheet: Add headers. Use Data Validation for Status (P/A/L). Apply Conditional Formatting: P=Green, A=Red, L=Yellow.
- Set Up Results Sheet: Add subject columns. Calculate Total with
=SUM(C2:G2), Percentage with =H2/500*100, Grade using IFS formula, Rank using =RANK(H2, H$2:H$100).
- Build Pivot Tables: Insert → PivotTable for each summary. Place on Dashboard sheet.
- Create Charts: Insert charts from pivot data. Format with school colors.
- Build Dashboard: Arrange KPI cards and charts. Add school header. Freeze panes at Row 4.
- Create VBA Form: Alt+F11 → Insert → UserForm. Add controls and paste code above.
- Add Macro Button: On Students sheet, Insert → Button → Assign Macro
frmStudentEntry.Show.
[Screenshot: Completed Dashboard showing KPI cards, charts, and school branding]
✅ Final Deliverables Checklist
- Students master sheet with 50+ sample records and data validation
- Classes sheet with auto-calculated current strength
- Fees sheet with VLOOKUP-linked student names and payment tracking
- Attendance sheet with conditional formatting (P/A/L color codes)
- Results sheet with auto-calculated Total, Percentage, Grade, Rank
- Dashboard with 4 KPI cards and 4 charts
- Working VBA Student Entry Form with validation
- At least 2 Pivot Tables with slicers
- Print-ready report card format on a separate sheet
📋 Assessment Rubric
| Criteria | Excellent (5) | Good (4) | Average (3) | Needs Work (1-2) | Marks |
| Data Structure & Design | All 5 sheets properly linked, normalized data | 4 sheets linked correctly | 3 sheets with some linking | Sheets not linked | /5 |
| Formulas & Functions | VLOOKUP, COUNTIFS, SUMIFS, IFS, RANK all working | 4 formula types used correctly | 3 formula types | Basic formulas only | /5 |
| Dashboard & Charts | 4 KPIs + 4 charts, professional layout | 3 KPIs + 3 charts | 2 KPIs + 2 charts | No dashboard | /5 |
| VBA UserForm | Full form with validation, auto-ID | Form works with partial validation | Basic form, no validation | No VBA | /5 |
| Data Validation & Formatting | All dropdowns, conditional formatting, protection | Most validations applied | Some validations | No validation | /5 |
| Total | /25 |
Allow 8-10 class hours for this project. Have students enter at least 50 student records to make pivot tables meaningful. Encourage peer review of dashboards. This project integrates skills from Parts I through X.
Capstone Project 2
📝 Student Result Management System
Real-World Scenario
Saraswati Vidya Mandir, a CBSE school in Jaipur with 800 students (Classes IX–XII), needs a system to process board exam results. The system must handle multi-subject marks entry, implement the CBSE 9-point grading system, generate rank lists, calculate percentiles, and produce individual report cards that can be exported as PDFs — all automated via Excel and VBA.
📋 Learning Objectives
- Implement the CBSE 9-point grading scale using
IFS
- Use
RANK, PERCENTILE, and LARGE for rank generation
- Master
INDEX-MATCH for flexible data retrieval
- Create a print-ready report card template
- Automate PDF report card generation with VBA
📊 Dataset Description
Sheet: MarksEntry
| RollNo | Name | Class | English | Hindi | Maths | Science | SST | Computer | Total | % | CGPA |
| 1001 | Arjun Rajput | X-A | 89 | 76 | 95 | 88 | 82 | 91 | 521 | 86.83 | 9.0 |
| 1002 | Sneha Agarwal | X-A | 92 | 88 | 74 | 80 | 90 | 85 | 509 | 84.83 | 8.8 |
| 1003 | Vikash Yadav | X-B | 65 | 58 | 42 | 55 | 60 | 48 | 328 | 54.67 | 5.8 |
| 1004 | Nisha Sharma | X-A | 78 | 82 | 85 | 90 | 76 | 88 | 499 | 83.17 | 8.6 |
| 1005 | Rahul Jain | X-B | 45 | 38 | 30 | 35 | 42 | 28 | 218 | 36.33 | 4.0 |
CBSE 9-Point Grading Scale
| Marks Range | Grade | Grade Point | Description |
| 91–100 | A1 | 10 | Outstanding |
| 81–90 | A2 | 9 | Excellent |
| 71–80 | B1 | 8 | Very Good |
| 61–70 | B2 | 7 | Good |
| 51–60 | C1 | 6 | Above Average |
| 41–50 | C2 | 5 | Average |
| 33–40 | D | 4 | Below Average |
| 21–32 | E1 | 3 | Needs Improvement |
| 0–20 | E2 | 2 | Unsatisfactory |
📐 Key Formulas
📊 Charts
- Bar Chart: Subject-wise class average marks — shows which subjects need improvement
- Pie Chart: Grade distribution — proportion of A1, A2, B1, B2, etc.
- Column Chart: Section-wise comparison (X-A vs X-B average) for each subject
- Histogram: Total marks frequency distribution (bins: 0-100, 101-200, ... 501-600)
🤖 VBA — Auto-Generate Report Cards & Export PDF
VBA
Sub GenerateAllReportCards()
Dim wsMarks As Worksheet, wsReport As Worksheet
Set wsMarks = Sheets("MarksEntry")
Set wsReport = Sheets("ReportCard")
Dim lastRow As Long
lastRow = wsMarks.Cells(Rows.Count, 1).End(xlUp).Row
Dim savePath As String
savePath = ThisWorkbook.Path & "\ReportCards\"
' Create folder if not exists
If Dir(savePath, vbDirectory) = "" Then MkDir savePath
Dim i As Long
For i = 2 To lastRow
' Populate Report Card
wsReport.Range("B3").Value = wsMarks.Cells(i, 1).Value ' RollNo
wsReport.Range("B4").Value = wsMarks.Cells(i, 2).Value ' Name
wsReport.Range("B5").Value = wsMarks.Cells(i, 3).Value ' Class
' Marks (fetched via INDEX-MATCH formulas already in sheet)
wsReport.Calculate
' Export as PDF
Dim fileName As String
fileName = savePath & wsMarks.Cells(i, 1).Value & "_" & _
Replace(wsMarks.Cells(i, 2).Value, " ", "_") & ".pdf"
wsReport.ExportAsFixedFormat Type:=xlTypePDF, _
fileName:=fileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False
Application.StatusBar = "Generated: " & i - 1 & " of " & lastRow - 1
Next i
Application.StatusBar = False
MsgBox lastRow - 1 & " Report Cards exported to:" & vbCrLf & savePath, vbInformation
End Sub
✅ Final Deliverables
- MarksEntry sheet with 50+ student records, all formulas for grades, totals, ranks
- GradeScale reference sheet with CBSE 9-point mapping
- ReportCard template sheet with INDEX-MATCH formulas, school header, and print layout
- Analysis sheet with subject-wise averages, pass/fail counts, topper lists
- 4 charts: subject average bar, grade pie, section comparison, histogram
- VBA macro to auto-generate and export PDF report cards
📋 Assessment Rubric
| Criteria | Excellent (5) | Good (4) | Average (3) | Needs Work (1-2) | Marks |
| CBSE Grading Implementation | All 9 grades correctly assigned, CGPA calculated | Grades correct, minor CGPA errors | Some grade boundaries wrong | Grading not implemented | /5 |
| Statistical Analysis | RANK, PERCENTILE, AVERAGE, STDEV all used | 3 statistical functions used | 2 functions | Only SUM/AVERAGE | /5 |
| Report Card Design | Professional print-ready layout with school header | Good layout, minor alignment issues | Basic layout | No report card | /5 |
| Charts & Visualization | 4+ meaningful charts with formatting | 3 charts | 2 charts | 1 or no charts | /5 |
| VBA PDF Export | Batch export all report cards as PDF | Single report card export works | VBA code with errors | No VBA | /5 |
| Total | /25 |
This project is ideal for Classes 11-12 Computer Science students. The CBSE grading system gives real-world relevance. Have students test with edge cases: exactly 33 marks (pass boundary), exactly 91 marks (A1 boundary). Discuss PERCENTILE vs PERCENTRANK difference.