摘要
学校管理中的基础工作就是学校后勤管理。随着时代的进步,学校也变得逐渐庞大起来,再继续使用传统的如果管理方式,会导致效率低下,保密性差,数据查找,更新与维护困难等问题。所以如果能实现计算机对后勤物资的管理,无疑能给学校管理带来较大的方便。 本后勤物资管理系统实现了对物资信息,供应商信息 ,客户信息,仓库信息的查询与更新,同时实现了对物资的采购,销售以及存储过程的查询与更新,还对财务情况进行了可视化统计,此外能实现物资流向的查询。 本文基于数据库技术与C#窗体设计技术,使用SQL server作为基础数据库,Visual Studio 2019作为开发平台,用比较轻便的net framework web 作为整个项目的基础框架。以vs来设计前端网页界面,以SQL进行后端管理,SQL中包括管理员、仓库、客户、物资、供应商、采购、存储、销售等多个表,vs前端界面包括进入界面、首页、数据查询和编辑、视图查询。 本后勤物资管理窗体提高了管理工作的规范性,系统性,准确性。
关键字
数据库;窗体设计;后勤物资管理
引言
选题背景和意义
随着计算机的普及和网络技术的发展,我国的学校信息化建设很早就已经开始在全国展开部署了。学校后勤管理系统就是其中之一。
传统的手写管理由于工作量巨大、存放麻烦、更新困难、不易备份,随着时代的发展而明显落伍了。这就要我们创造更快更新的管理系统。信息化管理以快捷、方便的使用而受到欢迎。
学校后勤管理系统是一个学校管理部门不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学校后勤管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
本系统可以避免单位管理的随意性,使得管理工作规范化、系统化、程序化,提高信息处理的速度和准确性,对于减轻工作人员的劳动量、提高劳动热情和服务质量,具有重要的现实意义。
需求和可行性分析
功能分析
- 购货管理:包括采购合同管理和进货统计报表,采购合同管理又分为采购合同维护、采购执行情况跟踪、采购信息统计。。
- 销售管理:分为销售合同关系和销售情况统计。销售合同管理包括销售合同的维护和管理。销售情况统计用于确定销售的数量和价格(可以按照类别.时间段等条件统计),统计所得的数据可以为今后制定后勤集团工作计划提供参考信息。
- 库存管理:用于管理库存情况,包括库存查询、库存盘点、库存上下限报警等,并生成库存统计图。
- 数据维护:分为物资供应商信息(编号、名称、主管、简介等)管理和产品信息管理。
- 账务管理;管理后勤集团的结账业务,每个月都要进行一次结账操作,确定该财务月份所有物资的进、销、结存情况,为财务管理提供数据。
- 系统管理:包括参数设置、权限设置、更改密码等。
业务流程分析
采购员从供应商处采购物资,然后仓库管理员将购买的物资入库。 仓库管理员将物资出库,销售员根据客户需要将物资出售给客户。
数据需求分析
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据字典是数据流图上所有的成分的定义和解释的文字的集合,它最重要的用途是供人查询对不了解的条目的解释。数据字典主要的组成有:数据项、数据流、数据结构、数据存储、处理过程。
技术可行性
使用SQL server作为基础数据库,Visual Studio 2019作为开发平台,用比较轻便的net framework web 作为整个项目的基础框架。以vs来设计前端网页界面,以SQL进行后端管理,SQL中包括管理员、仓库、客户、物资、供应商、采购、存储、销售等多个表,vs前端界面包括进入界面、首页、数据查询和编辑、视图查询。
操作可行性
界面设计时充分了考虑管理人员的习惯,使得操作简单便宜:数据录入迅速、规范、可靠;统计准确,制表灵活,适应力强,容易扩充。 具有易用性、灵活性、开放性与可视性
系统总体设计
系统架构
架构设计的主要目的是为了解决软件系统复杂度带来的问题。架构设计是宏观性考量,在整体上理解问题的复杂性,给出方案,并论证方案的可行性,提供一系列准则指导执行。
传统的基于 Windows 的应用( Win Forms ),它仍然是 Microsoft .NET 战略中不可或缺的一部分。在 Microsoft .NET 中开发传统的基于 Windows 的应用程序时,除了可以利用现有的技术例如 Active X 控件及丰富的 Windows 接口外,还可以基于通用语言运行时开发,可以使用 ADO .NET 、 网络服务等,这样也可以实现诸如避免 DLL 地狱 、 多语言支持等 .NET 的新特性。
本系统采用前台应用程序结合后台SQL Server2019数据库的C/S架构的开发模式,运用C#语言为开发语言,通过优化程序的代码及结构,提高了程序的运行效率。
学校后勤物资管理系统在Visual Studio2019环境中结合SQL Server2019数据库进行开发,该环境提供了大量可供选择的数据控件、可以很方便地建立与数据库的连接,此外,利用各种组件可对数据库进行多种操作。
系统功能设计
系统可分为管理员、物资、客户、供应商、仓库的基本信息的查询,添加,删除,修改信息的模块,采购、销售、存储的基本信息的查询,添加,删除,修改模块,财务查询和物资流向查询模块。
基础查询模块
基础查询模块包含10个子模块分别是物资查询,客户查询,管理员查询,供应商查询,仓库查询,采购查询,销售查询,存储查询,财务查询,物资流向查询。
信息管理模块
信息管理模块包含8个子模块,分别是物资更新,客户更新,管理员更新,供应商更新,仓库更新,采购更新,销售更新,存储更新 用户在相应的文本框textbox中输入内容,选择添加,删除或修改按钮button,在窗体中对数据库数据进行更新,完成后提示更新成功。用户可以返回查询界面查询更新结果。
视图设计
创建名为物资流向的视图,展示物资在供应商,仓库,客户之间的流向。通过Mnumber字段,将material,sale,purchase,storage四个表连接起来。
数据库概念模型设计
实体及属性
客户(客户编号,客户名称,需求量) 供应商(供应商编号,供应商名称,供应量) 物资(物资编号,物资名称,类别) 仓库(仓库编号,库存量,库存状态) 管理员(管理员编号,姓名,性别,电话,密码)
概念模型
概念结构独立于数据库的逻辑结构,也独立于所使用的具体的数据库管理系统。概念模型的典型代表是E-R模型,组成元素有:实体、属性、联系,E-R模型用E-R图表示。
逻辑模型
根据E-R图可知,本设计只存在多对多关系。多对多的联系只能转换成一个独立的关系模式,关系模式的名称取联系的名称,关系模式的属性取该联系所关联的所有实体集的主键和自身的属性,关系模式的主键由所有关联的实体集共同组成。但联系本身已经拥有了主键,比如采购联系的主键采购单号,故而不再需要将实体中的主键作为联系的主键,而是仅仅作为一个属性。
物理模型
数据库表结构设计
由物理模型关系图和各实体之间的约束关系可设计数据库表如下:
数据库关系图
创建视图
创建名为物资流向的视图,展示物资在供应商,仓库,客户之间的流向。通过Mnumber字段,将material,sale,purchase,storage四个表连接起来。
create view Materialflow
as
select Material.Mnumber,Material.Mname,Material.Mcategory ,Cnumber,Sale.Anumber as sl_Anumber,Sale.sl_price,Sale.sl_volume,Purchase.Snumber,Purchase.Anumber as pc_Anumber,Purchase.pc_price,Purchase.pc_volume,Storage.Wnumber,Storage.Anumber as st_Anumber,Storage.st_volume,Storage.st_time
from Material,Sale,Purchase,Storage
where Material.Mnumber=Sale.Mnumber
and Material.Mnumber=Purchase.Mnumber
and Material.Mnumber=Storage.Mnumber
系统模块设计
数据库的连接
使用C#语言编写程序和.net framework框架连接数据库的方式有很多种,有自动获取数据库连接字符串进行连接数据库。
系统界面设计
主界面
主界面能够实现不同功能的选择与跳转,还可直接退出本系统。
界面跳转功能实现
this.Close();
供应商管理 frm = new 供应商管理();
frm.Show();
退出功能实现
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
DialogResult change = MessageBox.Show("是否确定要退出后勤物资管理系统?", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (change == DialogResult.Yes)
{
mycom.Close();
this.Close();
Application.Exit();
}
查询界面
通过选择相应的编号来进行查询,并将结果展示在窗体的相应区域。通过更新和返回按钮,可将页面跳转到更新数据界面和主界面。
采购combobox下拉显示代码
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
mycom.Open();
string sqlstr = "select pc_order from Purchase";
SqlDataAdapter ada = new SqlDataAdapter(sqlstr, mycom);
DataSet ds = new DataSet();
ada.Fill(ds);
DataTable dt = ds.Tables[0];
ArrayList list = new ArrayList();
foreach (DataRow dr in dt.Rows)
{
list.Add(dr[0].ToString().Trim());
}
comboBox1.DataSource = list;
this.comboBox1.SelectedIndex = -1;
查询代码
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
mycom.Open();
string sqlstr;
if (comboBox1.Text == "")
sqlstr = "select * from Purchase";
else
sqlstr = "select * from Purchase where pc_order='" + comboBox1.SelectedValue + "'";
SqlCommand cmd = new SqlCommand(sqlstr, mycom);
SqlDataReader reader = cmd.ExecuteReader();
BindingSource bs = new BindingSource();
bs.DataSource = reader;
this.dataGridView1.DataSource = bs;
返回代码
DialogResult dialog = MessageBox.Show("是否确定返回主页面?", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (dialog == DialogResult.Yes)
{
this.Close();
主界面 frm = new 主界面();
frm.Show();
}
跳转至更新界面代码
this.Close();
更新采购信息 frm = new 更新采购信息();
frm.Show();
更新界面
用户在相应的文本框中输入数据,并选择添加,删除或修改按钮,以实现对数据的更新操作。更新完成之后,跳出完成更新操作的弹窗。用户可以通过返回按钮返回主见面,并在主界面对数据更新的结果进行查询。
添加信息代码
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
string sqlstr = "insert into Purchase(pc_order,Snumber,Mnumber,Anumber,pc_volume,pc_price) values('" + textBox1.Text.Trim().ToString() + "','" + textBox2.Text.Trim().ToString() + "','" + textBox3.Text.Trim().ToString() + "','"+textBox4.Text.Trim().ToString() + "','" + textBox5.Text.Trim().ToString() + "','" + textBox6.Text.Trim().ToString() + "')";
mycom.Open();
SqlCommand com = new SqlCommand(sqlstr, mycom);
com.ExecuteNonQuery();
MessageBox.Show("添加成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
删除信息代码
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
string sqlstr = "delete from Purchase where pc_order='" + textBox1.Text.Trim().ToString() + "'";
mycom.Open();
SqlCommand com = new SqlCommand(sqlstr, mycom);
com.ExecuteNonQuery();
MessageBox.Show("删除成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
修改信息代码
SqlConnection mycom = new SqlConnection();
mycom.ConnectionString = "Data Source=DESKTOP-C6TOSRD;Initial Catalog=后勤物资管理系统;Integrated Security=True";
mycom.Open();
string sqlstr = "update Purchase set Snumber ='" + textBox2.Text.Trim().ToString() + "',Mnumber='" + textBox3.Text.Trim().ToString() + "',Anumber='" + textBox4.Text.Trim().ToString() + "',pc_volume='" + textBox5.Text.Trim().ToString() + "',pc_price='" + textBox6.Text.Trim().ToString() + "' where pc_order='" + textBox1.Text.Trim().ToString() + "'";
SqlCommand com = new SqlCommand(sqlstr, mycom);
com.ExecuteNonQuery();
MessageBox.Show("修改成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
总结
一个月的时间非常快就过去了,这一个月我不敢说自己有多大的进步,获得了多少知识,但起码是了解了项目开发的部分过程。虽说上过数据库相关的课程,但是没有亲身经历过相关的设计工作细节。这次课程设计给我提供了一个很好的机会。
通过这次课程设计发现这其中需要的很多知识我们没有接触过,上网查找资料的时候发现我们以前所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没有理解到位,不能灵活运用于实际,不能很好的用来解决问题,这就需要自己不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。
很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰。但真正需要自己想办法去设计一个系统的时候才发现其中的难度。经常做到后面突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法 我想有这样的问题不止我一个,事后想想是一开始着手做的时候下手过于轻快,或者说是根本不了解自己要做的这个系统是给谁用的。因为没有事先做过仔细的用户调查,不知道整个业务的流程,也不知道用户需要什么功能就忙着开发,这是作为设计开发人员需要特别警惕避免的,不然会给后来的工作带来很大的麻烦,甚至可能会需要全舟推例重求 所以以后的课程设计要特别注意这一点。
通过这次毕业设计的完成,使我对自己所学知识进一步的了解,同时通过实践发现自己的不足,对知识的掌握及运用存在诸多的不完善。本系统也存在着很多不足,如系统十分简单,实现功能也不够完善,安全性问题也没有很好的解决。所以在今后的学习中我会继续努力,完善自我,同学的帮助、指导老师的用心辅导和学校的精心安排使这个课题能够顺利进行。但是,由于时间仓促以及本人水平有限,本系统还有很多不完善之处,也难免存在错漏,恳请老师谅解。
致谢
经过近三周的不断努力,我终于顺利地完成了本次课程设计。当然,这个结果不仅在于我自身,还在于我的老师以及同学们的热心帮助。
我的科任老师指导了我E-R图,概念模型,功能模块图,数据流图的设计。对我提出的问题,老师总是耐心细致地和我讲解,并且老师十分讲究授人以鱼不如授人以渔,他总是一步一步地帮助我自己在思考中得到问题的结果。还有我亲爱的同学,在我总是找不到自己程序错漏时提点我几句,在我做设计焦躁不安时安慰我,而且与题目讨论时我能获得许多有用的建议,在她们的帮助下我能更及时认真地完成任务。
总而言之,这次课程设计让我不仅学会了如何利用数据库和C#窗体设计知识完成一个管理系统地设计,还学到了其他有用地知识,并且填补了一些我现有知识的缺漏之处。由此,衷心的感谢李老师的指导和同学的帮助。我会努力在今后更好更独立地完成任务,不断完善自己。
学生自评
在本次课程设计中,通过李老师的指导独自完成了一整套的数据库设计完整的流程,掌握了如何从需求分析到完成数据库建模的每一个步骤细节。同时,学到了ER图的重要性,建立ER图对于整个数据库建模过程是非常重要的,直接影响之后的数据库操作。在这期间,不仅学到了关于数据库的知识,还学到了许多关于c#窗体设计的技巧与.net框架的知识,解决了后端连接数据库,获取数据绑定到相应窗体控件上的难题。本次课程设计对我的整个大二学习而言十分重要。
指导教师评语:
同学积极主动完成毕业设计,扎实地掌握了数据库理论基础知识,并具有较强动手能力,按期完成设计任务,从分析,设计,实现及论文撰写等各个环节都认真细致;选题具有较强的应用价值,技术方案可行;论文结构组织合理,文字表达思路清晰、图表应用恰当;按原计划完成系统开发,圆满完成课程设计。
|