C#图书管理系统笔记(残缺版)
1.技术选型和项目说明
说明:本文字教程配套的是B站UP主:面朝星海我心澎湃,针对于作者的视频教程,才有了自己的文字教程,在此致谢,视频教程和文字教程搭配使用,效果更佳;
还是和之前做的那个学生管理系统是一样的,主要使用的就是SQL server数据库2012和我们的这个VS2022,其中很多的代码都是可以复用的;
主要实现的这个功能就是图书管理系统,和之前的类似,之前的是三个权限,分为这个老师,学生和我们的管理员的权限,但是在这个图书管理系统里面,只有我们的这个管理员和普通用户的权限哈;
2.数据库的创建
2.1数据库文件
名字可以自定义,数据库的文件的存放的位置也是可以自定义的:
我的数据库文件和相关的日志文件全部都是存放在了下面的这个文件夹里面去:
2.2管理员表设计
下面的这个就是对于我们的管理员表的创建,包含的是两个字段,一个是我们的ID,还是有个psw是密码的简写,也就是全称password,对于这个数据类型,我更加倾向于使用这个nvarchar类型的;
因为之前做那个学生管理系统的时候,这个设置为varchar之后只会支持这个ASCII编码,但是我们的这个nvarchar是支持这个unicode编码的,这个区别就是我们的这个nvarchar类型的字段里面是允许存在汉字的,但是这个varchar类型的只能使用这个英文字符,如果你使用汉字就会出现问号,这个需要额外的注意一下;
2.3用户表设计
下面的这个就是我们的用户的表的相关的字段的设计:
2.4图书表的设计
2.5借书记录表的设计
数据库的表设计完成
2.6插入一些数据
下面的这个查询的结果就是我们在这个管理员表格和用户表里面插入的这个相关的数据;
3.登录功能
3.1细节处理
这个就是主要对于我们的button的重新的命名处理,方便我们的后期的相关的操作:
下面的这两个选框本来分别的这个默认的名字是button1和button2,但是我们这个地方为了更加方便后面的操作,分别修改成为admin和user,更加容易控制相关的逻辑;
3.2踩了个大坑
我下午创建这个新的textbox的时候,发现这个东西是无法进行缩放的,就是这个默认的特别大,只能左右缩放,无法上下缩放,反正就是非常的bug,我也非常的无语;
之前我的一项的风格就是百度,大概率去到这个csdn里面去找答案,但是灭有结果,我想着要不要新建一个项目,但是感觉完全没有必要啊,将就着用吧;
结果我运行起来的时候,这个东西直接不让我输入,我真的是无语,无奈之下问了豆包,问了两下,就帮我解决了,真的有用诶;
后面我可能需要改变一下自己的这个风格,先使用大模型,然后再去这个百度上面去寻找这个对应的解决的方案,可能这样才是比较正确的,我上午最后一节课,找了很多,但是没有看到我想要的,确实挺失望的,我觉得能不能找到完全取决于自己的方法,还是注意一下吧;
下面的这个就是豆包的解决方案,非常有效,我觉得很不错,遇到类似的问题的同学可以参考一下;
3.3关于字体和文本框大小
这个我之前因为修改了这个字体的属性,“欢迎登录图书管理系统”,我把这个字体设计的很大,结果我搞其他的这个label的时候这个字体也是非常的大,但是这个显然不是我想要的;
我就发现这个需要我不断的进行微调,因为文本框大,文本小,这个也不好看,文本太大,文本框显示不完全,也不是很好,这个上面花了不少的时间,确实挺烦人的;
我是先测试了一下这个登录的功能,看看这个SQL语句的显示有没有问题;这个方法我做了两个项目都是这样搞得,觉得很不错,推荐下;
3.4SQL语句的三个写法的讨论
在这个UP的视频里面一共是提供了三个不同的写法,我对于这个也是非常的好奇,因为我只知道第一种,剩下的两个我自己都是未曾见过的;
所以我按照UP的方法进行尝试,结果发现在我的环境里面这个并不是等效的,因为我输出这个结果的时候发现是sql和sql2一样,但是sql2和sql3不一样,为了稳妥起见,我是用了第一个方法;
但是对于他们的这个SQL语句,我分别使用这个messagebox对于这个输出的结果进行显示,放在了右上角,我觉得他们是没问任何区别的,但是输出的结果就是说他们不一样;
我是用第一类的写法,也就是sql的写法,这个更加的常用;大家可以在自己的这个环境下面进行测试,看看是不是我自己才有这个情况(我觉得这个可能性不大哈哈);
3.5关于dc对象读取的内容
下面的这个代码我也是写了不止一遍了,但是对于这个里面的每一个对象存储的具体的信息,我始终不是很理解,但是这次的这个直接把这个信息显示出来,才让我理解了一点点眉目;
下面的这个就是我们的读取的结果:
下面的这个是我们的数据库里面的具体的记录:
结合这个读取的结果和我们的数据库里面的具体的记录,大家一定可以发现,实际上这个dr里面存储的更像是我们的集合里面的信息。每一个代表的都是一行数据,因为我们使用的是这个select语句,并且在输入这个信息的时候对于这个名字和密码进行了指定,因此从这个数据库里面进行读取的时候一定是一条数据,也就是一行数据,我们使用这个下标的方式获取的就是每一列的这个具体的属性的信息;
3.6登录的弹窗
实际上我们的这个普通的用户和我们的管理员的代码没有太大的区别,都是从我们的这个文本框里面进行这个数据的获取,然后就是去对于我们的输入信息到数据库里面去查找;
3.7show和showdialog的区别
这个环节介绍一下这个两个空间的区别:
就是当我们的用户成功输入这个用户名和密码的时候,我们肯定是需要跳转到这个新的弹窗里面的对吧,这个时候我们使用的是showdialog的方法;
show就是普通的展示;
showdialog就是我们只能操控这个当前的页面,其他的是不可以的,如果使用这个show方法,在弹出的这个新的页面上面,我们还是可以操作这个原来的登录页面的,这个显然是不现实的,因此我们需要使用这个showdialog的方法;
3.8关于this的说明
因为我们这个就是登录页面,我们进行跳转的时候,登录页面隐藏,这个用户的界面出现,用户操作完成之后再去显示这个登录的页面,这个是他们彼此的联系;
3.9全局变量的处理
在这个项目里面,作者写了一个类里面定义静态变量,这个很不错,因为我是两个项目都做了,我是真切的指导学生管理系统里面的这个参数来回传递的时候是多么的麻烦;
定义的事静态的,如下所示
然后我们在这个登录逻辑里面把这个结果赋值给我们的这个静态变量:dc具体的含义可以看这个教程的3.5小结,里面有详细的解释;
4.管理员界面
4.1管理员欢迎界面
下面的这个控件是menustrip,非常的实用,专门针对于我们的这个用途进行设计的;
4.2管理员页面
下面的这个是进行table方法的定义之后的查询的效果,显示我们的数据库表里面的所有的数据信息:
然后就是基本的添加修改,删除,刷新的这个都实现了,但是针对于这个用户的借书,还书的这个逻辑真的好复杂,不想搞了,直接摆烂了;
我觉得这个图书管理更难,加上这两天一直在搞这个东西,现在真的搞不动了,明天是这个学期的最后一节课,明天能抽到什么题目看造化吧,真的搞不动了;
因为这个借书涉及到你们的这个库存的变动,借出书籍这个数量需要减少,归还之后呢这个数量需要增加,而且这个sql语句更加复杂,有点难为我这个小菜鸡了;