一 项目整体概述
本次老师让我们做一个以数据库为基础的登陆页面,这个项目我们团队首先进行了相关的讨论与交流,我们想的是,这次在编码上难度不大,我们把侧重点放到了软件的架构的功能的实现上面,如果单一的做一个登陆页面,这样会比较死板,因此,我们把它放到了一个现实的系统当中,这样可以更加生动形象的理解登陆界面和数据库的综合应用技术,所以,我们做出了学生信息管理系统!
二 设计思路
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技术的不熟悉
三:纠结数据库的插入问题
四:软件测试知识缺乏,不懂测试
五:专业技术的差别
...........
不过,这些困难经过大家的团结协作,我们把其中的大部分都攻克了。现在我切身的体会到,软件开发人员的艰辛,任何一款软件成功发布的背后,必定都有无数个困难所构成,都有一个坚忍且强大的团队所作出的不懈努力!
接下来,我们就对这个软件团队做一个小总结:
一:任何一个团队里面都存在意见分歧,我们做的就是统一商议,拿出最好的解决方案,解决问题
二:团队成员的知识能力不同,要把团队结构最优化,每个人做适合自己的任务,并且相互协作,共同完成任务
三:成员之间一定要培养高度契合度,并且增强时间观念和执行力,这样,才能保证一个软件保质保量保时完成。
四:这样的团队任务很有实际意义,可以增加同学之间的相互交流与团队协作能力。
五:团队的每个成员都得到了不同程度的锻炼,各方面的能力都得到了提高
........
这些就是我们这次做团队项目的整个过程和一些自己内心的总结,希望老师阅读后,批评指正,谢谢老师!