12.2(2)
继续完成cs项目
namespace StudentGradeManagementSystem;
public partial class GradeManagementForm : Form
{
private DataGridView dgvGrades; // 成绩列表DataGridView
private TextBox txtGradeID, txtScore; // 成绩信息输入框
private ComboBox cmbStudent, cmbCourse; // 学生和课程下拉框
private DateTimePicker dtpExamDate; // 考试日期选择器
private Button btnAdd, btnUpdate, btnDelete, btnClear, btnSearch; // 功能按钮
private TextBox txtSearch; // 搜索框
public GradeManagementForm()
{
// 设置窗口标题和大小
this.Text = "成绩管理";
this.Size = new Size(800, 600);
this.StartPosition = FormStartPosition.CenterScreen;
// 创建界面控件
CreateGradeManagementControls();
// 加载成绩数据
LoadGradeData();
// 填充学生下拉框
PopulateStudentComboBox();
}
private void CreateGradeManagementControls()
{
// 创建标题标签
Label titleLabel = new Label();
titleLabel.Text = "学生成绩管理";
titleLabel.Font = new Font("宋体", 16, FontStyle.Bold);
titleLabel.Location = new Point(300, 10);
titleLabel.AutoSize = true;
// 创建搜索部分
Panel searchPanel = new Panel();
searchPanel.Location = new Point(10, 50);
searchPanel.Size = new Size(760, 40);
searchPanel.BorderStyle = BorderStyle.FixedSingle;
Label searchLabel = new Label();
searchLabel.Text = "搜索:";
searchLabel.Location = new Point(10, 10);
searchPanel.Controls.Add(searchLabel);
txtSearch = new TextBox();
txtSearch.Location = new Point(60, 7);
txtSearch.Width = 200;
searchPanel.Controls.Add(txtSearch);
btnSearch = new Button();
btnSearch.Text = "查找";
btnSearch.Location = new Point(270, 7);
btnSearch.Click += new EventHandler(btnSearch_Click);
searchPanel.Controls.Add(btnSearch);
// 创建成绩列表DataGridView
dgvGrades = new DataGridView();
dgvGrades.Location = new Point(10, 100);
dgvGrades.Size = new Size(760, 250);
dgvGrades.AutoGenerateColumns = false;
dgvGrades.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgvGrades.MultiSelect = false;
dgvGrades.ReadOnly = true;
dgvGrades.SelectionChanged += new EventHandler(dgvGrades_SelectionChanged);
// 添加列
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "GradeID", HeaderText = "成绩ID", Width = 80 });
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "StudentID", HeaderText = "学号", Width = 80 });
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "StudentName", HeaderText = "学生姓名", Width = 100 });
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "CourseName", HeaderText = "课程名称", Width = 120 });
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Score", HeaderText = "成绩", Width = 80 });
dgvGrades.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "ExamDate", HeaderText = "考试日期", Width = 120 });
// 创建成绩信息输入面板
Panel inputPanel = new Panel();
inputPanel.Location = new Point(10, 360);
inputPanel.Size = new Size(760, 180);
inputPanel.BorderStyle = BorderStyle.FixedSingle;
// 添加标签和输入控件
int labelWidth = 100;
int inputWidth = 200;
int rowHeight = 35;
int startX = 20;
int startY = 15;
// 成绩ID
Label lblGradeID = new Label();
lblGradeID.Text = "成绩ID:";
lblGradeID.Location = new Point(startX, startY);
lblGradeID.Width = labelWidth;
inputPanel.Controls.Add(lblGradeID);
txtGradeID = new TextBox();
txtGradeID.Location = new Point(startX + labelWidth + 10, startY - 2);
txtGradeID.Width = inputWidth;
txtGradeID.Enabled = false; // 成绩ID自动生成
inputPanel.Controls.Add(txtGradeID);
// 学生选择
Label lblStudent = new Label();
lblStudent.Text = "选择学生:";
lblStudent.Location = new Point(startX + 350, startY);
lblStudent.Width = labelWidth;
inputPanel.Controls.Add(lblStudent);
cmbStudent = new ComboBox();
cmbStudent.Location = new Point(startX + 460, startY - 2);
cmbStudent.Width = inputWidth;
inputPanel.Controls.Add(cmbStudent);
// 课程名称
Label lblCourse = new Label();
lblCourse.Text = "课程名称:";
lblCourse.Location = new Point(startX, startY + rowHeight);
lblCourse.Width = labelWidth;
inputPanel.Controls.Add(lblCourse);
cmbCourse = new ComboBox();
cmbCourse.Location = new Point(startX + labelWidth + 10, startY + rowHeight - 2);
cmbCourse.Width = inputWidth;
cmbCourse.Items.AddRange(new string[] { "数学", "语文", "英语", "物理", "化学", "生物", "历史", "地理", "政治" });
inputPanel.Controls.Add(cmbCourse);
// 考试日期
Label lblExamDate = new Label();
lblExamDate.Text = "考试日期:";
lblExamDate.Location = new Point(startX + 350, startY + rowHeight);
lblExamDate.Width = labelWidth;
inputPanel.Controls.Add(lblExamDate);
dtpExamDate = new DateTimePicker();
dtpExamDate.Location = new Point(startX + 460, startY + rowHeight - 2);
dtpExamDate.Width = inputWidth;
inputPanel.Controls.Add(dtpExamDate);
// 成绩
Label lblScore = new Label();
lblScore.Text = "成 绩:";
lblScore.Location = new Point(startX, startY + rowHeight * 2);
lblScore.Width = labelWidth;
inputPanel.Controls.Add(lblScore);
txtScore = new TextBox();
txtScore.Location = new Point(startX + labelWidth + 10, startY + rowHeight * 2 - 2);
txtScore.Width = inputWidth;
inputPanel.Controls.Add(txtScore);
// 创建按钮面板
Panel buttonPanel = new Panel();
buttonPanel.Location = new Point(530, 550);
buttonPanel.Size = new Size(240, 40);
// 添加按钮
btnAdd = new Button();
btnAdd.Text = "添加";
btnAdd.Location = new Point(0, 0);
btnAdd.Click += new EventHandler(btnAdd_Click);
buttonPanel.Controls.Add(btnAdd);
btnUpdate = new Button();
btnUpdate.Text = "更新";
btnUpdate.Location = new Point(60, 0);
btnUpdate.Click += new EventHandler(btnUpdate_Click);
buttonPanel.Controls.Add(btnUpdate);
btnDelete = new Button();
btnDelete.Text = "删除";
btnDelete.Location = new Point(120, 0);
btnDelete.Click += new EventHandler(btnDelete_Click);
buttonPanel.Controls.Add(btnDelete);
btnClear = new Button();
btnClear.Text = "清空";
btnClear.Location = new Point(180, 0);
btnClear.Click += new EventHandler(btnClear_Click);
buttonPanel.Controls.Add(btnClear);
// 添加所有控件到表单
this.Controls.Add(titleLabel);
this.Controls.Add(searchPanel);
this.Controls.Add(dgvGrades);
this.Controls.Add(inputPanel);
this.Controls.Add(buttonPanel);
}
// 填充学生下拉框
private void PopulateStudentComboBox()
{
cmbStudent.DisplayMember = "Name";
cmbStudent.ValueMember = "StudentID";
cmbStudent.DataSource = DataManager.Students;
}
// 加载成绩数据到DataGridView
private void LoadGradeData()
{
dgvGrades.DataSource = null;
dgvGrades.DataSource = DataManager.Grades;
}
// 清空输入框
private void ClearInputs()
{
txtGradeID.Text = "自动生成";
txtScore.Text = "";
cmbStudent.SelectedIndex = -1;
cmbCourse.SelectedIndex = -1;
dtpExamDate.Value = DateTime.Now;
}
// 添加成绩
private void btnAdd_Click(object sender, EventArgs e)
{
// 验证输入
if (cmbStudent.SelectedItem == null || cmbCourse.SelectedItem == null || string.IsNullOrEmpty(txtScore.Text))
{
MessageBox.Show("请填写完整的成绩信息!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 验证成绩格式
if (!decimal.TryParse(txtScore.Text, out decimal score) || score < 0 || score > 100)
{
MessageBox.Show("成绩必须是0-100之间的数字!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 获取选中的学生并进行空值检查
if (cmbStudent.SelectedItem is Student selectedStudent && cmbCourse.SelectedItem is string courseNameObj)
{
string courseName = courseNameObj;
// 检查是否已存在相同的成绩记录
var existingGrade = DataManager.Grades.FirstOrDefault(g => g.StudentID == selectedStudent.StudentID && g.CourseName == courseName);
if (existingGrade != null)
{
DialogResult result = MessageBox.Show("该学生已有此课程的成绩记录,是否更新?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// 更新现有成绩
existingGrade.Score = score;
existingGrade.ExamDate = dtpExamDate.Value;
LoadGradeData();
ClearInputs();
// 显示成功消息
using (SuccessForm successForm = new SuccessForm())
{
successForm.ShowDialog();
}
}
return;
}
// 生成新的成绩ID
int newGradeID = DataManager.Grades.Count > 0 ? DataManager.Grades.Max(g => g.GradeID) + 1 : 1;
// 添加新成绩
Grade newGrade = new Grade
{
GradeID = newGradeID,
StudentID = selectedStudent.StudentID,
StudentName = selectedStudent.Name ?? "",
CourseName = courseName,
Score = score,
ExamDate = dtpExamDate.Value
};
DataManager.Grades.Add(newGrade);
LoadGradeData(); // 重新加载数据
ClearInputs(); // 清空输入框
// 显示成功消息
using (SuccessForm successForm = new SuccessForm())
{
successForm.ShowDialog();
}
}
}
// 更新成绩
private void btnUpdate_Click(object sender, EventArgs e)
{
if (dgvGrades.SelectedRows.Count == 0)
{
MessageBox.Show("请先选择要更新的成绩记录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
// 验证成绩格式
if (!decimal.TryParse(txtScore.Text, out decimal score) || score < 0 || score > 100)
{
MessageBox.Show("成绩必须是0-100之间的数字!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 获取选中的成绩记录并进行空值检查
if (dgvGrades.SelectedRows[0].DataBoundItem is Grade selectedGrade)
{
// 更新成绩信息
selectedGrade.Score = score;
selectedGrade.ExamDate = dtpExamDate.Value;
LoadGradeData(); // 重新加载数据
ClearInputs(); // 清空输入框
// 显示成功消息
using (SuccessForm successForm = new SuccessForm())
{
successForm.ShowDialog();
}
}
}
// 删除成绩
private void btnDelete_Click(object sender, EventArgs e)
{
if (dgvGrades.SelectedRows.Count == 0)
{
MessageBox.Show("请先选择要删除的成绩记录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
// 确认删除
DialogResult result = MessageBox.Show("确定要删除选中的成绩记录吗?", "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// 获取选中的成绩记录并进行空值检查
if (dgvGrades.SelectedRows[0].DataBoundItem is Grade selectedGrade)
{
// 删除成绩
DataManager.Grades.Remove(selectedGrade);
LoadGradeData(); // 重新加载数据
ClearInputs(); // 清空输入框
// 显示成功消息
using (SuccessForm successForm = new SuccessForm())
{
successForm.ShowDialog();
}
}
}
}
// 清空输入框
private void btnClear_Click(object sender, EventArgs e)
{
ClearInputs();
}
// 搜索成绩
private void btnSearch_Click(object sender, EventArgs e)
{
string searchText = txtSearch.Text.Trim().ToLower();
if (string.IsNullOrEmpty(searchText))
{
LoadGradeData(); // 如果搜索框为空,加载所有数据
return;
}
// 按学生姓名、课程名称或学号搜索
var searchResult = DataManager.Grades.Where(g =>
g.StudentName.ToLower().Contains(searchText) ||
g.CourseName.ToLower().Contains(searchText) ||
g.StudentID.ToString().Contains(searchText)
).ToList();
dgvGrades.DataSource = null;
dgvGrades.DataSource = searchResult;
}
// 选中行变化时填充输入框
private void dgvGrades_SelectionChanged(object sender, EventArgs e)
{
if (dgvGrades.SelectedRows.Count > 0 && dgvGrades.SelectedRows[0].DataBoundItem is Grade selectedGrade)
{
txtGradeID.Text = selectedGrade.GradeID.ToString();
txtScore.Text = selectedGrade.Score.ToString();
// 设置学生选择
for (int i = 0; i < cmbStudent.Items.Count; i++)
{
if (cmbStudent.Items[i] is Student student && student.StudentID == selectedGrade.StudentID)
{
cmbStudent.SelectedIndex = i;
break;
}
}
cmbCourse.Text = selectedGrade.CourseName ?? "";
dtpExamDate.Value = selectedGrade.ExamDate;
}
}
}

浙公网安备 33010602011771号