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.基于web的图书管理系统检索图书管理系统数据库信息,对比信息是否和数据库一致 登录者输入的登录信息通过系统数据库验证,系统会自动识别是管理员或者是借阅人,进入相应的页面页面 3.1.2技术应用 在实现登录功能中,主要由项目中的login.jsp,来实现。在login.jsp中我们主要来实现登陆界面的设计和判断账号密码不能为空。在判断账号密码不能为空https://blog.csdn.net/m0_74825614/article/details/144422044
2.网络中心当今社会,以互联网、大数据、云计算、物联网、人工智能、5G、VR/AR、区块链等信息技术为代表的科技革命对人类生活、工作、学习等各个方面产生了巨大的影响,在教育领域数字校园已成为办学的基本条件,特别是职业院校数字校园已成为支撑教育教学、沟通校企合作、促进师生发展的必需环境。 http://www.xtzy.com/wlzx/detail.jsp?public_id=153330
3.图书管理系统设计个人总结(精选13篇)爱心:在老师需要的书实在找不到时,我采用:或牢记在心;或登记在册,日后购买;或推荐同类书籍,在力所能及的情况下,不让老师空手而归。 六、建立校图书管理员组织。 通过设立班级图书箱,使图书馆图书能周转起来。为了能让学生看到自己喜爱的图书,在xx年底我校成立了小小图书管理员组织,并建立了每周一开会制度。在https://www.unjs.com/fanwenwang/gerenzongjie/20220701084340_5248388.html
4.图书管理员年终工作总结总结就是对一个时期的学习、工作或其完成情况进行一次全面系统的回顾和分析的书面材料,它能够给人努力工作的动力,不妨坐下来好好写写总结吧。那么总结要注意有什么内容呢?下面是小编收集整理的图书管理员年终工作总结,希望对大家有所帮助。 图书管理员年终工作总结1 https://www.qunzou.com/gongzuo/647451.html
5.张店区和平小区小学管理制度规章制度政务公开23.信息技术人员岗位职责………23 24.图书管理员岗位职责………24 25.会计岗位职责 ………25 26.出纳岗位职责………26 27.档案员岗位职责………27 28.总保管岗位职责………28 29.门卫岗位职责………29 30.炊事员岗位职责………http://www.zhangdian.gov.cn/gongkai/site_zdqjyhtyj/channel_632e4ba684c29607ec58119d/doc_656e80794594110b2508de74.html
6.图书馆工作人员工作总结(通用14篇)今年以来,在全体馆员的共同努力下,在学校领导的全面支持、关心下,图书馆本着一切为读者服务的宗旨,围绕优化服务、拓展图书馆教育和信息的功能,从读者服务、业务管理、读书活动、提高人员素质入手,经过一年扎扎实实的努力,圆满地完成了xx年的各项工作。 一、优化基础服务 https://www.yjbys.com/zongjie/gerenzongjie/1264587.html
7.形考作业3:基于UML的大学图书馆图书信息管理系统设计实验PAGE PAGE 1 基于UML的大学图书馆图书信息管理系统设计实验目录 TOC \o 1-3 \h \u 3916 基于UML的大学图书馆图书信息 1 29682 管理系统设计实验 1 8961 一、系统概述 2 5059 1.1摘要 2 18656 1.2图书管理系统可行性分析 3 20428 二、需求分析 3 21231 2.1功能性需求 3 8640 2.2系统模块 3 3280 2.3用例https://max.book118.com/html/2022/0829/6015140051004231.shtm
8.系统中,假如己经构造了一个一般借书者类,后来发现图书馆的学生刷刷题APP(shuashuati.com)是专业的大学生刷题搜题拍题答疑工具,刷刷题提供在图书馆系统中,假如己经构造了一个一般借书者类,后来发现图书馆的学生和教师在借书中有 不同要求。请问在面向对彖设计中用( )A.信息隐藏B.继承C.动态联编D.代码复制的答案解析,刷刷题为用户提供https://www.shuashuati.com/ti/de4d01517c3248c2a4ede68aa4b22a16.html
9.图书管理员工作总结图书管理员工作总结1 我调入了平江区图书馆已有2个年头了,从陌生到熟悉,我已深深地爱上了图书馆这份平凡的工作。二年来,我不断努力地学习着,认真踏实地工作着,默默无闻地奉献着。 一、重视学习,不断提高自身业务素质。 图书馆的工作看似简单的"借借还还",但却是一种学术性、技术性、创造性很强的的工作,同https://www.fwsir.com/Article/html/Article_20240515111848_3840062.html
10.课外读物专项排查工作方案(通用15篇)学校负责人及图书管理员严格按照《中小学生课外读物进校园管理办法》规定的“十二种情形”不宜读物,对学校图书馆的书籍进行排查,发现不符合要求的书籍及时清理,不准借阅。各班主任要按照要求随时检查学生带入学校的课外读物,发现不宜读物,要教育学生不得带入学校,不得阅读,并及时告知家长对读物进行处理。学校及各班级要https://www.jy135.com/gongzuofangan/915464.html
11.图书导读范文11篇(全文)高等学校图书馆是学校的文献信息中心,是为教学和科研服务的学术性机构。高等学校图书馆的服务是一种专业性、学术性很强的服务,对大学生的专业学习、课外自学和综合素质的提高都有着至关重要的影响。高等学校图书馆教育职能的实现,有赖于学生对图书馆馆藏文献的利用。导读是https://www.99xueshu.com/w/ikeykz67dg45.html
12.学校图书馆管理信息系统开发的可行性研究报告(通用10篇)该次系统开发的对象是银杏酒店管理学院,开发该系统的目的主要是对有关读者,书籍,借书,还书,存书等方面的信息进行统一管理,本系统结构分为读者信息管理模块、书籍信息管理模块、借阅信息管理模块和管理者信息管理模块。图书馆信息化是对信息管理系统化、科学化要求甚高的单位。通过该系统图书馆在很多个方面的效率都得到https://www.360wenmi.com/f/fileiv3v59e5.html
13.图书馆管理员德能勤绩廉年度考核个人总结范文(精选14篇)图书馆管理员德能勤绩廉年度考核个人总结范文(精选14篇) 总结就是对一个时期的学习、工作或其完成情况进行一次全面系统的回顾和分析的书面材料,通过它可以正确认识以往学习和工作中的优缺点,不妨坐下来好好写写总结吧。你所见过的总结应该是什么样的?下面是小编为大家收集的图书馆管理员德能勤绩廉年度考核个人总结https://m.ruiwen.com/zongjie/6745430.html
14.图书馆图书管理系统总体架构图书馆管理系统概述1.长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找https://blog.51cto.com/u_12218/9450399
15.培智学校义务教育课程标准(2016年版)第一部分 前言 语言文字是人类最重要的交际工具和信息载体,是人类文化的重要组成部分。生活语文是培智学校学生学习应用语言文字的重要载体,也是培智学校学生发展思维、改善功能、学习文化知识和形成生活技能的基础。生活语文课程标准是培智学校实施语文教育教学的重要依据。生活语文课程的基础作用与多重功能,奠定了该课程在培https://yun.nxeduyun.com/index.php?r=space/school/theme/content/view&id=794545
16.www.shbangde.com/bumen/houbao/guanli/wend/zhidu2023.htm2.图书馆负责学校图书馆和资料室的图书、资料、期刊等的管理; 3.后勤部门负责学校的房屋(包括办公用房、教学用房、库房、学生宿舍用房及其它用房)、建筑物(包括道路、运动场、围墙等)、附属设施(包括房屋、建筑物内的通水、通气管道,输变电线路,电梯、卫生设备等)、室外建筑物(假山、假景等)、植物、草坪及家具https://www.shbangde.com/bumen/houbao/guanli/wend/zhidu2023.htm