C# 图书管理系统(完整项目 )

ops/2024/11/15 4:51:02/

目录

一.开发背景和开发目的

二 .系统功能分析

三.数据库设计

四.效果展示

4.1创建图书管理系统的主窗体

4.2创建图书管理系统的主界面

4.3创建图书管理系统的图书管理界面

五.留言

一.开发背景和开发目的

当今社会,随着图书馆的规模不断扩大,图书数量急剧增加,有关图书的各种信息也成倍增长特别是图书信息的信息,而面对庞大的信息量,有必要开发图书管理系统来提高图书管理工作的效率。通过这样的系统,可以做到信息的规范管理、科学统计和快速查询,从而减少管理方面的工作量。

在图书馆,尤其是在各大图书馆,对于图书的管理是相当重要,而且也是相当麻烦的,它是图书馆管理中最基本的一项常规性工作。而长期以来,图书馆管理都是依赖人工来进行的,面对如此众多的图书信息,其工作量是相当相当巨大的。这样不仅仅浪费了大量的人力物力,而且由于人工管理存在着大量的不可预知性,造成图书信息管理的一些不规范,使得信息管理陷入“事倍功半”的地步。开发本系统就是为了解决图书馆在图书信息管理中的一些不规范,使图书信息的管理向着规范化、简单化、有效化的方向发展。

二 .系统功能分析

系统开发的总体任务是实现图书信息管理的系统化、规范化和自动化。

系统功能分析是在系统开发的总体任务的基础上完成的。读者信息管理系统需要完成的功能主要有:

·有关借还书等信息的输入,包括输入借书编号、图书编号、读者编号、借书时间和还书时间等。

·借还书信息的查询,包括借书编号、图书编号、读者编号、借书时间和还书时间等。

·图书管理信息的添加、修改、查询。

·出版社信息的添加、修改、查询。

根据系统功能模块图得出系统的功能,现分析如下:

系统功能的分析

系统开发的总体任务是实现图书信息管理的系统化、规范化和自动化。

系统功能分析是在系统开发的总体任务的基础上完成的。图书信息管理系统需要完成的功能主要有:

·有关借还书等信息的输入,包括输入借书编号、图书编号、读者编号、借书时间和还书时间。

·借还书信息的查询,包括借书编号、图书编号、读者编号、借书时间和还书时间。

·图书信息管理的添加、删除、修改。

·图书类别管理的输入,包括输入图书类别、图书编号、图书名称。

·读者管理信息的查询。

·图书管理信息的查询。

·出版社的添加,修改和删除

三.数据库设计

借书是图书管理系统的主要流程之一,其过程是在借阅信息表中查找自己所需要的图书,然后进行借书、借书登记等操作。

四.效果展示

4.1创建图书管理系统的主窗体

VS创建的应用程序可以是SDI(单文档界面)和MDI(多文档界面)。在SDI的程序中,每个窗体之间是独立的。而MDI的程序中,有一个窗体是主窗体,可以包含其他窗体,它的类型是control。本系统采用多文档界面,这样可以使程序更加美观、整齐有序。

图书管理系统的主界面其左侧为菜单,每个都是一个按钮,当点击各个按钮时,其按钮前面的白色矩形会移动到该按钮前面,包括点击系统设置时,会出现子菜单,这两种都是由时钟进行配合实现的,左上角是一个图片,右边是隐藏侧边栏的按钮,顶部有日期显示,右上角就是一个图片按钮,点击后结束所有正在运行的项目线程。

空白部分是panel组件,每个子窗体,都通过用户的点击,在此组件内显示,这样起到了很好的美化效果。

4.2创建图书管理系统的主界面

启动程序,默认加载该界面,其分为三个panel组件,内部为两个label标签,和一个png图片,查询数据分别为图书的种类、库存数量、逾期未还数量,执行的sql语句为

SELECT( SELECT COUNT ( * ) FROM BookClass ) bookClassCount,( SELECT COUNT ( * ) FROM BookInfo ) bookInfoCount,( SELECT COUNT ( * ) FROM LoanManage2 WHERE IsOverDate < 0 ) NoReturnCount

查询出的数据进行设置label标签的Text属性进行显示。

4.3创建图书管理系统的图书管理界面

其上部分为groupBox,其内有两个Label标签与文本输入框和搜索按钮组成的查询功能,其功能主要有根据图书ID进行查询,根据图书类别查询,当用户输入图书ID时,图书类别的文本输入框会置空,相反也一样。用户点击搜索后,默认会根据图书类别进行搜索,搜索结果在放入List集合中,再对集合进行遍历,最后在dataGridView中进行显示。

dataGridView上面有两个按钮,点击添加,弹出添加图书对话框。

大概还有以下相关界面很多不做展示了

相关代码展示

using LibraryMangementSystem.BookManage;
using LibraryMangementSystem.BookRead;
using LibraryMangementSystem.StatisticData;
using LibraryMangementSystem.SystemSet;
using LibraryMangementSystem.UI;
using LibraryMangementSystem.UI.BookManage;
using LibraryMangementSystem.UI.CertManages;
using LibraryMangementSystem.UI.LoanManage;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace LibraryMangementSystem
{public partial class UI_Index : Form{int PanelWidth;bool isCollapsed;bool isButton;public UI_Index(){InitializeComponent();PanelWidth = panelLeft.Width;isCollapsed = false;timerTime.Start();UI_Home home = new UI_Home();AddControlsToPanel(home);StartPosition = FormStartPosition.CenterScreen;isButton = true;}private void button11_Click(object sender, EventArgs e){this.Dispose();}private void timer1_Tick(object sender, EventArgs e){if (isCollapsed){panelLeft.Width=panelLeft.Width + 5;if (panelLeft.Width>=PanelWidth) {timer1.Stop();isCollapsed = false;this.Refresh();}}else{panelLeft.Width = panelLeft.Width - 5;if (panelLeft.Width <=66 ){timer1.Stop();isCollapsed = true;this.Refresh();}}}private void button10_Click(object sender, EventArgs e){timer1.Start();}private void moveSidePanel(Control but) {panelSide.Top = but.Top;panelSide.Height = but.Height;}private void AddControlsToPanel(Control c){c.Dock = DockStyle.Fill;panelDisplay.Controls.Clear();panelDisplay.Controls.Add(c);}private void AddFormToPanel(Form f){f.MdiParent = this;f.WindowState = FormWindowState.Maximized;f.TopLevel = false;f.FormBorderStyle = FormBorderStyle.None;f.Dock = DockStyle.Fill;panelDisplay.Controls.Clear();panelDisplay.Controls.Add(f);f.Show();}private void buttonHome_Click(object sender, EventArgs e){moveSidePanel(buttonHome);UI_Home home = new UI_Home();AddControlsToPanel(home);}private void buttonBookManage_Click(object sender, EventArgs e){moveSidePanel(buttonBookManage);BooksManage b = new BooksManage(sender,e);AddControlsToPanel(b);}private void buttonBookQuery_Click(object sender, EventArgs e){moveSidePanel(buttonBookQuery);PublisherInfoForm publisher =new PublisherInfoForm();AddFormToPanel(publisher);}private void buttonRental_Click(object sender, EventArgs e){moveSidePanel(buttonRental);LoanManages loanManages=new LoanManages(sender,e);AddControlsToPanel(loanManages);}private void buttonCertManage_Click(object sender, EventArgs e){moveSidePanel(buttonCertManage);CertManages c = new CertManages(sender, e);AddControlsToPanel(c);}private void buttonStatisticData_Click(object sender, EventArgs e){moveSidePanel(buttonStatisticData);StatisticCount statistic=new StatisticCount();AddFormToPanel(statistic);}private void buttonBookScan_Click(object sender, EventArgs e){moveSidePanel(buttonBookScan);BookAbstract book=new BookAbstract(sender,e);AddFormToPanel(book);}private void buttonSystemSet_Click(object sender, EventArgs e){moveSidePanel(buttonSystemSet);timer2.Start();}private void buttonHelp_Click(object sender, EventArgs e){moveSidePanel(buttonHelp);UI_Help c = new UI_Help();AddControlsToPanel(c);}private void timerTime_Tick(object sender, EventArgs e){DateTime dt = DateTime.Now;labelTime.Text = dt.ToString("yyyy-MM-dd HH:mm:ss");}private void timer2_Tick(object sender, EventArgs e){if (isButton){//展开panelSubMenu.Height = panelSubMenu.Height + 5;if (86 <= panelSubMenu.Height){timer2.Stop();isButton = false;this.Refresh();}}else{//收回panelSubMenu.Height = panelSubMenu.Height - 5;if (panelSubMenu.Height <= 0){timer2.Stop();isButton = true;this.Refresh();}}}private void button1_Click(object sender, EventArgs e){moveSidePanel(buttonSystemSet);SysSet sysSet = new SysSet();AddFormToPanel(sysSet);}private void button2_Click(object sender, EventArgs e){moveSidePanel(buttonSystemSet);UI_UpdateDays UpdateDays = new UI_UpdateDays();AddFormToPanel(UpdateDays);}}
}
图书添加代码
using LibraryMangementSystem.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace LibraryMangementSystem.BookManage
{public partial class BookAdd : Form{public BookAdd(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;}LibraryEntities1 dbContext = new LibraryEntities1();private void button1_Click_1(object sender, EventArgs e){var BookId = textBoxBookId.Text;var ISBN = textBoxISBN.Text;var Title = textBoxTitle.Text;var Publish = dateTimePickerPublish.Value;var Author = textBoxAuthor.Text;var Words = textBoxWords.Text;var PublisherID = ((ComboBoxItem)comboBoxPublisherId.SelectedItem).Value.ToString();var Number = textBoxNumber.Text;var Price = textBoxPrice.Text;var KeyWord = textBoxKeyWord.Text;var Abstract = textBoxAbstract.Text;var BookClass = ((ComboBoxItem)comboBoxClass.SelectedItem).Value.ToString();if (BookId != ""){BookInfo bookInfo = new BookInfo();bookInfo.BookID = BookId;bookInfo.ISBN = ISBN;bookInfo.Title = Title;bookInfo.Publish = Publish.ToString("yyyy-MM-dd");bookInfo.Author = Author;bookInfo.PublisherID = PublisherID;bookInfo.ClassID = BookClass;if (Words != ""){bookInfo.Words = int.Parse(Words);}if(Number != ""){bookInfo.Number = int.Parse(Number);}if (Price != ""){bookInfo.Price = decimal.Parse(Price);}BookInfo bookInfo2 = dbContext.BookInfo.FirstOrDefault<BookInfo>(B => B.BookID == bookInfo.BookID);if (bookInfo2 != null){Util_UI_Alert alert3 = new Util_UI_Alert("图书ID重复!");alert3.ShowDialog();return;}bookInfo.Keyword = KeyWord;bookInfo.Abstract = Abstract;dbContext.BookInfo.Add(bookInfo);int result = dbContext.SaveChanges();String str = result == 1 ? "添加成功" : "添加失败";/*MessageBox.Show();*/Util_UI_Alert alert=new Util_UI_Alert("添加图书成功!");alert.ShowDialog();this.Close();//刷新窗体/*this.Controls.Clear();InitializeComponent();comBoxLoad(sender, e);*/}else{MessageBox.Show("图书编号不得为空!");return;}}private void comBoxLoad(object sender, EventArgs e){//新增图书:图书分类下拉框foreach (var item in dbContext.BookClass){ComboBoxItem cbi = new ComboBoxItem();cbi.Text = item.Classname.Trim();cbi.Value = item.ClassID;comboBoxClass.Items.Add(cbi);}comboBoxClass.SelectedIndex = 0;//新增图书:图书出版社下拉框foreach (var item in dbContext.Publisherlnfo){ComboBoxItem cbi = new ComboBoxItem();cbi.Text = item.Publisher.Trim();cbi.Value = item.PublisherId;comboBoxPublisherId.Items.Add(cbi);}comboBoxPublisherId.SelectedIndex = 0;}private void button2_Click(object sender, EventArgs e){this.Close();}}
}

五.留言

需要源码可私信我,免费分享。


http://www.ppmy.cn/ops/93277.html

相关文章

什么是实时数据仓库?它有哪些不可替代之处?

【实时数据仓库】可以分开来理解&#xff1a; ✅【实时数据】&#xff1a;即能够快速处理数据&#xff0c;且几乎无延迟的提供最新的数据的能力。 ✅【仓库管理】&#xff1a;可以理解为对仓库的库存控制、对仓库的存储优化以及协调物流。 那么实时数据仓库就是&#xff1a;…

恒创科技:IPv4 和 IPv6 之间的主要区别

IPv4 和 IPv6 是互联网协议 (IP) 系统中使用的两种版本的 IP 地址格式。虽然它们的主要目的是准确识别、发送和接收互联网上的数据&#xff0c;但 IPv4 和 IPv6 之间存在许多关键差异。 地址格式 IPv4 采用 32 位格式&#xff0c;由 4 个数值(称为八位字节)表示&#xff0c;以点…

Qt入门(二):第一个Qt项目

新建项目 打开Qt Creator&#xff0c;新建项目&#xff0c;然后一路next 到这一步baseclass有三种选择&#xff1a; QMainWindow&#xff1a;主窗口基类&#xff0c;相较于QWidget&#xff0c;多了菜单栏等杂七杂八的东西。QWidget&#xff1a;最基础的窗口基类&#xff0…

用Python制作开心消消乐游戏|附源码

制作一个完整的“开心消消乐”风格的游戏在Python中是一个相对复杂的项目&#xff0c;因为它涉及到图形界面、游戏逻辑、动画效果以及用户交互等多个方面。不过&#xff0c;我可以为你提供一个简化的版本和概念框架&#xff0c;帮助你理解如何开始这个项目&#xff0c;并提供一…

SAP MIGO新增字段 自定义字段(续)

继 SAP MIGO新增字段 自定义字段_migo 新增字段-CSDN博客后&#xff0c;实际业务实用提出了新的需求 再0200屏幕的上输入&#xff0c;但是发现回车后就清空了&#xff0c;直接过账也不行。 于是 找了好几个顾问&#xff0c;ABAP 之外还找了MM顾问 都说没有实现过。 就在准备放…

C++解析和构建json(cjson使用手册)

C解析和构建json【cjson使用手册】 一、cjson下载二、cjson工程使用2.1 静态库使用2.1 源码使用&#xff08;推荐&#xff09; 三、cjson详解3.1 解析json字符串3.1.1 解析对象3.1.2 解析数组&#xff1a;方法一&#xff08;获取列表数量然后按照位置获取&#xff09;3.1.2 解析…

《Kotlin核心编程》2021版复习记录

目录 0 前言1 基础语法1.1 数据类型1.2 数组1.3 集合1.4 遍历数据和集合1.5 函数声明返回值类型1.6 var 和 val 2 高阶函数和lambda表达式2.1 高阶函数2.2 方法和成员引用2.3 链式调用2.4 扩展函数2.5 面向表达式编程2.5.1 when表达式2.5.2 for循环2.5.3 in 2.6 字符串相等 3 面…

PixelLib图像分割

文章目录 前言一、PixelLib依赖安装二、实例模型训练 前言 图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。 传统的图像分割方法主要分以下几类&#xff1a;基于阈值的分割方法、基于区域的分割…