ASP.NETCore打造一个简单的图书馆管理系统(八)学生借阅/预约/查询书籍事务NanaseRuri

《ProASP.NETMVC5》、《锋利的jQuery》

此系列皆使用VS2017+C#作为开发环境。如果有什么问题或者意见欢迎在留言区进行留言。

本章内容:自定义布局页、自定义EditorFor模板、EF多对多数据的更新

一、更新模型

同时由于书籍和学生存在多对多的关系——一本书可被多人预约,而一个人可以借阅多本书,因此在此更新模型使书籍与学生有多对多的关系。

此处仅展示模型的修改,控制器方面的修改请在查看源码:

引入中间导航类:

这里新增的AppointingDateTime用于将借阅的书籍以及预约的书籍进行区分。

1publicclassAppointmentOrLending2{3publicBookBook{get;set;}4publicstringBookId{get;set;}5publicStudentInfoStudent{get;set;}6publicstringStudentId{get;set;}7publicDateTimeAppointingDateTime{get;set;}8}

Student模型改动

1publicclassStudent:IdentityUser2{3///

4///学号5///6[ProtectedPersonalData]7[RegularExpression("[UIA]\\d{9}")]8publicoverridestringUserName{get;set;}910[StringLength(14,MinimumLength=11)]publicoverridestringPhoneNumber{get;set;}1112publicstringName{get;set;}13publicDegreesDegree{get;set;}14publicintMaxBooksNumber{get;set;}15}ViewCode

添加新模型StudentInfo:

1publicclassStudentInfo2{3[Key]4publicstringUserName{get;set;}56[Required]7publicstringName{get;set;}89///

10///学位,用来限制借书数目11///12[Required]13publicDegreesDegree{get;set;}1415///16///最大借书数目17///18[Required]19publicintMaxBooksNumber{get;set;}2021///22///已借图书23///24publicICollectionKeepingBooks{get;set;}2526publicstringAppointingBookBarCode{get;set;}2728[StringLength(14,MinimumLength=11)]29publicstringPhoneNumber{get;set;}3031///32///罚款33///34publicdecimalFine{get;set;}35}

在借书信息处添加学生信息和中间类的表,同时在此指定中间类的外键——指定其外键由学生学号和书籍条形码共同组成,需要重写DbContext父类的OnModelCreating方法使其覆盖对应表格在EF的默认生成方式:

1publicclassLendingInfoDbContext:DbContext2{3publicLendingInfoDbContext(DbContextOptionsoptions):base(options)4{5}67publicDbSetBooks{get;set;}8publicDbSetBooksDetail{get;set;}9publicDbSetBookshelves{get;set;}10publicDbSetRecommendedBooks{get;set;}11publicDbSetStudents{get;set;}12publicDbSetAppointmentOrLendings{get;set;}1314protectedoverridevoidOnModelCreating(ModelBuildermodelBuilder)15{16base.OnModelCreating(modelBuilder);17modelBuilder.Entity()18.HasKey(c=>new{c.BookId,c.StudentId});19}20}

然后例行的更新数据库:

cdlibrarydemoadd-migrationAddStudents-cLibraryDemo.Data.LendingInfoDbContextupdate-database-cLibraryDemo.Data.LendingInfoDbContext

在原BookInitiator中对Students表进行初始化:

1if(!context.Students.Any())2{3IEnumerableinitialStudents=new[]4{5newStudentInfo()6{7UserName="U201600001",8Name="Nanase",9PhoneNumber="12345678910",10Degree=Degrees.CollegeStudent,11MaxBooksNumber=10,12},13newStudentInfo()14{15UserName="U201600002",16Name="Ruri",17PhoneNumber="12345678911",18Degree=Degrees.DoctorateDegree,19MaxBooksNumber=1520}21};2223IEnumerableinitialAdmins=new[]24{25newStudentInfo()26{27UserName="A000000000",28Name="Admin0000",29PhoneNumber="12345678912",30Degree=Degrees.CollegeStudent,31MaxBooksNumber=2032},33newStudentInfo()34{35UserName="A000000001",36Name="Admin0001",37PhoneNumber="12345678910",38Degree=Degrees.CollegeStudent,39MaxBooksNumber=2040},41};42foreach(varstudentininitialStudents)43{44context.Students.Add(student);45awaitcontext.SaveChangesAsync();46}47foreach(varadminininitialAdmins)48{49context.Students.Add(admin);50awaitcontext.SaveChangesAsync();51}52}

二、自定义布局页

在ASP.NET中,默认将HTML页面的body元素一部分抽出来,该部分称作RenderBody;然后将这部分放到一个布局即大体页面框架中即可完成对同一系列的页面进行精简的布局实现。

默认布局页为_Layout.cshtml,可在视图文件夹中根目录或各个控制器视图目录的_ViewStart.cshtml修改默认布局页,或者在每个Razor页面的开头中指定布局页:

1@{2ViewData["Title"]="EditLendingInfo";3Layout="_LendingLayout";4}

之前一直使用的是VS的默认布局页,现在以该默认布局页为基础,添加自己所需要的信息:

现在大体框架:

除了默认的RenderBody外,可以指定特定的部分放在页面的不同地方,在布局页中使用@RenderSection("SectionName"):

1@RenderSection("SectionName")

且在视图页中使用指定特定的节@sectionSectionName{};

1@sectionSectionName{23};则该视图页中的SectionName部分会被提取出来放到布局页对应的位置。

三、管理员编辑借阅信息

动作方法:

在此对数据库的表格使用Include方法使EF应用其导航属性以获得KeepingBooks列表,否则使用Student对象KeepingBooks属性只会返回空。

将BookState枚举提取成分部视图_BookStatePartial:

1@usingLibraryDemo.Models.DomainModels2@modelBook34@Html.LabelFor(b=>b.State)5@Html.DropDownListFor(b=>b.State,Enum.GetValues(typeof(BookState)).Cast().Select(state=>6{7stringenumVal=Enum.GetName(typeof(BookState),state);8stringdisplayVal;9switch(enumVal)10{11case"Normal":12displayVal="可借阅";13break;14case"Readonly":15displayVal="馆内阅览";16break;17case"Borrowed":18displayVal="已借出";19break;20case"ReBorrowed":21displayVal="被续借";22break;23case"Appointed":24displayVal="被预约";25break;26default:27displayVal="";28break;29}30returnnewSelectListItem()31{32Text=displayVal,33Value=enumVal,34Selected=Model.State.ToString()==enumVal35};36}))37

Html.DisplayFor方法是ASP.NET内置对各种属性进行展示的方法,可以在项目的Views文件夹中的Shared文件夹创建对应类型的Editor模板供其使用:

在此创建一个DateTime.cshtml,于是我们使用Html.DisplayFor用于展示DateTime数据时只会显示年份/月份/天数:

1@modelDateTime23@Model.ToString("yyyy/M/dd")

视图中使用partialTagHelper指定其name为_BookStatePartial以应用分部视图:

结果:

四、查看个人信息

1[Authorize]2publicasyncTaskPersonalInfo()3{4StudentInfostudent=await_lendingInfoDbContext.Students.Include(s=>s.KeepingBooks).ThenInclude(k=>k.Book)5.FirstOrDefaultAsync(s=>s.UserName==User.Identity.Name);6decimalfine=0;7foreach(varbookinstudent.KeepingBooks.Where(b=>b.Book.MatureTimeb.BarCode==student.AppointingBookBarCode)18};19returnView(model);20}

视图:

五、借阅书籍

由于暂时未有获取二维码的接口,仅通过直接访问Lending模拟借阅:

六、续借书籍

1[Authorize]2[HttpPost]3publicasyncTaskReBorrow(IEnumerablebarcodes)4{5StringBuilderborrowSuccess=newStringBuilder();6StringBuilderborrowFail=newStringBuilder();7borrowSuccess.Append("成功续借书籍:");8borrowFail.Append("续借失败书籍:");9foreach(varbarcodeinbarcodes)10{11BookreBorrowBook=_lendingInfoDbContext.Books.FirstOrDefault(b=>b.BarCode==barcode);12if(reBorrowBook!=null)13{14if(reBorrowBook.State==BookState.Borrowed&&DateTime.Now-reBorrowBook.MatureTime.Date<=TimeSpan.FromDays(3))15{16reBorrowBook.State=BookState.ReBorrowed;17reBorrowBook.BorrowTime=DateTime.Now.Date;18reBorrowBook.MatureTime=DateTime.Now.Date+TimeSpan.FromDays(28);19borrowSuccess.Append($"《{reBorrowBook.Name}》、");20}21else22{23borrowFail.Append($"《{reBorrowBook.Name}》、");24}25}26}27borrowSuccess.AppendLine(borrowFail.ToString());28await_lendingInfoDbContext.SaveChangesAsync();29TempData["message"]=borrowSuccess.ToString();30returnRedirectToAction("PersonalInfo");31}

七、查询书籍

修改之前的Search方法使其通过当前用户的身份返回不同页面,以及在_LendingInfoLayout中添加搜索框部分:

1publicasyncTaskSearch(stringkeyWord,stringvalue)2{3BookDetailsbookDetails=newBookDetails();4switch(keyWord)5{6case"Name":7bookDetails=await_lendingInfoDbContext.BooksDetail.AsNoTracking().FirstOrDefaultAsync(b=>b.Name==value);8break;9case"ISBN":10bookDetails=await_lendingInfoDbContext.BooksDetail.AsNoTracking().FirstOrDefaultAsync(b=>b.ISBN==value);11break;12case"FetchBookNumber":13bookDetails=await_lendingInfoDbContext.BooksDetail.AsNoTracking().FirstOrDefaultAsync(b=>b.FetchBookNumber==value);14break;15}1617if(bookDetails!=null)18{19if(User.Identity.IsAuthenticated&&User.IsInRole("Admin"))20{21returnRedirectToAction("EditBookDetails",new{isbn=bookDetails.ISBN});22}23else24{25returnRedirectToAction("Detail",new{isbn=bookDetails.ISBN});26}27}2829TempData["message"]="找不到该书籍";30returnRedirectToAction("BookDetails");31}

THE END
1.Python学生档案借阅信息管理系统学生主要的功能为:系统首页,个人中心,学生档案管理,归档审核管理,归档建目管理,档案入库管理,申请借阅管理,归还档案管理,申请修改管理等功能进行操作。 管理员主要功能为:系统首页,个人中心,学生管理,学生档案管理,归档审核管理,归档建目管理,档案入库管理,申请借阅管理,归还档案管理,申请修改管理等功能。 论文针对档案管https://blog.csdn.net/QQ242219979/article/details/144379800
2.新手上路进馆与出馆 我的借阅 移动图书馆 管理后台 退出 统一身份认证登录 联系我们 站内检索 进馆与出馆https://lib.scu.edu.cn/video-comeintolibrary
3.学校图书馆工作计划(精选15篇)四、完成图书馆过期报刊阅览室、库存图书阅览室的内部整理及开放工作。 五、加强现代化建设:加强对glis管理系统的管理;尽快设计图书馆主页,及时更新网页内容。 六、加强内部考勤管理,开展文明借阅服务,加强安全防火防盗工作 七、开展职工业务培训,积极开展与兄弟院校的交流,提高管理的水平。 https://www.unjs.com/fanwenwang/gongzuojihuafanwen/xuexiaogongzuojihua/20230120130458_6296642.html
4.图书管理信息系统实训报告(通用8篇)在学习、工作生活中,我们都不可避免地要接触到报告,其在写作上有一定的技巧。为了让您不再为写报告头疼,以下是小编为大家整理的图书管理信息系统实训报告(通用8篇),仅供参考,大家一起来看看吧。 图书管理信息系统实训报告1 20xx年是图书馆服务模式创新改革力度最大的一年。围绕着新服务模式的运行,相关的配套措施在https://www.ruiwen.com/baogao/6424062.html
5.图书借阅管理系统业务流程5篇在数字化时代,图书馆借阅管理系统已成为现代图书馆不可或缺的一部分。该系统不仅提高了图书借阅的效率,还为用户提供了便捷、快速的借阅体验。那么,图书借阅管理系统的业务流程是如何运作的呢?下面,我们将为您详 创建时间 2024-04-10 10:33:33 Word 文件格式 https://hsy.chanjet.com/wenku/wkc844936cfe5c.html
6.图书馆管理系统论文范文(通用10篇)图书馆的服务对象是读者,因此,管理系统也应该为广大读者服务,读者在借阅图书使,信息交流是单一的,图书馆无法及时获得读者的借书体验,为了使读者更好地使用图书馆,图书馆的管理系统中应该加入用户评价、节约反馈等功能,使读者能够及时地对图书馆的整体服务作出评价,以便于图书馆及时获取用户信息,增加读者满意度,提高工作https://www.wenshubang.com/lunwenfanwen/728244.html
7.教育技术装备工作总结1名教师负责学校电视台的管理与维护,2名教师辅助其做好其工作。1名教师负责学校广播电视系统及相关的会议室、小阶梯教室的管理与维护工作。1名教师负责多媒体教室的管理与维护工作。1名教师负责计算机网络教室和图书馆电子阅览室工作。 学校信息中心的各类现代教育技术设施,在学校校园文化建设、学校教科研工作等工作中https://www.yjbys.com/zongjie/gerenzongjie/895617.html
8.图书借阅系统满天星公益图书借阅系统致力提升乡村中小学图书馆管理效率,是一个具有图书馆管理、数据收集、数据分析和交流反馈功能的云端服务平台,是一套轻量级的图书馆管理解决方案,专为乡村中小型图书馆量身订制,适用于需管理多个图书馆的机构及其下属的中小型图书馆。 https://www.starscn.org/Home/Project/detail/id/46.html
9.图书管理系统图书馆管理系统是RFID技术在校园信息化建设中的一项重要应用,图书馆是智能管理需求最为集中的场所,因此建设智慧图书馆信息管理系统具有很强的实用性。智慧图书馆管理系统以射频电子标签技术为基础,对图书文献、书库书架以及借阅者实现一体化标识。https://www.xzzhxy.com/software/124.html
10.某学校欲开发图书管理系统,以记录图书馆藏图书及其借出和归还情况某学校欲开发图书管理系统,以记录图书馆藏图书及其借出和归还情况,提供给借阅者借阅图书功能,提供给图书馆管理员管理和定期更新图书表功能。主要功能的具体描述如下:(1)处理借阅。借阅者要借阅图书时,系统必须对其身份(借阅者ID)进行检查。通过与教务处维护的学生数据库、人事处维护的职工数据库中的数据进行比对,以https://www.cnitpm.com/st/38115524.html
11.智慧校园建设之图书馆管理系统传统的学校图书馆管理模式,在借书方面,读者需要携带借书卡借阅,过程繁琐。目前,随着智慧校园的建设,可以利用人脸识别系统实现图书馆的智能化管理。那么,在图书馆安装人脸识别系统可以带来哪些好处? 一、人员进出管理 人脸识别系统在图书馆的应用可以让学生在进入图书馆时刷脸通行,避免外来人员随意进出图书馆,降低外来人员https://www.hbjhart.cn/tsg/info/1084/1476.htm
12.基于安卓手机的图书馆管理系统设计与实现AET摘要: 根据智能手机的特点设计并实现了一种图书馆管理系统,该系统具有传统计算机图书馆管理系统的功能,更有针对手机的实用功能设计。读者无需携带实体借书证,可使用虚拟借书证进行借阅登记;无需借助条形码扫描仪器与电脑,管理员通过调用手机的摄像头与网络接口即可完成图书入库和图书的借出与归还登记。 http://www.chinaaet.com/article/3000003214
13.学校各类信息化管理系统(图书馆实训中心智慧教室)二校区2019年学生人数达到1300多人,教师155人,采用一卡通进行借还图书,学校是采用的金碟图书馆管理系统,目前运行良好。 智慧教室和录播教室 教学能力:教学资源存储系统、管理系统、教学系统、移动终端应用系统、教学分析系统、测评系统、云空间系统交互式教学显示设备、交互式教学互动终端设备、物联网控制设备、多媒体教学设https://school.bsedu.org.cn/bsbz/app/info/doc/index.php/3042
14.云管书,好用的纸质图书管理系统,职工书屋,幼儿园,中小学图书馆云管书是好用的纸质图书管理系统,广泛应用在党建书屋、职工书屋、幼儿园、中小学图书馆、绘本馆、农家书屋、社区书屋、书店、家庭书房、读书会等,包含图书自动识别、图书查询、在线预借、扫码借还书、图书书目导入导出等功能http://www.ibook.tech/