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 ...
随机推荐
- SpringBoot异步请求
何为异步请求 在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理.如果一个请求需要进行IO操作,比如 ...
- tornado 和 djanjo 转义处理对比
tornado tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 所有的模板输出都已经通过 tornado.escape.xhtml ...
- 输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。程序设计思路。
将文件内容读取后存入StringBuffer中. 利用函数将段落分割成字符串,按(“,”,“.”,“!”,“空格”,“回车”)分割,然后存入数组中. 遍历数组,并统计每个单词及其出现的次数. 要求出文 ...
- 【Python爬虫实战】Scrapy框架的安装 搬运工亲测有效
windows下亲测有效 http://blog.csdn.net/liuweiyuxiang/article/details/68929999这个我们只是正确操作步骤详解的搬运工
- python学习笔记_week24
note 内容回顾: Model - 数据库操作 on_delete Query_set select_related 跨表数据一次性拿过来,不增加sql查询次数.帮助跨表,后面参数只能加连表字段 f ...
- python 小笔记
1 删除非空文件夹 import shutil shutil.rmtree('c:\\test') print 'ok' ## 判断非空删除 if os.path.exists('../'+kemu_ ...
- cmd批处理命令及powershell
https://blog.csdn.net/wenzhongxiang/article/details/79256937 Powershell查询IP地址及主机名信息:1.foreach($ipv4 ...
- [Writeup]二维码的一个题
[Writeup]二维码的一个题 瓜皮感觉难出题眼,恶魔暴力膜法初现 看题 一个二维码,扫出来是where is the flag?(where is my mind?) 先感觉 用binwalk扫一 ...
- web安全/渗透测试--1--web安全原则
web 安全: https://blog.csdn.net/wutianxu123/article/category/8037453/2 web安全原则 安全应该是系统开发之初就考虑的问题.换句话说 ...
- 机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)
7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的 ...