导读:本期聚焦于小伙伴创作的《如何用C#编写学委助手程序?详细实现步骤与实例解析》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用C#编写学委助手程序?详细实现步骤与实例解析》有用,将其分享出去将是对创作者最好的鼓励。

学委助手是面向班级学习委员的实用工具,核心目标是简化学生信息管理、作业统计、考勤记录等日常事务。使用C#开发这类工具,可依托.NET框架的丰富类库快速搭建功能,同时借助WinForms实现直观的可视化交互界面。

如何用C#编写学委助手程序?详细实现步骤与实例解析

核心功能需求梳理

学委助手需要覆盖学委的日常工作场景,核心功能可分为以下几类:

  • 学生信息管理:支持添加、修改、删除学生基本信息,包括学号、姓名、专业、联系方式等
  • 作业管理:记录每次作业的发布时间、截止时间,统计各学生的提交状态
  • 考勤管理:记录学生的出勤、迟到、早退、请假状态,支持按日期查询
  • 数据导出:将统计结果导出为Excel或CSV格式,方便学委上报数据

开发环境准备

开发前需要准备以下环境:

  • Visual Studio 2019及以上版本,安装.NET桌面开发工作负载
  • SQLite数据库,用于轻量级本地数据存储
  • EPPlus库,用于Excel文件导出操作,可通过NuGet包管理器安装

数据库设计

使用SQLite存储数据,需要设计三张核心表:

表名字段说明
StudentId(主键)、StudentNo(学号)、Name(姓名)、Major(专业)、Phone(联系方式)
HomeworkId(主键)、Title(作业标题)、PublishTime(发布时间)、Deadline(截止时间)
AttendanceId(主键)、StudentId(学生Id)、Date(考勤日期)、Status(出勤状态)

创建数据库的代码如下:

using System.Data.SQLite;

public class DatabaseHelper
{
    private string connectionString = "Data Source=student_helper.db;Version=3;";

    // 初始化数据库,创建表
    public void InitDatabase()
    {
        using (SQLiteConnection conn = new SQLiteConnection(connectionString))
        {
            conn.Open();
            string createStudentTable = @"
                CREATE TABLE IF NOT EXISTS Student (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    StudentNo TEXT NOT NULL UNIQUE,
                    Name TEXT NOT NULL,
                    Major TEXT,
                    Phone TEXT
                )";
            string createHomeworkTable = @"
                CREATE TABLE IF NOT EXISTS Homework (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    Title TEXT NOT NULL,
                    PublishTime TEXT NOT NULL,
                    Deadline TEXT NOT NULL
                )";
            string createAttendanceTable = @"
                CREATE TABLE IF NOT EXISTS Attendance (
                    Id INTEGER PRIMARY KEY AUTOINCREMENT,
                    StudentId INTEGER NOT NULL,
                    Date TEXT NOT NULL,
                    Status TEXT NOT NULL,
                    FOREIGN KEY(StudentId) REFERENCES Student(Id)
                )";
            using (SQLiteCommand cmd = new SQLiteCommand(createStudentTable, conn))
            {
                cmd.ExecuteNonQuery();
            }
            using (SQLiteCommand cmd = new SQLiteCommand(createHomeworkTable, conn))
            {
                cmd.ExecuteNonQuery();
            }
            using (SQLiteCommand cmd = new SQLiteCommand(createAttendanceTable, conn))
            {
                cmd.ExecuteNonQuery();
            }
        }
    }
}

学生信息管理模块实现

界面设计

在WinForms窗体中添加DataGridView控件用于展示学生列表,添加TextBox、Button控件用于输入和提交操作,界面布局可通过拖拽控件快速完成。

添加学生功能代码

private void btnAddStudent_Click(object sender, EventArgs e)
{
    string studentNo = txtStudentNo.Text.Trim();
    string name = txtName.Text.Trim();
    string major = txtMajor.Text.Trim();
    string phone = txtPhone.Text.Trim();

    // 基础校验
    if (string.IsNullOrEmpty(studentNo) || string.IsNullOrEmpty(name))
    {
        MessageBox.Show("学号和姓名不能为空");
        return;
    }

    using (SQLiteConnection conn = new SQLiteConnection(connectionString))
    {
        conn.Open();
        string insertSql = "INSERT INTO Student (StudentNo, Name, Major, Phone) VALUES (@StudentNo, @Name, @Major, @Phone)";
        using (SQLiteCommand cmd = new SQLiteCommand(insertSql, conn))
        {
            cmd.Parameters.AddWithValue("@StudentNo", studentNo);
            cmd.Parameters.AddWithValue("@Name", name);
            cmd.Parameters.AddWithValue("@Major", major);
            cmd.Parameters.AddWithValue("@Phone", phone);
            try
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("学生信息添加成功");
                LoadStudentData(); // 刷新列表
                ClearStudentInput(); // 清空输入框
            }
            catch (SQLiteException ex)
            {
                MessageBox.Show("添加失败,学号可能已存在:" + ex.Message);
            }
        }
    }
}

// 加载学生数据到DataGridView
private void LoadStudentData()
{
    using (SQLiteConnection conn = new SQLiteConnection(connectionString))
    {
        conn.Open();
        string querySql = "SELECT * FROM Student";
        using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(querySql, conn))
        {
            DataTable dt = new DataTable();
            adapter.Fill(dt);
            dgvStudent.DataSource = dt;
        }
    }
}

作业提交统计模块实现

作业统计需要关联学生和作业记录,核心逻辑是记录每个学生对应作业的提交状态,以下为提交状态更新的代码示例:

// 更新作业提交状态
public void UpdateHomeworkStatus(int studentId, int homeworkId, string status)
{
    using (SQLiteConnection conn = new SQLiteConnection(connectionString))
    {
        conn.Open();
        // 先查询是否已存在记录
        string checkSql = "SELECT COUNT(*) FROM HomeworkSubmit WHERE StudentId = @StudentId AND HomeworkId = @HomeworkId";
        using (SQLiteCommand checkCmd = new SQLiteCommand(checkSql, conn))
        {
            checkCmd.Parameters.AddWithValue("@StudentId", studentId);
            checkCmd.Parameters.AddWithValue("@HomeworkId", homeworkId);
            int count = Convert.ToInt32(checkCmd.ExecuteScalar());
            if (count > 0)
            {
                // 更新已有记录
                string updateSql = "UPDATE HomeworkSubmit SET Status = @Status WHERE StudentId = @StudentId AND HomeworkId = @HomeworkId";
                using (SQLiteCommand updateCmd = new SQLiteCommand(updateSql, conn))
                {
                    updateCmd.Parameters.AddWithValue("@Status", status);
                    updateCmd.Parameters.AddWithValue("@StudentId", studentId);
                    updateCmd.Parameters.AddWithValue("@HomeworkId", homeworkId);
                    updateCmd.ExecuteNonQuery();
                }
            }
            else
            {
                // 插入新记录
                string insertSql = "INSERT INTO HomeworkSubmit (StudentId, HomeworkId, Status) VALUES (@StudentId, @HomeworkId, @Status)";
                using (SQLiteCommand insertCmd = new SQLiteCommand(insertSql, conn))
                {
                    insertCmd.Parameters.AddWithValue("@StudentId", studentId);
                    insertCmd.Parameters.AddWithValue("@HomeworkId", homeworkId);
                    insertCmd.Parameters.AddWithValue("@Status", status);
                    insertCmd.ExecuteNonQuery();
                }
            }
        }
    }
}

数据导出功能实现

使用EPPlus库将考勤或作业统计数据导出为Excel文件,以下为导出学生考勤记录的代码示例:

using OfficeOpenXml;

private void btnExportAttendance_Click(object sender, EventArgs e)
{
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "Excel文件|*.xlsx";
    saveFileDialog.Title = "导出考勤记录";
    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        string filePath = saveFileDialog.FileName;
        using (ExcelPackage package = new ExcelPackage())
        {
            ExcelWorksheet worksheet = package.Worksheets.Add("考勤记录");
            // 设置表头
            worksheet.Cells[1, 1].Value = "学号";
            worksheet.Cells[1, 2].Value = "姓名";
            worksheet.Cells[1, 3].Value = "考勤日期";
            worksheet.Cells[1, 4].Value = "出勤状态";

            // 查询数据
            using (SQLiteConnection conn = new SQLiteConnection(connectionString))
            {
                conn.Open();
                string querySql = @"
                    SELECT s.StudentNo, s.Name, a.Date, a.Status 
                    FROM Attendance a 
                    JOIN Student s ON a.StudentId = s.Id 
                    ORDER BY a.Date DESC";
                using (SQLiteCommand cmd = new SQLiteCommand(querySql, conn))
                {
                    using (SQLiteDataReader reader = cmd.ExecuteReader())
                    {
                        int row = 2;
                        while (reader.Read())
                        {
                            worksheet.Cells[row, 1].Value = reader["StudentNo"].ToString();
                            worksheet.Cells[row, 2].Value = reader["Name"].ToString();
                            worksheet.Cells[row, 3].Value = reader["Date"].ToString();
                            worksheet.Cells[row, 4].Value = reader["Status"].ToString();
                            row++;
                        }
                    }
                }
            }

            // 保存文件
            FileInfo fileInfo = new FileInfo(filePath);
            package.SaveAs(fileInfo);
            MessageBox.Show("考勤记录导出成功");
        }
    }
}

总结

以上是用C#编写学委助手的核心实现思路与代码示例,实际开发中还可以根据需求扩展更多功能,比如添加用户登录、数据备份、作业提醒等。整体开发过程遵循界面与逻辑分离的原则,数据库操作封装为独立类,便于后续维护和功能迭代。对于C#初学者来说,这类工具开发是练习WinForms、数据库操作、文件处理等基础技能的良好实践场景。

C#学委助手WinForms数据库操作文件处理修改时间:2026-06-15 03:06:41

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。