Winform 学生管理系统增删改查
数据库:
create database adonet
go
use adonet
go create table xue
(
code nvarchar(50),
name nvarchar(50),
sex bit,
birth datetime,
chengji decimal(10,2)
) insert into xue values('s101','张三',1,'1995-3-2',99)
insert into xue values('s102','李四',1,'1995-4-2',89)
insert into xue values('s103','王五',1,'1994-3-8',95)
insert into xue values('s104','赵六',1,'1993-8-4',79)
insert into xue values('s105','小红',0,'1996-5-11',68)
VS代码部分:
数据库实体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 学生管理系统.数据库实体
{
public class student
{
private string _code; public string Code
{
get { return _code; }
set { _code = value; }
}
private string _name; public string Name
{
get { return _name; }
set { _name = value; }
}
private bool _sex; public bool Sex
{
get { return _sex; }
set { _sex = value; }
}
private DateTime _birthday; public DateTime Birthday
{
get { return _birthday; }
set { _birthday = value; }
}
private decimal _score; public decimal Score
{
get { return _score; }
set { _score = value; }
}
}
}
数据库访问操作类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using 学生管理系统.数据库实体;
using System.Data.SqlClient; namespace 学生管理系统.数据库访问
{
public class studentdata
{
SqlConnection conn = null;
SqlCommand cmd = null; public studentdata()
{
conn =new SqlConnection("server=.;database=adonet;user=sa;pwd=123;");
cmd = conn.CreateCommand();
} /// <summary>
/// 查询全部学生的信息
/// </summary>
/// <returns></returns>
public List<student> selectall()
{
List<student> li = new List<student>();
cmd.CommandText = "select * from xue";
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
student st = new student();
st.Code = dr["code"].ToString();
st.Name = dr["name"].ToString();
st.Sex = Convert.ToBoolean(dr["sex"]);
st.Birthday = Convert.ToDateTime(dr["birth"]);
st.Score = Convert.ToDecimal(dr["chengji"]); li.Add(st);
}
}
conn.Close();
return li;
} /// <summary>
/// 返回一个新的学生编号
/// </summary>
/// <returns></returns>
public string fcode()
{
string code = "";
List<student> li = selectall();//引用一下查询学生全部信息 List<int> max = new List<int>();//用来选取学生最大编号
foreach (student s in li) //遍历学生信息
{
//只点出编号,截取字符串一号索引之后的,因为学号的格式为s101,需要截取字母后面的,以便下一步操作
max.Add(Convert.ToInt32(s.Code.Substring()));//将截取完的所有学生编号放进集合
}
//冒泡排序,将截取后的整数类型的学生最大编号排出来,此时最大编号在索引0上
for (int i = ; i < max.Count-; i++)
{
for (int j = i + ; j < max.Count; j++)
{
if (max[i] < max[j])
{
int zhong = max[i];
max[i] = max[j];
max[j] = zhong;
}
}
} code = "s" +( max[] + );//每次新的编号就是最大编号的整数部分加1,前面再拼上s编号格式
return code;
} /// <summary>
/// 新增学员信息
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public bool insert(student s)
{
bool isok = false;
cmd.CommandText = "insert into xue values(@code,@name,@sex,@birth,@score)";
cmd.Parameters.Clear();
cmd.Parameters.Add("@code",s.Code);
cmd.Parameters.Add("@name",s.Name);
cmd.Parameters.Add("@sex", s.Sex);
cmd.Parameters.Add("@birth", s.Birthday);
cmd.Parameters.Add("@score", s.Score);
conn.Open();
int count= cmd.ExecuteNonQuery();
conn.Close();
if (count > )
{
isok = true;
}
return isok;
} /// <summary>
/// 修改学生信息
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public bool update(student s)
{
bool isok = false;
cmd.CommandText = "update xue set name=@name,sex=@sex,birth=@birth,chengji=@chengji where code=@code ";
cmd.Parameters.Clear();
cmd.Parameters.Add("@code", s.Code);
cmd.Parameters.Add("@name", s.Name);
cmd.Parameters.Add("@sex", s.Sex);
cmd.Parameters.Add("@birth", s.Birthday);
cmd.Parameters.Add("@chengji", s.Score);
conn.Open();
int count= cmd.ExecuteNonQuery();
conn.Close();
if (count > )
{
isok = true;
}
return isok;
} /// <summary>
/// 删除学生信息
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public bool delete(student s)
{
bool isok=false;
cmd.CommandText = "delete from xue where code=@code";
cmd.Parameters.Clear();
cmd.Parameters.Add("@code",s.Code);
conn.Open();
int count = cmd.ExecuteNonQuery();
conn.Close();
if (count >)
{
isok = true;
}
return isok; }
}
}
主窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 学生管理系统.数据库实体;
using 学生管理系统.数据库访问; namespace 学生管理系统
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
shuaxin();//在构造函数中调用查询显示的方法,每次一进来都刷新显示一遍
} public void shuaxin()//将数据库查询显示在 listView中
{
listView1.Items.Clear();//每次查询显示都清空一次listView集合,只显示新的数据
List<student> data = new studentdata().selectall();//调用数据库操作访问类中的查询方法方法
foreach (student st in data) //遍历一下操作类方法中返回的值
{
ListViewItem lis = new ListViewItem();//new一个ListView集合,将返回的集合放进去
lis.Text = st.Code;
lis.SubItems.Add(st.Name);
lis.SubItems.Add(st.Sex?"男":"女");
lis.SubItems.Add(st.Birthday.ToString("yyyy年MM月dd日"));
lis.SubItems.Add(st.Score.ToString()); listView1.Items.Add(lis);
}
} List<Form> f = new List<Form>();//写一个泛型集合将所有窗体放进去
Form2tj f2 = null;
private void button1_Click(object sender, EventArgs e)
{
//点击添加按钮后将之前写好的添加窗体实例化出来,
f2 = new Form2tj(this);//因为添加窗体中利用传参的方法引用了此窗体,所以实例化的添加窗体也需要将本窗体放进参数
bool has = false;
foreach (Form ff in f)//为了保证弹出窗体的唯一性,也就是点击只弹出这一个窗体,再次点击不会重复弹出
{ //那就需要遍历所有From窗体
if (ff.Name == f2.Name)//然后进行进行判断,如果在原有的窗体中有和新开窗体名称相同的
{
has = true;
ff.WindowState = FormWindowState.Normal;//将窗口的显示状态执行初始状态,也就是最小化,最大化都会执行还原
ff.Show();//那就显示原有的窗口
ff.Activate();//激活窗体并给予它焦点,这一步就是用于点击打开的窗体获得焦点显示在最前端
f2.Close();//将新开的窗口关闭
}
if (ff.Name != f2.Name) //把其他窗口隐藏掉
{
ff.Hide();
}
}
if (has == false) //如果原有窗体没有与新开窗体同名的
{
f2.Show();//那就将新窗体执行开启显示
f.Add(f2);//并且将这个窗体放进集合中,下次再点击这个按钮就会执行上面的步骤
} } //根据以上写法,已经打开过一次的窗体就存在于Form窗体集合中,
//那关闭这个窗体再点击弹出这个窗体的按钮时就会报错,以为已经存在这个窗体
//所以要写一个方法,让弹出的窗体关闭时同时也将此窗体从窗体集合中移除
public void deletef2()
{
List<Form> fr = new List<Form>();//创建窗体类的泛型集合
foreach (Form fd in f) //遍历f这个窗体集合
{
if (fd.Name != f2.Name) //判断一下所有和新开窗体不同名的窗体
{
fr.Add(fd);//将这些窗体放入新创建的集合,
}
}
f = fr;//再把这个集合赋值给原来的窗体集合,新赋值进去的覆盖了原有的,
} //这样,就把这个窗体从集合中移除,然后再去这个窗体的后台代码中写一个关闭前事件调用此方法 //修改按钮点击事件
Form3xg f3 = null;
private void button2_Click(object sender, EventArgs e)
{
student s = new student();
if (listView1.SelectedItems.Count != ) //SelectedItems获取控件中选中的项
{
MessageBox.Show("每次只能选择一个同学进行修改!");
return;
} foreach (ListViewItem li in listView1.SelectedItems)
{
s.Code = li.Text;
s.Name = li.SubItems[].Text;
if (li.SubItems[].Text == "男")
{
s.Sex = true;
}
else
{
s.Sex = false;
}
s.Birthday = Convert.ToDateTime(li.SubItems[].Text);
s.Score = Convert.ToDecimal(li.SubItems[].Text);
} //弹出窗体的唯一性
f3 = new Form3xg(s,this);
bool has = false;
foreach (Form ff in f)//为了保证弹出窗体的唯一性,也就是点击只弹出这一个窗体,再次点击不会重复弹出
{ //那就需要遍历所有From窗体
if (ff.Name == f3.Name)//然后进行进行判断,如果在原有的窗体中有和新开窗体名称相同的
{
has = true;
ff.WindowState = FormWindowState.Normal;//将窗口的显示状态执行初始状态,也就是最小化,最大化都会执行还原
ff.Show();//那就显示原有的窗口
ff.Activate();//激活窗体并给予它焦点,这一步就是用于点击打开的窗体获得焦点显示在最前端
f3.Close();//将新开的窗口关闭
}
if (ff.Name != f3.Name)
{
ff.Hide();
}
}
if (has == false) //如果原有窗体没有与新开窗体同名的
{
f3.Owner = this;//拥有者,这个窗体显示在前面
f3.Show();//那就将新窗体执行开启显示
f.Add(f3);//并且将这个窗体放进集合中,下次再点击这个按钮就会执行上面的步骤
}
} public void deletef3()
{
List<Form> fr = new List<Form>();//创建窗体类的泛型集合
foreach (Form fd in f) //遍历f这个窗体集合
{
if (fd.Name != f3.Name) //判断一下所有和新开窗体不同名的窗体
{
fr.Add(fd);//将这些窗体放入新创建的集合,
}
}
f = fr;//再把这个集合赋值给原来的窗体集合,新赋值进去的覆盖了原有的,
} //删除按钮点击事件
Form4sc f4 = null;
private void button3_Click(object sender, EventArgs e)
{
student s = new student();
if (listView1.SelectedItems.Count != ) //SelectedItems获取控件中选中的项
{
MessageBox.Show("每次只能选择一个同学进行删除!");
return;//返回出去
} foreach (ListViewItem li in listView1.SelectedItems)
{
s.Code = li.Text;
s.Name = li.SubItems[].Text;
if (li.SubItems[].Text == "男")
{
s.Sex = true;
}
else
{
s.Sex = false;
}
s.Birthday = Convert.ToDateTime(li.SubItems[].Text);
s.Score = Convert.ToDecimal(li.SubItems[].Text);
}
f4 = new Form4sc(s,this);
//弹出窗体的唯一性
bool has = false;
foreach (Form ff in f)//为了保证弹出窗体的唯一性,也就是点击只弹出这一个窗体,再次点击不会重复弹出
{ //那就需要遍历所有From窗体
if (ff.Name == f4.Name)//然后进行进行判断,如果在原有的窗体中有和新开窗体名称相同的
{
has = true;
ff.WindowState = FormWindowState.Normal;//将窗口的显示状态执行初始状态,也就是最小化,最大化都会执行还原
ff.Show();//那就显示原有的窗口
ff.Activate();//激活窗体并给予它焦点,这一步就是用于点击打开的窗体获得焦点显示在最前端
f4.Close();//将新开的窗口关闭
}
if (ff.Name != f4.Name)
{
ff.Hide();
}
}
if (has == false) //如果原有窗体没有与新开窗体同名的
{
f4.Owner = this;//拥有者,这个窗体显示在前面
f4.Show();//那就将新窗体执行开启显示
f.Add(f4);//并且将这个窗体放进集合中,下次再点击这个按钮就会执行上面的步骤
}
} public void deletef4()
{
List<Form> fr = new List<Form>();//创建窗体类的泛型集合
foreach (Form fd in f) //遍历f这个窗体集合
{
if (fd.Name != f4.Name) //判断一下所有和新开窗体不同名的窗体
{
fr.Add(fd);//将这些窗体放入新创建的集合,
}
}
f = fr;//再把这个集合赋值给原来的窗体集合,新赋值进去的覆盖了原有的,
}
}
}
添加学生窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 学生管理系统.数据库实体;
using 学生管理系统.数据库访问; namespace 学生管理系统
{
public partial class Form2tj : Form
{
//窗体连接操作,比如此窗体Form2tj要连接调用主窗体Form1,则需要
Form1 F1 = null;//建立一个空的Form1对象
public Form2tj(Form1 fi)//将主窗体以传参的形式传进来
{
InitializeComponent();
label_code.Text = new studentdata().fcode();
F1=fi;//然后将传进来的Form1窗体赋值给自己建立的Form1对象,这样通过F1就可以操作Form1窗体中的方法
} private void button1_Click(object sender, EventArgs e)
{
if(string.IsNullOrEmpty(textBox_name.Text))
{
name_cw.Text="不能为空";
return;
}
else
{
name_cw.Text="";
}
student s = new student();
s.Code= label_code.Text;
s.Name = textBox_name.Text;
s.Sex = radioButton_nan.Checked;
s.Birthday = dateTimePicker1.Value;
s.Score=Convert.ToDecimal(textBox_score.Text); bool isok=new studentdata().insert(s);
if(isok==true)
{
MessageBox.Show("添加成功!");
if(F1!=null)
{
F1.shuaxin();
}
this.Close();
}
else
{
MessageBox.Show("添加失败!");
}
} private void button2_Click(object sender, EventArgs e)
{
textBox_name.Text = "";
radioButton_nan.Checked = true;
dateTimePicker1.Value = DateTime.Now;
textBox_score.Text = "";
} //FormClosing关闭前事件
private void Form2tj_FormClosing(object sender, FormClosingEventArgs e)
{
F1.deletef2();//调用form1中写的方法
}
}
}
修改学生窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 学生管理系统.数据库实体;
using 学生管理系统.数据库访问; namespace 学生管理系统
{
public partial class Form3xg : Form
{
Form1 F1 = null;
public Form3xg(student s,Form1 f1)
{
InitializeComponent();
label_code.Text = s.Code;
textBox_name.Text = s.Name;
if (s.Sex == true)
{
radioButton_nan.Checked = true;
}
else
{
radioButton_nv.Checked = true;
}
dateTimePicker1.Value = s.Birthday;
textBox_score.Text = s.Score.ToString();
F1 = f1; } private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox_name.Text))
{
name_cw.Text = "不能为空";
return;
}
else
{
name_cw.Text = "";
}
student s = new student();
s.Code = label_code.Text;
s.Name = textBox_name.Text;
s.Sex = radioButton_nan.Checked;
s.Birthday = dateTimePicker1.Value;
s.Score = Convert.ToDecimal(textBox_score.Text); bool isok = new studentdata().update(s);
if (isok == true)
{
MessageBox.Show("修改成功!");
if (F1 != null)
{
F1.shuaxin();
}
this.Close();
}
else
{
MessageBox.Show("修改失败!");
}
} private void button2_Click(object sender, EventArgs e)
{
textBox_name.Text = "";
radioButton_nan.Checked = true;
dateTimePicker1.Value = DateTime.Now;
textBox_score.Text = "";
} private void Form3xg_FormClosing(object sender, FormClosingEventArgs e)
{
F1.deletef3();
}
}
}
删除学生窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using 学生管理系统.数据库实体;
using 学生管理系统.数据库访问; namespace 学生管理系统
{
public partial class Form4sc : Form
{
Form1 F1 = null;
public Form4sc(student s,Form1 f1)
{
InitializeComponent();
label_code.Text = s.Code;
textBox_name.Text = s.Name;
if (s.Sex == true)
{
radioButton_nan.Checked = true;
}
else
{
radioButton_nv.Checked = true;
}
dateTimePicker1.Value = s.Birthday;
textBox_score.Text = s.Score.ToString();
F1 = f1;
} private void button1_Click(object sender, EventArgs e)
{
student s = new student();
s.Code = label_code.Text;
bool isok = new studentdata().delete(s);
if (isok == true)
{
MessageBox.Show("删除成功!");
if (F1 != null)
{
F1.shuaxin();
}
this.Close();
}
else
{
MessageBox.Show("删除失败!");
}
}
//取消按钮点击
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
//窗体关闭前执行主窗体中写的将此窗体移出窗体集合的方法,以免再次打开出错
private void Form4sc_FormClosing(object sender, FormClosingEventArgs e)
{
F1.deletef4();
}
}
}
主窗体:

添加学生窗体:

修改学生信息窗体:


删除学生信息窗体:


Winform 学生管理系统增删改查的更多相关文章
- JDBC-简单的学生管理系统-增删改查
结构:三层架构--mvc 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑. 比如将数据库操作代码封装到一层中,提供一些方法根据参数直 ...
- JDBC+Servlet+JSP的学生案例增删改查
数据库信息传输到页面实现. 先进行学生信息页面展示: 接口IStudentDao public interface IStudentDao { /** * 保存操作 * @param stu 学生对象 ...
- Java学生信息增删改查(并没用数据库)
一个泛型的应用,Java版本增删改查,写的简陋,望批评指正 2016-07-02 很久前写的一个程序了.拿出来存一下,不是为了展示啥,自己用的时候还可以看看.写的很粗糙. import java.io ...
- winform 窗体实现增删改查(CRUD)共用模式
转载:http://www.csframework.com/archive/2/arc-2-20110617-1632.htm 高度封装的编辑窗体 http://www.cnblogs.com/wuh ...
- Spring Boot实现学生信息增删改查
上一篇博客写了如何初始化一个简单的Spring Boot项目,这次详细记录一下如何连接数据库并实现增删改查基本操作. 我使用的是MySQL 5.5+Navicat,MySQL量级比较轻,当然微软的SQ ...
- 【良心保姆级教程】java手把手教你用swing写一个学生的增删改查模块
很多刚入门的同学,不清楚如何用java.swing去开发出一个系统? 不清楚如何使用java代码去操作数据库进行增删改查一些列操作,不清楚java代码和数据库(mysql.sqlserver)之间怎么 ...
- 将xml文件作为一个小的数据库,进行学生的增删改查
1.xml文件: <?xml version="1.0" encoding="UTF-8"?><Students> <studen ...
- MVC模式的学生信息增删改查
准备:建一个名为 userdb的数据库.建一个student表,有stuid,stuname,gender三个字段.其中stuid为主键.j加入相应的驱动包,相应的JSTL标签 先看目录结构 代码: ...
- Sqlite3 实现学生信息增删改查
import sqlite3 conn = sqlite3.connect('studentsdb.db') # 连接数据库 cursor = conn.cursor( ) # 创建数据表 def c ...
随机推荐
- Fiddler设置抓取https请求
环境准备 1.安装最新版本的Fiddler程序 官网地址:https://www.telerik.com/fiddler 本文写的时候,fiddler最新的版本为5.0 2.安装fiddler证书生成 ...
- C program basic
郝人牛语 入门最基本的方法就是从C语言入手. 当你成为C语言的高手,那么你很容易进入到操作系统的平台里面去:当你进入到操作系统的平台里去实际做程序时,就会懂得进行调试:当你懂得调试的时候,你就会发现能 ...
- LeetCode 5. Longest Palindromic Substring & 回文字符串
Longest Palindromic Substring 回文这种简单的问题,在C里面印象很深啊.希望能一次过. 写的时候才想到有两种情况: 454(奇数位) 4554(偶数位) 第1次提交 cla ...
- [UGUI]渲染层级关系
参考链接: http://blog.csdn.net/meegomeego/article/details/42060389 Unity中的渲染顺序自上而下大致可以分为三层: 1.Camera层.可以 ...
- 关于thinkphp中post提交空白的思考
关于thinkphp中post提交空白的思考 首选检查 目标路径是否存在 如果目标URL不存在 那肯定是空 如果提交的路径存储 TP这种完善的系统肯定会提示 各种报错了
- 《算法》第四章部分程序 part 13
▶ 书中第四章部分程序,包括在加上自己补充的代码,图的前序.后序和逆后续遍历,以及传递闭包 ● 图的前序.后序和逆后续遍历 package package01; import edu.princeto ...
- 《汇编语言 基于x86处理器》第十章结构和宏部分的代码
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...
- EA Data Modeling 显示别名设置
1.设置 2.效果
- spark基础知识介绍(包含foreachPartition写入mysql)
数据本地性 数据计算尽可能在数据所在的节点上运行,这样可以减少数据在网络上的传输,毕竟移动计算比移动数据代价小很多.进一步看,数据如果在运行节点的内存中,就能够进一步减少磁盘的I/O的传输.在spar ...
- 为什么我希望用C而不是C++来实现ZeroMQ
原文在这里 开始前我要先做个澄清:这篇文章同Linus Torvalds这种死忠C程序员吐槽C++的观点是不同的.在我的整个职业生涯里我都在使用C++,而且现在C++依然是我做大多数项目时的首选编程语 ...