半個學期即將完美結束,精美的學生管理系統也終於亮相啦,哈哈!
話不多說,切入正題。
首先,要了解完成學生管理系統的步驟:
總共有幾個模塊,我就逐一講解:
完成登錄頁面模塊:
判斷“登錄”是否成功的代碼:
1 private void btnLogin_Click(object sender, EventArgs e) 2 { 3 string str = DBHelper.str; 4 SqlConnection con = new SqlConnection(str); 5 string sql = "select count(1) from student where studentname='" + txtnamea.Text + "' and loginpwd='" + txtpwdtu.Text + "' "; 6 SqlCommand cmd = new SqlCommand(sql,con); 7 con.Open(); 8 int count = Convert.ToInt32(cmd.ExecuteScalar()); 9 if (count > 0) 10 { 11 //MessageBox.Show("登陸成功"); 12 this.Hide(); 13 //Welcome frm = new Welcome(); 14 15 //frm.name= txtnamea.Text; 16 //frm.Show(); 17 } 18 con.Close(); 19 //用戶名,密碼和登錄類型都不能為空 20 if (CheckInput()) 21 { 22 //顯示系統管理員主窗體 23 //隱藏登錄窗體 24 this.Hide(); 25 } 26 FrmAdminMain frm = new FrmAdminMain(); 27 //方法1: 28 //frm.pwd=txtpwdtu.Text; 29 //方法2: 30 Tool.pwd = txtpwdtu.Text; 31 frm.Show(); 32 }
1 if (this.txtnamea.Text.Trim().Equals(string.Empty)) 2 { 3 MessageBox.Show("請輸入用戶名", caption, MessageBoxButtons.OK, MessageBoxIcon.Information); 4 this.txtnamea.Focus(); 5 return false; 6 } 7 else if (this.txtpwdtu.Text.Trim().Equals(string.Empty)) 8 { 9 MessageBox.Show("請輸入密碼", caption, MessageBoxButtons.OK, MessageBoxIcon.Information); 10 this.txtpwdtu.Focus(); 11 return false; 12 } 13 else if (this.cboLoginType.Text.Trim().Equals(string.Empty)) 14 { 15 MessageBox.Show("請輸入登錄類型", caption, MessageBoxButtons.OK, MessageBoxIcon.Information); 16 this.cboLoginType.Focus(); 17 return false; 18 } 19 else 20 { 21 return true; 22 }
修改密碼的窗體:
修改密碼的代碼:
1 private void FrmChangePwd_Load(object sender, EventArgs e) 2 { 3 //顏色變化 4 this.BackColor = Color.Red; 5 //顯示舊密碼到就文本框里面 6 txtoldpwd.Text = Tool.pwd; 7 } 8 9 private void btnqueren_Click(object sender, EventArgs e) 10 { 11 string num = txtnewpwd.Text; 12 string str = DBHelper.str; 13 14 string sql = "update student set loginpwd='" + num + "' where loginpwd='" + txtoldpwd.Text + "'"; 15 SqlConnection con = new SqlConnection(str); 16 SqlCommand cmd = new SqlCommand(sql, con); 17 con.Open(); 18 if (txtconfrimpwd.Text.Equals(num)) 19 { 20 int com = Convert.ToInt32(cmd.ExecuteScalar()); 21 } 22 23 DialogResult result = MessageBox.Show("確定要修改密碼嗎?","溫馨提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question); 24 if (result==DialogResult.Yes) 25 { 26 this.Close(); 27 } 28 con.Close();
制作管理員窗體:
怎樣做才使“窗體跳轉”的代碼:
//選擇"新增學生"時打開"編輯學生信息"窗體 private void 編輯學生信息ToolStripMenuItem_Click(object sender, EventArgs e) { FrmEditStudent frm = new FrmEditStudent(); frm.MdiParent = this; frm.Show(); } private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult result = MessageBox.Show("確認要退出嗎?", "溫馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { this.Close(); } } //選擇“窗口”中的查詢學生時顯示的“窗體” private void 查詢學生信息ToolStripMenuItem_Click(object sender, EventArgs e) { FrmSearchByName frm = new FrmSearchByName(); frm.MdiParent = this.MdiParent; frm.Show(); } //選擇“幫助”中的”關於“時顯示的窗體 private void 關於ToolStripMenuItem_Click(object sender, EventArgs e) { FrmAbout frm = new FrmAbout(); frm.MdiParent = this.MdiParent; frm.Show(); } private void 修改密碼ToolStripMenuItem_Click(object sender, EventArgs e) { FrmChangePwd frm = new FrmChangePwd(); frm.MdiParent = this.MdiParent; //讓修改密碼前,給其pwd賦值 //frm.pwd = pwd; frm.Show(); } private void toolStripDropDownButton1_Click_2(object sender, EventArgs e) { FrmEditStudent frm = new FrmEditStudent(); frm.MdiParent = this.MdiParent; frm.Show(); } private void toolStripDropDownButton2_Click(object sender, EventArgs e) { FrmSearchByName frm = new FrmSearchByName(); frm.MdiParent = this.MdiParent; frm.Show();
編輯學生窗體:
怎么樣才能得到所有“年級名稱”的代碼:
1 //加載年級到下拉框信息 2 public void LoadGrade() { 3 4 //拿到所有年級名稱 5 string str = DBHelper.str; 6 SqlConnection con = new SqlConnection(str); 7 string sql = "select gradename from grade"; 8 SqlCommand cmd = new SqlCommand(sql, con); 9 10 con.Open(); 11 SqlDataReader dr = cmd.ExecuteReader(); 12 13 if (dr != null) 14 { 15 if (dr.HasRows) 16 { 17 while (dr.Read()) 18 { 19 string gname = dr["gradename"].ToString(); 20 //將年級放到下拉框中 21 cbograde.Items.Add(gname); 22 } 23 } 24 }
拿到所有“學生信息”的代碼:
1 //通過學生學號更改信息 2 public void LoadStudentbyStudentno() { 3 string str = DBHelper.str; 4 SqlConnection con = new SqlConnection(str); 5 6 string sql = "select *from student where studentno=" + studentNo + ""; 7 SqlCommand cmd = new SqlCommand(sql,con); 8 9 try 10 { 11 con.Open(); 12 SqlDataReader dr = cmd.ExecuteReader(); 13 //一列拆解,復制到當前的文本框 14 while (dr.Read()) 15 { 16 //獲取名字 17 string stuname = dr["studentname"].ToString(); 18 txtname.Text = stuname; 19 //獲取電話 20 string stuphone = dr["phone"].ToString(); 21 txtphone.Text = stuphone; 22 //獲取地址 23 string stuadress = dr["address"].ToString(); 24 txtadress.Text = stuadress; 25 //獲取郵件 26 string stuemail= dr["email"].ToString(); 27 txtemail.Text = stuemail; 28 ////獲取密碼 29 //string strpwd=dr["LoginPwd"].ToString(); 30 //txtpwd.Text = strpwd; 31 ////確認密碼 32 //txttruepwd.Text = strpwd; 33 //獲取出生日期 34 DateTime day =Convert.ToDateTime( dr["birthday"]); 35 cbobirthdatetime.Value = day; 36 //獲取年級名稱 37 int getid = Convert.ToInt32(dr["gradeid"]); 38 string gradename = GetidName(getid); 39 cbograde.Text = gradename; 40 //獲取性別 41 string genders=dr["gender"].ToString(); 42 if (genders.Equals("0")) 43 { 44 rbtnFemale.Checked = true; 45 } 46 if(genders.Equals("1")) { 47 48 rbtnMale.Checked = true; 49 } 50
將“年級編號”轉化為“年級名稱”的代碼:
1 //將年級編號轉換為年級名稱 2 public string GetidName(int getid) 3 { 4 string str = DBHelper.str; 5 SqlConnection con = new SqlConnection(str); 6 7 string sql = "select gradename from grade where gradeid=" + getid + ""; 8 SqlCommand cmd = new SqlCommand(sql, con); 9 string getname = ""; 10 try 11 { 12 con.Open(); 13 getname = cmd.ExecuteScalar().ToString(); 14 } 15 catch (Exception) 16 { 17 18 } 19 finally 20 { 21 con.Close(); 22 } 23 return getname;
當你點擊“修改”的時候,”編輯窗體“變為“修改信息的窗體”的代碼:
1 private void FrmEditStudent_Load(object sender, EventArgs e) 2 { 3 LoadGrade(); 4 //當點修改按鈕時,變成修改窗體 5 if (studentNo != 0) 6 { 7 this.Text = "修改學生信息"; 8 btnsave.Text = "修改"; 9 } 10 else { 11 this.Text = "編輯學生信息"; 12 btnsave.Text = "保存"; 13 } 14 15 txtnano.Text = studentNo.ToString(); 16 LoadStudentbyStudentno(); 17 }
修改“學生信息”的代碼:
1 public void updateInfo() { 2 //修改密碼 3 string pwd = txtpwd.Text; 4 //修改姓名 5 string studentname = txtname.Text; 6 //修改性別 7 string studentgender = string.Empty; 8 if (rbtnFemale.Checked)//女 9 { 10 studentgender = "0"; 11 } 12 else if (rbtnMale.Checked)//男 13 { 14 studentgender = "1"; 15 } 16 //如何給下拉框綁定數據 17 int getid = GetIdByName(); 18 //修改電話 19 string phone = txtphone.Text; 20 //修改地址 21 string adrers = txtadress.Text; 22 //修改日期 23 DateTime birthdate = this.cbobirthdatetime.Value; 24 //修改郵件 25 string emailt = txtemail.Text; 26 string sql =string.Format("update student set loginpwd='{0}',studentname='{1}',gender='{2}',gradeid='{3}',phone='{4}',address='{5}',birthday='{6}',email='{7}' where studentno={8}", pwd, studentname, studentgender, getid, phone, adrers, birthdate, emailt,studentNo); 27 string str = DBHelper.str; 28 SqlConnection con = new SqlConnection(str); 29 SqlCommand cmd = new SqlCommand(sql, con); 30 con.Open(); 31 int count = cmd.ExecuteNonQuery(); 32 if (count>0) 33 { 34 //調用查詢窗口的一個DataSelect()方法 35 frmselectInfo.DataSelect(); 36 MessageBox.Show("修改成功"); 37 } 38 else 39 { 40 MessageBox.Show("失敗"); 41 }
1 //根據學號是否為0,判定該按鈕用來執行“添加”還是“修改” 2 if (studentNo != 0) 3 { 4 //修改 5 updateInfo(); 6 } 7 else 8 { 9 //添加 10 AddStudent(); 11 }
將“年級名稱”變為“年級名稱”的代碼:
1 //該方法將年級名稱轉換成年級編號 2 public int GetIdByName() 3 { 4 string str = DBHelper.str; 5 SqlConnection con = new SqlConnection(str); 6 string sql = "select gradeid from grade where gradename='" + cbograde.Text + "'"; 7 SqlCommand cmd = new SqlCommand(sql, con); 8 int getid = 0; 9 try 10 { 11 con.Open(); 12 getid = Convert.ToInt32(cmd.ExecuteScalar()); 13 }
按姓名查詢學生信息的窗體:
查詢和在Load事件中提前顯示的代碼:
1 private void FrmSearchByName_Load(object sender, EventArgs e) 2 { 3 //在Load事件中編寫代碼提前顯示 4 //查詢 5 string sql = @"select Studentno,Studentname,Gender,gradename 6 from student,grade 7 where student.gradeid=grade.gradeid "; 8 LoadFrmListView(sql); 9 } 10 //查詢數據 11 public void DataSelect() 12 { 13 lvlistview.Items.Clear(); 14 string sql = @"select studentno,studentname,Gender,gradename from student,grade 15 where student.gradeid=grade.gradeid and studentname like '%" + txtsearchname.Text + "%'"; 16 LoadFrmListView(sql); 17 }
獲取學號的代碼:
1 private void 修改ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 4 if (this.lvlistview.SelectedItems.Count > 0) 5 { 6 FrmEditStudent frm = new FrmEditStudent(); 7 //將選中的學號傳遞到"編輯學生信息窗體" 8 //frm.studentNo = Convert.ToInt32(this.lvlistview.SelectedItems[0].Text);也可以 9 frm.studentNo = Convert.ToInt32(this.lvlistview.SelectedItems[0].SubItems[0].Text); 10 frm.MdiParent = this.MdiParent; 11 frm.frmselectInfo = this; 12 frm.Show();
獲取學生信息的代碼::
1 //獲取學號 2 int stuNo = Convert.ToInt32(dr["studentno"]); 3 //第二列獲取姓名 stuname 4 string stuName = Convert.ToString(dr["studentname"]); 5 //第三列 獲取 性別 6 string stugender = Convert.ToString(dr["gender"]); 7 //獲取年級名稱 8 string gname = Convert.ToString(dr["gradename"]); 9 // 10 ListViewItem lvItem = new ListViewItem(stuNo.ToString()); 11 lvItem.SubItems.Add(stuName);//接收學生名字 12 lvItem.SubItems.Add(stugender);//接收學生性別 13 lvItem.SubItems.Add(gname);//接收學生年級名稱 14 //讓lvItem和ListView關聯 15 lvlistview.Items.Add(lvItem); 16 }
關於我們的窗體:
計時器的Tick事件處理方法,定時變換圖片框中的圖片代碼:
1 private void timetime_Tick(object sender, EventArgs e) 2 { 3 //如果當前顯示的圖片索引沒有到最大值就繼續增加 4 if (index < imglist.Images.Count - 1) 5 { 6 index++; 7 } 8 else { 9 index = 0; 10 } 11 //設置圖片框顯示的圖片 12 this.pictureBox1.Image = imglist.Images[index];
按年級查詢學生信息的的窗體:
加載年級的代碼:
1 //加載年級信息 2 public void LoadGradeInfo() { 3 4 //創建數據庫連接 5 string str = DBHelper.str; 6 SqlConnection con = new SqlConnection(str); 7 //string sql = "select studentno,studentname,gender,birthday from student"; 8 string sql = "select gradeid,gradename from Grade"; 9 SqlDataAdapter da = new SqlDataAdapter(sql, con); 10 DataSet ds = new DataSet(); 11 da.Fill(ds,"Grade"); 12 DataRow row =ds.Tables["Grade"].NewRow(); 13 row[0]=-1; 14 row[1] = "全部"; 15 ds.Tables["Grade"].Rows.InsertAt(row,0); 16 17 cbograde.DataSource = ds.Tables["Grade"]; 18 //ValueMember下拉框顯示的隱藏值 19 cbograde.ValueMember = "gradeid"; 20 //DisplayMember下拉框顯示的真實值 21 cbograde.DisplayMember = "Gradename"; 22 cbograde.SelectedIndex = 0; 23 }
修改的代碼:
1 //保存修改 2 private void btnSAve_Click(object sender, EventArgs e) 3 { 4 DialogResult result = MessageBox.Show("確定要修改嗎?",caption,MessageBoxButtons.YesNo,MessageBoxIcon.Question); 5 if (result==DialogResult.Yes)//確認保存修改 6 { 7 //使用SqlCommandBuilder構建增刪改的command操作 8 SqlCommandBuilder sq = new SqlCommandBuilder(da); 9 //將數據集中student表的數據交給數據庫更新 10 da.Update(ds, "student"); 11 }
刪除信息的窗體:
獲取信息代碼:
1 public void FillTables(){ 2 string str = DBHelper.str; 3 //取消英文列自動生成,就是沒寫列名稱時,不能用英文列代替 4 dgstudenlist.AutoGenerateColumns = false; 5 SqlConnection con = new SqlConnection(str); 6 string sql = "select studentno,studentname,gender,gradename,phone from student,grade where student.gradeid=grade.gradeid"; 7 SqlDataAdapter da = new SqlDataAdapter(sql, con); 8 DataSet ds = new DataSet(); 9 da.Fill(ds, "student"); 10 this.dgstudenlist.DataSource = ds.Tables["student"]; 11 } 12 private void FrmStudentList_Load(object sender, EventArgs e) 13 { 14 FillTables(); 15 }
刪除操作的代碼:
1 //確認刪除操作 2 DialogResult result = MessageBox.Show("確認刪除改學生嗎?同時會刪除該學生的成績!!!", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 3 if (result == DialogResult.Yes) 4 { 5 if (dgstudenlist.SelectedRows.Count > 0) 6 { 7 //獲得選中的學生的學號 8 int studentno = Convert.ToInt32(dgstudenlist.SelectedRows[0].Cells["studentno"].Value); 9 } 10 string str = DBHelper.str; 11 SqlConnection con = new SqlConnection(str); 12 string sql = string.Format("delete from result where studentno={0}", StudentNO); 13 con.Open(); 14 SqlCommand cmd = new SqlCommand(sql, con); 15 int count = cmd.ExecuteNonQuery(); 16 //刪除學生信息 17 sql = string.Format("delete from student where studentno={0}", StudentNO); 18 cmd.CommandText = sql; 19 int result1 = cmd.ExecuteNonQuery(); 20 if (result1 == 1) 21 { 22 MessageBox.Show("刪除成公!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 23 //重新查詢數據,綁定數據源,重新帥選 24 FillTables(); 25 } 26 con.Close();
其中一些重要代碼:
1.向數據集年級表的第一行添加數據“全部”或者“請選擇”的代碼:
1 1 DataRow row = ds.Tables["Grade"].NewRow();//形成行對象 2 2 row["gradeid"] = -1;//給該行的列賦值 3 3 row["gradename"] = "全部"; 4 4 ds.Tables["Grade"].Rows.InsertAt(row, 0);//行對象和Table產生關系 5 5 6 6 7 7 或者 8 8 9 9 //01.形成行對象 table.NewRow() 10 10 DataTable table = ds.Tables[0]; 11 11 DataRow dr=table.NewRow(); 12 12 //02.給該行的列賦值 dr[0]=-1; 13 13 dr[0] = -1; 14 14 dr[1] = "請選擇"; 15 15 //03.讓行對象和Table產生關系table.Rows.InsertAt() 16 16 table.Rows.InsertAt(dr,0);
2.向下拉框賦值,即年級名稱,隱藏年級編號:
1 SqlDataAdapter da = new SqlDataAdapter(sql, con); 2 DataSet ds = new DataSet(); 3 da.Fill(ds, "Grade"); 4 cbograde.DataSource = ds.Tables["Grade"]; 5 //ValueMember下拉框顯示的隱藏值gradeid 6 cbograde.ValueMember = "gradeid"; 7 //DisplayMember下拉框顯示的真實值Gradename 8 cbograde.DisplayMember = "Gradename"; 9 cbograde.SelectedIndex = 0; //索引為0 10 con.Close();
有不足之處,望大家多多指教哈