打造学生信息管理系统:从构思到实现

简单学生信息管理系统(附源码),原生无边框winform+sqlite,主要运用窗体继承+动态导航菜单+反射创建窗体对象家+事件刷新数据,自定义4种类型弹窗类型对话框,数据分层,增删查改都实现了,其余功能可以买回去自己加,学习demo(注释都有)只是学习用

最近捣鼓了一个简单的学生信息管理系统,想着跟大家分享下过程,说不定对正在学习编程的小伙伴有点帮助。这个系统基于原生无边框 winform 搭配 sqlite 数据库,还融入了不少有意思的技术点,像窗体继承、动态导航菜单啥的。

技术栈与整体架构

1. 原生无边框 winform

用 winform 来构建界面,选择无边框形式是为了打造更简洁现代的 UI 风格。在 winform 项目创建后,设置FormBorderStyle属性为None就能实现无边框效果:

public partial class MainForm : Form { public MainForm() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; } }

这样,整个窗口就没有了传统的标题栏和边框,接下来可以自己绘制标题栏,添加拖动、关闭、最小化等功能。

2. sqlite 数据库

sqlite 小巧轻便,对于这种小型学习 demo 再合适不过。使用System.Data.SQLite库来操作数据库。以下是简单的连接数据库代码:

using System.Data.SQLite; string connectionString = "Data Source=student.db;Version=3;"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); // 这里可以执行 SQL 语句,比如创建表 string createTableQuery = "CREATE TABLE IF NOT EXISTS Students (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT, Age INT)"; using (SQLiteCommand command = new SQLiteCommand(createTableQuery, connection)) { command.ExecuteNonQuery(); } }

这段代码首先定义了连接字符串,指定数据库文件名为student.db,然后打开连接并创建了一个Students表,包含IdNameAge字段。

核心功能实现

1. 窗体继承

通过窗体继承,可以复用一些通用的属性和方法。比如说有一个基础的BaseForm,包含一些通用的样式设置和初始化逻辑:

public class BaseForm : Form { public BaseForm() { // 通用的样式设置,比如字体、背景色 this.Font = new Font("微软雅黑", 10); this.BackColor = Color.White; } }

然后其他具体的功能窗体,如StudentListForm继承自BaseForm

public class StudentListForm : BaseForm { // 这里编写展示学生列表的具体逻辑 }

这样StudentListForm就自动拥有了BaseForm的样式设置,减少了重复代码。

2. 动态导航菜单

动态导航菜单根据用户的操作来展示不同的功能界面。使用ToolStripMenuItem来构建菜单,然后通过事件处理来加载相应的窗体。

private void studentListToolStripMenuItem_Click(object sender, EventArgs e) { // 创建并显示学生列表窗体 StudentListForm studentListForm = new StudentListForm(); studentListForm.MdiParent = this; studentListForm.Show(); }

这里当点击 “学生列表” 菜单项时,创建StudentListForm实例,并设置其MdiParent为当前主窗体,然后显示出来。

3. 反射创建窗体对象

反射机制能在运行时动态创建对象。假设我们有一个FormFactory类来通过反射创建窗体:

public class FormFactory { public static Form CreateForm(string formName) { try { // 获取当前程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 根据名称创建类型实例 Type formType = assembly.GetType("YourNamespace." + formName); return (Form)Activator.CreateInstance(formType); } catch (Exception ex) { // 处理异常 MessageBox.Show($"创建窗体失败: {ex.Message}"); return null; } } }

在使用时:

string formName = "StudentListForm"; Form studentListForm = FormFactory.CreateForm(formName); if (studentListForm!= null) { studentListForm.MdiParent = this; studentListForm.Show(); }

这样可以通过字符串名称灵活地创建不同的窗体,方便扩展和维护。

4. 事件刷新数据

当数据发生变化,比如添加、删除学生信息后,需要刷新相关的界面展示。通过自定义事件来实现。在数据操作类(如StudentDataAccess)中定义事件:

public class StudentDataAccess { public event EventHandler DataChanged; protected virtual void OnDataChanged() { DataChanged?.Invoke(this, EventArgs.Empty); } public void AddStudent(Student student) { // 执行添加学生的数据库操作 OnDataChanged(); } }

在界面类(如StudentListForm)中注册事件:

public class StudentListForm : BaseForm { private StudentDataAccess studentDataAccess; public StudentListForm() { InitializeComponent(); studentDataAccess = new StudentDataAccess(); studentDataAccess.DataChanged += StudentDataAccess_DataChanged; } private void StudentDataAccess_DataChanged(object sender, EventArgs e) { // 刷新学生列表数据显示 RefreshStudentList(); } }

这样当添加学生操作完成后,会触发DataChanged事件,进而刷新学生列表界面。

5. 自定义弹窗类型对话框

自定义了 4 种类型的弹窗,比如信息提示、确认删除等。以确认删除弹窗为例:

public class ConfirmDeleteDialog : Form { public ConfirmDeleteDialog() { // 设置弹窗界面布局,添加提示文本、确认和取消按钮等 Label promptLabel = new Label(); promptLabel.Text = "确定要删除该学生信息吗?"; promptLabel.Location = new Point(20, 20); this.Controls.Add(promptLabel); Button confirmButton = new Button(); confirmButton.Text = "确定"; confirmButton.Location = new Point(50, 60); confirmButton.Click += ConfirmButton_Click; this.Controls.Add(confirmButton); Button cancelButton = new Button(); cancelButton.Text = "取消"; cancelButton.Location = new Point(120, 60); cancelButton.Click += CancelButton_Click; this.Controls.Add(cancelButton); } private void ConfirmButton_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); } private void CancelButton_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } }

在使用时:

ConfirmDeleteDialog confirmDialog = new ConfirmDeleteDialog(); if (confirmDialog.ShowDialog() == DialogResult.OK) { // 执行删除操作 }

数据分层与增删查改

数据分层将业务逻辑和数据访问分离。有数据访问层(DAL)负责与数据库交互,业务逻辑层(BLL)处理业务规则,表现层(UI)负责界面展示。

1. 增加学生信息

在 DAL 层:

public class StudentDataAccess { public void AddStudent(Student student) { string connectionString = "Data Source=student.db;Version=3;"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); string insertQuery = "INSERT INTO Students (Name, Age) VALUES (@Name, @Age)"; using (SQLiteCommand command = new SQLiteCommand(insertQuery, connection)) { command.Parameters.AddWithValue("@Name", student.Name); command.Parameters.AddWithValue("@Age", student.Age); command.ExecuteNonQuery(); } } } }

在 BLL 层可以进行一些简单的验证,比如年龄是否合法等,然后调用 DAL 层方法。

2. 删除学生信息

public void DeleteStudent(int id) { string connectionString = "Data Source=student.db;Version=3;"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); string deleteQuery = "DELETE FROM Students WHERE Id = @Id"; using (SQLiteCommand command = new SQLiteCommand(deleteQuery, connection)) { command.Parameters.AddWithValue("@Id", id); command.ExecuteNonQuery(); } } }

3. 查询学生信息

public List<Student> GetAllStudents() { List<Student> students = new List<Student>(); string connectionString = "Data Source=student.db;Version=3;"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); string selectQuery = "SELECT Id, Name, Age FROM Students"; using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection)) { using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Student student = new Student(); student.Id = reader.GetInt32(0); student.Name = reader.GetString(1); student.Age = reader.GetInt32(2); students.Add(student); } } } } return students; }

4. 修改学生信息

public void UpdateStudent(Student student) { string connectionString = "Data Source=student.db;Version=3;"; using (SQLiteConnection connection = new SQLiteConnection(connectionString)) { connection.Open(); string updateQuery = "UPDATE Students SET Name = @Name, Age = @Age WHERE Id = @Id"; using (SQLiteCommand command = new SQLiteCommand(updateQuery, connection)) { command.Parameters.AddWithValue("@Name", student.Name); command.Parameters.AddWithValue("@Age", student.Age); command.Parameters.AddWithValue("@Id", student.Id); command.ExecuteNonQuery(); } } }

这个学生信息管理系统目前只是一个学习 demo,注释都很详细,增删查改等基础功能都实现了,如果有小伙伴感兴趣,买回去可以自己再添加更多功能,希望能给大家的学习带来一些启发。源码都在,欢迎一起探讨交流呀。

简单学生信息管理系统(附源码),原生无边框winform+sqlite,主要运用窗体继承+动态导航菜单+反射创建窗体对象家+事件刷新数据,自定义4种类型弹窗类型对话框,数据分层,增删查改都实现了,其余功能可以买回去自己加,学习demo(注释都有)只是学习用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1185344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026降AI工具红黑榜:实测8款后我只推荐这3个

2026降AI工具红黑榜&#xff1a;实测8款后我只推荐这3个 TL;DR&#xff1a;测了8款降AI工具&#xff0c;踩了不少坑。红榜推荐&#xff1a;嘎嘎降AI&#xff08;达标率99.26%&#xff0c;性价比最高&#xff09;、比话降AI&#xff08;不达标全额退款&#xff09;、AIGCleaner&…

Comsol 中浆液扩散模型:注浆过程的数字化洞察

comsol注浆&#xff0c;浆液扩散模型在岩土工程、建筑施工等诸多领域&#xff0c;注浆是一项关键技术&#xff0c;它能有效改善土体性质、增强结构稳定性。而理解浆液在地下的扩散规律至关重要&#xff0c;借助 Comsol 建立浆液扩散模型&#xff0c;可让我们在虚拟环境中深入探…

2026中专生考大数据与财务管理专业学习指南

行业需求与就业前景数据分析在财务领域的应用日益广泛&#xff0c;企业需要能够处理财务数据并从中提取价值的专业人才。掌握数据分析技能可提升就业竞争力&#xff0c;尤其在金融科技、企业财务分析等岗位需求旺盛。大数据与财务管理专业结合了传统财务知识与现代数据技术&…

知网AIGC检测不通过?2026最新降AI攻略来了

知网AIGC检测不通过&#xff1f;2026最新降AI攻略来了 TL;DR&#xff1a;2025年底知网AIGC检测算法大升级&#xff0c;从语言模式和语义逻辑双链路检测&#xff0c;传统改词方法已失效。本文提供完整降AI攻略&#xff1a;第一步自查定位问题段落&#xff0c;第二步用嘎嘎降AI或…

ArcGIS大师之路500技---062调整面要素到指定面积

文章目录前言一、需求说明二、比例工具的使用前言 本文介绍使用ArcGIS比例工具实现调整面要素至指定面积。 一、需求说明 我们有一个面要素类&#xff0c;然后绘制一个圆形&#xff0c;添加面积字段&#xff0c;并计算其面积为&#xff1a;53895.2892平方米。 目标&#xff1…

小程序毕设项目推荐-基于django+微信小程序的考研信息查询系统考研院校推荐系统 考研分数线发布查询【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026大专计算机专业学数据分析的价值分析

数据分析行业在数字化转型浪潮中持续扩张&#xff0c;2026年企业对数据驱动决策的需求将进一步增长。大专计算机专业学生掌握数据分析技能&#xff0c;可快速匹配互联网、金融、电商等领域岗位&#xff0c;初级岗位平均薪资预计达8k-15k/月&#xff0c;职业路径可向数据科学家或…

知网AIGC检测不通过?学长亲测的避坑指南

知网AIGC检测不通过&#xff1f;学长亲测的避坑指南 TL;DR&#xff1a;知网AIGC检测不通过别慌&#xff0c;这份避坑指南帮你搞定。核心思路&#xff1a;先定位高风险段落&#xff0c;再用专业工具降AI&#xff08;推荐嘎嘎降AI&#xff0c;达标率99.26%&#xff09;&#xff0…

交变磁场下含感应材料沥青路面温度:奇妙的物理与技术融合

交变磁场下含感应材料沥青路面温度在道路工程领域&#xff0c;沥青路面是我们再熟悉不过的存在。然而&#xff0c;你是否想过&#xff0c;通过交变磁场与含感应材料的结合&#xff0c;能让沥青路面的温度产生神奇的变化&#xff1f;这背后蕴含着有趣的物理原理和潜在的应用价值…

Xilinx FPGA实现延时链

Xilinx FPGA实现延时链之前有做一个输出100ps左右的延时链,当时找到一篇国外的论文,2015年的文章了。链接:《High-Resolution_Synthesizable_Digitally-Controlled_Delay_Lines》,根据论文的内容,要使输出的延时能…

探索直流有感无刷电机驱动器:功能与特色深度剖析

电机控制资料 注&#xff1a;本驱动器适合于直流有感无刷电机 功能特点 支持电压9V&#xff5e;36V&#xff0c;额定输出电流5A 支持电位器、开关、0~3.3V模拟信号范围、0/3.3/5/24V逻辑电平、PWM/频率/脉冲信号、RS485多种输入信号 支持占空比调速(调压)、速度闭环控制(稳速)、…

聊聊神奇的连续拉丝机自动控制程序

连续拉丝机程序&#xff0c;拉丝机自动控制程序&#xff0c;解决了大部分拉丝机经常出现的拉力不均匀&#xff0c;电机转速不稳等问题&#xff0c;运行稳定&#xff0c;安全可靠。在工业生产领域&#xff0c;拉丝机那可是相当重要的设备。但以前&#xff0c;不少拉丝机老是被拉…

整车性能仿真:Cruise与Matlab联合的五年经验分享

本人从事整车性能仿真岗位已经五年&#xff0c;精通基于Cruise软件与Matlab软件联合仿真整车性能&#xff0c;长期兼职相关业务&#xff0c;有需要的联系我&#xff0c;保证按照客户需求搭建相应模型&#xff0c;同时免费提供相应培训&#xff0c;让你深刻掌握模型搭建流程及仿…

SAP 发布restful if_http_extension~handle_request demo

DATA : lv_method TYPE string.lv_method = server->request->get_header_field( ~request_method ).DATA(lv_methond2) = server->request->get_method( ).DATA:lv_content_type TYPE string.DATA:lv_j…

基于C51单片机的智能鱼缸系统探索

基于C51单片机智能鱼缸系统 本程序功能齐全、注释祥明&#xff0c;提供仿真图源程序代码&#xff0c;有能力者可以自行升级改造。 现拥有功能如下: 1:时钟显示 2:自定义时间间隔投喂食物 3:自定义温度上下限 4:自定义鱼缸高度 5:温度过低加热 6:温度过高警报 7:鱼缸水位实时检测…

完整教程:C语言文件操作函数解析

完整教程:C语言文件操作函数解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

小程序毕设项目推荐-基于微信小程序的健康生活助手系统基于django+微信小程序的健康生活系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

2026年专业的车牌识别一体机,车牌识别系统,车牌识别道闸一体机厂家选型决策指南 - 品牌鉴赏师

引言在 2026 年,随着智慧城市建设的加速推进,车牌识别一体机、车牌识别系统以及车牌识别道闸一体机在智慧停车、交通管理等领域的应用愈发广泛。为了帮助用户更科学、客观地选择专业的厂家,本选型决策指南应运而生。…

昆仑通态直接控制变频器程序及通讯那些事儿

昆仑通态直接控制变频器程序及通讯。在工业自动化领域&#xff0c;昆仑通态人机界面与变频器的协同工作是实现精准控制与高效生产的关键环节。今天就来唠唠昆仑通态如何直接控制变频器程序及通讯。 一、通讯基础准备 昆仑通态与变频器通讯&#xff0c;首先要明确通讯协议。常见…

【课程设计/毕业设计】基于微信小程序的健康生活服务系统设计与实现基于django+微信小程序的健康生活系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…