一 項目整體概述
本次老師讓我們做一個以數據庫為基礎的登陸頁面,這個項目我們團隊首先進行了相關的討論與交流,我們想的是,這次在編碼上難度不大,我們把側重點放到了軟件的架構的功能的實現上面,如果單一的做一個登陸頁面,這樣會比較死板,因此,我們把它放到了一個現實的系統當中,這樣可以更加生動形象的理解登陸界面和數據庫的綜合應用技術,所以,我們做出了學生信息管理系統!
二 設計思路
1 整體界面展示
圖片:登陸界面
圖片:注冊頁面
圖片:管理系統內容界面
2 用戶要想登陸到此系統,必須要先注冊賬號,(如果有賬號的可以直接登陸),注冊成功后數據庫會有相關的數據,無論是用戶在登錄頁面或者注冊頁面,單擊取消可以立即停止當前操作,並且關閉當前窗口
3 登陸時,會根據不同的情況,給用戶做出相應的提示,例如用戶名不存在,密碼錯誤,登陸成功等
4,登陸成功之后,進入系統界面,此界面可以按,學號,姓名,進行排序,還可以進行數據的更新,關閉,增加,修改,刪除等數據庫的操作
三 數據庫的制作與展示
我們團隊做了兩個數據庫分別為 repair 和 stuDB 數據庫,一個主要是存儲用戶的注冊登錄信息,另外一個主要是存儲學生的基本信息
1.repair 數據庫包含一個表 user_info
userName 是用戶名,passWord 是密碼
stuDB 數據庫包含三個表分別是admin , stuinfo , stuMarks
此處主要用到stuinfo表和stuMarks 表
四 相關代碼
1 登陸界面代碼(form2)
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 System.Data.SqlClient; namespace 綜合項目_10._10 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string strConn = "Data Source=.;Initial Catalog=repair;Integrated Security=True"; //連接數據庫 SqlConnection Connection = new SqlConnection(strConn); try { string sqlStr = "select userName,passWord from user_info where userName=@user"; //查詢 DataSet ds = new DataSet(); Connection.ConnectionString = Connection.ConnectionString; Connection.Open(); SqlCommand cmd = new SqlCommand(sqlStr, Connection); cmd.Parameters.Add(new SqlParameter("@user", SqlDbType.VarChar, 30)); //傳參 cmd.Parameters["@user"].Value =user.Text; //給user文本框賦值 SqlDataReader dater = cmd.ExecuteReader(); if (user.Text.Trim() == "") //如果user的值等於空 { UserMessage.Text = "用戶名不允許為空!"; } else if (pwd.Text.Trim()== "") //同上 { PwdMessage.Text = "密碼不能為空!"; } else if (!dater.Read()) //如果輸入的用戶名沒有被dater讀到,則用戶名不存在 { UserMessage.Text = "用戶名不存在!"; Message.Text = ""; PwdMessage.Text = ""; user.Text = ""; } else if (dater["passWord"].ToString().Trim() == pwd.Text.Trim()) //輸入密碼等於數據庫密碼登錄成功且彈出音樂框 { Message.Text = "登錄成功!"; UserMessage.Text = ""; PwdMessage.Text = ""; Form1 frm = new Form1(); frm.ShowDialog(); } else { PwdMessage.Text = "密碼錯誤!"; //否則密碼錯誤 UserMessage.Text = ""; Message.Text = ""; pwd.Text = ""; } } catch (Exception ) { throw; //拋出異常 } finally { Connection.Close(); //關閉數據庫 } } private void button2_Click(object sender, EventArgs e) { Application.Exit(); } private void label3_Click(object sender, EventArgs e) { Form3 frm = new Form3(); frm.ShowDialog(); } } }
2 注冊界面代碼(form3)
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 System.Data.SqlClient; namespace 綜合項目_10._10 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string strConn = "Data Source=.;Initial Catalog=repair;Integrated Security=True"; SqlConnection conn = new SqlConnection(strConn); string sql = "select userName,passWord from user_info"; conn.Open(); SqlCommand cmd = new SqlCommand(sql,conn); cmd.CommandText = "insert into " + "user_info(userName,passWord)" + " values(@userName,@passWord)"; cmd.Parameters.Add("@userName", SqlDbType.VarChar).Value = textBox1.Text.Trim(); cmd.Parameters.Add("@passWord", SqlDbType.VarChar).Value = textBox2.Text.Trim(); cmd.ExecuteNonQuery(); conn.Close(); MessageBox.Show("注冊成功"); this.Close(); } private void button2_Click(object sender, EventArgs e) { this.Close(); } } }
3 主界面系統信息的代碼(form1)
(封裝方法的類)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; using System.Windows.Forms; namespace 綜合項目_10._10 { class DBCon { public string strCon = @"Data Source=.; Initial Catalog=studb; Integrated Security=True;"; public SqlConnection sqlCon = new SqlConnection(); public SqlDataAdapter sda = new SqlDataAdapter(); public DataSet ds = new DataSet(); public DataTable dt = new DataTable(); public SqlDataReader sdr; public void dbcon() { try { sqlCon = new SqlConnection(strCon); } catch (Exception e) { MessageBox.Show("數據庫連接不成功"+e.ToString()); } } public void dbFill(string selstr) { dt.Clear(); sda = new SqlDataAdapter(selstr, strCon); sda.Fill(ds, "stuinfo"); dt = ds.Tables["stuinfo"]; } public void dbselect(string showInfo) { sqlCon.Open(); SqlCommand sqlcmd = new SqlCommand(showInfo,sqlCon); sdr = sqlcmd.ExecuteReader(); } public void dbInsert(string insertInfo) { sqlCon.Open(); SqlCommand sqlcmd = new SqlCommand(insertInfo, sqlCon); try { sqlcmd.ExecuteNonQuery(); } catch (Exception e) { MessageBox.Show("數據插入失敗"+e.ToString()); } sqlCon.Close(); } public void dbGridViewUpd() //數據集的更新與數據庫關聯的方法 { SqlCommandBuilder scb = new SqlCommandBuilder(sda); DialogResult result; result = MessageBox.Show("確保保存修改過的數據嗎?","操作提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question); if (result == DialogResult.OK) { dt = ds.Tables["stuinfo"]; sda.Update(dt); dt.AcceptChanges(); } } public void dbUpdate(string updstr) { sqlCon.Open(); SqlCommand sqlcmd = new SqlCommand(updstr, sqlCon); try { sqlcmd.ExecuteNonQuery(); MessageBox.Show("數據修改成功!"); } catch (Exception e) { MessageBox.Show("數據修改失敗" + e.ToString()); } sqlCon.Close(); } public void dbDelete(string delStr) { sqlCon.Open(); SqlCommand sqlcmd = new SqlCommand(delStr, sqlCon); try { sqlcmd.ExecuteNonQuery(); MessageBox.Show("數據庫刪除成功"); } catch (Exception e) { MessageBox.Show("數據庫刪除失敗" + e.ToString()); } sqlCon.Close(); } } }
(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; namespace 綜合項目_10._10 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string selstr = @"select stuno,stuname,stusex,stuage,stuseat,stuAddress from stuinfo"; DBCon db = new DBCon(); private void Form1_Load(object sender, EventArgs e) { db.dbcon(); db.dbFill(selstr); comboBox1.ValueMember = "stuno"; comboBox1.DataSource = db.dt; } private void paixu_Click(object sender, EventArgs e) { string ser = selstr; dataGridView1.Refresh(); if (radioButton1.Checked) { ser = selstr + " order by stuno"; } else { ser = selstr + " order by stuname"; } db.dbcon(); db.dbFill(ser); dataGridView1.DataSource = db.dt; } private void chaxun_Click(object sender, EventArgs e) { db.dbcon(); db.dbFill(selstr); dataGridView1.DataSource = db.dt; } private void zengjia_Click(object sender, EventArgs e) { db.dbcon(); string insr = "insert into stuinfo(stuno ,stuname,stusex,stuAddress,stuage) values('" + comboBox1.Text + "','" + stname.Text + "','" + stasex.Text + "','" + staddress.Text + "'," + stage.Text + ")"; db.dbInsert(insr); db.dbFill(selstr); dataGridView1.DataSource = db.dt; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { string selInfo = "select stuno,stuname,stusex,stuage,stuseat,stuAddress from stuinfo where stuno='" + comboBox1. Text.ToString().Trim() + "'"; db.dbcon(); db.dbselect(selInfo); if (db.sdr.Read()) { stname.Text = db.sdr["stuname"].ToString(); stasex.Text = db.sdr["stusex"].ToString(); stage.Text = db.sdr["stuage"].ToString(); staddress.Text = db.sdr["stuAddress"].ToString(); } } private void xiugai_Click(object sender, EventArgs e) { db.dbcon(); string up = "update stuinfo set stuname='" +stname.Text.Trim()+ "',stusex='"+ stasex.Text.Trim()+ "',stuAddress='" +staddress.Text.Trim()+ "' where stuno='" + comboBox1.Text.Trim() + "'"; db.dbUpdate(up); db.dbFill(selstr); dataGridView1.DataSource = db.dt; } private void shanchu_Click(object sender, EventArgs e) { DialogResult result = MessageBox.Show("確定要刪除嗎", "操作提示", MessageBoxButtons.OKCancel); if (result != DialogResult.OK) { return; } db.dbcon(); string des = "delete from stumarks where stuno='" + comboBox1.Text.Trim() + "'"; db.dbDelete(des); string strup = "delete from stuinfo where stuno='" + comboBox1.Text.Trim() + "'"; db.dbDelete(strup); db.dbFill(selstr); dataGridView1.DataSource = db.dt; comboBox1_SelectedIndexChanged(sender, e); } private void gengxin_Click(object sender, EventArgs e) { db.dbcon(); db.dbGridViewUpd(); } private void guanbi_Click(object sender, EventArgs e) { Application.Exit(); } } }
四 軟件測試
五 psp消耗時間表
六 團隊成員任務分配
七 總結
這是我們第二次進行團隊項目,整個過程感覺挺順利的!經過每位成員的不懈努力,我們終於把這個項目拿下來咯,做出來了一個還算不錯的登錄頁面。
每一次成功的背后都有無數的爭吵與瓶頸,我們團隊在開發過程中也遇到了許多問題,例如:
一:項目整體的運行效果與成員意見的相互取舍
二:ADO.NET技術的不熟悉
三:糾結數據庫的插入問題
四:軟件測試知識缺乏,不懂測試
五:專業技術的差別
...........
不過,這些困難經過大家的團結協作,我們把其中的大部分都攻克了。現在我切身的體會到,軟件開發人員的艱辛,任何一款軟件成功發布的背后,必定都有無數個困難所構成,都有一個堅忍且強大的團隊所作出的不懈努力!
接下來,我們就對這個軟件團隊做一個小總結:
一:任何一個團隊里面都存在意見分歧,我們做的就是統一商議,拿出最好的解決方案,解決問題
二:團隊成員的知識能力不同,要把團隊結構最優化,每個人做適合自己的任務,並且相互協作,共同完成任務
三:成員之間一定要培養高度契合度,並且增強時間觀念和執行力,這樣,才能保證一個軟件保質保量保時完成。
四:這樣的團隊任務很有實際意義,可以增加同學之間的相互交流與團隊協作能力。
五:團隊的每個成員都得到了不同程度的鍛煉,各方面的能力都得到了提高
........
這些就是我們這次做團隊項目的整個過程和一些自己內心的總結,希望老師閱讀后,批評指正,謝謝老師!