數據庫:
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(1)));//將截取完的所有學生編號放進集合 } //冒泡排序,將截取后的整數類型的學生最大編號排出來,此時最大編號在索引0上 for (int i = 0; i < max.Count-1; i++) { for (int j = i + 1; j < max.Count; j++) { if (max[i] < max[j]) { int zhong = max[i]; max[i] = max[j]; max[j] = zhong; } } } code = "s" +( max[0] + 1);//每次新的編號就是最大編號的整數部分加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 > 0) { 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 > 0) { 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 >0) { 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 != 1) //SelectedItems獲取控件中選中的項 { MessageBox.Show("每次只能選擇一個同學進行修改!"); return; } foreach (ListViewItem li in listView1.SelectedItems) { s.Code = li.Text; s.Name = li.SubItems[1].Text; if (li.SubItems[2].Text == "男") { s.Sex = true; } else { s.Sex = false; } s.Birthday = Convert.ToDateTime(li.SubItems[3].Text); s.Score = Convert.ToDecimal(li.SubItems[4].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 != 1) //SelectedItems獲取控件中選中的項 { MessageBox.Show("每次只能選擇一個同學進行刪除!"); return;//返回出去 } foreach (ListViewItem li in listView1.SelectedItems) { s.Code = li.Text; s.Name = li.SubItems[1].Text; if (li.SubItems[2].Text == "男") { s.Sex = true; } else { s.Sex = false; } s.Birthday = Convert.ToDateTime(li.SubItems[3].Text); s.Score = Convert.ToDecimal(li.SubItems[4].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(); } } }
主窗體:

添加學生窗體:

修改學生信息窗體:


刪除學生信息窗體:


