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(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();
        }
    }
}

 

 

 

主窗體:

添加學生窗體:

修改學生信息窗體:

刪除學生信息窗體:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM