随着技术的进步,跨平台开发已经成为了标配,在此大背景下,ASP.NET Core也应运而生。本文主要基于ASP.NET Core+Element+Sql Server开发一个校园图书管理系统为例,简述基于MVC三层架构开发的常见知识点,前两篇文章简单介绍了如何搭建开发框架,登录功能以及主页面功能的实现,本篇文章继续讲解书室以及书架相关功能的开发,仅供学习分享使用,如有不足之处,还请指正。
在本示例中,应用最多的就是如何Element中提供的组件,和控制器中业务逻辑处理,涉及知识点如下所示:
书室管理和书架管理,主要用于管理书籍的存放位置,及对书室和书架的CRUD(增删改查)等基本操作。每一个书室都有很多书架,并根据分类存放不同书籍,所以书室ID是书架ID的外键。两者之间存在对应关系。下面逐一进行介绍。
书室管理就是对书室数据表的增删改查操作,相对比较独立,操作起来也比较简单。
书室表主要包括Id(唯一标识),Name(图书馆名称),SubName(书室名称),Location(位置),Manager(管理员)等几个字段,具体如下所示
数据表实体类和数据表一一对应,主要通过EntityFrameword与数据库进行映射。如下所示:
namespace CLMS.Entity
{/// /// 图书馆实体/// public class LibraryEntity{/// /// 唯一标识/// public int Id { get; set; }/// /// 图书馆名称/// public string? Name { get; set; }/// /// 图书室名称/// public string? SubName { get; set; }/// /// 位置/// public string? Location { get; set; }/// /// 管理员/// public string? Manager { get; set; }/// /// 创建时间/// public DateTime CreateTime { get; set; }/// /// 当前登录的账号的ID/// public int CreateUser { get; set; }/// /// 最后编辑时间/// public DateTime LastEditTime { get; set; }/// /// 最后修改人/// public int LastEditUser { get; set; }}
}
书室管理,主要用户查询,新增,修改,删除书室等基本操作,页面布局源码如下所示:
书室管理 书室管理 查询 新增 编辑 删除 取 消 确 定
数据交互通过JS脚本进行,书写格式和VUE2.0保持一致,在页面启动时,加载所有的书室信息,并绑定到el-table对象,所以需要在mounted函数中增加调用向服务器端发出请求,当用户新增或编辑保存时,通过axios发送请求到服务端接口。
控制器主要用于响应用户的请求,与数据库交互,并返回执行的结果信息。
namespace CLMS.Host.Controllers
{public class LibraryController : Controller{private DataContext dataContext;public LibraryController(DataContext context){dataContext = context;}public IActionResult Index(){return View();}/// /// 获取符合条件的查询/// /// /// /// /// /// [HttpGet]public PagedRequest Query(string Name, string SubName, int pageNum, int pageSize){Name = string.IsNullOrEmpty(Name) ? string.Empty : Name;SubName = string.IsNullOrEmpty( SubName) ? string.Empty:SubName;var entities = dataContext.Librarys.Where(r => r.Name.Contains(Name) && r.SubName.Contains(SubName));var total = entities.Count();var dtos = entities.Skip((pageNum - 1) * pageSize).Take(pageSize).Select(r => new Library() { Id = r.Id, Name = r.Name, SubName=r.SubName,Location=r.Location,Manager=r.Manager, CreateTime = r.CreateTime }).ToList();return new PagedRequest(){count = total,items = dtos,};}/// /// 查询所有信息/// /// [HttpGet]public List QueryAll() {var dtos = dataContext.Librarys.Select(r=> new Library() { Id = r.Id, Name = r.Name, SubName = r.SubName}).ToList();return dtos;}[Consumes("application/json")][HttpPost]public Msg Add([FromBody] Library library){Msg msg = new Msg();if (library == null){msg.code = 1;msg.message = "对象为空";return msg;}else{var userId= HttpContext.Session.GetInt32("UserId");if (library.Id > 0){//更新var entity = dataContext.Librarys.Where(r => r.Id == library.Id).FirstOrDefault();if (entity != null){entity.Name = library.Name;entity.SubName = library.SubName;entity.Location = library.Location;entity.Manager= library.Manager;entity.LastEditUser = userId.GetValueOrDefault();entity.LastEditTime = DateTime.Now;dataContext.Librarys.Update(entity);dataContext.SaveChanges();}else {msg.code = 1;msg.message = "修改失败";return msg;}}else{//新增var entity = new LibraryEntity(){Id = library.Id,Name = library.Name,SubName = library.SubName,Location = library.Location,Manager = library.Manager,CreateTime = DateTime.Now,CreateUser = userId.GetValueOrDefault(),LastEditTime = DateTime.Now,LastEditUser = userId.GetValueOrDefault(),};dataContext.Librarys.Add(entity);dataContext.SaveChanges();}msg.code = 0;msg.message = "success";return msg;}}[Consumes("application/json")][HttpPost]public Msg Delete([FromBody] Library library){Msg msg = new Msg();if (library == null){msg.code = 1;msg.message = "对象为空";return msg;}else{if (library.Id > 0){var entity = dataContext.Librarys.Where(r => r.Id == library.Id).FirstOrDefault();if (entity != null){dataContext.Librarys.Remove(entity);dataContext.SaveChanges();msg.code = 0;msg.message = "success";}else{msg.code = 1;msg.message = "对象不存在或已被删除";}}else{msg.code = 1;msg.message = "对象Id小于0";}return msg;}}}
}
经过以上几个步骤,即可完成书室管理的基本操作,主要包括书室的查询,新增,编辑,删除,已经分页等功能,如下所示:
书室功能新增或编辑页面
书架管理是在书室管理的基础之上,进步细化书架的具体位置,方便用户查找书籍。
书架表主要包括Id(唯一标识),LibraryId(书室表的唯一标识),Row(行),Column(排)等几个字段。如下所示:
数据表实体类和数据表一一对应,主要通过EntityFrameword与数据库进行映射。如下所示:
namespace CLMS.Entity
{/// /// 阅览架/// public class BookRackEntity{/// /// 唯一标识/// public int Id { get; set; }/// /// 图书室ID/// public int LibraryId { get; set; }/// /// 排/// public int Row { get; set; }/// /// 列/// public int Column { get; set; }/// /// 描述/// public string Description { get; set; }/// /// 创建时间/// public DateTime CreateTime { get; set; }/// /// 当前登录的账号的ID/// public int CreateUser { get; set; }/// /// 最后编辑时间/// public DateTime LastEditTime { get; set; }/// /// 最后修改人/// public int LastEditUser { get; set; }}
}
书架管理需要关系书室信息,即哪一个书室的第几行,第几列,以下拉框的形式呈现。如下所示:
书室管理 书架管理 查询 新增 编辑 删除 取 消 确 定
数据交互通过JS脚本进行,书写格式和VUE2.0保持一致,在页面启动时,加载所有的书架信息,并绑定到el-table对象,所以需要在mounted函数中增加调用向服务器端发出请求,当用户新增或编辑保存时,通过axios发送请求到服务端接口。
控制器主要用于响应用户的请求,与数据库交互,并返回执行的结果信息。
namespace CLMS.Host.Controllers
{public class BookRackController : Controller{private DataContext dataContext;public BookRackController(DataContext context){dataContext = context;}public IActionResult Index(){return View();}/// /// 获取符合条件的查询/// /// /// /// /// /// [HttpGet]public PagedRequest Query(string Name, string SubName, int pageNum, int pageSize){Name = string.IsNullOrEmpty(Name) ? string.Empty : Name;SubName = string.IsNullOrEmpty(SubName) ? string.Empty : SubName;var entities = dataContext.Librarys.Where(r => r.Name.Contains(Name) && r.SubName.Contains(SubName)).Join(dataContext.BookRacks,l=>l.Id,b=>b.LibraryId,(l,b) =>new BookRack() {Name=l.Name,SubName=l.SubName,Location=l.Location,LibraryId=b.LibraryId,Id=b.Id,Row=b.Row,Column=b.Column,Description=b.Description,CreateTime=b.CreateTime });var total = entities.Count();var dtos = entities.Skip((pageNum - 1) * pageSize).Take(pageSize).ToList();return new PagedRequest(){count = total,items = dtos,};}[Consumes("application/json")][HttpPost]public Msg Add([FromBody] BookRack bookRack){Msg msg = new Msg();if (bookRack == null){msg.code = 1;msg.message = "对象为空";return msg;}else{var userId = HttpContext.Session.GetInt32("UserId");if (bookRack.Id > 0){//更新var entity = dataContext.BookRacks.Where(r => r.Id == bookRack.Id).FirstOrDefault();if (entity != null){entity.LibraryId = bookRack.LibraryId;entity.Row = bookRack.Row;entity.Column = bookRack.Column;entity.Description = bookRack.Description;entity.LastEditUser = userId.GetValueOrDefault();entity.LastEditTime = DateTime.Now;dataContext.BookRacks.Update(entity);dataContext.SaveChanges();}else{msg.code = 1;msg.message = "修改失败";return msg;}}else{//新增var entity = new BookRackEntity(){Id = bookRack.Id,LibraryId = bookRack.LibraryId,Row = bookRack.Row,Column = bookRack.Column,Description = bookRack.Description,CreateTime = DateTime.Now,CreateUser = userId.GetValueOrDefault(),LastEditTime = DateTime.Now,LastEditUser = userId.GetValueOrDefault(),};dataContext.BookRacks.Add(entity);dataContext.SaveChanges();}msg.code = 0;msg.message = "success";return msg;}}[Consumes("application/json")][HttpPost]public Msg Delete([FromBody] BookRack bookRack){Msg msg = new Msg();if (bookRack == null){msg.code = 1;msg.message = "对象为空";return msg;}else{if (bookRack.Id > 0){var entity = dataContext.BookRacks.Where(r => r.Id == bookRack.Id).FirstOrDefault();if (entity != null){dataContext.BookRacks.Remove(entity);dataContext.SaveChanges();msg.code = 0;msg.message = "success";}else{msg.code = 1;msg.message = "对象不存在或已被删除";}}else{msg.code = 1;msg.message = "对象Id小于0";}return msg;}}}
}
经过以上几个步骤,即可完成书架管理的基本操作,主要包括书架的查询,新增,编辑,删除,已经分页等功能,如下所示:
新增或编辑页面
以上就是校园图书管理系统的书室管理及书架管理功能实现,功能正在开发完善中,后续功能再继续介绍。旨在抛砖引玉,一起学习,共同进步。
下一篇:ipv6实验