-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCourse.cs
More file actions
144 lines (122 loc) · 3.6 KB
/
Course.cs
File metadata and controls
144 lines (122 loc) · 3.6 KB
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
using MySql.Data.MySqlClient;
namespace GradeManagementSystem;
public class Course
{
public const string Table = "zma_course";
private int _crn;
public required int CRN
{
get => _crn;
set
{
if (_crn == value)
{
return;
}
_crn = value;
NeedsCommit = true;
}
}
private string _prefix;
public required string Prefix
{
get => _prefix;
set
{
if (_prefix == value)
{
return;
}
_prefix = value;
NeedsCommit = true;
}
}
private int _number;
public required int Number
{
get => _number;
set
{
if (_number == value)
{
return;
}
_number = value;
NeedsCommit = true;
}
}
private int _year;
public required int Year
{
get => _year;
set
{
if (_year == value)
{
return;
}
_year = value;
NeedsCommit = true;
}
}
private string _semester;
public required string Semester
{
get => _semester;
set
{
if (_semester == value)
{
return;
}
_semester = value;
NeedsCommit = true;
}
}
public bool NeedsCommit;
/// <summary>
/// Commits the current <see cref="GradeManagementSystem.Course" /> instance data to the database,
/// replacing the existing row if it exists.
/// </summary>
/// <returns>Boolean indicating if the commit was successful</returns>
public bool Commit()
{
if (!NeedsCommit)
{
return true;
}
MySqlCommand command = new($"""
INSERT INTO {Table} (crn, prefix, number, year, semester)
VALUES (@crn, @prefix, @number, @year, @semester)
ON DUPLICATE KEY UPDATE
prefix = VALUES(prefix),
number = VALUES(number),
year = VALUES(year),
semester = VALUES(semester);
""");
command.Parameters.AddWithValue("@crn", CRN);
command.Parameters.AddWithValue("@prefix", Prefix);
command.Parameters.AddWithValue("@number", Number);
command.Parameters.AddWithValue("@year", Year);
command.Parameters.AddWithValue("@semester", Semester);
if (!command.Execute())
{
return false;
}
NeedsCommit = false;
return true;
}
/// <summary>
/// Deletes the current <see cref="GradeManagementSystem.Course" /> instance
/// <see cref="GradeManagementSystem.Course.CRN" /> from the database if it exists.
/// Due to foreign key constraints, will only delete if no <see cref="GradeManagementSystem.Grade" /> instances
/// reference the <see cref="GradeManagementSystem.Course.CRN" /> in the database; this is intended behavior.
/// </summary>
/// <returns>Boolean indicating if the deletion was successful</returns>
public bool Delete()
{
MySqlCommand command = new($"DELETE FROM {Table} WHERE crn = @crn;");
command.Parameters.AddWithValue("@crn", CRN);
return command.Execute(displayExecutionErrors: false);
}
}