学生选课管理系统C#和MySQL
时间: 2025-01-04 10:31:57 浏览: 7
### 使用 C# 和 MySQL 构建学生选课管理系统
#### 数据库设计
为了实现一个高效的学生选课管理系统,首先需要合理设计数据库结构。通常情况下,该系统至少应包含三个主要表:
- `students` 表用于保存学生的个人信息;
- `courses` 表记录课程详情;
- `enrollments` 或者称为 `choose` 表用来关联学生和所选课程。
```sql
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
student_no CHAR(11) UNIQUE NOT NULL
);
CREATE TABLE courses (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
credits DECIMAL(3, 1)
);
CREATE TABLE enrollments (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id),
PRIMARY KEY(student_id, course_id)
);
```
#### 连接字符串配置
在应用程序中设置好连接到 MySQL 的字符串是非常重要的一步。可以将这些敏感信息放在应用的配置文件里以便管理和维护[^3]。
```xml
<connectionStrings>
<add name="MySqlContext"
connectionString="server=localhost;database=school_db;uid=root;pwd=password;"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
```
#### 实体类定义
通过 Entity Framework Core 可以轻松映射实体对象至对应的数据库表。以下是简化版的模型类表示法。
```csharp
public class Student {
public int Id { get; set; }
public string Name { get; set; } = null!;
public string StudentNo { get; set; } = null!;
public ICollection<Course> Courses { get; private set; } = new List<Course>();
}
public class Course {
public int Id { get; set; }
public string Title { get; set; } = null!;
public decimal Credits { get; set; }
public ICollection<Student> Students { get; private set; } = new List<Student>();
}
```
#### CRUD 操作方法
下面展示了一些基本的操作函数样例,比如查询特定学号的学生已选修了多少门课程。
```csharp
using MySql.Data.MySqlClient;
// ...
private static void GetCourseCountByStudent(string studentNumber){
using var connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["MySqlContext"].ConnectionString);
string query = "SELECT COUNT(*) FROM enrollments e JOIN students s ON e.student_id = s.id WHERE s.student_no=@studentNo";
MySqlCommand command = new(query, connection);
command.Parameters.AddWithValue("@studentNo", studentNumber);
try{
connection.Open();
object result = command.ExecuteScalar();
Console.WriteLine($"The number of selected courses by the student with No.{studentNumber} is {(int?)result ?? 0}");
} catch(Exception ex){
throw new Exception("Error occurred while fetching data.", ex);
}
}
```
上述代码片段展示了如何利用 ADO.NET 执行 SQL 查询并处理返回的结果集。当然,在实际项目开发过程中推荐采用更高级别的 ORM 工具如 Dapper 或 EFCore 来简化数据访问层的工作量以及增强程序的安全性和可读性[^1]。
阅读全文