pj2--图书管理系统
这一次做得是图书管理系统。
下面是功能框图
下面是流程图
实际在做这个项目的时候根据相应的实际情况对功能流程等等做了一些小小的改变。
下面是一些值得记一笔的地方。
1、借用系统自带的导航控件(BindingNavigator)
自定义数据来源---先定义一个BindingSource对象,再设置这个对象的datasource属性(需要绑定的数据源).
需要注意的一点是判断Bindingsource是否为空是通过他的list的count属性来判断的,他自带的count属性我理解的是数据源的个数。
之所以使用这个控件是因为Bindingsource对象里面自带move(next、first等),可以很方便的实现下一页上一页等操作。
2、使用用户控件和多层架构,第三方控件
使用用户控件可以大量减少Form的数量,以前没用过,这一次使用了,感觉不错。
再就是多层架构,说是多层架构,但是个人觉得很简略粗糙。我写我的部分的时候我的顺序是:先写datahelper->entity->dal->Ibll->Bll->UI
datahelper和entity是组内通用的,不赘述。在写dal层的时候由于不知道ui会使用到那些数据,所以一开始设计的时候,是直接就获取了全部的数据,后来做到后面发现用不到那么多东西,没有规划好(也许是写各层顺序不对)。之所以设计IBLL层开始是以为可以组内复用的,结果,组内都没做这个工作,以致于我们的代码里面有很多冗余,本来可以复用的地方,都没有去考虑复用(分开个人写的坏处,没有充分交流)。不过设计IBLL的好处是可以省略写好多代码(继承接口直接实现,感觉很棒,写具体 代码的时候很有条理)。。。。。。
BLL层大部分没有做什么数据处理,直接就返回给ui使用。
UI层我在很多地方本来是该BLL层做得事情,由于太懒,直接就在UI层处理了,这也是分层的弊端----增加了码农的工作负担
第三方控件我们是直接使用了一个第三方的皮肤包。在找控件的时候我也发现了一些好的资源,待会儿上传到一并网盘保存
3、读取Excel
方式与SqlServer时一样的。下面写一下不同的地方
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=No;IMEX=1'";
//HDR的YES和NO表示第一行是否是行标题(即无数据)IMEX有0、1、2三种参数分别表示write、read、writeANDread(读写权限)
String sql = "SELECT * FROM [Sheet1$]";
//Sheet1是名称,包括数据域是可以更改的,这个要参考对excel的单元格操作
4、调用豆瓣提供的API获取图书信息
豆瓣提供的API返回的是XML文档,这里主要需要做的就是利用XML分析返回的文档,获取到相应的数据。
关键代码
1 XmlDocument xml = new XmlDocument(); 2 xml.LoadXml(xmldetail); 3 XmlNamespaceManager nsmgr = new XmlNamespaceManager(xml.NameTable); 4 nsmgr.AddNamespace("db", "http://www.w3.org/2005/Atom"); 5 XmlElement root = xml.DocumentElement; 6 XmlNodeList nodes = root.SelectNodes("/db:entry", nsmgr);
然后就是遍历nodes了。
附件:http://yunpan.cn/cgnCaG4dPsTbT (提取码:8ffa)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义