1、信息与计算机科学专业综合实训 任 务 书 学院名称: 理学院 课程代码:____ 106087719 ____ 专 业: 信息与计算机科学专业 年 级: 2013 一、实训题目 汽车厂工资管理系统 二、主要内容 企业或者单位对其员工的工资进行详细的管理,对员工工资的调整情况进行详细记录,应实现以下功能: (1).员工录入:将员工的资料以及其对应的工资信息录入数据库中。 (2).查询功能:实现按员工的编号、名字等指标进行工资情况的查询。 (3).修改功能:当某个或者某些员工工资调整时,能对其
2、进行修改。 (4).删除功能:对调离的员工及其工资资料进行删除 三、具体要求及提交的材料 程序必须上机调试通过,并写出设计的报告。 设计报告格式:1、设计目的 2、总体设计(程序设计组成框图、流程图)3、数据库设计 4、详细设计 5、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施 6、核心部分的源程序清单和执行结果(清单中应有足够的注释)设计报告纸质文档和电子文档各一份,调试通过后的软件一套。(严禁抄袭和代做,一经发现,重修论处) 四、主要技术路线提示 系统地设计出数据库,建立表间联系; Web技术的基本使用; 使用任意一计算机语
3、言,任意一种数据库; 五、进度安排 1、 需求分析和概要设计, 数据库设计,1周之内完成(指导教师检查); 2、 系统详细设计分析,编程、调试和分析程序,2周之内完成(指导老师检查); 3、 程序答辩、说明书撰写,1周左右完成(学生必须当面答辩通过)。 指导教师 签名日期 年 月 日 目 录 1 需求分析 1 1.1系统概述 1 1.2 功能需求分析 1 1.3运行环境 2 1.4测试数据 2 2 概要设计 4 2.1 设计思路 4 2.2 模块功能介绍 5 2.2.1登录功能 5 2.2.2输入功能 5 2
4、2.3数据查询功能 5 2.2.4数据删除,修改功能 5 2.3模块结构 6 2.4 流程图 6 2.5 功能设计分工 6 3 详细设计 8 3.1主界面设计 8 3.2 登录页面设计 9 3.3员工页面设计 11 3.4管理员界面设计 15 4 调试分析 27 4.1 员工调试 28 4.2管理员调试 28 学习的心得与体会 31 致 谢 32 参考文献 33 附录 34 引 言 员工管理系统是一个企事业单位不可缺少的部分,它的内容对于企事业单位的决策者和管理者来说都至关重要,所以员工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但
5、一直以来人们使用传统人工的方式管理文件信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 1 需求分析 企业或者单位对其员工的工资进行详细的管理,对员工工资的调整情况进行详细记录,应实现以下功能: (1).员工录入:将员工的资料以及其对应的工资信息录入数据库中。 (2).查询功能:实现按员工的编号、名字等指标进行工资情况的查询。 (3).修改功能:当某个
6、或者某些员工工资调整时,能对其进行修改。 (4).删除功能:对调离的员工及其工资资料进行删除。 1.1系统概述 本系统主要有四个界面:主界面,登陆界面,员工界面,管理员界面。在主界面可以直接进入查看员工的工资信息,若是要使用管理员功能,就必须要通过登陆才行,登陆后,可以删除、修改和添加员工的信息。 1.2 功能需求分析 1.2.1.主界面模块 管理员登录,员工进入。 1.2.2.登陆模块 账号,口令。 1.2.3.员工模块 查看员工的工资信息。 1.2.4.管理员模块 删除、修改、添加员工的工资信息和基本信息。 1.3运行环境 SQL Server 2008
7、 R2,visual studio 2010 1.4测试数据 员工调试 查看员工信息: 图1.1查看员工信息 管理员调试 管理员查看员工工资情况: 图1.2 查询员工工资情况 管理员查看员工基本信息情况: 图1.3 查看员工基本信息 管理员删除员工信息: 图1.4 删除员工 管理员修改员工工资信息: 图1.5 修改员工工资信息
8、 管理员删除员工信息: 图1.6 删除员工信息 管理员添加员工: 图1.7 添加员工 2 概要设计 2.1 设计思路 本文针对汽车厂工资管理,建立了对员工查看工资信息和管理员管理员工信息的基本管理的解决方案,系统基于B/S模式,采用visual studio 2010,SQL server 2008 R2作为主要开发的工具,使用c#.net对SQL Server数据库的基本操作。本系统主要是由两个部分组成:员工部分,管理员部分。系统分别对员工,管理员不同的操作特点,做出需求分析,而且根据各个操作功能的实现,完成了三大部分的模块的划分,设计出数据库。 2.2 模块
9、功能介绍 2.2.1登录功能 管理员登陆 操作描述:管理员进入到登录页面,用账号,通过口令来登录汽车厂工资管理系统。 涉及数据:账号,口令。 2.2.2输入功能 (1)员工信息输入 操作描述:进入毕业设计选题系统后,员工需进行相应的数据录入。 涉及数据:编号,姓名,性别,出生年月,学历,毕业院校,电话,备注,等等…. (2)管理员信息输入 操作描述:进入毕业设计选题系统后,管理员需进行相应的数据录入。 涉及数据:账号,口令等等…. 2.2.3数据查询功能 (1)员工查询 操作描述:员工可以按照编号,姓名。 涉及数据:编号,姓名。 (2)管理员
10、查询 操作描述:管理员可以按照编号,姓名。 涉及数据:编号,姓名。 2.2.4数据删除,修改功能 管理员 操作描述:管理员可以删除员工,可以添加员工,也可修改员工的工资信息和资料信息。 涉及数据:编号,姓名,实际工资,基本工资,考勤扣除,加班补助,扣税等等…. 2.3模块结构 1)主界面模块 管理员登录,员工进入。 2) 登陆模块 账号,口令。 3)员工模块 查找。 4)管理员模块 员工表,资料表,删除,修改,添加。 2.4 流程图 汽车厂工资管理系统 管理员 员 工
11、 工资情况 修改员工 添加员工 删除员工 员工信息 图2.1 系统设计图 2.5 功能设计分工 a) 数据库名称及描述 1 员工表:其中包含一些员工信息的基本情况。 2 工资表:包含员工工资的基本情况。 3 admin表:包含管理员的基本信息。 B)数据表 表1. 员工表(描述:其中包含一些员工信息的基本情况) 字段名 数据类型 长度 是否允许空 默认值 备注(主外键、字段说明、值域) 编号 nch
12、ar 12 否 无 主键 姓名 nvarchar 5 否 无 性别 nchar 1 是 男 出生年月 nchar 10 否 无 学历 nvarchar 5 否 无 毕业院校 nvarchar 10 否 无 职称 nvarchar 8 是 无 电话 nchar 11 是 无 长度为11的数字 备基本信息注 nvarchar 200 是 无 表2:资料表(描述:包含员工工资的基本情况) 字段名 数据类型 长度 是否允许空 默认值 备注(主外键、字段说明、值域)
13、编号 nchar 12 否 无 主键 姓名 nvarchar 5 否 无 年份 nchar 4 否 2017 月份 nchar 2 否 6 实际工资 nchar 5 否 无 基本工资 nchar 5 否 无 加班补助 nchar 5 是 无 考勤扣除 nchar 5 是 无 扣税 nchar 5 是 无 工资信息备注 nvarchar 200 否 否 表3.admin表(描述:包含管理员的基本情况) 字段名 数据类型 长度 是否允许空 默认值
14、 备注(主外键、字段说明、值域) 账号 nvarchar 10 否 无 主键 口令 nchar 10 否 无 3 详细设计 3.1主界面设计 系统设置主界面为起始页面,其中包括三个div,第一个div是设置屏幕大小和位置,第二个div是插入背景图和标题,第三个div包含两个按钮button1和button2。用户点击管理员登录,就会进入登录页面,如点击员工进入,就会直接进入员工页面。 图3.1 主界面 主要代码: protected void Page_Load(object sender, EventArgs e) { }
15、 protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("web.aspx"); } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("yuangong.aspx"); 3.2 登录页面设计 图3.2 登录界面 进入登录页面,其中有四个div,第一个div是设置屏幕大小和位置,第二个div是插入背景图和
16、标题,第四个div包含两个TextBox1和TextBox2,两个按钮button1和button2。用户登陆时,在文本框中t1中输入账号,在t2中输入口令,点击登录,若数据库中存在,则进入下一个页面。如果输入出错会有信息提示。当用户输错时,可以重置,就会清空文本框中的信息。 图3.3 出错界面 主要代码: protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object s
17、ender, EventArgs e) { string zh = TextBox1.Text.Trim(); string kl = TextBox2.Text.Trim(); string sql = "select * from admin表 where 账号='" + zh + "'"; SqlDataReader myrd = new Class1().datareader(sql); //下面根据myrd中的查询数据来判断登陆情况 if (myrd.Read())
18、 //取得一行,表示用户名存在的 { if (myrd[1].ToString().Trim() == kl) //表示登陆成功 { //先取出成功登陆用户的权限,以备下级程序中使用 Session["账号"] = myrd[0].ToString().Trim(); Session["口令"] = myrd[1].ToString().Trim(); Response.Redirect("bbs.aspx");
19、 } else //用户名存在,但密码错误 TextBox2.Text = "口令错误"; } else //表示上面的myrd读出的空值无数据 { TextBox1.Text = "账号不存在"; } } 3.3员工页面设计 由主界面进入员工界面,其中有两个按钮和两个文本框,在文本框中输入想要查找的员工编号或姓名,点击第一个按钮,便可查找出来。 图3.4
20、员工界面 主要代码: protected void Page_Load(object sender, EventArgs e) { string sql = "select 编号,姓名,年份,月份,实际工资,基本工资,加班补助,考勤扣除,扣税 from 工资表"; DataTable mytb = new Class1().getds(sql);//把数据从sql读入mytb中 Repeater1.DataSource = mytb;//把mytb行书的数据赋给repearter Repeater1.
21、DataBind(); tt(sql);//调用tt函数 } protected void tt(string sql) { //使用本模块说明: //(1)在前面html代码中定义一个repeater,其中id=repeater1; 再定义一个div,其 id=div11 //(2)调用本tt方法时传进来一个sql命令字符串即可,其它不需要修改什么了 string sql2 = "select 编号,姓名,年份,月份,实际工资,基本工资,加班补助,考勤扣除,扣税 from 工资表";
22、 DataTable mytb = new Class1().getds(sql2); //自动生成页码控制控件,这样方便以后广泛应用(只需要在前台html代码建立一个div(id="div11")就可以了,把这些控件加去 Label Label1yy = new Label(); Label Label2yy = new Label(); HyperLink firtp = new HyperLink(); firtp.Text = "首页"; HyperLink prep
23、 new HyperLink(); prep.Text = "上一页"; HyperLink nextp = new HyperLink(); nextp.Text = "下一页"; HyperLink lastp = new HyperLink(); lastp.Text = "尾页"; TextBox TextBox1yy = new TextBox(); TextBox1yy.ID = "TextBox1yy"; //要想在一下步继续编程使用这个控件,要用fin
24、dcontrol方法查找本控件,必须指定ID TextBox1yy.Width = 30; TextBox1yy.Attributes.Add("runat", "server");//这个可要可不要,默认应该是runat=server的 Button Button1yy = new Button(); Button1yy.Click += new System.EventHandler(Button1yy_Click);//要想控件响应事件编程,必须要这句,否则以后它无法响应事件 Button1yy.T
25、ext = "GO"; //每个项之间加个分隔符号|| Label[] pp = new Label[7]; for (int i = 0; i < 7; i++) { Label pt = new Label(); pt.Text = " || "; pp[i] = pt; } div12.Controls.Add(Label1yy); div12.Controls.Add(pp[0]); div12.Controls.Add(Label2yy); div12.Con
26、trols.Add(pp[1]); div12.Controls.Add(firtp); div12.Controls.Add(pp[2]); div12.Controls.Add(prep); div12.Controls.Add(pp[3]); div12.Controls.Add(nextp); div12.Controls.Add(pp[4]); div12.Controls.Add(lastp); div12.Controls.Add(pp[
27、5]); div12.Controls.Add(TextBox1yy); div12.Controls.Add(Button1yy); //生成结束.以上生成的控件也要以放在panel中,一样的效果 PagedDataSource pds = new PagedDataSource(); pds.DataSource = mytb.DefaultView; // 把mytab转换为要直接显示的数据视图 pds.AllowPaging = true; pds.PageSi
28、ze = 3; int totalp = (mytb.Rows.Count + pds.PageSize - 1) / pds.PageSize; Label1yy.Text = "总页数为:" + Convert.ToString(totalp); int curpage; //表示当前页 if (Request.QueryString["Page"] != null) curpage = Convert.ToInt32(Request.QueryString["Page"]);
29、 else curpage = 1; pds.CurrentPageIndex = curpage - 1; Label2yy.Text = "当前页:" + curpage.ToString(); if (!pds.IsFirstPage) prep.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage - 1); if (!pds.IsLastPag
30、e) nextp.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage + 1); Repeater1.DataSource = pds; Repeater1.DataBind(); //把视图赋值给repeater1,重新绑定数据 if (curpage != 1) firtp.NavigateUrl = Request.CurrentExecutionFilePath +
31、 "?Page=1"; if (curpage != totalp) lastp.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(totalp); TextBox1yy.Text = curpage.ToString();//让它显示当前页,直观些 } protected void Button1yy_Click(object sender, EventArgs e) { //注意,动态生成的控件
32、在运行之前是不存在的,所以无法直接使用TextBox1,而且是 //让计算机自己去找这个控件(这在前面讲过,把控件名字串,转换为控件名) TextBox ppp = (TextBox)this.div12.FindControl("TextBox1yy"); string p = ppp.Text.Trim(); Response.Redirect(Request.CurrentExecutionFilePath + "?Page=" + p); } protected void Button1_Cl
33、ick(object sender, EventArgs e) { string bh = TextBox1.Text.Trim(); string xm = TextBox2.Text.Trim(); string sql = "select 编号,姓名,年份,月份,实际工资,基本工资,加班补助,考勤扣除,扣税 from 工资表 where 编号 ='" + bh + "' or 姓名 ='" + xm + "'"; DataTable mytb = new Class1().getds(sql);
34、 Repeater1.DataSource = mytb; Repeater1.DataBind(); } protected void Button2_Click(object sender, EventArgs e) { Response.Redirect("zhujiemian.aspx"); } 3.4管理员界面设计 通过登录页面进入管理员界面,其中有三个label和一个iframe1。点击label,所有内容都显示在iframe1里。通过登陆界面传过来的session,管理员可以查看员工工资信息和资料信息,也可以修改员工信
35、息,删除和添加员工。 图3.5 管理员主界面 删除用户代码: protected void Page_Load(object sender, EventArgs e) { string sql = "select 编号,姓名,年份,月份,实际工资,基本工资,加班补助,考勤扣除,扣税 from 工资表"; DataTable mytb = new Class1().getds(sql);//把数据从sql读入mytb中 Repeater1.DataSource = mytb;//把mytb行书的数据赋给rep
36、earter Repeater1.DataBind(); tt(sql);//调用tt函数 } protected void LinkButtonDel_Click(object sender, EventArgs e) { string deleteth = ((LinkButton)sender).CommandArgument.ToString();//取出要删除的编号 Session["编号"] = deleteth; Response.Write("
37、confirm('是否确定删除')"); string sql = "delete from 工资表 where 编号 ='" + deleteth + "'";//从工资表删除选中的工人 string sql1 = "delete from 员工表 where 编号 ='" + deleteth + "'";//删除该工人的基本信息 new Class1().noquery(sql1); new Class1().noquery(sql); } 图3.6 管理员修改员工工资界面 修
38、改员工工资代码: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string th = Session["编号"].ToString(); string sql = "select * from 工资表 where 编号 ='" + th + "'"; DataTable tb = new Class1().getds(sql); TextBo
39、x1.Text = tb.Rows[0]["编号"].ToString(); TextBox2.Text = tb.Rows[0]["姓名"].ToString(); TextBox3.Text = tb.Rows[0]["实际工资"].ToString(); TextBox4.Text = tb.Rows[0]["基本工资"].ToString(); TextBox5.Text = tb.Rows[0]["加班补助"].ToString(); TextBox6.T
40、ext = tb.Rows[0]["考勤扣除"].ToString(); TextBox7.Text = tb.Rows[0]["扣税"].ToString(); TextBox8.Text = tb.Rows[0]["工资信息备注"].ToString(); } } protected void Button1_Click(object sender, EventArgs e) { //string rq = TextBox3.Text.Trim(); st
41、ring xl = TextBox4.Text.Trim(); string byyx = TextBox5.Text.Trim(); string zc = TextBox6.Text.Trim(); string dh = TextBox7.Text.Trim(); string bz = TextBox8.Text.Trim(); string sql1 = "update 工资表 set 基本工资='" + xl + "',加班补助='" + byyx + "',考勤扣除='" + zc +
42、"',扣税='" + dh + "',工资信息备注='" + bz + "' where 编号='" + TextBox1.Text.Trim() + "'";//更新员工信息 string sql2 = "update 工资表 set 实际工资=基本工资+加班补助-考勤扣除-扣税"; new Class1().noquery(sql1); new Class1().noquery(sql2); Response.Write(""); } p
43、rotected void Button2_Click(object sender, EventArgs e) { Response.Redirect("gongzi.aspx"); } 图3.7 员工基本信息界面 主要代码: protected void Page_Load(object sender, EventArgs e) { string sql = "select 编号,姓名,性别,出生日期,毕业院校,职称,电话,基本信息备注 from 员工表"; DataTable mytb = n
44、ew Class1().getds(sql);//把数据从sql读入mytb中 //string yxrs = mytb.Rows[0]["已选人数"].ToString();//取出0行的已选人数 Repeater1.DataSource = mytb;//把mytb行书的数据赋给repearter Repeater1.DataBind(); tt(sql);//调用tt函数 } protected void tt(string sql) { //使用本模块说明: //(1
45、)在前面html代码中定义一个repeater,其中id=repeater1; 再定义一个div,其 id=div11 //(2)调用本tt方法时传进来一个sql命令字符串即可,其它不需要修改什么了 string sql2 = "select 编号,姓名,性别,出生日期,毕业院校,职称,电话,基本信息备注 from 员工表"; DataTable mytb = new Class1().getds(sql2); //自动生成页码控制控件,这样方便以后广泛应用(只需要在前台html代码建立一个div(id="div11")就
46、可以了,把这些控件加去 Label Label1yy = new Label(); Label Label2yy = new Label(); HyperLink firtp = new HyperLink(); firtp.Text = "首页"; HyperLink prep = new HyperLink(); prep.Text = "上一页"; HyperLink nextp = new HyperLink(); nextp.Text = "
47、下一页"; HyperLink lastp = new HyperLink(); lastp.Text = "尾页"; TextBox TextBox1yy = new TextBox(); TextBox1yy.ID = "TextBox1yy"; //要想在一下步继续编程使用这个控件,要用findcontrol方法查找本控件,必须指定ID TextBox1yy.Width = 30; TextBox1yy.Attributes.Add("runat", "server");//这个可
48、要可不要,默认应该是runat=server的 Button Button1yy = new Button(); Button1yy.Click += new System.EventHandler(Button1yy_Click);//要想控件响应事件编程,必须要这句,否则以后它无法响应事件 Button1yy.Text = "GO"; //每个项之间加个分隔符号|| Label[] pp = new Label[7]; for (int i = 0; i < 7; i++) { La
49、bel pt = new Label(); pt.Text = " || "; pp[i] = pt; } div12.Controls.Add(Label1yy); div12.Controls.Add(pp[0]); div12.Controls.Add(Label2yy); div12.Controls.Add(pp[1]); div12.Controls.Add(firtp); div12.Controls.Add(pp[2]); div12.Controls.
50、Add(prep); div12.Controls.Add(pp[3]); div12.Controls.Add(nextp); div12.Controls.Add(pp[4]); div12.Controls.Add(lastp); div12.Controls.Add(pp[5]); div12.Controls.Add(TextBox1yy); div12.Controls.Add(Button1yy); //生成结束.以上生成的控件也要以放在






