目录一、开发计划 (1)1. 所选题目 (1)2. 小组信息 (1)3. 项目背景 (1)二、需求分析 (2)1. 需求定义说明书 (2)2. 数据流图 (2)3. 数据字典 (4)1)数据项的定义 (4)2)数据流的定义 (4)3)数据存储的定义 (4)4)处理逻辑的定义 (5)三、概要设计 (5)1. 系统功能模块结构图 (5)2. 数据库概要设计(E-R图) (6)3. 代码设计 (6)4. 输入/输出界面设计 (7)四、详细设计 (8)1. 主界面模块 (8)1) 界面设计 (8)2) 编码 (11)2. 派车功能模块 (11)1) 界面设计 (12)2) 编码 (19)五、测试与调试 (30)1. 系统测试目标 (30)2. 任务测试的任务 (30)3. 系统测试的方法 (31)4. 系统测试用例设计 (31)六、对软件分析、设计及实施方面的评价及体会 (32)七、组长对小组工作及成员的评价 (32)一、开发计划1. 所选题目车辆管理系统2. 小组信息1)小组成员:XXXXXX2)任务分配:7月3日:XXX:分析管理功能模块代码XXX:分析课题,编写开发计划、需求分析7月4日:XXX:绘制数据流程图、E-R图、模块结构图XXX:运行系统,分析数据库结构、系统结构、数据流程、数据字典7月5日:XXX:测试功能模块,记录测试过程及结果XXX:测试功能模块,记录测试过程及结果7月6日:XXX:编写好实验报告并提交3. 项目背景1)原系统:随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得到普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理分配使用问题。
该问题涉及到车辆的档案管理;驾驶员档案管理;车辆(维修费用、洗车费用、燃料费用等)管理;车辆使用管理和交通事故管理等。
如何对一个企事业单位的车辆进行合理分配使用,使其发挥最大的使用价值,所以该系统对于一个用车单位来说,不但可以对车辆的使用进行合理的管理,而且对车辆的使用情况进行跟踪记录,这对于单位车辆责任到人,费用清晰,避免责任混乱、费用虚假等一系列相应问题的解决。
2)目标系统:原系统的设计基本满足要求,但也存在着些许不足之处,我们所要做的就是分析原系统,尽可能的完善原系统。
二、需求分析1. 需求定义说明书在计算机网络,数据库和先进的开发平台上,利用现有的软件,配置一定的硬件,开发一个具有开放体系结构的、易扩充的、易维护的、具有良好人机交互界面的车辆管理系统,实现机关、企业、事业的等单位车辆的自动化的计算机管理系统,为各单位提供准确、精细、迅速的车辆信息。
车辆管理系统是针对公司的大量信息处理工作而开发的管理软件。
根据用户的要求,实现对车辆基本信息、驾驶员、费用、出车记录、事故记录、年检记录管理几个方面的功能。
用户界面分为管理员、驾驶员和科室三个界面,用户在输入不同账号及密码后,根据用户权限不同登录不同的用户界面。
其中,管理员的权限包括派车管理(派车、派车审批、查看派车记录)、车辆管理(车辆信息的增加和修改)、人员管理(人员信息的增加和修改)、维修管理(保养申请、保养审批、查看保养记录)和其他管理(绩效考核、查看加油记录);驾驶员的权限有派车管理(出车申请、查看派车记录)、个人资料(查看车辆资料、个人查询和修改)、车辆的养护管理(养护申请、养护记录)、车辆管理(查看加油记录);科室的权限有派车管理(派车申请、查看派车记录)和科室管理(更改密码)。
2. 数据流图一层图二层图3. 数据字典1)数据项的定义数据项编号:1-01数据项名称:驾驶员编号别名:无简述:某位驾驶员的编号类型:整型长度:4字节取值范围:0~100数据项编号:1-02数据项名称:驾驶员姓名别名:无简述:某驾驶员的姓名类型:字符型长度:20字节取值范围:中英文2)数据流的定义数据流名称:派车申请单编号:F1简述:驾驶员或科室填写的车辆派遣凭单数据流来源:驾驶员或科室数据流去向:派车申请资料登记处数据流组成:{车牌号码+驾驶员}+出车时间 + 出车天数 + 目的地 + 出车原因+用车科室+随队人员+备注信息流通量:25份/天高峰流通量:50份/天3)数据存储的定义数据存储的名称:派车申请资料表数据存储编号:D1简述:记录派车申请的编号、申请人、申请时间、申请原因与批复情况等信息数据存储组成:派车申请单编号 + 申请人 + 申请时间+申请原因+批复情况(同意/不同意)关键字:派车申请单编号4)处理逻辑的定义处理名:派车申请审批编号:P3输入:数据流F1输出:数据流F1描述:管理员从派车申请资料中提取未批复的申请单进行批复,同意的派车申请单经过信息管理给申请人派车,不同意的则取消申请单。
三、概要设计1. 系统功能模块结构图2. 数据库概要设计(E-R图)3. 代码设计对于每辆车都有各自的车牌号,为了统一管理的方便,对每辆车都做了编码。
车辆类型可分为机动车、卡车、轿车3大类,机动车又可分为电动车、摩托车;卡车可分为大型卡车、中型卡车和小型卡车。
因此,车辆的编码有9为数字组成,其中前两位表示车辆的大类号,跟在大类号后边两位表示小类号,后面5位表示车辆号,具体表示如下:** ** *****车牌号小类号大类号4. 输入/输出界面设计在增添或修改资料时会出现数据的输入,输入界面可通过文本框和数据库对应的数据进行交互来实现,在文本框中输入相应数据后,数据库做出相应更新。
在用户查询数据时,往往需要打印报表,此时可以表格的实现输出数据,实现方法是文本框与数据库相应数据的绑定。
四、详细设计1. 主界面模块编制人:XXX在主界面中添加三个链接控件,分别用来与三个登录界面交互。
在管理员、驾驶员和科室3个登录界面各添加一个返回主界面的按钮。
程序启动后,在主界面选择相应的登录窗口,通过登录界面验证操作员密码后,将进入程序主界面。
通过程序主界面将会执行相应的权限操作,并且还可以通过主界面的菜单,来调用相应程序,在进行相应操作。
当用户想切换操作员时可按返回按钮退回到主界面,重新选择登录界面。
1) 界面设计主界面管理员登录界面驾驶员登录界面科室登录界面2) 编码a)主界面:<asp:LinkButton ID="lnkbtnManager" runat="server" PostBackUrl="~/master/index.aspx"><span style="font-size: 30pt">管理员</span></asp:LinkButton> <asp:LinkButton ID="lnkbtnUser" runat="server" PostBackUrl="~/user/index.aspx"> <span style="font-size: 30pt">驾驶员</span></asp:LinkButton> <asp:LinkButton ID="lnkbtnKeshi" runat="server" PostBackUrl="~/keshi/index.aspx"> <span style="font-size: 30pt">科室</span></asp:LinkButton>b)登录界面:在各登录界面源视图下加入如下代码:<asp:Button ID="btnReturn" runat="server" PostBackUrl="~/Default.aspx"Width="70px" Text="返回" />注:<asp:LinkButton></asp:LinkButton> 是添加控件LinkButton的格式,在<asp:LinkButton>内设置该控件的属性,ID是控件的唯一标识名称,runat是服务器,PostBackUrl是点击按钮时页面返回的链接,其中,管理员链接的是管理员的登录界面,驾驶员链接的是驾驶员的登录界面,科室链接的是科室的登录界面;<span></span>之间的文字是控件显示的文字,style="font-size: 30pt"是设置字体大小为30磅。
添加一个ID为btnReturn的按钮控件,点击该按钮时链接到名为Default(主界面)的页面,按钮程度是70像数。
2. 派车功能模块编制人:XXX开始派车模块:模块描述该模块完成提交派车信息派车审批模块:模块描述该模块完成派车审批的过程同意,不同意。
同意:派车成功,短信提醒驾驶员或者是打印派车单不同意:派车取消。
算法实现1) 界面设计开始派车派车审批打印派车单不同意入库2) 编码开始派车代码:public partial class master_paiche : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){Server.Execute("loginchk.aspx");if (!Page.IsPostBack){for (int i = 0; i < 24; i++){this.DropDownList3.Items.Add(i.ToString()); }for (int b = 0; b < 60; b++){this.DropDownList4.Items.Add(b.ToString()); }erbind();this.carbind();this.keshibind();}}private void carbind(){SqlConnection con = Jjchatdb.createConnection();con.Open();SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select * from carinfo", con);DataSet Myds = new DataSet();sda.Fill(Myds, "carinfo");this.DropDownList1.DataSource = Myds.Tables["carinfo"];this.DropDownList1.DataValueField = "userid";this.DropDownList1.DataTextField = "userid";this.DropDownList1.DataBind();con.Close();}private void keshibind() 自定义科室bind()的方法代码;{SqlConnection con = Jjchatdb.createConnection();con.Open();SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select * from keshi", con);//查询科室表信息DataSet Myds = new DataSet();sda.Fill(Myds, "keshi");//数据源的各个属性设置this.DropDownList5.DataSource = Myds.Tables["keshi"];this.DropDownList5.DataValueField = "ksname";this.DropDownList5.DataTextField = "ksname";this.DropDownList5.DataBind();con.Close();}private void userbind()//自定义驾驶员bind()的方法代码:{SqlConnection con1 = Jjchatdb.createConnection();con1.Open();SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select * from userinfo", con1);//查询驾驶员信息DataSet Myds = new DataSet();sda.Fill(Myds, "userinfo");//数据源的各个属性设置this.DropDownList2.DataSource = Myds.Tables["userinfo"];this.DropDownList2.DataValueField = "username";this.DropDownList2.DataTextField = "username";this.DropDownList2.DataBind();con1.Close();}protected void Button1_Click(object sender, EventArgs e)//申请派车{string outdate = bel1.Text.ToString() + " " + DropDownList3.Text.ToString() + ":" + DropDownList4.Text.ToString() + ":" + "00";SqlConnection con2 = Jjchatdb.createConnection();con2.Open();string sql_newadd = "insert into pcgl (carid,username,outdate,howday,mdd,ccyy,ccgls,ycks,sxry,beizhu)values('" + this.DropDownList1.Text + "','" + this.DropDownList2.Text + "','" + outdate + "','" + this.TextBox4.Text + "','" + this.TextBox5.Text + "','" + this.TextBox6.Text + "','" + this.TextBox7.Text + "','" + this.DropDownList5.Text + "','" + this.TextBox9.Text + "','" + this.TextBox10.Text + "')";//添加派车信息 SqlCommand cmd_newadd = new SqlCommand(sql_newadd, con2);cmd_newadd.ExecuteNonQuery();con2.Close();this.Panel1.Visible = false;this.Panel2.Visible = true;}protected void ImageButton1_Click(object sender, ImageClickEventArgs e) {this.Calendar1.Visible = true;}protected void Calendar1_SelectionChanged(object sender, EventArgs e) {bel1.Text = this.Calendar1.SelectedDate.Year.ToString() + "-" + this.Calendar1.SelectedDate.Month.ToString() + "-" + this.Calendar1.SelectedDate.Day.ToString();this.Calendar1.Visible = false;}}派车审核代码:public partial class master_paicheedit : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e)//页面首次载入{Server.Execute("loginchk.aspx");if (!Page.IsPostBack)//页面往返时显示派车表的记录{SqlConnection con = Jjchatdb.createConnection();con.Open();SqlCommand cmd = new SqlCommand("select * from pcgl where id='" + Request.QueryString["carid"] + "'", con);SqlDataReader sdr = cmd.ExecuteReader();if (sdr.Read())//赋值{bel2.Text = sdr["carid"].ToString();//车牌号码bel3.Text = sdr["username"].ToString();//驾驶员bel1.Text = sdr["outdate"].ToString();//出车时间this.TextBox4.Text = sdr["howday"].ToString();//出车天数 this.TextBox5.Text = sdr["mdd"].ToString();//目的地this.TextBox6.Text = sdr["ccyy"].ToString();//出车原因this.TextBox7.Text = sdr["ccgls"].ToString();//出车前公里数 this.TextBox8.Text = sdr["ycks"].ToString();//用车科室this.TextBox9.Text = sdr["sxry"].ToString();//随行人员this.TextBox10.Text = sdr["beizhu"].ToString();//备注信息 this.TextBox11.Text = Convert.ToString(Session["masterid"]);//审批人bel4.Text = sdr["id"].ToString();//string a = bel2.Text;if (a == ""){}else{this.Button4.Visible = false;this.Button6.Visible = false;}SqlConnection cong = Jjchatdb.createConnection();cong.Open();SqlCommand cmdg = new SqlCommand("select * from carinfo where userid='" + bel2.Text + "'", cong);SqlDataReader sdrg = cmdg.ExecuteReader();if (sdrg.Read()){bel5.Text = sdrg["gls"].ToString();}sdrg.Close();cong.Close();}sdr.Close();con.Close();this.carbind();erbind();}}private void carbind()//自定义车辆的bind()的方法代码:{SqlConnection con = Jjchatdb.createConnection();con.Open();SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select * from carinfo", con); DataSet Myds = new DataSet();sda.Fill(Myds, "carinfo");//数据源的各个属性设置this.DropDownList1.DataSource = Myds.Tables["carinfo"];this.DropDownList1.DataValueField = "userid";this.DropDownList1.DataTextField = "userid";this.DropDownList1.DataBind();con.Close();}private void userbind()//驾驶员bind()的方法代码:{SqlConnection con1 = Jjchatdb.createConnection();con1.Open();SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = new SqlCommand("select * from userinfo", con1); DataSet Myds = new DataSet();sda.Fill(Myds, "userinfo");//数据源的各个属性设置this.DropDownList2.DataSource = Myds.Tables["userinfo"];this.DropDownList2.DataValueField = "username";this.DropDownList2.DataTextField = "username";this.DropDownList2.DataBind();con1.Close();}protected void Button1_Click(object sender, EventArgs e)//同意派车按钮触发事件的代码:{SqlConnection con2 = Jjchatdb.createConnection();con2.Open();string sql_update = "update pcgl set carid='" + bel2.Text + "',username='" + bel3.Text + "',howday='" + this.TextBox4.Text + "',mdd='" + this.TextBox5.Text + "',ccyy='" + this.TextBox6.Text + "',ccgls='" + this.TextBox7.Text + "',ycks='" + this.TextBox8.Text + "',sxry='" + this.TextBox9.Text + "',beizhu='" + this.TextBox10.Text + "',pcr='" + this.TextBox11.Text + "',pcok='yes',spdate='" + System.DateTime.Now.ToString() + "' where id='" + Request.QueryString["carid"] + "'";SqlCommand cmd_update = new SqlCommand(sql_update, con2);cmd_update.ExecuteNonQuery();con2.Close();SqlConnection con = Jjchatdb.createConnection();con.Open();string sql_update1 = "update userinfo set zaigan='no' where username='" + bel3.Text + "'";SqlCommand cmd_update1 = new SqlCommand(sql_update1, con);cmd_update1.ExecuteNonQuery();con.Close();SqlConnection con1 = Jjchatdb.createConnection();con1.Open();string sql_update2 = "update carinfo set zaigan='no' where userid='" + bel2.Text + "'";SqlCommand cmd_update2 = new SqlCommand(sql_update2, con1);cmd_update2.ExecuteNonQuery();con1.Close();this.Panel1.Visible = false;}protected void Button2_Click(object sender, EventArgs e)//不同意派车按钮触发事件的代码{SqlConnection con = Jjchatdb.createConnection();con.Open();string SqlDeleteStr = "delete from pcgl where id = '" + Request.QueryString["carid"] + "'";SqlCommand cmd_update = new SqlCommand(SqlDeleteStr, con);cmd_update.ExecuteNonQuery();con.Close();this.Panel1.Visible = false;this.Panel3.Visible = true;}protected void Button3_Click(object sender, EventArgs e)//打印派车单,进入派车单界面{Response.Redirect("paichedan.aspx?carid="+bel4.Text);Response.Write("<Script>window.open('WebForm2.aspx','newwindow','','toolbar=no, location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,wid th=750,height=470,left=80,top=40');</script>");}protected void Button4_Click(object sender, EventArgs e)//选择车辆{this.Button4.Visible = false;this.DropDownList1.Visible = true;this.Button5.Visible = true;}protected void Button6_Click(object sender, EventArgs e)//选择驾驶员{this.Button6.Visible = false;this.DropDownList2.Visible = true;}protected void Button5_Click(object sender, EventArgs e)//选择本次出车的牌号{this.Button4.Visible = true;this.DropDownList1.Visible = false;this.Button5.Visible = false;bel2.Text = this.DropDownList1.Text;SqlConnection cong = Jjchatdb.createConnection();cong.Open();SqlCommand cmdg = new SqlCommand("select * from carinfo where userid='" + bel2.Text + "'", cong);SqlDataReader sdrg = cmdg.ExecuteReader();if (sdrg.Read()){bel5.Text = sdrg["gls"].ToString();this.TextBox7.Text = sdrg["gls"].ToString();}sdrg.Close();cong.Close();}protected void Button7_Click(object sender, EventArgs e)//选择本次出车的驾驶员{this.Button6.Visible = true;this.DropDownList2.Visible = false;this.Button7.Visible = false;bel3.Text = this.DropDownList2.Text;}protected void Button8_Click(object sender, EventArgs e)//触发短信提醒驾驶员的按钮进入短信提醒界面{Response.Redirect("sms.aspx?id=" + bel4.Text);}}入库代码public partial class master_paicheruku : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e)//首次载入界面:{Server.Execute("loginchk.aspx");if (!Page.IsPostBack)//页面往返时:{this.TextBox1.Text = System.DateTime.Now.ToString();for (int i = 0; i < 24; i++){this.DropDownList1.Items.Add(i.ToString());}for (int b = 0; b < 60; b++){this.DropDownList2.Items.Add(b.ToString());}SqlConnection con = Jjchatdb.createConnection();con.Open();SqlCommand cmd = new SqlCommand("select * from pcgl where id='" + Request.QueryString["carid"] + "'", con);SqlDataReader sdr = cmd.ExecuteReader();if (sdr.Read()){bel1.Text = sdr["carid"].ToString();//车牌号bel2.Text = sdr["username"].ToString();//驾驶员bel3.Text = sdr["outdate"].ToString();//出车时间bel4.Text = sdr["howday"].ToString();//入库时间bel5.Text = sdr["mdd"].ToString();//目的地bel6.Text = sdr["ccyy"].ToString();//出车原因bel7.Text = sdr["ccgls"].ToString();//出车前公里数bel8.Text = sdr["ycks"].ToString();//用车科室bel9.Text = sdr["sxry"].ToString();//随行人员bel10.Text = sdr["beizhu"].ToString();//备注bel11.Text = sdr["pcr"].ToString();//审批人bel12.Text = sdr["spdate"].ToString();//审批日期}sdr.Close();con.Close();}}protected void Button2_Click(object sender, EventArgs e)//入库时间的代码: {this.TextBox1.Text = this.Calendar1.SelectedDate.ToString("yyyy-MM-dd") + " " + this.DropDownList1.Text + ":" + this.DropDownList2.Text;}protected void Calendar1_SelectionChanged(object sender, EventArgs e) {this.TextBox1.Text = this.Calendar1.SelectedDate.ToString("yyyy-MM-dd");this.Calendar1.Visible = false;}protected void Button1_Click(object sender, EventArgs e)//确定入库的代码: {SqlConnection con2 = Jjchatdb.createConnection();con2.Open();string sql_update = "update pcgl set comedate='" + this.TextBox1.Text + "',shijiday='" + this.TextBox2.Text + "',rkgls='" + this.TextBox3.Text + "',pcok='ok',spdate='" + System.DateTime.Now.ToString() + "' where id='" + Request.QueryString["carid"] + "'";SqlCommand cmd_update = new SqlCommand(sql_update, con2);cmd_update.ExecuteNonQuery();con2.Close();SqlConnection con = Jjchatdb.createConnection();con.Open();string sql_update1 = "update userinfo set zaigan='yes' where username='" + bel2.Text + "'";/驾驶员的修改SqlCommand cmd_update1 = new SqlCommand(sql_update1, con);cmd_update1.ExecuteNonQuery();con.Close();SqlConnection con1 = Jjchatdb.createConnection();con1.Open();string sql_update2 = "update carinfo set zaigan='yes' where userid='" + bel1.Text + "'";//车牌号码的修改SqlCommand cmd_update2 = new SqlCommand(sql_update2, con1);cmd_update2.ExecuteNonQuery();con1.Close();this.Panel1.Visible = false;this.Panel2.Visible = true;}protected void ImageButton1_Click(object sender, ImageClickEventArgs e) {this.Calendar1.Visible = true;}}五、测试与调试1. 系统测试目标测试系统工作是否正常2. 任务测试的任务本次测试的项目是车辆管理系统中的主界面功能及派车管理功能。