工资管理系统
前段时间一直在修改该系统的原型,刚开始接触这个系统的时候,就感觉漏洞百出,首先是用户权限分配不合理,再者是数据库设计不合理,且不说用中文命名的习惯不好,该代码冗余严重。奈何实力有限,只能在其基础上更改一二!!!
再次列出部分内容,希望各位指点一二...
首先是用户权限分为四级,各部分各司其所咯,感谢拖鞋先生设计界面!!!
现在回顾这些代码,有点后怕,因为都是按照自己所设想的一步步修改,根本没有做过任何分析,
现在截图其中一个页面代码,希望各位可以从数据方面提点建议,
页面asp.net代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VerifyFujia.aspx.cs" Inherits="HZU.WQS.web.VerifyFujia" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>审核附加工资</title> <link type="text/css" href="css/default.css" rel="Stylesheet" /> </head> <body style="background-color:#e1e5e8;"> <form id="form1" runat="server"> <div class="title"></div> <div style="font-size:13px; text-align:center; float:left;"> 姓名:<asp:TextBox ID="SName" runat="server"></asp:TextBox> 部门:<asp:DropDownList ID="ribu" runat="server"><asp:ListItem></asp:ListItem></asp:DropDownList> 添加部门:<asp:DropDownList ID="zt" runat="server"><asp:ListItem></asp:ListItem></asp:DropDownList> <asp:Button ID="btnree" runat="server" Text="查找" onclick="btnree_Click" /> <asp:GridView ID="gvSH" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="id" OnRowDeleting="gvSH_RowDeleting" OnPageIndexChanging="gvSH_PageIndexChanged" OnSelectedIndexChanging="gvSH_SelectedIndexChanging" EmptyDataText="暂时没有需要审核附件工资!" OnRowUpdating="gvSH_RowUpdating" Width="776px" Font-Size="13px"> <RowStyle BackColor="#E3EAEB" /> <Columns> <asp:TemplateField HeaderText="选择"> <ItemTemplate> <asp:CheckBox ID="check" runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField InsertVisible="False" ShowHeader="False"> <ItemTemplate> <asp:Button ID="btnShenHe" CausesValidation="False" CommandName="Update" runat="server" Text="通过" OnClientClick="return confirm('该操作无法撤销!确认通过吗?');" /> <asp:Button ID="btnDel" CausesValidation="False" CommandName="Delete" runat="server" Text="拒绝" OnClientClick="return confirm('该操作无法撤销!确认拒绝吗?');" /> </ItemTemplate> <HeaderTemplate> 审核 </HeaderTemplate> </asp:TemplateField> <asp:BoundField DataField="编号" HeaderText="编号" /> <asp:BoundField DataField="姓名" HeaderText="姓名" /> <asp:BoundField DataField="部门" HeaderText="部门" /> <asp:BoundField DataField="金额" HeaderText="金额" /> <asp:BoundField DataField="备注" HeaderText="备注" /> <asp:BoundField DataFormatString="{0:yyyy-MM}" DataField="年月份" HeaderText="年月份" /> <asp:BoundField DataField="添加部门" HeaderText="添加部门" /> <asp:BoundField DataField="状态" HeaderText="状态" /> </Columns> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#7C6F57" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView> <asp:CheckBox ID="checkpz" AutoPostBack="True" runat="server" OnCheckedChanged="checkpz_CheckedChanged" Text="全选" /> <asp:Button ID="Button1" runat="server" Text="全部批准" OnClick="Button1_Click1" OnClientClick="return confirm('该批量操作无法撤销!确认通过吗?');" /> <asp:Button ID="Button2" runat="server" Text="全部拒绝" onclick="Button2_Click" OnClientClick="return confirm('该批量操作无法撤销!确认通过吗?');"/> </div> </form> </body> </html>
cs 文件代码
using System; using System.Collections; using System.Configuration; using System.Data; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Text; using HZU.WQS.web.config; using HZU.DBUtility; using System.Globalization; namespace HZU.WQS.web { public partial class VerifyFujia : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["财务管理"] == null) { Response.Redirect("index.aspx"); } if (!IsPostBack) { DataTable dt = DbHelperSQL.Query("select distinct 部门 from 附加工资表").Tables[0]; foreach (DataRow dr in dt.Rows) { ListItem li = new ListItem(dr["部门"].ToString(), dr["部门"].ToString()); ribu.Items.Add(li); } DataTable dd = DbHelperSQL.Query("select distinct 添加部门 from 附加工资表 where 状态='未审核'").Tables[0]; foreach (DataRow dr in dd.Rows) { ListItem li = new ListItem(dr["添加部门"].ToString(), dr["添加部门"].ToString()); zt.Items.Add(li); } dt.Dispose(); gvDataBind(); } } private void gvDataBind() { DataSet dt1 = DbHelperSQL.Query("select 个人信息.姓名, 附加工资表.* from 附加工资表,个人信息 where 附加工资表.编号=个人信息.编号 and 附加工资表.状态='未审核'"+ViewState["whereStr"]); gvSH.DataSource = dt1; gvSH.DataKeyNames = new string[] { "id" }; gvSH.DataBind(); } protected void gvSH_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { gvSH.PageIndex = e.NewSelectedIndex; gvDataBind(); } protected void gvSH_RowDeleting(object sender, GridViewDeleteEventArgs e) { try { string id = gvSH.DataKeys[e.RowIndex].Value.ToString(); DbHelperSQL.ExecuteSql("update 附加工资表 set 状态='拒绝', 审核时间='" + DateTime.Now + "' where id=" + id); gvDataBind(); } catch (Exception) { AddInfo.AddJsCode(this, "alert('系统出错!')"); } } protected void gvSH_RowUpdating(object sender, GridViewUpdateEventArgs e) { try { string id = gvSH.DataKeys[e.RowIndex].Value.ToString(); string date = DateTime.Now.ToString("yyyy-MM", DateTimeFormatInfo.InvariantInfo); DateTime day = DateTime.Parse(date.ToString()); DbHelperSQL.ExecuteSql("update 附加工资表 set 状态='通过',审核时间='" + day + "' where id=" + id); //try //{ object hh = DbHelperSQL.GetSingle("select 编号 from 附加工资表 where id='" + id + "'"); DataRow dr = DbHelperSQL.Query("select 个人信息.*,附加工资表.金额 from 个人信息,附加工资表 where 个人信息.编号='" + hh + "'").Tables[0].Rows[0]; bool ree = DbHelperSQL.Exists("select 编号 from 附加总工资 where 编号='" + dr["编号"].ToString() + "' and 年月份 ='" + day + "'"); if (!ree) { DbHelperSQL.ExecuteSql("insert into 附加总工资(编号,部门,总额,年月份) values('" + dr["编号"].ToString() + "','" + dr["部门"].ToString() + "','" + dr["金额"].ToString() + "','" + day + "') "); } else { float chan = float.Parse(dr["金额"].ToString()); DbHelperSQL.ExecuteSql("update 附加总工资 set 总额=总额+'" + chan + "' where 编号='" + dr["编号"].ToString() + "'"); } //} //catch (Exception ex) //{ // AddInfo.AddJsCode(this, "alert('" + ex + "')"); //} gvDataBind(); } catch (Exception) { AddInfo.AddJsCode(this, "alert('系统出错!')"); } } protected void gvSH_PageIndexChanged(object sender, GridViewPageEventArgs e) { gvSH.PageIndex = e.NewPageIndex; gvDataBind(); } protected void Button1_Click1(object sender, EventArgs e) { try { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (chk.Checked == true) { string strSql = "update 附加工资表 set 状态='通过', 审核时间='" + DateTime.Now + "' where id= '" + gvSH.DataKeys[i].Value + "'"; bool p_update = DbHelperSQL.Exists(strSql); if (!p_update) { Response.Write("<script>批准失败,请重试!</script>"); } } } gvDataBind(); checkpz.Checked = false; } catch (Exception) { AddInfo.AddJsCode(this, "alert('系统出错!')"); } } protected void checkpz_CheckedChanged(object sender, EventArgs e) { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (checkpz.Checked == true) { chk.Checked = true; } else { chk.Checked = false; } } } protected void Button2_Click(object sender, EventArgs e) { try { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (chk.Checked == true) { string strSql = "update 附加工资表 set 状态='拒绝', 审核时间='" + DateTime.Now + "' where id= '" + gvSH.DataKeys[i].Value + "'"; bool p_update = DbHelperSQL.Exists(strSql); if (!p_update) { Response.Write("<script>拒绝失败,请重试!</script>"); } } } gvDataBind(); checkpz.Checked = false; } catch (Exception) { AddInfo.AddJsCode(this, "alert('系统出错!')"); } } protected void btnree_Click(object sender, EventArgs e) { ViewState["whereStr"] = ""; ViewState["whereStr1"] = ""; string dep = ribu.SelectedValue; string name = SName.Text; string state = zt.SelectedValue; string sqlStr = "select 附加工资表.*,个人信息.姓名 from 附加工资表,个人信息 where 附加工资表.编号=个人信息.编号 and 附加工资表.状态='未审核'"; if (dep != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 附加工资表.部门='" + dep + "' "; if (name != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 个人信息.姓名='" + name + "' "; if (state != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 附加工资表.添加部门='" + state + "' "; DataSet ds = DbHelperSQL.Query(sqlStr + ViewState["whereStr"] + ViewState["whereStr1"]); gvSH.DataSource = ds; gvSH.DataBind(); } } }
1,本页面是工资的审核页面,我没有分析过在同一个数据表里面通过update进行更改工资的状态已表示是否通过审核是否合理,却感觉没有必要新建另一个数据表存储这些信息。
2,后台的数据查询,插入,更改语句过多,反复的对数据库进行操作,降低了数据加载运行的速度,本人没有学习LINQ TO SQL ,所以对00 的数据处理方式不是很了解,所以在此基础上行,只能牺牲效率,完成任何,罪过罪过......
3,页面的生命周期,因为对页面输出产生的事件的顺序以及作用概念比较模糊,最初将数据绑定放至判断语句if内,导致在多项审核的过程中,页面不会自动回传,页面内容不改变,而数据已经上传数据库处理,得一师兄指导,放至try内,方才解决问题,从这点可以看出对事件的概念的模糊,罪过罪过...
4,用户的登录,用户分为四个等级,虽然密码通过md5加密,页面登录过程也没有用cookies保存任何用户信息,因为考虑到没有这个必要,只是用session,貌似又增加了服务器端的压力,暂不考虑这些, 总感觉安全性低,页面通过session值判断是否允许打开,对网络安全这块的空白,让我不知所措。
可以说问题还是挺多的,一步一步,一个脚印!!!