Loading...

Project: Student Management System

You’ve learned variables, loops, methods, classes, lists, and even inheritance.
Now imagine you’re running a small school: students join, update their details, and occasionally you need to search their record or print a list.

Doing this manually is error-prone. This is exactly the kind of job a program can handle beautifully.

In this final lesson, you’ll bring everything together to build a Student Management System, and learn how to write code that’s not just working, but clean and maintainable.

The Project: Student Management System

Your app will:

  • Add new students
  • Show all students
  • Search by name
  • Save students to a file
  • Load students from a file
  • Handle invalid input gracefully

You’ll also see how AI can help you debug and extend the system.

Designing the Student Class

We start with a simple model of a student:

  • Name
  • Age
  • Grade
csharp
23 lines
|
103/ 500 tokens
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Student
{
    public string Name;
    public int Age;
    public int Grade;

    public Student(string name, int age, int grade)
    {
        Name = name;
        Age = age;
        Grade = grade;
    }

    public override string ToString()
    {
        return $"{Name},{Age},{Grade}";
    }

    public void Show()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}, Grade: {Grade}");
    }
}
Code Tools

This class is your building block.

Storing Students with List<T>

Instead of many separate variables, you’ll store all students in a list:

csharp
1 lines
|
12/ 500 tokens
1
List<Student> students = new List<Student>();
Code Tools

You can then add, iterate, search, and remove easily using list methods.

File Saving & Loading (Simple Text Format)

To save students:

  • Convert each student to a string (e.g. Name,Age,Grade)
  • Write each line to a file

To load students:

  • Read each line
  • Split it by commas
  • Recreate Student objects

This gives your program a “memory” even after it closes.

Input Validation & Error Handling

Users will always type something unexpected.
To avoid crashes:

  • Use int.TryParse() instead of Convert.ToInt32()
  • Check if input is empty before using it
  • Wrap risky operations in try { } catch { }

This makes your app feel more professional and reliable.

Modular Structure: Split Work into Methods

Instead of writing everything inside Main(), you’ll create helper methods:

  • AddStudent()
  • ShowStudents()
  • SearchStudent()
  • SaveToFile()
  • LoadFromFile()

This keeps your code organized and easier to maintain.

Full Mini-Application: Student Management System

csharp
180 lines
|
1146/ 500 tokens
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
using System;
using System.Collections.Generic;
using System.IO;

class Student
{
    public string Name;
    public int Age;
    public int Grade;

    public Student(string name, int age, int grade)
    {
        Name = name;
        Age = age;
        Grade = grade;
    }

    public override string ToString()
    {
        return $"{Name},{Age},{Grade}";
    }

    public void Show()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}, Grade: {Grade}");
    }
}

class Program
{
    static List<Student> students = new List<Student>();
    const string FileName = "students.txt";

    static void Main()
    {
        LoadFromFile();

        while (true)
        {
            Console.WriteLine("\n========================");
            Console.WriteLine("   STUDENT MANAGEMENT");
            Console.WriteLine("========================");
            Console.WriteLine("1. Add Student");
            Console.WriteLine("2. Show All Students");
            Console.WriteLine("3. Search Student");
            Console.WriteLine("4. Save to File");
            Console.WriteLine("5. Exit");
            Console.Write("Choose an option: ");

            string input = Console.ReadLine();
            Console.WriteLine();

            if (!int.TryParse(input, out int choice))
            {
                Console.WriteLine("Invalid choice. Please enter a number.");
                continue;
            }

            if (choice == 1)
                AddStudent();
            else if (choice == 2)
                ShowStudents();
            else if (choice == 3)
                SearchStudent();
            else if (choice == 4)
                SaveToFile();
            else if (choice == 5)
            {
                SaveToFile();
                Console.WriteLine("Goodbye!");
                break;
            }
            else
                Console.WriteLine("Invalid choice. Try again.");
        }
    }

    static void AddStudent()
    {
        Console.Write("Enter name: ");
        string name = Console.ReadLine();

        Console.Write("Enter age: ");
        if (!int.TryParse(Console.ReadLine(), out int age))
        {
            Console.WriteLine("Invalid age. Student not added.");
            return;
        }

        Console.Write("Enter grade: ");
        if (!int.TryParse(Console.ReadLine(), out int grade))
        {
            Console.WriteLine("Invalid grade. Student not added.");
            return;
        }

        students.Add(new Student(name, age, grade));
        Console.WriteLine("Student added successfully.");
    }

    static void ShowStudents()
    {
        if (students.Count == 0)
        {
            Console.WriteLine("No students found.");
            return;
        }

        Console.WriteLine("Student List:");
        foreach (var s in students)
        {
            s.Show();
        }
    }

    static void SearchStudent()
    {
        Console.Write("Enter name to search: ");
        string name = Console.ReadLine();

        bool found = false;
        foreach (var s in students)
        {
            if (s.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
            {
                Console.WriteLine("Student found:");
                s.Show();
                found = true;
                break;
            }
        }

        if (!found)
            Console.WriteLine("Student not found.");
    }

    static void SaveToFile()
    {
        try
        {
            using (StreamWriter writer = new StreamWriter(FileName))
            {
                foreach (var s in students)
                {
                    writer.WriteLine(s.ToString());
                }
            }
            Console.WriteLine("Students saved to file.");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error saving to file: " + ex.Message);
        }
    }

    static void LoadFromFile()
    {
        if (!File.Exists(FileName))
            return;

        try
        {
            string[] lines = File.ReadAllLines(FileName);
            foreach (var line in lines)
            {
                var parts = line.Split(',');
                if (parts.Length == 3 &&
                    int.TryParse(parts[1], out int age) &&
                    int.TryParse(parts[2], out int grade))
                {
                    students.Add(new Student(parts[0], age, grade));
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error loading from file: " + ex.Message);
        }
    }
}
Code Tools

Run this in the DevsCall AI Online Runner and you’ve got a real, usable console app.

Learn Together with AI

You can use AI as your coding partner:

  • “Explain how LoadFromFile() works line by line.”
  • “Refactor this into multiple files: Student.cs and Program.cs.”
  • “Add an Update Student option to the menu.”
  • “Convert this to use JSON instead of comma-separated values.”

AI can help you debug, refactor, and extend your project like a senior teammate.

Clean Coding Practices

  • Use meaningful names for variables, methods, and classes
  • Keep functions small and focused on one task
  • Avoid duplicating logic — reuse methods where possible
  • Validate all user input
  • Handle file and conversion errors safely
  • Group related code together (e.g., student logic inside the Student class)
  • Add comments only where something is non-obvious
  • Test each menu option after changes

Practice Time

Extend the Student Management System by adding:

  • Update an existing student’s info
  • Delete a student
  • List students filtered by grade
  • Sort students by name or age

Use AI to help when you get stuck — but always try first yourself.

Wrap Up

You’ve gone from printing “Hello, World!” to building a full Student Management System with:

  • Classes and objects
  • Lists and collections
  • File saving and loading
  • Input validation
  • Error handling
  • Modular structure

You’re no longer just “trying coding”, you’re building software.

If you want, next we can:

  • Turn this into a GUI app
  • Design a final quiz for the whole C# course
  • Draft course meta + landing page copy for this C# track

Frequently Asked Questions

To build a complete Student Management System that uses classes, lists, file handling, and modular code, bringing together everything learned so far.

File saving allows the program to remember students even after the application closes, making your system more practical and real-world ready.

This lesson uses a simple text format (CSV-like), but you can extend it to JSON or XML in more advanced versions.

Lists grow and shrink dynamically, making them perfect for adding or removing students at runtime.

Yes! You can add editing, sorting, deleting, exporting, or even turn it into a GUI or web application.

Absolutely. Completing this system demonstrates fundamentals of OOP, data handling, coding structure, and real application design.

Still have questions?Contact our support team