学生信息管理系统总结

这个《学生信息管理系统》是按VC++课程设计要求用C#实现的一个小系统,实现功能虽然简单,只是涉及到数据的添加,修改,删除,统计等,但是在数据处理过程中遇到的一些问题和解决方法还是有必要小结一下的;

系统的数据库总共用了12张数据表,数据关系比较多,所以在处理过程中对数据库的了解更进一步了,其中一个问题是在数据添加过程中涉及到相关联表添加数据的问题,由于多个主外键的关系,不能直接使用C#代码进行添加,在这里我使用了存储过程,实现方法如下所示:

declare @nID int
insert into Tb1(....) values(...)
select @nID=@@identity

insert into Tb2(ParentID,...) values(@nID,...)
select @nID=@@identity

insert into Tb3(ParentID,...) values(@nID,...)

必须注意的一个问题就是要注意插入的顺序,比如说课程添加模块,必须先在课程信息表里各个外键关系的主键表中查询符合添加条件的记录:

select @gradeid=gradeid from gradeinfo where @gradename=gradename

select @xueyuanid=xueyuanid from xueyuaninfo where @xueyuanname=xueyuanname

select @majorid=majorid from majorinfo where @gradeid=gradeid and @xueyuanid=xueyuanid and @majorname=majorname

select @teachid=teachid from teacherinfo where @teachname=teachname

select @cstyleid=cstyleid from cstyleinfo where @cstylename=cstylename

select @yearid=yearid from yearinfo where @yearname=yearname

select @teamid=teamid from teaminfo where @teamname=teamname

然后根据检索出来符合条件的数据当做条件检索上一层的主键表,一直检索到课程信息表,然后用insert方法对所有数据进行添加:

insert into coursesinfo(cname,cnum,ctime,cintro,teachid,cstyleid,majorid,yearid,teamid,cpoint)

values (@cname,@cnum,@ctime,@cintro,@teachid,@cstyleid,@majorid,@yearid,@teamid,@cpoint)

当然,因为这个是学生信息管理,也就是说添加进去的记录是不能出现重复,除了可以用C#代码进行判断之外你还可以在储存过程中添加一天判断语句进行判断,如果出现重复的话就不能插入了:

select @count=count(coursesid)from coursesinfo where cname=@cname

 if @count=0……

接着是C#实现存储过程的调用问题,这里主要采用  SqlParameter;类进行实现,代码如下:

                    SqlConnection con = SqlHelp.getcon();

                    con.Open();

                    SqlCommand comm = new SqlCommand("pro_cadd", con);

              comm.CommandType = CommandType.StoredProcedure; // 设置SqlCommand的属性为存储过

 

             SqlParameter[] param ={    new SqlParameter("@cname", SqlDbType.NVarChar, 50),

                                        new SqlParameter("@cpoint", SqlDbType.NVarChar ,50 ),

                                                  .

                                                  .

                                                  .

 

                                     new SqlParameter("@teamname", SqlDbType.NVarChar, 50)

                                         };

                    param[0].Value = this.txtcname.Text;

                    param[1].Value = this.dplcpoint.Text;

                    param[11].Value = this.dplteamname.Text;

                    foreach (SqlParameter parameter in param)

                    {

                        comm.Parameters.Add(parameter);

                    }

                    comm.ExecuteNonQuery();

                    MessageBox.Show("课程信息录入成功!");

接下来的问题是数据修改的问题,这里主要是通过存储过程根据要求把所要修改的数据显示到文本框,然在使用Update方法进行更新:

SqlConnection con = SqlHelp.getcon();

            con.Open();

            SqlCommand comm = new SqlCommand("pro_sedit", con);

            comm.CommandType = CommandType.StoredProcedure; // 设置SqlCommand的属性为存储过程

            SqlParameter[] param ={ new SqlParameter("@stunum",SqlDbType.NVarChar ,50 ),

                                       new SqlParameter("@cname", SqlDbType.NVarChar, 50),

                                       new SqlParameter("@score", SqlDbType.Float  )     };

            param[0].Value = this.txtsnum.Text;

            param[1].Value = this.txtcname.Text;

            param[2].Value = this.txtscore.Text;

            foreach (SqlParameter parameter in param)

            {

                comm.Parameters.Add(parameter);

            }

            comm.ExecuteNonQuery();

            MessageBox.Show("修改成功!");

在界面方面也有一个小问题,就是平时我们注册时经常遇到的下拉框的二级联动或者三级联动,因为以前没遇到过,所以一下不知道怎么实现,上网找了一下,有很多实现的方法,但是相比较之下还是下面这个比较适合,不过这个方法有一个限制,就是适用于数据较少的时候,如果像QQ注册那样,省区和市区,县区进行联动的话用这个方法实现就不行了,不过这个时候可以根据几张数据表进行条件的判断就OK啦:      case 0:

      this.dplmajorname.Items.Clear();

     dplmajorname.Items.AddRange(new object[] { "计算机科学与技术 ", "网络工程", "软件工程" });

                   break;

     case 1:

  this.dplmajorname.Items.Clear();

   dplmajorname.Items.AddRange(new object[] { "测控技术", "信息安全", "电子技术" });

                    break;

      case 2:

    this.dplmajorname.Items.Clear();

    dplmajorname.Items.AddRange(new object[] { "自动化", "通讯工程", "网络技术" });

                    break;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值