In this lesson, you will learn how to design a basic Student Management System using Microsoft Access. The project will organize student records, course information, fee details, enrollment records, forms, queries, and reports.
This practical project combines concepts covered in earlier lessons, including tables, primary keys, relationships, normalization, forms, queries, reports, and macros.
The Student Management System will help an institute to:
StudentManagement.accdb
StudentManagement.accdb.Use meaningful object names so that tables, queries, forms, and reports are easy to identify.
Create a table named Students to store
each student's personal information.
| Field Name | Data Type | Purpose |
|---|---|---|
| StudentID | AutoNumber | Primary key |
| StudentName | Short Text | Student's full name |
| FatherName | Short Text | Father's name |
| Gender | Short Text | Gender, if collected |
| DateOfBirth | Date/Time | Date of birth |
| Mobile | Short Text | Contact number |
| Address | Long Text | Residential address |
| AdmissionDate | Date/Time | Date of admission |
Students.
Create a table named Courses to maintain
course information.
| Field Name | Data Type | Purpose |
|---|---|---|
| CourseID | AutoNumber | Primary key |
| CourseName | Short Text | Name of the course |
| Duration | Short Text | Course duration |
| CourseFee | Currency | Total course fee |
| CourseName | Duration | CourseFee |
|---|---|---|
| ADCA | 12 Months | 10500 |
| Tally Prime | 3 Months | 4000 |
| Web Development | 6 Months | 10000 |
Set CourseID as the primary key and save the table as
Courses.
Students may enroll in courses, and each course may have multiple students. A separate Enrollment table records these associations.
| Field Name | Data Type | Purpose |
|---|---|---|
| EnrollmentID | AutoNumber | Primary key |
| StudentID | Number (Long Integer) | Foreign key to Students |
| CourseID | Number (Long Integer) | Foreign key to Courses |
| EnrollmentDate | Date/Time | Date of enrollment |
If your institute permits only one course per student, you can use a simpler design. The separate Enrollment table is more flexible for a many-to-many relationship.
Create a table named FeePayments to store
individual payment transactions. This supports multiple
payments for the same enrollment.
| Field Name | Data Type | Purpose |
|---|---|---|
| PaymentID | AutoNumber | Primary key |
| EnrollmentID | Number (Long Integer) | Related enrollment |
| PaymentDate | Date/Time | Payment date |
| AmountPaid | Currency | Amount received |
| PaymentMethod | Short Text | Cash, bank transfer, etc. |
| ReceiptNumber | Short Text | Receipt reference |
Set PaymentID as the primary key. EnrollmentID should have the same underlying field size as the related EnrollmentID field in the Enrollment table.
Relationships connect the tables and help maintain consistent data.
Students.StudentID
|
| One-to-Many
v
Enrollment.StudentID
Courses.CourseID
|
| One-to-Many
v
Enrollment.CourseID
Enrollment.EnrollmentID
|
| One-to-Many
v
FeePayments.EnrollmentID
A form provides a user-friendly interface for entering and editing student records.
frmStudents.frmStudents — student details.frmCourses — course details.frmEnrollment — student course enrollment.frmFeePayments — fee payment entry.A combo box allows users to select a course by name while Access stores the corresponding CourseID.
frmEnrollment in Design View.A query can combine data from multiple related tables. The following example displays students and their courses.
SELECT
Students.StudentID,
Students.StudentName,
Courses.CourseName,
Enrollment.EnrollmentDate
FROM
(Students
INNER JOIN Enrollment
ON Students.StudentID = Enrollment.StudentID)
INNER JOIN Courses
ON Enrollment.CourseID = Courses.CourseID
ORDER BY
Students.StudentName;
qryStudentCourses.The query displays one row per enrollment. Students enrolled in multiple courses may appear in multiple rows.
This query calculates total payments for each enrollment.
SELECT
Enrollment.EnrollmentID,
Students.StudentName,
Courses.CourseName,
Sum(FeePayments.AmountPaid) AS TotalPaid
FROM
((Students
INNER JOIN Enrollment
ON Students.StudentID = Enrollment.StudentID)
INNER JOIN Courses
ON Enrollment.CourseID = Courses.CourseID)
LEFT JOIN FeePayments
ON Enrollment.EnrollmentID = FeePayments.EnrollmentID
GROUP BY
Enrollment.EnrollmentID,
Students.StudentName,
Courses.CourseName;
Save the query as qryFeeSummary.
Enrollments without payments can still appear with a
blank TotalPaid value. You can use
Nz(Sum(FeePayments.AmountPaid),0) in the
SELECT expression to display zero instead.
Reports present database information in a structured format suitable for printing or exporting.
rptStudentList.rptStudentList — all students.rptCourseEnrollment — students by course.rptFeeSummary — payments by enrollment.A main menu lets users navigate the application without opening tables and queries directly.
STUDENT MANAGEMENT SYSTEM
---------------------------------
[ Manage Students ]
[ Manage Courses ]
[ Enroll Students ]
[ Fee Payments ]
[ Student Reports ]
[ Fee Reports ]
[ Exit Application ]
frmMainMenu.frmMainMenu as the startup form through File → Options → Current Database.You can extend this project with additional features:
Add new tables and relationships carefully so that information remains consistent and unnecessary duplication is avoided.
1. Which table stores basic student details?
2. What is the purpose of the Enrollment table?
3. Which Access object is best suited for presenting formatted information for printing?