梦之翼团队项目(学生信息管理系统)

时间:2022-04-21 09:00:13

一 项目整体概述

     本次老师让我们做一个以数据库为基础的登陆页面,这个项目我们团队首先进行了相关的讨论与交流,我们想的是,这次在编码上难度不大,我们把侧重点放到了软件的架构的功能的实现上面,如果单一的做一个登陆页面,这样会比较死板,因此,我们把它放到了一个现实的系统当中,这样可以更加生动形象的理解登陆界面和数据库的综合应用技术,所以,我们做出了学生信息管理系统!

二 设计思路

1 整体界面展示

图片:登陆界面

梦之翼团队项目(学生信息管理系统)

图片:注册页面

梦之翼团队项目(学生信息管理系统)

 图片:管理系统内容界面

梦之翼团队项目(学生信息管理系统)

用户要想登陆到此系统,必须要先注册账号,(如果有账号的可以直接登陆),注册成功后数据库会有相关的数据,无论是用户在登录页面或者注册页面,单击取消可以立即停止当前操作,并且关闭当前窗口

 梦之翼团队项目(学生信息管理系统)

梦之翼团队项目(学生信息管理系统)

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技术的不熟悉

 三:纠结数据库的插入问题

 四:软件测试知识缺乏,不懂测试

 五:专业技术的差别

...........

不过,这些困难经过大家的团结协作,我们把其中的大部分都攻克了。现在我切身的体会到,软件开发人员的艰辛,任何一款软件成功发布的背后,必定都有无数个困难所构成,都有一个坚忍且强大的团队所作出的不懈努力!

接下来,我们就对这个软件团队做一个小总结:

一:任何一个团队里面都存在意见分歧,我们做的就是统一商议,拿出最好的解决方案,解决问题

二:团队成员的知识能力不同,要把团队结构最优化,每个人做适合自己的任务,并且相互协作,共同完成任务

三:成员之间一定要培养高度契合度,并且增强时间观念和执行力,这样,才能保证一个软件保质保量保时完成。

四:这样的团队任务很有实际意义,可以增加同学之间的相互交流与团队协作能力。

五:团队的每个成员都得到了不同程度的锻炼,各方面的能力都得到了提高 

........

这些就是我们这次做团队项目的整个过程和一些自己内心的总结,希望老师阅读后,批评指正,谢谢老师!