1、本科毕业论文4S店汽车销售及服务管理系统的设计与实现 目 录1 引言11.1 4S店汽车销售及服务管理系统的发展现状11.2开发的背景和意义12 需求分析22.1 4S店汽车销售及服务管理系统功能22.2 4S店汽车销售及服务管理系统业务分析23 系统设计33.1 系统模块设计33.1.1 维修管理模块43.1.2 销售管理模块43.1.3 库存管理模块53.1.4 客户管理模块63.1.5 系统管理模块73.2 系统数据库设计86 总结106.1系统的总结106.2开发过程的总结10附录11II1 引言1.1 4S店汽车销售及服务管理系统的发展现状相对于国外同行来说,我国汽车服务企业的信息化
2、总体应用水平还相当低。企业信息的传送更多地仍以最原始的图纸传送方式为主,只有少量的信息借助互联网进行传送。 这种状况要求我们必须尽快提升汽车服务企业的信息化水平,总结国外汽车服务企业的发展历程,少走弯路,在提升整个行业信息化水平的过程中充分采用跨跃式发展的思路。近年来我国汽车服务业的信息化水平已经有了长足的发展和进步。企业信息管理系统正在规划和建设之中,管理者也已清醒地认识到,信息化对推动一个企业发展的重要作用及意义,这就为下一步更好地利用信息化成果来推动汽车服务业健康高效发展奠定了坚实的基础。1.2开发的背景和意义随着汽车工业竞争的日趋激烈,我国汽车销售市场出现了以整车销售(sale)、配件
3、供销(sparepart)、售后服务(service)、信息反馈(survey)这四项功能集于一体(简称为4S)的汽车销售服务企业。由于许多4S店不分经销的汽车品牌的档次、强弱,不管其投资何时能回收,过份追求毫华、一流,一哄而上建4S店,导致了社会资源的大量浪费,和给自身的生存和发展背上了沉重的包袱。值得一提的是随着利润空间的不断压缩,不少4S店已直接面临着生存危机,提高工作效率,降低经营成本迫在眉睫。电子计算机信息管理系统在4S店的合理运用,能很好的解决如上问题。电子计算机系统的建立,实现了汽车销售、配件供销、服务接待与结算、业务管理等系统的内外联网。加强软件建设,使4S店发挥更大的优势,特
4、别是充分发挥电子计算机进行信息交流的互动功能和管理功能。汽车销售及服务管理系统在汽车服务企业的合理运用顺应新时代计算机信息技术和汽车服务企业发展趋势的要求,是企业信息化的必然过程,是降低企业经营成本和提高企业竞争力的有效方法。2 需求分析2.1 4S店汽车销售及服务管理系统功能汽车服务企业管理系统要根据行业特点,对经营过程中所有的重要环节销售、维修和库存进行管理。能够完成需要的营业统计和生成所有的维修、销售和出入库单据。能够对企业经营的人力和物质资源进行有效管理。2.2 4S店汽车销售及服务管理系统业务分析根据对汽车服务企业的调查,该类企业的主要管理业务主要有以下几点:1.汽车维修业务管理汽车
5、维修业务的完成需要企业多个部门人员的配合才能完成,包括进厂接待、接待人员输入客户车辆的相关信息、调度员分析汽车故障后确定派工人员、派工人员确定车辆故障、根据车辆故障列出需要使用的物料、工具和服务等、仓库人员根据派工人员的需求查询库存信息确定采购方式和库存调拨方案、派工人员到仓库领用物资进行作业、车辆维修完工结算。2.汽车销售业务管理销售管理是系统的核心功能。需要处理汽车服务企业中所有常见的销售方式,区别对待销售、预售、调拨,为财务管理提供合适的销售数据。该模块还必须提供多种查询方式,将配件标准编码、拼音和通用情况结合起来,找出最符合客户要求的配件组合,供其选择。3.物料出入库、移动管理对日常的
6、生产领料、销售提货、采购入库、生产入库和物料库位移动等工作进行管理,产生出、入和移动单据,改变仓库、货位的库存数量,登记数量帐。4.库存物料管理信息分析从各种角度对库存物料信息做分析。如物料库存数量分析(是否超储或短缺)、物料来源和去向分析和物料分类构成分析等。3 系统设计3.1 系统模块设计根据系统的需求分析,系统应包括以下几个模块:(1) 维修管理模块维修管理主要完成维修单据的创建、维修单据的编辑和维修单据的删除。(2) 销售管理模块销售管理主要完成销售单据的创建、销售单据的编辑和销售单据的删除。(3) 库存管理模块库存管理主要完成仓库的管理、出入库的管理、库存盘点。(4) 客户管理模块客
7、户管理主要完成销售和维修客户的创建、编辑和删除。(5) 系统管理模块系统管理主要完成系统用户的维护、系统通知的维护、仓库基本信息管理和所有仓库数据维护及报表打印。系统的总体功能模块如图1-1所示4S店汽车销售及服务管理系统维维修管理模块销销售管理模块仓仓库管理模块客客户管理模块系系统管理模块图1-1 系统的总体功能模块图3.1.1 维修管理模块 (1) 创建维修工单。在系统输入送修单位、送修时间、操作类型、故障描述、经手人、材料名和材料数量,可以点击查找物料的链接到物料查找的页面进行查找,点击查找到的物料系统会自动跳转回创建维修工单的页面,并会自动填入刚才选择的物料,输入完所有的信息,点击提交
8、,系统提示成功创建维修工单。(2) 编辑维修工单。该管理页面可以实现对维修工单的修改,操作用户根据实际需求填入需要修改的数据,点击提交保存,系统提示成功修改维修工单。(3) 删除维修工单。该管理页面可以实现对维修工单的删除,操作用户根据实际需求,选择要删除的维修工单,点击确定删除按钮,系统会提示:是否要删除该维修工单,单击是,该维修工单会从数据库里删除,系统提示成功删除维修工单,单击否,系统自动跳转到工作页面,系统不对该维修工单进行删除操作,数据库仍然会保留该维修工单的数据。维修管理模块包括如图1-2所示维修管理模块创建维修单编辑维修单删除维修单图1-2 维修管理模块图3.1.2 销售管理模块
9、(1) 创建销售单。在系统内输入购买单位、购买时间、操作类型、细节描述、经手人、购买车型和数量等信息,点击提交按钮,系统把信息写入数据库,系统提示操作成功。(2)编辑销售单。该管理页面实现对销售单的修改,操作用户根据实际情况,对要修改的内容进行修改,点击保存按钮,系统把修改后的数据写入相关的数据库,系统提示操作成功。(3)删除销售单。该管理页面可以实现对销售单的删除,操作用户根据实际需求,选择要删除的销售单。销售管理模块包括如图1-3所示销售管理模块创建销售单编辑销售单删除销售单图1-3 销售管理模块图3.1.3 库存管理模块(1) 仓库管理。该管理页面主要完成以下功能:通知列表及内容展示功能
10、, 所管理仓库的库存产品数量超限警报功能,产品的类别设置等。(2) 库存盘点。根据物料打印出盘点单据,根据盘点单据到仓库进行实物盘点,根据盘点结果录入盘点差异。(3) 入库管理。操作员根据收货单据录入材料名和数量等相应的数据,系统会自动生成入库单。(4) 出库管理。操作员根据实际需求录入材料名和数量,系统自动生成出库单。(5) 仓库查询。输入要查询的物料号或物料名,点击开始查询,输出查询结果;如果不记得物料号和物料名,可以进行模糊查询,输入物料描述,点击开始查询,输出查询结果。库存管理模块包括如图1-4所示库存管理模块仓库管理入库管理出库管理库存查询库存盘点图1-4 库存管理模块图3.1.4
11、客户管理模块(1) 添加客户信息。在系统内输入客户姓名、电话等信息,点击提交按钮,系统提示成功创建客户信息。(2) 编辑客户信息。根据需要修改客户信息,点击保存,系统提示修改成功。(3) 删除客户信息。该管理页面可以实现对客户信息的删除,操作用户根据实际需求,选择要删除的客户信息。客户管理模块包括如图1-5所示客户管理模块增加客户信息编辑客户信息删除客户信息图1-5 客户管理模块图3.1.5 系统管理模块(1) 系统用户管理。系统管理员可以增加、删除、编辑用户,用户分为仓库管理员、入库员、出库员这三个角色,由于本系统支持多仓库操作,所以状态权限细分到单个仓库,修改本用户密码。(2) 系统通知管
12、理。发布系统通知,方便管理员和整个系统用户的信息交流,显示通知列表及内容。(3) 仓库信息管理。对仓库进行增加、删除、及相关编辑,以满足生产扩张的需要,对仓库库存产品大类、产品小类进行增删改管理,产品小类设置数量上下限,索模块支持模糊搜索。(4) 仓库数据维护。库存警报显示库存产品数量超限的产品,方便管理员实时监控库存数量;库存盘点对近三个月及本年度的出入库等数据进行展示,方便管理对帐;单据管理展示所有用户的操作记录及产品流动记录,并提供搜索服务;数据报表将仓库所有产品流动记录展示并提供报表数据搜索及导出功能(数据导出主要为Excel和PDF两种格式)系统管理模块包括如图1-6所示系统管理模块
13、系统用户管理系统通知管理仓库信息管理仓库数据维护图1-6 系统管理模块图3.2 系统数据库设计表1.1仓储人员表(User)字段类型长度备注idint4自编号usernamevarchar20用户名passwordvarchar20密码 warehouse_idint4仓库IDgoods_typeint40库管理1为入库2为出库表1.2仓库表(Warehouse)字段类型长度备注idint4自编号namevarchar20仓库名称shelf_numberint4货架总数表1.3库存产品表(Goods)字段类型长度备注idint4自编号pricedecimal10产品价格 quantityint
14、4产品数量factoryvarchar20产品厂家ctimevarchar10生产日期itimevarchar10入库日期表1.4单据表(Receipt)字段类型长度备注idint4自编号goods_idint4库存产品IDgoods_numberint4库存产品数量get_uservarchar20需求人input_userint4操作人timevarchar10操作时间receipt_typeint4操作类型表1.5操作类型表(ReceiptType)字段类型长度备注idint4自编号receipt_typevarchar50类型表1.6系统日志表(Record)字段类型长度备注idint
15、4自编号uidint4用户IDgoods_idInt4操作的产品IDgoods_numberInt 4该产品数量 receipt_typeInt4操作类型表record_timevarchar10操作时间表1.7系统通知表(SystemNotification)字段类型长度备注idint4自编号tatilevarchar50公告标题contenttext255系统公告timevarchar10发布时间6 总结6.1系统的总结本系统已经从功能上满足了4S店汽车销售及服务管理系统管理的需要,但是从技术上来说这个系统还并不是一个高水平的作品。任何一个项目想做的完美都不是一件很容易的事情。本系统在以下
16、几个方面还存在缺陷:1.没有设计财务模块,已有模块功能也不是很完善,特别是没有设计与财务模块的集成点;2.数据报表模块应该有图形化的展示界面,这样更加直观。6.2开发过程的总结开发过程是快乐的。因为在开发中不但能充实生活,同时自己的技能也得到了很好锻炼。但是在开发过程中暴露出自己的一些问题或不足也是很值得思考的:首先,在对一个系统的整体理解上,还不够充分,因此功能模块的设计和开发出现过技术上的调整。其次,在进行开发时,还不能深入的理解ASP.NET的思想,所以虽然是在.NET下开发程序,有些时候却还是在用面向过程的程序算法来实现相信有了这次开发经历,以后再做类似的开发项目,应该就会少栽很多跟头
17、了。附录系统共用类,该类在系统App_Code文件夹下。该类下文件可以被整个应用程序集引用,其主要文件如下所示。SqlDataBase.cs 类,数据库操作文件程序如下:using System;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.We
18、bParts;using System.Web.UI.HtmlControls;/ / SqlDataBase 的摘要说明/ public class SqlDataBase public SqlDataBase() / / TODO: 在此处添加构造函数逻辑 / private SqlConnection Cn; private SqlCommand Cm; private DataSet ds; private DataView dv; #region private void Open()/数据库连接 Cn = new SqlConnection ( ConfigurationSetti
19、ngs . AppSettings Den ); Cn.Open(); #endregion #region 关闭连接 private void Close() if (Cn != null) Cn.Close(); Cn.Dispose(); #endregion #region 执行简单的SQL语句 public void NoreturnSql(string Sql) Open(); Cm = new SqlCommand(Sql, Cn); Cm.ExecuteNonQuery(); Close(); #endregion #region 返回首列单行的SQL语句 public str
20、ing ReturnSQL(string Sql) string Returnstring = ; try Open(); Cm = new SqlCommand(Sql, Cn); Returnstring = Cm.ExecuteScalar().ToString(); catch Close(); return Returnstring; #endregion #region 返回SQL语句的DateSet数据集 public DataSet GetDS(string SQL) Open(); SqlDataAdapter myAdapter = new SqlDataAdapter(S
21、QL, Cn); ds = new DataSet(); myAdapter.Fill(ds); Close(); return ds; #endregion #region 返回一个DataView视图 public DataView DV(string SQL) ds = GetDS(SQL); dv = ds.Tables0.DefaultView; return dv; #endregion #region 返回一个DataTable对象 public DataTable DT(string SQL) return GetDS(SQL).Tables0; #endregion #reg
22、ion 返回一个含有两个DataTable的DataSet数据集 public DataSet TwoDS(string SQL1, string SQL2) DataSet myDS = new DataSet(); Open(); SqlDataAdapter myAD1 = new SqlDataAdapter(SQL1, Cn); myAD1.Fill(myDS, Big); SqlDataAdapter myAD2 = new SqlDataAdapter(SQL2, Cn); myAD2.Fill(myDS, Small); Close(); return myDS; #endre
23、gion #region public SqlDataReader GRead(string Sql) Open(); SqlCommand mycom = new SqlCommand(Sql, Cn); SqlDataReader Dr = mycom.ExecuteReader(); return Dr; #endregion #region 创建一个Command来执行存储过程 private SqlCommand ReturnCM(string RunNM, SqlParameter PartNM) Open(); SqlCommand ThisCm = new SqlCommand
24、(RunNM, Cn); ThisCm.CommandType = CommandType.StoredProcedure; /传入参数 if (PartNM != null) foreach (SqlParameter parmt in PartNM) ThisCm.Parameters.Add(parmt); /加入返回参数 ThisCm.Parameters.Add(new SqlParameter(ReturnValue, SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataR
25、owVersion.Default, null); return ThisCm; #endregion #region 返回带参数的存储过程 public int RunInsert(string RunName, SqlParameter PartName) SqlCommand MyCM = ReturnCM(RunName, PartName); MyCM.ExecuteNonQuery(); this.Close(); return (int)MyCM.ParametersReturnValue.Value; #endregion #region /传入输入的参数 public Sql
26、Parameter IntParam(string ParamName, SqlDbType DbType, int Size, object Value) Return MakeParam ( ParamName , DbType , Size , ParameterDirection . Input , Value ); #endregion #region /传入返回值参数 public SqlParameter OutParam ( string ParamName , SqlDbType DbType , int Size) return MakeParam ( ParamName
27、, DbType , Size , ParameterDirection.Output, null); #endregion #region /生成存储过程参数 private SqlParameter MakeParam ( string ParamName , SqlDbType DbType , Int32 Size , ParameterDirection Direction, object Value) SqlParameter param; if (Size 0) param = new SqlParameter(ParamName, DbType, Size); else par
28、am = new SqlParameter(ParamName, DbType); param.Direction = Direction; if (!(Direction = ParameterDirection.Output & Value = null) param.Value = Value; return param; #endregionUserAction.cs 类,用户操作行为文件程序如下:using System;using System.Data;using System.Data.SqlClient;using System.Configuration;using Sys
29、tem.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;/ / UserAction 的摘要说明/ public class UserAction:SqlDataBasepublic UserAction()/ TODO: 在此处添加构造函数逻辑/ public bool UserChangePwd( string UserNam ,
30、 string OldPwd , string NewPwd ) SqlDataBase MyDB = new SqlDataBase();/调用SqlDataBase类 int CheckNum = Convert.ToInt32(MyDB.ReturnSQL(select count(*) from UserList where UserName = + UserNam + and PassWord = + OldPwd + ); if (CheckNum 0) MyDB.NoreturnSql(update UserList set PassWord= + NewPwd + where
31、UserName = + UserNam + ); return true; else return false; public bool UserAdd(string UserNam , string Pwd ,string AlignK , string Types) SqlDataBase MyDB = new SqlDataBase(); int CheckNum = Convert.ToInt32(MyDB.ReturnSQL(select count(*) from UserList where UserName = + UserNam + ); if (CheckNum 0) r
32、eturn false; else MyDB.NoreturnSql(insert into UserList(UserName , PassWord , Controls , GoodsType) values( + UserNam + , + Pwd + , + AlignK + , + Types + ); return true; public DataTable GiveSysC()/返回通知列表 SqlDataBase MyDb = new SqlDataBase(); return MyDb.DT(select * from SystemTest where TestType =
33、 0 order By ID desc); public DataTable GiveSysX(string ID) SqlDataBase MyDb = new SqlDataBase(); return MyDb.DT(select * from SystemTest where ID = + ID + ); public static DataTable GetBigClass() /返回产品大类 SqlDataBase MyDb = new SqlDataBase(); return MyDb.DT(select * from BigClass); public static Data
34、Table GetSmaGoods(string ID)/返回大类所属的产品列表 SqlDataBase MyDb = new SqlDataBase(); return MyDb.DT(select ID , GoodsNum , GoodsName from AllGood where AlignType = +ID+); #region /产品入库 public int InsertGoods(int AlignGoods, string GoodCost, int GoodNum, string GoodMake, string GoodsBZ, string InputTime) S
35、qlParameter prams = IntParam(AlignGoods, SqlDbType.Int, 4, AlignGoods), IntParam(GoodCost, SqlDbType.VarChar, 50, GoodCost), IntParam(GoodNum, SqlDbType.Int, 4, GoodNum), IntParam(GoodMake,SqlDbType.VarChar,50,GoodMake), IntParam(GoodsBZ, SqlDbType.VarChar, 50, GoodsBZ), IntParam(InputTime,SqlDbType
36、.VarChar,50,InputTime), OutParam(GoodsID,SqlDbType.Int,4) ; RunInsert(InsertGood, prams); return Convert.ToInt32(prams6.Value); /return Convert.ToInt32(prams0.Value); #endregion public static void UpdateBigGodNum(int Num,int GodID) /入库产品大类数量更新 SqlDataBase MyDb = new SqlDataBase(); MyDb.NoreturnSql(u
37、pdate AllGood set NowNum = NowNum + + Num + Where ID = + GodID + ); /return update AllGood set NowNum = NowNum + + Num + Where ID = + GodID + ; public static void OutPut(int Num, int GodID) /出库产品大类数量更新 SqlDataBase MyDb = new SqlDataBase(); MyDb.NoreturnSql(update AllGood set NowNum = NowNum - + Num
38、+ Where ID = + GodID + ); public static void InsertGodPaper(int GodsID ,int GodsNum , string GetUser,string InputUser,string InputTime,string PaperType) /单据表 SqlDataBase MyDb = new SqlDataBase(); MyDb.NoreturnSql(Insert Into GoodPapers(GoodsID , GoodsNum , GetUser , InputUser , GetTime , PaperType)V
39、alues( + GodsID + , + GodsNum + , + GetUser + , + InputUser + , + InputTime + , + PaperType + ); public static void InsertRecordList(string InputUser, int GodsID, int GodsNum, string PaperType, string InputTime) /操作日志表 SqlDataBase MyDb = new SqlDataBase(); MyDb.NoreturnSql(Insert Into RecordList(UserName , GoodID , GoodNum , TypesID , RecordTime ) Values( + InputUser + , + GodsID + , + GodsNum + , + PaperType + , + InputTime + ); public static int GetBigGID(int