c# winform部门管理系统

c# winform部门管理系统

在这里插入图片描述

数据库SQL语句脚本代码

CREATE TABLE Department(DepartmentID INT PRIMARY KEY IDENTITY(1,1),Name NVARCHAR(50) NOT NULL
);
SELECT * FROM Department
-- 插入部门数据
INSERT INTO Department (Name) VALUES ('人力资源部');
INSERT INTO Department (Name) VALUES ('技术部');
INSERT INTO Department (Name) VALUES ('市场部');
INSERT INTO Department (Name) VALUES ('销售部');CREATE TABLE Employees_Lists(EmployeeID INT PRIMARY KEY IDENTITY(1,1),Name NVARCHAR(50) NOT NULL,DepartmentID INT,FOREIGN KEY (DepartmentID) REFERENCES Department(DepartmentID)
);
-- 插入员工数据
-- 假设`人力资源部`的DepartmentID是1
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('张三', 1);
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('李四', 1);-- 假设`技术部`的DepartmentID是2
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('王五', 2);
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('赵六', 2);-- 假设`市场部`的DepartmentID是3
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('孙七', 3);-- 假设`财务部`的DepartmentID是4
INSERT INTO Employees_Lists (Name, DepartmentID) VALUES ('周八', 4);
-- 查询获取数据
SELECT a.Name AS 员工,b.Name AS 部门 FROM Employees_Lists a RIGHT JOIN Department b 
ON a.DepartmentID = b.DepartmentID

C#代码实现

添加部门窗口

在这里插入图片描述

using System;
using System.Data.SqlClient;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class 添加部门 : Form{// 数据库连接字符串private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";// 操作模式枚举enum Mode{Add,Edit}// 当前操作模式private Mode currentMode;private string currentDepartmentName; // 仅在编辑模式下使用public 添加部门(){InitializeComponent();ConfigureForm(Mode.Add, null);}// 修改部门的构造函数public 添加部门(string departmentName){InitializeComponent();ConfigureForm(Mode.Edit, departmentName);}private void ConfigureForm(Mode mode, string departmentName){this.MaximizeBox = false;this.FormBorderStyle = FormBorderStyle.FixedSingle; // 禁止调整窗体大小currentMode = mode;currentDepartmentName = departmentName;if (mode == Mode.Add){this.Text = "添加部门";}else if (mode == Mode.Edit){this.Text = "修改部门 - " + departmentName;departmentNameTextBox.Text = departmentName;btn_adddepartmentName.Text = "修改";}}private void btn_adddepartmentName_Click(object sender, EventArgs e){string departmentName = departmentNameTextBox.Text.Trim();if (!string.IsNullOrEmpty(departmentName)){using (SqlConnection conn = new SqlConnection(connectionString)){// 检查部门是否存在string checkQuery = "SELECT COUNT(*) FROM Department WHERE Name = @Name";using (SqlCommand checkCmd = new SqlCommand(checkQuery, conn)){checkCmd.Parameters.AddWithValue("@Name", departmentName);conn.Open();int count = (int)checkCmd.ExecuteScalar();if (count > 0 && currentMode == Mode.Add){MessageBox.Show("该部门已存在!" + departmentName);}else{if (currentMode == Mode.Add){// 添加新部门string insertQuery = "INSERT INTO Department (Name) VALUES (@Name)";using (SqlCommand insertCmd = new SqlCommand(insertQuery, conn)){insertCmd.Parameters.AddWithValue("@Name", departmentName);insertCmd.ExecuteNonQuery();MessageBox.Show("部门添加成功!");}}else if (currentMode == Mode.Edit){// 修改部门string updateQuery = "UPDATE Department SET Name = @Name WHERE Name = @OldName";using (SqlCommand updateCmd = new SqlCommand(updateQuery, conn)){updateCmd.Parameters.AddWithValue("@Name", departmentName);updateCmd.Parameters.AddWithValue("@OldName", currentDepartmentName);updateCmd.ExecuteNonQuery();//Console.WriteLine("执行修改部门SQL语句脚本:" + updateQuery);MessageBox.Show("部门修改成功!");}}}conn.Close();}}}else{MessageBox.Show("请输入部门名称!");}}}
}
添加员工窗口

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class 添加员工数据 : Form{// 数据库连接字符串private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";public 添加员工数据(){InitializeComponent();this.MaximizeBox = false;this.FormBorderStyle = FormBorderStyle.FixedSingle; // 禁止调整窗体大小}private void 添加员工数据_Load(object sender, EventArgs e){departmentComboBox.DropDownStyle = ComboBoxStyle.DropDownList; // 设置为下拉列表模式using (SqlConnection conn = new SqlConnection(connectionString)){string query = "SELECT DepartmentID, Name FROM Department";using (SqlCommand cmd = new SqlCommand(query, conn)){SqlDataAdapter da = new SqlDataAdapter(cmd);DataTable dt = new DataTable();da.Fill(dt);departmentComboBox.DisplayMember = "Name";departmentComboBox.ValueMember = "DepartmentID";departmentComboBox.DataSource = dt;}}}private void addButton_Click(object sender, EventArgs e){string employeeName = employeeNameTextBox.Text.Trim();var selectedDepartment = departmentComboBox.SelectedValue;if (!string.IsNullOrEmpty(employeeName) && selectedDepartment != null){using (SqlConnection conn = new SqlConnection(connectionString)){string query = "INSERT INTO Employees_Lists (Name, DepartmentID) VALUES (@Name, @DepartmentID)";using (SqlCommand cmd = new SqlCommand(query, conn)){cmd.Parameters.AddWithValue("@Name", employeeName);cmd.Parameters.AddWithValue("@DepartmentID", selectedDepartment);conn.Open();cmd.ExecuteNonQuery();conn.Close();}}MessageBox.Show("员工添加成功!");}else{MessageBox.Show("请输入员工信息并选择部门!");}}}
}
主窗口
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApp1
{public partial class 树结构 : Form{// 数据库连接字符串private string connectionString = "server=172.0.0.1;uid=sa1;pwd=xyz@x123456;database=test";public 树结构(){InitializeComponent();this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);LoadDepartmentsAsync();}private async void LoadDepartmentsAsync(){List<Department> departments = await GetDepartmentsAsync();if (this.dgvDepartments.InvokeRequired){this.dgvDepartments.Invoke(new Action(() => {SetupDepartmentsDataGridView(departments);}));}else{SetupDepartmentsDataGridView(departments);}}private void SetupDepartmentsDataGridView(List<Department> departments){this.dgvDepartments.DataSource = departments;// 设置 DataGridView 为只读this.dgvDepartments.ReadOnly = true;// 根据内容自动调整列宽度this.dgvDepartments.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;// 根据内容自动调整行高度(如果需要)this.dgvDepartments.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;// 调用添加编辑按钮的方法AddEditButtonColumn();}private void AddEditButtonColumn(){if (!dgvDepartments.Columns.Contains("EditButton")){DataGridViewButtonColumn editButtonColumn = new DataGridViewButtonColumn();editButtonColumn.HeaderText = "操作";editButtonColumn.Name = "EditButton";editButtonColumn.Text = "修改";editButtonColumn.UseColumnTextForButtonValue = true; // 这一行确保每个单元格显示"Edit"dgvDepartments.Columns.Add(editButtonColumn);// 为按钮点击事件添加事件处理程序dgvDepartments.CellClick += dgvDepartments_CellClick;}/*if (!dgvDepartments.Columns.Contains("AnotherEditButton")){DataGridViewButtonColumn anotherEditButtonColumn = new DataGridViewButtonColumn();anotherEditButtonColumn.HeaderText = "操作";anotherEditButtonColumn.Name = "AnotherEditButton";anotherEditButtonColumn.Text = "编辑";anotherEditButtonColumn.UseColumnTextForButtonValue = true; // 这一行确保每个单元格显示"Edit"dgvDepartments.Columns.Add(anotherEditButtonColumn);// 为按钮点击事件添加事件处理程序dgvDepartments.CellClick += dgvDepartments_CellClick;}*/}private void dgvDepartments_CellClick(object sender, DataGridViewCellEventArgs e){if (e.ColumnIndex == dgvDepartments.Columns["EditButton"].Index && e.RowIndex >= 0){DataGridViewRow row = dgvDepartments.Rows[e.RowIndex];row.ReadOnly = false; // 允许编辑当前行// 获取当前行部门名称string departmentName = row.Cells["Name"].Value.ToString();// 创建并显示编辑窗口添加部门 editDepartmentForm = new 添加部门(departmentName); // 假设"DepartmentNameColumn"是包含部门名称的列的名称editDepartmentForm.ShowDialog(); // 以模态方式打开编辑窗口LoadDepartmentsAsync();//MessageBox.Show($"Edit clicked for row {e.RowIndex}");}}private Task<List<Department>> GetDepartmentsAsync(){return Task.Run(() =>{List<Department> departments = new List<Department>();using (var conn = new SqlConnection(connectionString)){conn.Open();var cmd = new SqlCommand("SELECT * FROM Department", conn);using (var reader = cmd.ExecuteReader()){while (reader.Read()){departments.Add(new Department{DepartmentID = reader.GetInt32(0),Name = reader.GetString(1),});}}}return departments;});}public class Department{public int DepartmentID { get; set; }public string Name { get; set; }}private void LoadDataButton_Click(object sender, EventArgs e){treeView1.Nodes.Clear();using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();// 加载部门using (SqlCommand cmd = new SqlCommand("SELECT DepartmentID, Name FROM Department", conn)){using (SqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){TreeNode deptNode = new TreeNode(reader["Name"].ToString());deptNode.Tag = reader["DepartmentID"];treeView1.Nodes.Add(deptNode);// 加载当前部门的员工LoadEmployeesForDepartment(deptNode);}}}}}private void LoadEmployeesForDepartment(TreeNode deptNode){int departmentId = (int)deptNode.Tag;using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();using (SqlCommand cmd = new SqlCommand("SELECT Name FROM Employees_Lists WHERE DepartmentID = @DepartmentID", conn)){cmd.Parameters.AddWithValue("@DepartmentID", departmentId);using (SqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){TreeNode empNode = new TreeNode(reader["Name"].ToString());deptNode.Nodes.Add(empNode);}}}}}/// <summary>/// 点击树结构中的部门获取数据库中员工的信息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e){// 清除DataGridView中当前的数据dataGridView1.DataSource = null;dataGridView1.Rows.Clear();dataGridView1.ReadOnly = true;dataGridView1.AllowUserToAddRows = false;//删除空白行// 判断点击的是否是部门节点(通过检查Tag是否包含DepartmentID)if (e.Node.Nodes.Count == 0 && e.Node.Parent != null){string employeeName = e.Node.Text; // 获取员工名字DataTable dataTable = new DataTable();using (SqlConnection conn = new SqlConnection(connectionString)){// 修改查询语句仅查询被点击的员工信息,这里假设每个员工名字是唯一的string query = "SELECT Name AS 员工, DepartmentID AS 部门Id FROM Employees_Lists WHERE Name = @EmployeeName";using (SqlCommand cmd = new SqlCommand(query, conn)){cmd.Parameters.AddWithValue("@EmployeeName", employeeName);using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)){adapter.Fill(dataTable);}}}// 将加载的数据显示在DataGridView中dataGridView1.DataSource = dataTable;// 将加载的数据显示在DataGridView中dataGridView1.DataSource = dataTable;}// 判断点击的是否是部门节点(通过检查Tag是否包含DepartmentID)else if (e.Node.Tag != null && int.TryParse(e.Node.Tag.ToString(), out int departmentId)){// 从数据库加载该部门下的所有员工信息DataTable dataTable = new DataTable();using (SqlConnection conn = new SqlConnection(connectionString)){string query = "SELECT a.Name AS 员工, b.Name AS 部门 FROM Employees_Lists a LEFT JOIN Department b ON a.DepartmentID = b.DepartmentID WHERE a.DepartmentID = @DepartmentID";using (SqlCommand cmd = new SqlCommand(query, conn)){cmd.Parameters.AddWithValue("@DepartmentID", departmentId);using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)){adapter.Fill(dataTable);}}}// 将加载的数据显示在DataGridView中dataGridView1.DataSource = dataTable;}}private void Btn_AddDepartment_Click(object sender, EventArgs e){Form AddDepartment = new 添加部门();AddDepartment.StartPosition = FormStartPosition.CenterScreen;AddDepartment.ShowDialog();}private void Btn_AddEmployee_Click(object sender, EventArgs e){Form AddEmployee = new 添加员工数据();AddEmployee.StartPosition = FormStartPosition.CenterScreen;AddEmployee.ShowDialog();}}
}

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

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

相关文章

计算机等级考试:信息安全技术 知识点六

1、P2DR模型是美国ISS公司提出的动态网络安全体系的代表模型&#xff0c;可用数学公式表达为Pt>DtRt&#xff0c;其中Pt表示&#xff1a;系统防护时间。 2、美国联邦政府颁布数字签名标准(Digital Signature Standard&#xff0c;DSS)的年份是1994 3、密码分析者(攻击者)已…

java.net.UnknownHostException

目录 报错信息 报错分析 UnknownHostException 分析 尝试解决 域名 报错可能 网络请求&#xff1a; 数据库连接&#xff1a; Socket通信&#xff1a; 总结&#xff1a; 报错信息 java.net.UnknownHostException Caused by: java.net.UnknownHostException:at java.…

深入浅出:Docker容器虚拟化技术解析

引言&#xff1a; 虚拟化技术的发展自20世纪末至今&#xff0c;经历了令人瞩目的演变。从最初的硬件虚拟化到后来的操作系统级虚拟化&#xff0c;每一次技术革新都为计算资源的管理和利用带来了巨大的变革。而在这不断发展的技术浪潮中&#xff0c;容器虚拟化技术的崛起引领着…

【c 语言 】移位操作符详解

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

【Java 并发】Semaphore

Java 中 的 Semaphore (信号量) 是多线程编程中一种重要的同步工具, 用于控制对共享资源的访问。 通过 Semaphore, 我们可以限制同时访问共享资源的线程数量, 有效地管理并发访问, 确保程序在多线程环境下的稳定性和效率。 在一些资源有限制场景下, Semaphore 是特别合适的, 比…

C++感受1-打开浏览器,线上玩转C++

介绍了五款在线编译、编译、运行的C线上环境。并选择其中的 “在线GDB” 网站动手编写、运行第一个C程序 “Hello World”&#xff0c;同时和线下IDE进行对比。 1. 课堂视频 打开浏览器&#xff0c;线上玩转C 2. 在线C编译环境对比 onlinegdb &#xff1a; www.onlinegdb.comr…

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题能修复吗?修复灯罩需要多久时间?

汽车大灯汽车尾灯破裂裂纹破损破洞掉角崩角等问题基本是可以修复的。 修复汽车灯罩的时间取决于多个因素&#xff0c;如灯罩的破损程度、修复方法的选择以及维修店的工作效率等。 一般来说&#xff0c;如果灯罩的破损程度较轻&#xff0c;仅需要进行简单的修复或翻新&#xf…

Python常用语法汇总(三):函数、类

9. 函数 #例1def greet_user(username): # 定义函数 """显示简单的问候语""" print(Hello, username.title() !) greet_user(Jesse) # 调用函数 #例2 def get_formatted_name(first_name,last_name): """返回整洁的姓名&q…

如何考上东南大学计算机学院?

东南大学招生学院是计算机科学与工程学院、苏州联合研究生院&#xff0c;复试公平&#xff0c;不歧视双非考生&#xff0c;985院校中性价比较高&#xff0c;但近年热度在逐年上涨&#xff0c;需要警惕。 建议报考计算机科学与工程学院081200计算机科学与技术专业目标分数为380…

帮管客CRM(jiliyu)接口SQL注入漏洞

文章目录 前言声明一、漏洞描述二、影响版本三、漏洞复现四、修复建议 前言 帮管客CRM客户管理系统专注于为企业提供crm客户关系管理、crm管理系统、crm软件产品及企业销售管理流程解决方案服务,助力企业业绩增长。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由…

jdk17出现错误无法初始化主类 和NoClassDefFoundError:Vector的解决方法

概述&#xff1a;网上流传文章大多都是编译和运行都加下面这串代码 --add-modulesjdk.incubator.vector我估计他们大多都是复制粘贴的文章&#xff0c;这种东西就是电子垃圾&#xff0c;在idea中&#xff0c;大多人都习惯用maven来构建java项目&#xff0c;接下来我将讲解使用…

倒计时34,33天

一&#xff1a; 背包问题复习&#xff1a; //01背包&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; int v[N],w[N],dp[N]; const int inf0x3f3f3f3f; void solve() {int n,V;cin>>n>>V;for(int i1;i<…

【C++】string学习 — 手搓string类项目

手搓string项目 1 string类介绍2 功能描述3 代码实现3.0 基础框架3.1 构造函数 和 析构函数3.2 流操作符重载 和 尾插扩容3.4 运算符重载3.5 实用功能3.6 迭代器模拟 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇…

LeetCode:206.反转链表

206. 反转链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

变更接口形参,但是不想影响接口调用者怎么办?

例如接口&#xff1a;public void test(String s1){}&#xff0c;该接口有多个生产者即调用者。 因为其中一个生产者需求变动&#xff0c;调用test方法的时候需要新增一个参数。这种情况下如果直接修改test方法增加参数&#xff0c;需要修改所有的调用者代码&#xff0c;比较麻…

linux下目录切换快捷指令

cd - "cd -" 是一个命令行中的快捷方式&#xff0c;用于返回上一个工作目录。通常&#xff0c;当你在命令行中使用 cd 命令切换目录时&#xff0c;系统会记住你之前所在的目录。通过输入 cd -&#xff0c;你可以返回到上一个目录&#xff0c;而不必输入完整的路径。…

如何使用 Langchain、Ollama 和 Streamlit 构建 RAG

一、先决条件&#xff1a;您需要了解什么 在深入讨论技术细节之前&#xff0c;我们先概述一下先决条件。Python 的基础知识至关重要&#xff0c;因为它是我们将使用的主要语言。熟悉机器学习和自然语言处理的基本概念将帮助您更轻松地掌握这些概念。此外&#xff0c;对 Langch…

蓝桥杯练习系统(算法训练)ALGO-973 唯一的傻子

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 腿铮找2255有点事&#xff0c;但2255太丑了&#xff0c;所以腿铮不知道他的长相。正愁不知道到如何找他的时候&#xff0c;…

TCP通信程序

#发端 #include "head.h"int main(void) { int sockfd 0;ssize_t nsize 0;struct sockaddr_in recvaddr;char tmpbuff[1024];int ret 0;int fd 0; int nret 0;sockfd socket(AF_INET,SOCK_STREAM,0); /* 流式套接字 */if(-1sockfd){perror("fail to socke…

【开发环境】Ubuntu 18.04 搭建 QT编译环境详细步骤 【亲测有效】

目录 1 查看Ubuntu系统中Qt版本 2 下载Ubuntu系统Qt版本安装包 3 Qt安装 3.1 Qt 安装步骤 3.2 安装qt发现Ubuntu空间不足&#xff0c;怎么去扩容呢&#xff1f; 3.2.1 硬盘操作步骤&#xff08;需要关闭虚拟机进行操作&#xff09; 3.2.2 Ubuntu命令操作&#xff1a;安装…