# 学生管理系统 **Repository Path**: git-xiaocui/student_management_system ## Basic Information - **Project Name**: 学生管理系统 - **Description**: Winform+Sql学生管理系统 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 6 - **Created**: 2025-05-15 - **Last Updated**: 2025-05-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 学生管理系统 #学生管理系统主页面布局 1.首先添加主页面:右击Winform项目----添加----选择Windows窗体----FrmMain 2.菜单控件:工具栏拖一个MenuStrip控件:是应用程序菜单结构的容器 一级菜单 ·学生管理----新增学生、学生列表 ·课程管理----新增课程、课程列表 ·选课成绩管理----选课成绩列表 ·退出系统 3.MDI容器:放窗体的容器。属性:IsMdiContainer 作用:点击菜单项,打开对应页面,显示在MDI容器。 特点:窗体在容器中,任意移动,但是移不出这个容器。 #主页面菜单项响应 补全登录功能,登录成功,显示主页面,隐藏登录 1.菜单项点击事件注册 双击菜单项 Click 属性----事件----Click---- 2.添加菜单对应的页面 3.事件处理 4.解决多次点击同一菜单,代开多个页面 两个方式:单例 检查当前窗体是否已经打开 #主页面菜单项响应及退出系统实现 学生管理两个子菜单的响应 1.班级管理子菜单响应 2.年级管理子菜单响应 3.退出系统实现 登录页面 关闭----Close() 退出应用程序 设为启动页面 主页面 关闭----并没有退出应用程序 Question 点击关闭按钮没退出应用程序 点击退出系统菜单退出应用程序 解决--Application.Exit();退出但不友好 改进:选择----是,退出 否,不退出 Question 消息循环 解决--ExitThread() 选择否 主页面关闭但没有结束应用程序 解决--e.Cancel=true; 退出应用程序----关闭窗体,执行FormClosing,事件里代码就会执行 #课程列表页面布局及功能实现 1.年级列表页面布局 数据控件 DataGridView AutoSizeColumnsMode:Fill列充满DataGridView AllowUserToAddRow:False关闭DataGridView数据增加 Dick:绑定到容器的边框 列: 2.年级列表功能实现 加载年级信息----获取数据----数据库交互----select语句 Command执行命令 DataTable 返回 SqlDataAdapter 连接DataSet DB 桥接器 Fill DataSet DataTable //DataSet DataTable Update DB 手动添加的列与数据源中的进行关联 3.效果演示 DataGridView数据绑定 填充DataTable SqlDataAdapter Fill 自动断开式连接,关闭连接 #课程列表页面布局 1.查询条件部分 GroupBox:分组控件 Dock:控件绑定到容器的边框 Anchor:控件绑定到容器的边缘(可控间距) 条件设置:按学号和课程号关键字查询 学期:ComboBox 下拉框 2.学号信息部分 DataGridView 手动添加列 显示"请选择"列表信息 3.课程号信息部分 DataGridView 手动添加列 显示"请选择"列表信息 #选课成绩列表页面功能实现 1.加载学号下拉列表 学号信息获取:DataTable 指定cboSno.DataSource 2.加载课程号下拉列表 3.查询选课成绩信息 查询语句 拼接式sql注入 模糊查询(参数化sql数组/Text.Trim()) and ClassName like @ClassName new SqlParameter("@ClassName","%""+className+%") join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 #新增课程页面布局 分组控件 Panel:无显示标题 无边框 滚动条 GroupBox:显示标题 边框 无滚动条 下拉框:ComboBox 多行文本:TextBox #新增选课成绩页面 1.页面加载:课程号列表加载 2.学号添加实现 1.信息获取 2.判空:一个学号不为空 课程号设置 成绩可为空 3.判断选课信息是否已存在(一个人该课未修) 4.封装ExecuteNonQuery方法及信息入库 添加数据----影响表的行数 SqlHelper.ExecutNonQuery(sqlAdd, parasAdd); #学生列表页面布局&&学生列表页面初始化&&学生信息页面布局 #学生列表页面布局 1.查询条件设置 所在院系:下拉框cboSdept 姓名:文本框txtSname(模糊查询) 2.学生信息显示(DataGridView列设置) 加载数据 #学生列表页面初始化 1.加载所在院系下拉框 2.加载所有学生信息 3.根据条件查询学生信息 #学生信息页面布局 1.学生信息内容描述 2.页面控件布局 3.控件属性设置 #学生信息页面 1.页面初始化 2.功能实现 #学号列表修改与删除功能 学生列表:信息显示、查询 删除:删除列----按钮 点击按钮,进行删除操作----单条数据 多条数据----多个选择,删除按钮----多条数据批量删除 修改:通删除 增加一个修改按钮列 点击修改,加载学生信息,在修改页进行相应的修改操作再提交 1.学生列表控件里添加Link列 修改、删除、CheckBox列 选择 2.注册DataGridView事件:CellContentClick 3.添加CellContentClick 处理代码: 获取到单机的单元格 判断点击到的是修改列还是删除列 不同结果做到不同的处理:真假删除(单条、多条) 1.封装ExecuteReader方法,学生信息修改页面初始化 2.修改按钮功能 1.获取页面收入信息 2.判空处理 3.判断是否存在 学号(除这名学生外,其他学生是否已存在相同信息) 4.修改 #解决BUG 1.dgv.DataSource = null;会将数据清空,导致列顺序的刷新 2.修改列删除列的的添加 //dgvGradeList.Columns.Remove("colEdit"); //dgvGradeList.Columns.Remove("colDelete"); //...... //FrmStudentList.Init_colEdit_colDelete(dgvGradeList); 3.sql语句查询 string sql = "select Sno,Sname,Ssex,Sage,Sdept from Student where IsDeleted=0 and Sname like @Sname "; 不要使用as对列进行命名,在属性Columns中命名,避免之后修改列、删除列会出现对象消失的问题