مدیریت مدرسه یکی از حوزههای مهم در سیستمهای آموزشی است که نیاز به سازماندهی، نظارت و کنترل دقیق دارد. با استفاده از زبان برنامهنویسی #C، میتوان سیستمهای مدیریت مدرسه را طراحی و پیادهسازی کرد. در این مقاله از سری مقالات مجله پی استور به بررسی نحوه استفاده از #C برای ایجاد یک سیستم مدیریت مدرسه ساده میپردازیم که بیشتر برای دانشجویان، دانشآموزان و علاقهمندان به برنامهنویسی مناسب است.
مقدمه
زبان برنامهنویسی #C (سیشارپ) یکی از زبانهای قدرتمند و پرکاربرد در توسعه نرمافزارهای تحت ویندوز و وب است. این زبان به دلیل سادگی، انعطافپذیری و پشتیبانی از مفاهیم شیءگرایی، گزینه مناسبی برای پیادهسازی سیستمهای مدیریتی مانند مدیریت مدرسه است. در این مقاله، یک سیستم مدیریت مدرسه ساده را با استفاده از #C طراحی میکنیم. این سیستم شامل بخشهایی مانند مدیریت دانشآموزان، معلمان، دروس و نمرات خواهد بود.
طراحی سیستم مدیریت مدرسه
برای طراحی یک سیستم مدیریت مدرسه با زبان برنامهنویسی #C ابتدا بایستی مفاهیم مرتبط با این سیستم را تعریف کنیم سپس هر یک از قسمت ها را باتوجه به نیاز برنامه نویسی و توسعه دهیم. در این مقاله با مفاهیم اولیه برای شروع، آشنا خواهیم شد.
۱- تعریف کلاسها
در برنامهنویسی شیءگرا، کلاسها نقش اصلی را ایفا میکنند. برای سیستم مدیریت مدرسه با زبان برنامهنویسی #C، کلاسهای زیر را تعریف میکنیم:
- Student: برای مدیریت اطلاعات دانشآموزان
- Teacher: برای مدیریت اطلاعات معلمان
- Course: برای مدیریت اطلاعات دروس
- Grade: برای مدیریت نمرات دانشآموزان
۲- پیادهسازی کلاسها
هر یک از کلاس های معرفی شده در بالا را بصورت کامل در زبان برنامه نویسی سی شارپ به صورت زیر کدنویسی می کنیم.
کلاس Student
public class Student { public int StudentId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } public Student(int studentId, string firstName, string lastName, DateTime dateOfBirth) { StudentId = studentId; FirstName = firstName; LastName = lastName; DateOfBirth = dateOfBirth; } public override string ToString() { return $"{StudentId}: {FirstName} {LastName} ({DateOfBirth.ToShortDateString()})"; } }
کلاس Teacher
public class Teacher { public int TeacherId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Subject { get; set; } public Teacher(int teacherId, string firstName, string lastName, string subject) { TeacherId = teacherId; FirstName = firstName; LastName = lastName; Subject = subject; } public override string ToString() { return $"{TeacherId}: {FirstName} {LastName} ({Subject})"; } }
کلاس Course
public class Course { public int CourseId { get; set; } public string CourseName { get; set; } public Teacher Teacher { get; set; } public Course(int courseId, string courseName, Teacher teacher) { CourseId = courseId; CourseName = courseName; Teacher = teacher; } public override string ToString() { return $"{CourseId}: {CourseName} (Taught by {Teacher.FirstName} {Teacher.LastName})"; } }
کلاس Grade
public class Grade { public int GradeId { get; set; } public Student Student { get; set; } public Course Course { get; set; } public double Score { get; set; } public Grade(int gradeId, Student student, Course course, double score) { GradeId = gradeId; Student = student; Course = course; Score = score; } public override string ToString() { return $"{GradeId}: {Student.FirstName} {Student.LastName} - {Course.CourseName} ({Score})"; } }
۳- مدیریت دادهها
برای مدیریت دادهها، از لیستها (List) استفاده میکنیم. این لیستها به ما امکان ذخیره و بازیابی اطلاعات دانشآموزان، معلمان، دروس و نمرات را میدهند.
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { List<Student> students = new List<Student>(); List<Teacher> teachers = new List<Teacher>(); List<Course> courses = new List<Course>(); List<Grade> grades = new List<Grade>(); // افزودن نمونههای اولیه Student student1 = new Student(1, "Ali", "Rezaei", new DateTime(2005, 5, 10)); students.Add(student1); Teacher teacher1 = new Teacher(1, "Mohammad", "Ahmadi", "Mathematics"); teachers.Add(teacher1); Course course1 = new Course(1, "Math 101", teacher1); courses.Add(course1); Grade grade1 = new Grade(1, student1, course1, 18.5); grades.Add(grade1); // نمایش اطلاعات Console.WriteLine("Students:"); foreach (var student in students) { Console.WriteLine(student); } Console.WriteLine("\nTeachers:"); foreach (var teacher in teachers) { Console.WriteLine(teacher); } Console.WriteLine("\nCourses:"); foreach (var course in courses) { Console.WriteLine(course); } Console.WriteLine("\nGrades:"); foreach (var grade in grades) { Console.WriteLine(grade); } } }
۴- افزودن قابلیتهای بیشتر
برای بهبود سیستم مدیریت مدرسه، میتوان قابلیتهای زیر را اضافه کرد:
- جستجو و فیلتر: امکان جستجوی دانشآموزان، معلمان و دروس بر اساس معیارهای مختلف.
- ویرایش و حذف: امکان ویرایش و حذف اطلاعات موجود.
- ذخیره و بازیابی دادهها: استفاده از فایلها یا پایگاه داده برای ذخیره و بازیابی اطلاعات.
در این بخش، به توضیح و پیادهسازی قابلیتهای پیشرفتهتری برای سیستم مدیریت مدرسه با زبان برنامهنویسی #C میپردازیم. این قابلیتها شامل جستجو و فیلتر، ویرایش و حذف اطلاعات، و ذخیره و بازیابی دادهها میشوند. هر یک از این قابلیتها به بهبود کارایی و کاربردیتر شدن سیستم کمک میکنند.
جستجو و فیلتر
جستجو و فیلتر کردن دادهها یکی از قابلیتهای ضروری در هر سیستم مدیریتی است. این قابلیت به کاربران امکان میدهد تا اطلاعات مورد نظر خود را به سرعت پیدا کنند.
برای پیادهسازی این قابلیت، از متدهای LINQ در #C استفاده میکنیم. LINQ یک ابزار قدرتمند برای کار با مجموعههای داده است.
مثال: جستجوی دانشآموزان بر اساس نام
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { List<Student> students = new List<Student> { new Student(1, "Ali", "Rezaei", new DateTime(2005, 5, 10)), new Student(2, "Maryam", "Hosseini", new DateTime(2006, 3, 15)), new Student(3, "Reza", "Alavi", new DateTime(2005, 7, 20)) }; // جستجوی دانشآموزان بر اساس نام Console.WriteLine("Enter student name to search:"); string searchName = Console.ReadLine(); var result = students.Where(s => s.FirstName.Contains(searchName, StringComparison.OrdinalIgnoreCase) || s.LastName.Contains(searchName, StringComparison.OrdinalIgnoreCase)).ToList(); if (result.Any()) { Console.WriteLine("Search Results:"); foreach (var student in result) { Console.WriteLine(student); } } else { Console.WriteLine("No students found."); } } }
- از متد
Where
برای فیلتر کردن لیست دانشآموزان استفاده میشود. StringComparison.OrdinalIgnoreCase
باعث میشود جستجو به بزرگی و کوچکی حروف حساس نباشد.- اگر نتیجهای یافت شود، اطلاعات دانشآموزان نمایش داده میشود؛ در غیر این صورت، پیام مناسبی نمایش داده میشود.
ویرایش و حذف اطلاعات
ویرایش و حذف اطلاعات از دیگر قابلیتهای مهم در سیستمهای مدیریتی است. این قابلیت به کاربران امکان میدهد تا اطلاعات موجود را بهروزرسانی یا حذف کنند.
مثال: ویرایش اطلاعات دانشآموز
static void EditStudent(List<Student> students) { Console.WriteLine("Enter student ID to edit:"); int id = int.Parse(Console.ReadLine()); var student = students.FirstOrDefault(s => s.StudentId == id); if (student != null) { Console.WriteLine("Enter new first name:"); student.FirstName = Console.ReadLine(); Console.WriteLine("Enter new last name:"); student.LastName = Console.ReadLine(); Console.WriteLine("Student information updated successfully."); } else { Console.WriteLine("Student not found."); } }
مثال: حذف دانشآموز
static void DeleteStudent(List<Student> students) { Console.WriteLine("Enter student ID to delete:"); int id = int.Parse(Console.ReadLine()); var student = students.FirstOrDefault(s => s.StudentId == id); if (student != null) { students.Remove(student); Console.WriteLine("Student deleted successfully."); } else { Console.WriteLine("Student not found."); } }
- از متد
FirstOrDefault
برای پیدا کردن دانشآموز بر اساس شناسه (ID) استفاده میشود. - اگر دانشآموز پیدا شود، اطلاعات آن ویرایش یا حذف میشود.
- در غیر این صورت، پیام مناسبی نمایش داده میشود.
ذخیره و بازیابی دادهها
برای ذخیرهسازی دادهها به صورت دائمی، میتوان از فایلها یا پایگاهداده استفاده کرد. در این بخش، از فایلهای متنی برای ذخیره و بازیابی دادهها استفاده میکنیم.
مثال: ذخیره اطلاعات دانشآموزان در فایل
static void SaveStudentsToFile(List<Student> students, string filePath) { using (StreamWriter writer = new StreamWriter(filePath)) { foreach (var student in students) { writer.WriteLine($"{student.StudentId},{student.FirstName},{student.LastName},{student.DateOfBirth:yyyy-MM-dd}"); } } Console.WriteLine("Students saved to file successfully."); }
مثال: بازیابی اطلاعات دانشآموزان از فایل
static List<Student> LoadStudentsFromFile(string filePath) { List<Student> students = new List<Student>(); if (File.Exists(filePath)) { using (StreamReader reader = new StreamReader(filePath)) { string line; while ((line = reader.ReadLine()) != null) { string[] parts = line.Split(','); int studentId = int.Parse(parts[0]); string firstName = parts[1]; string lastName = parts[2]; DateTime dateOfBirth = DateTime.Parse(parts[3]); students.Add(new Student(studentId, firstName, lastName, dateOfBirth)); } } Console.WriteLine("Students loaded from file successfully."); } else { Console.WriteLine("File not found."); } return students; }
- دادهها در قالب CSV (مقادیر جدا شده با کاما) ذخیره میشوند.
- هر خط فایل شامل اطلاعات یک دانشآموز است.
- هنگام بارگذاری، دادهها از فایل خوانده شده و به لیست دانشآموزان اضافه میشوند.
با افزودن قابلیتهای جستجو و فیلتر، ویرایش و حذف اطلاعات، و ذخیره و بازیابی دادهها، سیستم مدیریت مدرسه به یک نرمافزار کاربردی و کامل تبدیل میشود. این قابلیتها به کاربران امکان میدهند تا دادهها را به راحتی مدیریت کنند و از سیستم به طور موثرتری استفاده نمایند.
این پیادهسازیها را میتوان برای سایر موجودیتهای سیستم (مانند معلمان، دروس و نمرات) نیز گسترش داد. با استفاده از این مفاهیم، میتوان سیستمهای مدیریتی پیچیدهتری را طراحی و پیادهسازی کرد.
۵- استفاده از پایگاه داده
برای ذخیرهسازی دائمی دادهها و افزایش قابلیت اطمینان سیستم، استفاده از پایگاه داده ضروری است. در این بخش، نحوه اتصال سیستم مدیریت مدرسه به یک پایگاه داده (مانند SQL Server) با دو روش Entity Framework (یک ORM مدرن) و ADO.NET (یک کتابخانه قدیمیتر برای کار مستقیم با پایگاه داده) را توضیح میدهیم.
۱. استفاده از Entity Framework
Entity Framework (EF) یک چارچوب ORM (Object-Relational Mapping) است که ارتباط بین کلاسهای #C و جداول پایگاه داده را ساده میکند. برای شروع، مراحل زیر را دنبال کنید:
در پروژه #C خود، از طریق NuGet پکیج زیر را نصب کنید:
Install-Package EntityFramework
ایجاد مدلها و DbContext
- کلاسهای
Student
،Teacher
،Course
وGrade
را به عنوان مدلهای پایگاه داده تعریف کنید. - یک کلاس
DbContext
برای مدیریت اتصال و عملیات پایگاه داده ایجاد کنید:
using System.Data.Entity; public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Teacher> Teachers { get; set; } public DbSet<Course> Courses { get; set; } public DbSet<Grade> Grades { get; set; } public SchoolContext() : base("name=SchoolDBConnectionString") { } }
تنظیم Connection String
- در فایل
App.config
، رشته اتصال (Connection String) به پایگاه داده SQL Server را اضافه کنید:
<configuration> <connectionStrings> <add name="SchoolDBConnectionString" connectionString="Server=.;Database=SchoolDB;Integrated Security=True;" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
افزودن دانشآموز جدید:
using (var context = new SchoolContext()) { var student = new Student(1, "Ali", "Rezaei", new DateTime(2005, 5, 10)); context.Students.Add(student); context.SaveChanges(); }
بازیابی دانشآموزان:
using (var context = new SchoolContext()) { var students = context.Students.ToList(); foreach (var student in students) { Console.WriteLine(student); } }
ویرایش دانشآموز:
using (var context = new SchoolContext()) { var student = context.Students.Find(1); // جستجو بر اساس ID if (student != null) { student.FirstName = "NewName"; context.SaveChanges(); } }
حذف دانشآموز:
using (var context = new SchoolContext()) { var student = context.Students.Find(1); if (student != null) { context.Students.Remove(student); context.SaveChanges(); } }
۲. استفاده از ADO.NET
ADO.NET یک کتابخانه سطح پایینتر برای ارتباط مستقیم با پایگاه داده است. این روش نیازمند نوشتن دستورات SQL به صورت دستی است.
افزودن دانشآموز جدید:
using (SqlConnection connection = new SqlConnection("Server=.;Database=SchoolDB;Integrated Security=True;")) { connection.Open(); string query = "INSERT INTO Students (StudentId, FirstName, LastName, DateOfBirth) VALUES (@Id, @FirstName, @LastName, @DOB)"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Id", 1); command.Parameters.AddWithValue("@FirstName", "Ali"); command.Parameters.AddWithValue("@LastName", "Rezaei"); command.Parameters.AddWithValue("@DOB", new DateTime(2005, 5, 10)); command.ExecuteNonQuery(); } }
بازیابی دانشآموزان:
using (SqlConnection connection = new SqlConnection("Server=.;Database=SchoolDB;Integrated Security=True;")) { connection.Open(); string query = "SELECT * FROM Students"; using (SqlCommand command = new SqlCommand(query, connection)) { SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine($"ID: {reader["StudentId"]}, Name: {reader["FirstName"]} {reader["LastName"]}"); } } }
ویرایش دانشآموز:
string query = "UPDATE Students SET FirstName = @FirstName WHERE StudentId = @Id"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@FirstName", "NewName"); command.Parameters.AddWithValue("@Id", 1); command.ExecuteNonQuery(); }
حذف دانشآموز:
string query = "DELETE FROM Students WHERE StudentId = @Id"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Id", 1); command.ExecuteNonQuery(); }
۳. مقایسه Entity Framework و ADO.NET
معیار | Entity Framework | ADO.NET |
سطح انتزاع | بالا (نیاز به نوشتن SQL کمتر) | پایین (نیاز به نوشتن SQL دستی) |
سرعت توسعه | سریعتر | کندتر |
کنترل روی کوئریها | محدود (اما قابل تنظیم با LINQ یا Raw SQL) | کامل |
پیچیدگی | مناسب برای پروژههای متوسط و بزرگ | مناسب برای سیستمهای ساده یا خاص |
۴. ایجاد جداول در SQL Server
برای اجرای کدهای بالا، ابتدا باید جداول را در پایگاه داده ایجاد کنید.
مثال برای جدول Students:
CREATE TABLE Students ( StudentId INT PRIMARY KEY, FirstName NVARCHAR(50), LastName NVARCHAR(50), DateOfBirth DATE );
با استفاده از Entity Framework یا ADO.NET، میتوانید دادههای سیستم مدیریت مدرسه را در یک پایگاه داده SQL Server ذخیره و مدیریت کنید. بصورت کلی می توان گفت:
- Entity Framework برای توسعه سریعتر و کاهش کدنویسی تکراری مناسب است.
- ADO.NET برای توسعهدهندگانی که نیاز به کنترل کامل روی کوئریها دارند، گزینه بهتری است.
این پیادهسازیها را میتوان برای سایر موجودیتها (معلمان، دروس، نمرات) نیز گسترش داد. با تسلط بر این مفاهیم، قادر خواهید بود سیستمهای مدیریتی حرفهای و مقیاسپذیر ایجاد کنید!
نتیجهگیری
در این مقاله، یک سیستم مدیریت مدرسه با زبان برنامهنویسی #C طراحی و پیادهسازی شد. این سیستم شامل مدیریت دانشآموزان، معلمان، دروس و نمرات بود. با استفاده از مفاهیم شیءگرایی و لیستها، توانستیم یک سیستم پایه ایجاد کنیم که قابلیت گسترش و بهبود دارد.
این پروژه میتواند به عنوان نقطه شروعی برای دانشجویان و دانشآموزان علاقهمند به برنامهنویسی باشد تا با مفاهیم پایهای برنامهنویسی شیءگرا و مدیریت دادهها آشنا شوند. با افزودن قابلیتهای بیشتر و استفاده از پایگاه داده، میتوان این سیستم را به یک نرمافزار کامل مدیریت مدرسه تبدیل کرد. امیدواریم این مقاله برای شما مفید بوده باشد و بتوانید از آن به عنوان مرجعی برای یادگیری و توسعه پروژههای خود استفاده کنید.