博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
- Internet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息自动化的作用也越来越大。从而使我们从繁杂的事务中解放出来,提高了我们的工作效率。
- Internet提供给我们处理信息及时快捷,因此开发基于ASP.NET的体育用品销售管理系统。为了解决这些管理以及其他等一些问题,我们迫切需要一种通过网络来进行商品销售。而网上购物是以信息技术为基础的电子商务活动,它通过Internet使交易双方进行商品交易,由于双方不受时间和空间的局限,从而不仅大大扩大了消费者和网络企业的商品交易机会,而且大大降低商品交易的成本。
- Internet互联网对商品购买的相关信息进行发布及商品查询、商品介绍、商品内容浏览等功能。消费者通过电子商务网站系统进行商品的网上购物和网上支付等活动,这样即方便了消费者,又减少了企业成本。倡导“用户是伙伴,多为用户着想”的新型客户服务理念。
- Visual Studio 2008开发环境并能熟练使用C#编程语言的同时,运用软件工程理论知识,开发出的一套基于ASP.NET体育用品销售管理系统。在系统开发的过程中能够应用所学的知识,并促进作者更深入的学习C#的相关特性、积累更多SQL Server 2005的相关应用知识,这样不仅能将所学的书面知识和实际应用结合起来达到学以致用的目的,同时也为以后的工作和学习积累经验。
- Studio .NET 是一套完整的开发工具,用于生成 ASP Web 应用程序、XML Web services、桌面应用程序和移动应用程序。 Basic .NET、 C++ .NET、 C# .NET 和 J# .NET 全都使用相同的集成开发环境 (IDE),该环境允许它们共享工具并有助于创建混合语言解决方案。另外,这些语言利用了 .NET Framework 的功能,此框架提供对简化 ASP Web 应用程序和 XML Web services 开发的关键技术的访问。
- Studio .NET 集成开发环境现在包括开发智能设备(如 Pocket PC)应用程序的工具。通过使用这些工具和 .NET Framework 精简版(.NET Framework 的子集),您可以在个人数字助理 (PDA)、移动电话和其他资源受约束的设备中,创建、生成、调试和部署在 .NET Framework 精简版上运行的应用程序。
- 移动设计器扩展了 和 .NET Framework,可用来生成移动电话、PDA 和寻呼机的 Web 应用程序。此设计器集成在 Visual Studio IDE 中。您可以创建移动 Web 应用程序,使用移动设计器修改移动 Web 窗体,然后生成和运行该应用程序(所有这些操作都是在 Visual Studio 中完成的)。
- 窗体是用于创建可编程 页的 ASP.NET 技术。Web 窗体将自己呈现为浏览器兼容的 HTML 和脚本,这使任何平台上的任何浏览器都可以查看 Web 页。使用 Web 窗体,通过将控件拖放到设计器上然后添加代码来创建 Web 页,与创建 Visual Basic 窗体的方法相似。
- 技术是Microsoft公司推出的新一代动态Web开发工具,是电子商务、电子政务、远程教育等Web应用开发的主流技术之一。不同于ASP,它是建立在.NET Framework之上,提供了更易于编写且结构更清晰的代码,它使用VB.NET和C#等模块化语言编写程序,提高了代码的再利用性和共享性。ASP.NET在结构上几乎完全基于组件和模块化的,Web应用程序的开发人员使用这个开发环境可以实现更加模块化的、功能更强大的应用程序。
- 的优点主要体现在效率高、可重用性高、代码量少这三方面。在使用ASP进行程序设计的时候,由于ASP使用的是脚本语言,所有的代码都嵌入到HTML代码中,所以当编制功能复杂的网页时,就需要编写大量的代码,而且会导致程序代码的可读性差的问题。另外,由于所有的代码都是解释执行的,所以相对速度较慢,并且无法有效地利用机器硬件的各种性能。与ASP相比较效率更高,提供了很高的可重用性,对于实现同样功能的程序,ASP.NET使用的代码量比ASP要少得多。ASP.NET采用全新的编程环境,代表了技术发展的主流方向。
- 可以实现不同的数据库统一调用相同的数据库访问接口,使访问步骤更简洁,快速,增加了软件开发的通用性,灵活性,重用性和可扩展性。是由ADO发展而来,ADO (ActiveX Data Objects)是应用层的编程接口,通过OLEDB提供的COM接口访问数据库中的数据。ADO中的命令对象用来执行SQL命令。ADO可以继承RDO (Remote Data Objects) 和DAO(Data Access Objects)等数据访问对象层。ADO体系中,Recordset对象是功能最强大的,可以访问数据集,并能显示,统计,更新每条数据。虽然ADO有很多优点,但也存在着一定的缺点,它只能返回单一数据集,不支持XML等。有了这些局限性,为克服它们,出现了ADO.NET,它取代了ADO,在ADO.NET体系中,DataSet对象是关键。DataSet对象和DataAdapter对象一起实现了Recordset对象的功能。能在断开连接模式下编程,提高了程序执行效率,并能实现非常复杂的功能。ADO.NET体系中常用的对象有:Connection对象,Command对象,DataAdapter对象,DataReader对象和DataSet对象。
- 编程语言是由微软公司的Anders Hejlsberg和 Scott Willamette领导的开发小组专门为.NET平台设计的语言,它可以使程序员移植到.NET上。这种移植对于广大的程序员来说是比较容易的,因为从C,C++和Java发展而来,它采用了这三种语言最优秀的特点,并加入了它自己的特性。C#是事件的驱动的,完全面向对象的可视化编程语言,我们可以使用集成开发环境来编写C#程序。使用IDE,程序员可以方便的建立,运行,测试和调试C#程序,这就将开发一个可用程序的时间减少到不用IDE开发时所用时间的一小部分。使用IDE迅速建立一个应用程序的过程称为快速反映开发。
- Query Language),结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。绝大多数流行的关系型数据库管理系统都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create,以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。
- :
3.1.1 技术可行性
- ASP.NET与Sql Server数据库引擎进行开发。而Sql Server作为一种快速和健壮的数据库服务器。因此在技术层面上,是完全可行的。
- 是微软公司继ASP之后推出的新一代Active Server Pages,他不是ASP的简单升级,是微软发展的新的体系.NET的一部分。同以前的 Web 开发模型相比,具有增强的性能、Visual Studio世界级的工具支持、灵活性、简易性、可管理性、可缩放性、自定义性、扩展性,以及完全性等数个重要的优点。同时,代码分离、ADO.NET技术,以及全新的开发语言C#更是给作者带来了更快捷、更方便的操作。
3.1.2 经济可行性
- /效益分析,以确定待开发软件是否有开发的价值。这里的效益包括新开发的系统所带来的收入增加,以及开发的系统比原来系统在使用费用上的减少。由于本系统技术上不是很复杂,所需的开发人员不多,开发周期较短,因此开发成本较低。
3.1.3 操作可行性
3.1 功能结构图
- 、会员注册流程
- “注册”时要先判断必填项是否为空,如果为空则返回,如果不为空,则判断两次密码输入是否一致,如果一致则继续判断用户名是否存在,如果存在则会弹出相应的提示并返回,如果不存在则把会员信息添加到数据库。
3.2 会员注册流程图
- 、商品订购流程
- “加入购物车”会先判断该会员是否登录,如果没有登录的话会弹出提示信息并跳转到登录页,登录后可以把喜欢的商品加入购物车,在购物车中可以对商品进行管理,可以提交订单,提交时会先判断是否为空订单。
3.3 商品订购流程
- 、管理员管理流程
- 管理员管理流程图
- DBMS Database Management System)所实现的数据库建设方案,这要求数据库的设计要采用科学的方法,并遵循一定的规则。
- 20世纪70年代末以来,众多学者对数据库设计方法进行了深入的探讨和尝试,结合出许多各有优点的数据库设计方法,有基于E-R模型的数据库设计方法,基于3NF的设计方法,基于抽象语法规范的设计方法等,较为实用的主流方法有两种:E-R模型加规范化关系的方法和数据元素图加规范化关系的方法。本系统在数据库概念结构设计中是采用E-R模型加规范化关系的方法进行设计的,下面对该方法进行简单的介绍。
- 模型加规范化关系的方法在数据库结构设计中,主要工作是从需求分析所得到的所有信息以及它们之间的依赖关系出发,去构造系统数据模型。在构模中,最常用的是模型法。E-R模型中最基本的成分是实体、联系以及它们的属性。而实体(或联系)与属性构成关系,因为是否“规范化”而有“好”、“坏”之分,而关系的好坏又直接影响数据库的质量。
- 4.1 管理员E-R图
- 4.2 会员E-R图
- 4.3 新闻E-R图
- 4.4 商品类别E-R图
- 4.5 商品E-R图
- 4.6 库存E-R图
- 4.7 订单E-R图
- 4.8 订单详情E-R图
- 4.9 留言板E-R图
- 管理员表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | aid | int | 4 | 0 | 是 | 是 | 编号 |
2 | lname | varchar | 50 | 0 | 登录名 | ||
3 | pwd | varchar | 100 | 0 | 密码 | ||
4 | flag | int | 4 | 0 | 标识 |
- 会员表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | lname | varchar | 50 | 0 | 是 | 用户名 | |
2 | pass | varchar | 50 | 0 | 登录密码 | ||
3 | mname | varchar | 50 | 0 | 姓名 | ||
4 | sex | varchar | 10 | 0 | 性别 | ||
5 | tel | varchar | 50 | 0 | 联系方式 | ||
6 | address | varchar | 100 | 0 | 收货地址 | ||
7 | postno | varchar | 50 | 0 | 邮编 | ||
8 | regtime | datetime | 8 | 3 | 注册日期 |
- 新闻表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | nid | int | 4 | 0 | 是 | 是 | 编号 |
2 | title | varchar | 50 | 0 | 新闻标题 | ||
3 | memo | ntext | 16 | 0 | 新闻内容 | ||
4 | atime | datetime | 8 | 3 | 发布时间 |
- 商品类别表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | tid | int | 4 | 0 | 是 | 是 | 类别编号 |
2 | tname | varchar | 50 | 0 | 类别名称 |
- 商品表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | pid | int | 4 | 0 | 是 | 是 | 商品编号 |
2 | pname | varchar | 50 | 0 | 商品名称 | ||
3 | tid | int | 4 | 0 | 所属类别 | ||
4 | pic | varchar | 100 | 0 | 商品图片 | ||
5 | caiz | varchar | 100 | 0 | 尺寸 | ||
6 | price | decimal | 9 | 2 | 售价 | ||
7 | memo | ntext | 16 | 0 | 商品简介 | ||
8 | addtime | datetime | 8 | 3 | 发布时间 |
- 库存表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | id | int | 4 | 0 | 是 | 是 | 编号 |
2 | pid | int | 4 | 0 | 商品编号 | ||
3 | quantity | int | 4 | 0 | 库存数量 |
- 订单表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | oid | varchar | 50 | 0 | 是 | 订单编号 | |
2 | lname | varchar | 50 | 0 | 订购人 | ||
3 | sprice | decimal | 9 | 2 | 订单金额 | ||
4 | pay | varchar | 50 | 0 | 支付方式 | ||
5 | atime | datetime | 8 | 3 | 订购时间 | ||
6 | flag | varchar | 50 | 0 | 订单状态 |
- 订单详情表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | id | int | 4 | 0 | 是 | 是 | 编号 |
2 | oid | varchar | 50 | 0 | 订单编号 | ||
3 | pid | int | 4 | 0 | 商品编号 | ||
4 | oprice | decimal | 9 | 2 | 价格 | ||
5 | quantity | int | 4 | 0 | 订购数量 |
- 留言表
序号 | 列名 | 数据类型 | 长度 | 小数位 | 标识 | 主键 | 说明 |
1 | bid | int | 4 | 0 | 是 | 是 | 编号 |
2 | lname | varchar | 50 | 0 | 留言人 | ||
3 | title | varchar | 50 | 0 | 留言主题 | ||
4 | memo | varchar | 1000 | 0 | 留言内容 | ||
5 | atime | datetime | 8 | 3 | 留言时间 | ||
6 | anmemo | varchar | 1000 | 0 | 回复内容 | ||
7 | antime | datetime | 8 | 3 | 回复时间 |
- 5.1所示。
图5.1母版界面
-
- 会员注册页面
- js实现,主要界面如下图:
图5.2 会员注册页面
主要实现代码如下:
//设置Sql
StringBuilder strSql = new StringBuilder();
strSql.Append(@"insert into Members ( lname,pass,mname,sex,tel,address,postno,regtime ) ");
strSql.Append(@" values (@lname,@pass,@mname,@sex,@tel,@address,@postno,@regtime)");
//设置参数
SqlParameter[] parameters = new SqlParameter[] {
new SqlParameter("@lname", SqlDbType.VarChar,50),
new SqlParameter("@pass", SqlDbType.VarChar,50),
new SqlParameter("@mname", SqlDbType.VarChar,50),
new SqlParameter("@sex", SqlDbType.VarChar,10),
new SqlParameter("@tel", SqlDbType.VarChar,50),
new SqlParameter("@address", SqlDbType.VarChar,100),
new SqlParameter("@postno", SqlDbType.VarChar,50),
new SqlParameter("@regtime", SqlDbType.DateTime,8) };
parameters[0].Value = txt_lname.Text;
parameters[1].Value = txt_pass.Text;
parameters[2].Value = txt_mname.Text;
parameters[3].Value = rtsex.SelectedValue;
parameters[4].Value = txt_tel.Text;
parameters[5].Value = txt_address.Text;
parameters[6].Value = txt_postno.Text;
parameters[7].Value = DateTime.Now;
//提交到数据库
SqlHelper.ExecuteNonQuery(strSql.ToString(), CommandType.Text, parameters);
-
- 会员登录页面
- “注册”按钮可以进入会员注册页面。主要界面如下图:
图5.3 会员登录页面
主要实现代码如下:
//根¨´据Y用®?户¡ì名?和¨ª密¨¹码?得Ì?到Ì?会¨¢员¡À信?息¡é
StringBuilder strSql = new StringBuilder();
strSql.Append(@" select * from members ");
strSql.Append(@" where lname=@lname and password=@password");
//设¦¨¨置?参?数ºy
SqlParameter[] parameters = new SqlParameter[] {
new SqlParameter("@lname", SqlDbType.VarChar,50),
new SqlParameter("@password", SqlDbType.VarChar,50) };
parameters[0].Value = t1;
parameters[1].Value = t2;
//根¨´据Y用®?户¡ì名?和¨ª密¨¹码?得Ì?到Ì?会¨¢员¡À信?息¡é
SqlDataReader sdr = DbHelperSQL.ExecuteReader(strSql.ToString(), parameters);
//判D断?会¨¢员¡À是º?否¤?存ä?在¨²
if (sdr.Read())
{
Session["mid"] = sdr["mid"].ToString();
Session["name"] = sdr["lname"].ToString();
if (Session["url"] == null)
{
Response.Redirect("membersAdm/default.aspx");
}
else
{
string url = Session["url"].ToString();
Session.Remove("url");
Response.Redirect(url);
}
}
else
{
str = "该?用®?户¡ì名?或¨°密¨¹码?错䨪误¨®。¡ê";
}
图5.4 网站新闻页面
主要实现代码如下:
int recordcount;
int pagesize = this.AspNetPager1.PageSize;
int pageindex = this.AspNetPager1.CurrentPageIndex;
//得到新闻列表,并绑定
this.Repeater1.DataSource = dp.pagelist(pagesize, pageindex, "news", " * ", "nid", where, "atime desc", out recordcount);
this.Repeater1.DataBind();
this.AspNetPager1.RecordCount = recordcount;
此页面实现商品的展示,可以按商品发布时间、价格、销量进行排序。主要界面如下图:
图5.5 商品列表页面
主要实现代码如下:
//设置查询条件
string where = " 1=1 ";
if (TextBox1.Text != "")
{
where += " and pname like '%" + TextBox1.Text + "%' ";
}
if (Request.QueryString["tid"] != null)
{
if (Request.QueryString["tid"] != "0")
{
where += " and a.tid=" + Request.QueryString["tid"];
}
}
if (Request.QueryString["k"] != null)
{
if (Request.QueryString["k"] != "")
{
where += " and pname like '%" + Request.QueryString["k"] + "%' ";
}
}
if (Request.QueryString["p1"] != null)
{
if (Request.QueryString["p1"] != "")
{
where += " and price >=" + Request.QueryString["p1"];
}
}
if (Request.QueryString["p2"] != null)
{
if (Request.QueryString["p2"] != "")
{
where += " and price <=" + Request.QueryString["p2"];
}
}
int recordcount;
int pagesize = this.AspNetPager1.PageSize;
int pageindex = this.AspNetPager1.CurrentPageIndex;
this.Repeater1.DataSource = dp.pagelist(pagesize, pageindex, " products a left join(select pid, sum(quantity) as tt from ordersMore group by pid) b on a.pid = b.pid", " a.*,isnull(tt,0) as tt ", "pid", where, DropDownList1.SelectedValue , out recordcount);
this.Repeater1.DataBind();
this.AspNetPager1.RecordCount = recordcount;
- “加入购物车”将会把商品加入购物车。必须登录后才能订购。主要界面如下图:
图5.6 商品详情页面
主要代码如下:
//验证是否登陆
if (Session["name"] == null)
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('请先登录后再进行此操作!');location.href='login.aspx';</script>");
Session["url"] = Request.Url.ToString();
return;
}
//验证输入是否有误
if (!PageValidate.IsNumber(TextBox1.Text))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('订购数量输入有误,请重新输入!');</script>");
return;
}
//声明购物车类
ProductItem model = new ProductItem(int.Parse(Request.QueryString["id"]),lblpname.Text, decimal.Parse(lblprice.Text), int.Parse(TextBox1.Text), ViewState["pic"].ToString(), "");
ShopCart car = new ShopCart();
//判断是否存在购物车
if (Session["car"] != null)
{
car = (ShopCart)Session["car"];
}
//加入购物车
car.AddToCart(model);
Session["car"] = car;
Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "<script>alert('操作成功!');location.href='" + Request.UrlReferrer.ToString() + "';</script>");
- “提交订单”将实现订单的提交。购物车界面如下图:
图5.7 购物车页面
主要代码如下:
//声明购物车类,并赋值
ShopCart car = (ShopCart)Session["car"];
//按当前时间生成订单编号
string oid = DateTime.Now.ToString("yyyyMMddhhmmssfff");
//设置Sql
StringBuilder strSql = new StringBuilder();
strSql.Append(@"insert into Orders ( oid,lname,sprice,pay,atime,flag ) ");
strSql.Append(@" values (@oid,@lname,@sprice,@pay,@atime,@flag)");
//设置参数
SqlParameter[] parameters = new SqlParameter[] {
new SqlParameter("@oid", SqlDbType.VarChar,50),
new SqlParameter("@lname", SqlDbType.VarChar,50),
new SqlParameter("@sprice", SqlDbType.Decimal,9),
new SqlParameter("@pay", SqlDbType.VarChar,50),
new SqlParameter("@atime", SqlDbType.DateTime,8),
new SqlParameter("@flag", SqlDbType.VarChar,50) };
parameters[0].Value = oid;
parameters[1].Value = Session["name"].ToString();
parameters[2].Value = Label1.Text;
parameters[3].Value = type;
parameters[4].Value = DateTime.Now;
parameters[5].Value = "等待发货";
//提交到数据库
SqlHelper.ExecuteNonQuery(strSql.ToString(), CommandType.Text, parameters);
图5.8 我的订单页面
主要代码如下:
/// <summary>
/// 绑定
/// </summary>
private void bind()
{
string where = " where lname='"+Session["name"].ToString()+"' ";
GridView1.DataSource = SqlHelper.ExecuteforDataSet("select * from orders " + where + " order by oid desc");
GridView1.DataBind();
}
- uploads文件夹中。主要界面如下图:
图5.9 添加商品页面
主要代码如下:
//设置Sql
StringBuilder strSql = new StringBuilder();
strSql.Append(@"insert into Products ( pname,tid,pic,caiz,price,memo,addtime ) ");
strSql.Append(@" values (@pname,@tid,@pic,@caiz,@price,@memo,@addtime)");
//设置参数
SqlParameter[] parameters = new SqlParameter[] {
new SqlParameter("@pname", SqlDbType.VarChar,50),
new SqlParameter("@tid", SqlDbType.Int,4),
new SqlParameter("@pic", SqlDbType.VarChar,100),
new SqlParameter("@caiz", SqlDbType.VarChar,100),
new SqlParameter("@price", SqlDbType.Decimal,9),
new SqlParameter("@memo", SqlDbType.NText,50000),
new SqlParameter("@addtime", SqlDbType.DateTime,8) };
parameters[0].Value =txt_pname.Text;
parameters[1].Value =ddltid.SelectedValue;
string addrpic ="";
if (fppic.HasFile)
{
string name = this.fppic.PostedFile.FileName;
int i = name.LastIndexOf('.');
string extname = name.Substring(i);
string filename = DateTime.Now.ToString("yyyyMMddhhmmssfff");
string path = filename + extname;
string savePath = Server.MapPath(@"..\..\uploads\" + filename + extname);
fppic.PostedFile.SaveAs(savePath);
addrpic = path;
}
parameters[2].Value =addrpic;
parameters[3].Value =txt_caiz.Text;
parameters[4].Value =decimal.Parse (txt_price.Text);
parameters[5].Value =Textarea1.Value;
parameters[6].Value =DateTime.Now;
//提交到数据库
SqlHelper.ExecuteNonQuery(strSql.ToString(), CommandType.Text, parameters);
图5.10 日销售统计页面
主要代码如下:
string sql = @"select convert(char(10),atime,121) as tt1,sum(quantity) as tt2,sum(quantity*oprice) as tt3,pname
from ordersMore a left join orders b on a.oid=b.oid left join products c on a.pid=c.pid
group by convert(char(10),atime,121),pname";
GridView1.DataSource = SqlHelper.ExecuteforDataSet( sql );
GridView1.DataBind();
- 的开发,我对软件的开发过程有了一定程度的了解;特别是通过用.NET作为开发语言进行软件的开发,使我对面向对象技术有了较为深入的理解和掌握。
- 深厚的知识和对科学的了解不够,缺乏结构的多方面知识。很快就毕业了,我将要努力提高理论,自己在以后的时间里,尽可能多地阅读一些书籍,以提高自己的理论水平和实践能力。
- B / S模式,采用ASP.NET技术,基本完成了体育用品销售管理系统 ,本文主要从系统分析,系统详细介绍了系统的描述。
- 所面临的问题仍然很多,相信只要我们不断地锻炼自己的实际开发能力及动手能力,吸收最新技术,积极,不断摸索,不断改进,不断地发现问题,解决问题,那么所有的困难都可以顺利迎刃而解。相信,不久的将来,采用更先进的技术使体育用品销售管理系统的使用更方便,信息更全面,更精确,极大得给用户提供方便。
- 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者