[回馈]ASP.NET Core MVC开发实战之商城系统(二)

经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页商品类型,banner条,友情链接等功能的开发,今天继续讲解首页的降价促销,新品爆款等内容,仅供学习分享使用,如有不足之处,还请指正。

开发工具及技术

在本商城系统实例中,主要用到的开发工具和技术,如下所示:

  • 开发工具,Visual Studio 2022 
  • 数据库,SQL Server Management Studio 2012
  • 开发框架,基于.Net 6.0的ASP.NET Core MVC
  • 前端框架,基于项目自带的bootstrap,jQuery等前端库。

页面布局

根据前一篇文章的讲解,在首页除了商品类型,banner条,友情链接外,还有降价促销,新品爆款两个部分,为首页产品展示的核心,具体布局如下所示:

数据表设计

首先设计产品表Product,主要用于存储产品的详细信息,包括产品名称,价格,店铺ID等内容,具体如下所示:

建表语句,如下所示:

CREATE TABLE [dbo].[EB_Product](
	[Id] [bigint] IDENTITY(1,1) NOT NULL,
	[ShopId] [bigint] NULL,
	[Name] [varchar](100) NULL,
	[CategoryId] [bigint] NULL,
	[SubCategoryId] [bigint] NULL,
	[Price] [money] NULL,
	[Preferential] [numeric](18, 4) NULL,
	[PreferentialPrice] [money] NULL,
	[Description] [text] NULL,
	[Brand] [varchar](50) NULL,
	[BasicStyle] [varchar](50) NULL,
	[ProductStyle] [varchar](50) NULL,
	[Year] [varchar](50) NULL,
	[Season] [varchar](50) NULL,
	[Scenario] [varchar](50) NULL,
	[ImageUrl] [varchar](500) NULL,
	[CreateTime] [datetime] NULL,
	[CreateUser] [varchar](50) NULL,
	[LastEditTime] [datetime] NULL,
	[LastEditUser] [varchar](50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

 

商品实体创建

产品表对应的项目模型实体,和数据表一一对应,如下所示:

using SqlSugar;
 
namespace EasyBuyShop.Models
{
    [SugarTable("EB_Product")]
    public class Product : EntityModel
    {
        /// <summary>
        /// 店铺ID
        /// </summary>
        public long ShopId { get; set; }
 
        /// <summary>
        /// 产品名称
        /// </summary>
        public string Name { get; set; }
 
        /// <summary>
        /// 大类ID
        /// </summary>
        public long CategoryId { get; set; }
 
        /// <summary>
        /// 小类ID
        /// </summary>
        public long SubCategoryId { get; set; }
 
        /// <summary>
        /// 价格
        /// </summary>
        public decimal Price { get; set; }
 
        /// <summary>
        /// 打折后价格
        /// </summary>
        public decimal PreferentialPrice { get; set; }
 
        /// <summary>
        /// 品牌
        /// </summary>
        public string Brand { get; set; }
 
        /// <summary>
        /// 折扣
        /// </summary>
        public decimal Preferential { get; set; }
        public string Description { get; set; }
 
        /// <summary>
        /// 基础风格
        /// </summary>
        public string BasicStyle { get; set; }
 
        /// <summary>
        /// 产品风格
        /// </summary>
        public string ProductStyle { get; set; }
 
        /// <summary>
        /// 年份
        /// </summary>
        public string Year { get; set; }
 
        /// <summary>
        /// 季节
        /// </summary>
        public string Season { get; set; }
 
        /// <summary>
        /// 主要场景
        /// </summary>
        public string Scenario { get; set; }
 
        /// <summary>
        /// 主图片Url
        /// </summary>
        public string ImageUrl { get; set; }
    }
}

 

数据处理层DAL

数据处理层用于和数据库进行交互,本次主要用于获取折扣Top3,和新品Top100这两种条件的的商品列表,如下所示:

using EasyBuyShop.Models;
using EasyBuyShop.Utils;
 
namespace EasyBuyShop.DAL
{
    public class ProductDal:BaseDal
    {
        /// <summary>
        /// 新品前100
        /// </summary>
        /// <returns></returns>
        public List<Product> GetTopNew100()
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    return db.Queryable<Product>().OrderByDescending(r => r.Id).Take(100).ToList();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<Product>();
            }
        }
 
        /// <summary>
        /// 折扣Top3
        /// </summary>
        /// <returns></returns>
        public List<Product> GetTopDisCount3()
        {
            try
            {
                using (var db = this.GetDb(BaseDal.ConnStr))
                {
                    return db.Queryable<Product>().OrderByDescending(r => r.Preferential).Take(3).ToList();
                }
            }
            catch (Exception ex)
            {
                LogHelper.Fatal(ex.Message);
                return new List<Product>();
            }
        }
    }
}

 

注意:上述功能采用SqlSugar自带的方法实现,会根据Lamada表达式生成对应的SQL语句,可减少手写SQL的繁琐。

控制器获取

因为降价促销和新品爆款,也是首页的一部分,所以需要在首页控制器HomeController中,获取对应商品,传递到视图层,如下所示:

using EasyBuyShop.DAL;
using EasyBuyShop.Models;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
 
namespace EasyBuyShop.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> logger;
 
        public HomeController(ILogger<HomeController> logger)
        {
            this.logger = logger;
        }
 
        public IActionResult Index()
        {
            CategoryDal categoryDal = new CategoryDal();
            SubCategoryDal subCategoryDal = new SubCategoryDal();
            ProductDal productDal = new ProductDal();
            var categories = categoryDal.GetCategories();
            var subCategories = subCategoryDal.GetSubCategories();
            var topNew100Product = productDal.GetTopNew100();
            var topDiscount3Product = productDal.GetTopDisCount3();
            ViewData["Categories"] = categories;
            ViewData["SubCategories"] = subCategories;
            ViewData["TopNew100"] = topNew100Product;
            ViewData["TopDiscount3"] = topDiscount3Product;
            var username = HttpContext.Session.GetString("username");
            var realName = HttpContext.Session.GetString("realname");
            ViewBag.Username = username;
            ViewBag.RealName = realName;
            return View();
        }
    }
}

 

注意:控制器方法中,往视图层传递数据采用ViewData和ViewBag实现,也可采用其他方式实现。具体ViewData和ViewBag传递数据之间的差异,可参考之前写的相关文章。

视图层展示

在Views/Home/Index.cshtml视图页面中,降价促销为一行三列,展示降价Top3的商品,具体如下所示:

<!-- banner style 2 start -->
<div class="banner-style-2 pt-100">
	<div class="container" style="margin-left:0px;margin-right:0px;padding-right:0px;padding-left:0px;">
		<div class="row">
			@foreach (var topDiscount in ViewData["TopDiscount3"] as List<Product>)
			{
				<div class="col-md-4">
					<div class="banner-style-2-img mb-res">
						<img src="@topDiscount.ImageUrl" alt="">
						<div class="banner-style-2-dec">
							<h4>@topDiscount.Brand</h4>
							<h3>降价 @(Math.Round( topDiscount.Preferential*100,0))% 销售</h3>
							<a href="" onclick="javascript:buy(@(topDiscount.Id));return false;">购买</a><br>
						</div>
					</div>
					<div class="shop-title f-left">
						<h3><a href="/Product/Detail/@(topDiscount.Id)">@topDiscount.Name</a></h3>
					</div>
				</div>
			}
		</div>
	</div>
</div>
<!-- banner style 2 end -->

 

新品爆款为一行四列,展示新品信息,源码如下所示:

<!-- shop area start -->
<div class="portfolio-area pt-100 pb-70" style="padding-top:100px;padding-bottom:70px;">
	<div class="container">
		<div class="section-title text-center mb-50">
			<h2>新品爆款 <i class="fa fa-shopping-cart"></i></h2>
		</div>
		<div class="row portfolio-style-2">
			<div class="grid" style="position: relative; height: 100%;">
				@foreach (var topNewProduct in ViewData["TopNew100"] as List<Product>)
				{
					<div class="col-md-3 col-sm-6 col-xs-12 mb-30">
						<div class="single-shop">
							<div class="shop-img">
								<a href="/Product/Detail/@(topNewProduct.Id)"><img src="@topNewProduct.ImageUrl" alt=""></a>
								<div class="shop-quick-view">
									<a href="/Product/Detail/@(topNewProduct.Id)" data-toggle="modal" data-target="#quick-view" title="预览">
										<i class="pe-7s-look"></i>
									</a>
								</div>
								<div class="price-up-down">
									<span class="sale-new">新品</span>
								</div>
								<div class="button-group">
									<a href="#" title="添加购物车" onclick="javascript:addCart(@(topNewProduct.Id));return false;">
										<i class="pe-7s-cart"></i>
										添加购物车
									</a>
									<a class="wishlist" href="#" onclick="javascript:buy(@(topNewProduct.Id));return false;" title="立即购买">
										<i class="pe-7s-like"></i>
										立即购买
									</a>
								</div>
							</div>
							<div class="shop-text-all">
								<div class="title-color fix">
									<div class="shop-title f-left">
										<h3><a href="/Product/Detail/@(topNewProduct.Id)">@topNewProduct.Name</a></h3>
									</div>
									<span class="price f-right">
										<span class="new">$@topNewProduct.PreferentialPrice</span>
									</span>
								</div>
								<div class="fix">
									<span class="f-left">@(topNewProduct.BasicStyle) | @(topNewProduct.ProductStyle)</span>
								</div>
							</div>
						</div>
					</div>
				}
			</div>
		</div>
	</div>
</div>
<!-- shop area end -->

 

注意:其中视图层代码,采用Razor表达式for循环,展示列表中的内容。关于Razor表达式的使用可参考其他文章。

页面展示

降价促销功能,运行如下所示:

新品爆款功能,运行如下所示:

以上就是ASP.NET Core MVC开发实战之商城系统第二部分内容,后续将继续介绍其他模块,敬请期待。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
会员积分系统: SQL Server2003源代码:数据库是SQL Server2003时的会员积分系统源代码。 SQL Server2005源代码:数据库是SQL Server2005时的会员积分系统源代码。 数据库脚本:可以拷贝到数据库的查询分析文件中直接执行的脚本,自动生成会员积分系统数据库中的表。 数据库:可以在数据库中,通过“附加数据库”任务直接加载的会员积分系统数据库文件。 会员积分系统流程说明 系统默认的打开页面是“Default.aspx”,如果是第一次打开,则会先要求用户进行登录和注册。注册完毕后,系统自动跳转到默认页。浏览左侧导航功能列表。 从办卡到查询积分的流程是: (1)在会员卡类型管理中,要添加会员卡类型,例如“金卡”。 (2)在会员资料管理中,要添加会员资料,为会员办卡,卡号为超市自定义的10位数,例如“BJ00000001”,编号依次类推。 (3)只有消费才可以返积分。在商品管理中,使用“销售和退货”功能,系统根据商品的编号和数量自动添加商品。 (4)因为使用的是积分系统和销售系统分离的设计,此时需要到会员积分管理中,做一次“积分处理”的操作。系统根据会员卡号和消费金额,自动为会员计算积分并累积。 (5)到了节假日,可进行积分反活动。前提是要设计积分反规则。在商品管理功能中,选择“积分反规则”功能。 (6)设计好反规则后,通过“积分反”功能对用户进行活动。系统自动减少会员卡上的积分,并保留历史记录。 (7)可在会员积分管理功能中,通过“查询积分”功能了解会员卡上的积分情况。
### 答1: 能量系统(Energy Feedback System)是一种能源节约技术,它可以将一些设备或系统中的能量收利用,从而减少能源的浪费。然而,能量系统控制也存在一些不足之处,包括: 1. 控制精度不高:能量系统需要对能量进行精确的控制和管理,但是系统控制精度不高时,会导致能量效果不佳,甚至会浪费更多的能源。 2. 设备兼容性问题:不同的设备和系统在能量方面的特性和要求不同,因此,在控制能量系统时,需要考虑设备的兼容性问题,否则可能会导致设备损坏或能量效果不佳。 3. 系统稳定性差:能量系统需要稳定运行才能达到最佳效果,但是,系统稳定性差时,容易出现故障,导致能量效果不佳或者系统无法正常工作。 4. 维护成本高:能量系统需要定期进行维护和保养,否则可能会导致系统故障或能量效果不佳。而且,维护成本较高,需要投入大量的人力和物力。 因此,在实际应用中,需要对能量系统进行科学合理的控制和管理,以达到最佳的能源节约效果。 ### 答2: 能量系统是一种常见的控制技术,广泛应用于多个领域。然而,它也存在一些不足之处。 首先,能量系统在实际应用中需要较高的成本。该系统需要使用能量传感器和控制器来监测和调节系统的能量输出,这增加了系统的成本和复杂性。此外,系统的安装和维护也需要一定的费用。 其次,能量系统的精度受到一些因素的影响。系统的精确性依赖于传感器的测量和控制器的准确性。如果这些组件存在误差或故障,系统的性能将受到影响。此外,能量系统也受到外部环境条件的影响,如温度、湿度等,这可能导致系统运行不稳定或失灵。 另外,能量系统的响应速度有限。由于能量的产生、传输和控制存在一定的延迟,系统在对不同输入信号的快速响应上存在局限性。这对于某些要求快速响应的应用场景可能不够理想。 此外,能量系统还受到能量储存和传输能力的限制。如果能量的储存和传输能力不足,系统将无法满足某些高功率需求或远距离传输能量的应用。 最后,能量系统对环境的严厉要求也是其不足之处之一。由于系统中涉及到能量的传输和转换过程,对于一些特殊环境条件,如高温、高压、腐蚀性环境等,系统可能无法正常运行。 综上所述,能量系统的成本、精度、响应速度、能量传输能力以及对环境的要求是其存在的不足之处。随着技术的发展和进步,这些不足之处可能会逐步得到解决和改进。 ### 答3: 能量系统是一种利用能量收的技术,用于控制电力设备的能量消耗。然而,能量系统也存在一些不足之处: 首先,能量系统在工作效率上存在问题。系统需要将设备产生的能量收并再利用,但这个过程并非完全高效。在能量收和再利用的过程中,会有能量损失,这导致了系统整体的能量效率较低。 其次,能量系统的成本较高。为了实现能量收和再利用,需要引入额外的设备和技术,这增加了系统的设计和建设成本。对于一些规模较小或经济条件较差的企业或个人来说,能量系统的投资可能不划算。 此外,能量系统的可靠性也是一个问题。系统的稳定性和可靠性对于设备的正常运行非常重要。如果系统出现故障或运行不稳定,可能导致电力设备的损坏或无法正常工作,增加了维修和替换成本。 最后,能量系统的适用范围有限。这种系统适用于某些需要频繁启动和停止的设备,如电梯或地铁。然而,对于稳定运行的设备,如发电机或供暖系统,能量系统的功效相对有限。因此,在选择是否采用能量系统时,需要综合考虑设备的特点和实际需求。 综上所述,虽然能量系统能够实现能量的收和再利用,但其效率、成本、可靠性和适用范围等方面还存在不足之处。随着技术的不断推进,相信这些问题将得到进一步改善和解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老码识途呀

写作不易,多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值