专业实践net课程实践报告.docx
《专业实践net课程实践报告.docx》由会员分享,可在线阅读,更多相关《专业实践net课程实践报告.docx(40页珍藏版)》请在冰豆网上搜索。
专业实践net课程实践报告
课程设计报告
(/学年第学期)
课程名称
.NET专业实践
设计名称
进销存管理信息系统
设计时间
年
月
日
指导单位
指导教师
学生姓名
班级学号
学院(系)
专业
目录
第一章系统需求分析3
1.1需求概述3
1.2数据流图3
第二章进销存系统结构5
2.1系统功能结构图5
2.2系统登录界面5
2.3系统主界面7
2.4总E-R图设计8
第三章系统详细设计8
3.1基本资料维护功能8
3.1.1操作员资料维护8
3.1.2商品资料维护9
3.1.3供应商资料维护10
3.1.4品牌资料维护11
3.2采购管理功能12
3.2.1采购入库12
3.2.2采购退货13
3.3销售管理功能14
3.3.1销售出库14
3.3.2销售退货15
3.4库存统计功能16
3.4.1库存查询16
3.4.2销售统计17
3.4.3采购统计19
第四章数据库设计21
4.1数据库逻辑设计21
4.2表设计22
第五章系统调试24
第六章结束语25
第一章系统需求分析
1.1需求概述
这里对商品的管理包括进、销、存3个方面。
可以建立一个超市进销存管理系统,对超市的管理者、营业员、库存管理员等减轻其工作量,便于经营管理。
功能需求:
①采购管理功能模块:
采购计划、采购订单、采购入库、采购退货、应付款、采购付款。
②销售管理功能模块:
、报价单、销售订单、销售出库、销售退货、应收款、销售收款。
③库存管理功能模块:
其它入库、其它出库、库存警报、库存报表、基本资料设计。
商品管理需要处理大量的库存信息,还要时刻更新产品的销售信息,不断添加商品信息。
面对不同种类的信息,需要合理的数据库结构来保存数据信息,需要有效的程序结构支持各种数据操作的执行。
它最主要的特点是能够实时的和准确的控制店内的销售情况。
1.2数据流图
●图1.1第0层数据流图
●图1.2进销存管理系统数据流图(第一层)
说明:
每一个处理也均可由外部实体直接输入数据
●图1.3销售管理数据流程图(第二层)
●图1.4仓库管理数据流程图(第二层)
●图1.5采购管理数据流程图(第二层)
第二章进销存系统结构
2.1系统功能结构图
2.2系统登录界面
用户登录系统时,系统会对其身份进行验证,如果系统中不存在该用户,会提示用户名或密码错误!
不同的登录类型对系统的访问权限不一样。
由于软件界面在整个软件生命周期的重要作用,根据社会工程学、国家标准等相关规范,确定软件界面时要遵循以下原则:
布局合理,界面简洁。
配色合理,图像和显示效果要统一。
整个软件界面风格应该保持一致。
减少用户的操作负担,界面尽可能少的使用鼠标。
所有界面文字清晰明了,不产生歧义。
用户身份验证代码:
publicvoidloginValidate()
{UserInfou=null;
SqlConnectioncon=newSqlConnection(DBHelper.conStr);
try
{
con.Open();
intuserRole=cbo_loginType.SelectedIndex;
stringsql=string.Format("select*fromuserInfowhereUserloginId='{0}'andUserPass='{1}'andUserRole={2}",txt_UserloginId.Text,txt_UserPass.Text,userRole);
SqlCommandcom=newSqlCommand(sql,con);
SqlDataReaderdr=com.ExecuteReader();
if(dr.Read())
{
u=newUserInfo();
u.UserId=Convert.ToInt32(dr["UserId"]);
u.UserloginId=dr["UserloginId"].ToString();
u.UserName=dr["UserName"].ToString();
u.UserPass=dr["UserPass"].ToString();
u.UserRole=dr["UserRole"].ToString();
}
dr.Close();
if(u!
=null)
{LoginInfo.LoginUserInfo=u;//保存登录用户信息
this.Visible=false;
Frm_Mainfm=newFrm_Main();
fm.Show();
}
else
{
MessageBox.Show("用户名或密码错误!
","登录提示");
}
}
catch(Exception)
{
MessageBox.Show("请注意数据库连接字符串!
","登录提示");
}
finally
{
con.Close();
}
}
上面代码的cbo_loginType.Text.Trim()中的Trim()方法用于去除字符串两端的空格,
代码string.IsNullOrEmpty(cbo_loginType.Text.Trim())用于验证非空。
2.3系统主界面
当用户进入主界面后,可以选择需要操作的菜单,单击菜单项后会跳转到相应的窗体。
在进销存系统中主窗体为MDI窗体,在其下所打开的窗体都会在关闭主窗体之后关闭。
要实现让主窗体为MDI窗体,首先要设置主窗体的IsMdiContainer属性为True,再指定子窗体的父窗体是主界面窗体。
具体实现代码如下:
privatevoidtsmi_StoreQuery_Click(objectsender,EventArgse)
{
fsq.MdiParent=this;
if(fsq.Visible)
{
fsq.Focus();
return;
}
else
{
fsq=newFrm_StoreQuery();
fsq.MdiParent=this;
fsq.Show();
}
}
2.4总E-R图设计
在分析清除系统功能需求之后,总要的就是把系统功能划分成为相对独立的模块或者子系统,便于集中讨论和确定需求,并且需要确定出操作用户,可以直观的表现出该系统的业务流程。
第三章基础功能设计开发
3.1基本资料维护功能
3.1.1操作员资料维护
提供对操作员添加、删除、修改、查询功能,该界面只有管理员有权进入。
为方便管理员查找用户的详细信息,程序提供了根据用户名查询用户详细信息的功能。
若要修改用户信息,先选中待修改的项,然后单击“修改”按钮,系统会自动将选中项显示到基本信息文本框中,这时管理员可以修改用户资料,之后点击“保存”按钮,在确定操作后,系统会检测操作员的数据输入。
点击“添加”,系统会自动启动基本信息文本框,输入之后点击保存即完成。
选中要删除的项,点击“删除”,然后确定,即可成功删除用户信息。
以下代码实现了查询功能:
privatevoidtsb_Btn_Lookup_Click(objectsender,EventArgse)
{
if(tsb_Txt_Lookup.Text.Trim()==""||String.IsNullOrEmpty(tsb_Txt_Lookup.Text))
{
MessageBox.Show("请输入查询条件","提示");
}
else
{
lp=GetProductInfoByProt_Name(tsb_Txt_Lookup.Text);
dgv_PrdouctInfo.DataSource=lp;
}
}
3.1.2商品资料维护
当单击“商品资料维护”选项后,在商品资料维护窗体加载时应该将所有的商信息都显示出来。
使用列表控件展现概要信息,附加文本框和下拉列表框显示详细信息,当用户单击列表时需要显示详细信息。
可对商品信息进行添加、修改、删除、和查询等操作。
以下是实现删除功能的代码:
privatevoidtsb_Btn_Delete_Click(objectsender,EventArgse)
{
if(dgv_PrdouctInfo.SelectedRows.Count>0)
{
intpId=Convert.ToInt32(dgv_PrdouctInfo.SelectedRows[0].Cells[0].Value);
stringsql="deletefromproductInfowhereProtId="+pId;
DialogResultdr=MessageBox.Show("你确定要删除此商品信息吗?
删除之后所有关于该商品的记录将会全部清空","提示",MessageBoxButtons.OKCancel);
stringsqlStoreCount="selectStoreSumfromstoreRoomwhereprotid="+pId;
intstoreCount=0;
SqlConnectioncon=newSqlConnection(conStr);
con.Open();
SqlCommandcmd=newSqlCommand(sqlStoreCount,con);
storeCount=Convert.ToInt32(cmd.ExecuteScalar());
if(storeCount>0)
{MessageBox.Show("该商品还有库存,请先将货物清理出库再删除商品","提示");
return;
}
else
{stringsqlDelStoreCount="deletefromstoreRoomwhereprotid="+pId;
stringsqlDelDetial="deletefromorderdetailswhereprotid="+pId;
stringsqlDelReturn="deletefromreturnproductwhereprotid="+pId;
ExecuteQuery(sqlDelStoreCount);
ExecuteQuery(sqlDelDetial);
ExecuteQuery(sqlDelReturn);
}
con.Close();
if(dr==DialogResult.OK)
{intresult=ExecuteQuery(sql);
if(result>0)
{
MessageBox.Show("删除成功!
","提示");
lp=GetProductInfoByProt_Name("");
dgv_PrdouctInfo.DataSource=lp;
}}
}}
3.1.3供应商资料维护
在供应商资料维护窗体加载时,保存按钮和文本框处于禁用状态,与此同时系统会将所有的供应商信息查询出来并显示。
可对供应商资料进行添加、修改、删除、和查询等操作。
当对供应商资料进行添加、修改和删除操作时,保存按钮和文本框处于启用状态。
单击删除按钮系统会弹出“你确定要删除此条信息吗?
”的对话框。
单击“确定”按钮系统会删除成功或失败。
一般涉及数据删除的操作必须给予客户提示,以免操作在客户大意之下发生。
以上代码实现了添加功能:
privatevoidtsb_Btn_Add_Click(objectsender,EventArgse)
{
type=0;
tsb_Btn_Amend.Enabled=false;
tsb_Txt_Lookup.Enabled=false;
tsb_Btn_Delete.Enabled=false;
tsb_Btn_Lookup.Enabled=false;
tsb_Btn_Save.Enabled=true;
Display();
txt_Prot_Name.Focus();
}
3.1.4品牌资料维护
为方便查找特定品牌的详细信息,程序提供了根据品牌名称查询品牌详细信息的方法。
品牌编号是自动产生,无法修改。
可对品牌信息进行添加、修改、删除、和查询等操作。
以上代码实现了修改功能。
privatevoidtsb_Btn_Amend_Click(objectsender,EventArgse)
{
type=1;
tsb_Btn_Add.Enabled=false;
tsb_Btn_Save.Enabled=true;
tsb_Btn_Delete.Enabled=false;
tsb_Txt_Lookup.Enabled=false;
tsb_Btn_Lookup.Enabled=false;
Display();
txt_Store_LastNum.Enabled=false;
txt_Prot_Name.Focus();
lb_Prot_id.Text=dgv_PrdouctInfo.CurrentRow.Cells[0].Value.ToString();
txt_Prot_Name.Text=dgv_PrdouctInfo.CurrentRow.Cells[1].Value.ToString();
txt_Prot_Retailprice.Text=dgv_PrdouctInfo.CurrentRow.Cells[2].Value.ToString();
txt_Prot_Tradeprice.Text=dgv_PrdouctInfo.CurrentRow.Cells[3].Value.ToString();
txt_Prot_Bigunit.Text=dgv_PrdouctInfo.CurrentRow.Cells[4].Value.ToString();
txt_Prot_Smallunit.Text=dgv_PrdouctInfo.CurrentRow.Cells[5].Value.ToString();
txt_Prot_Rate.Text=dgv_PrdouctInfo.CurrentRow.Cells[6].Value.ToString();
cbb_Cards_Name.Text=dgv_PrdouctInfo.CurrentRow.Cells[7].Value.ToString();
cbb_Priv_Name.Text=dgv_PrdouctInfo.CurrentRow.Cells[8].Value.ToString();
dtp_Prot_Date.Value=Convert.ToDateTime(dgv_PrdouctInfo.CurrentRow.Cells[9].Value);
}
3.2采购管理功能
3.2.1采购入库
当将需要采购的商品放入采购商品信息列表中后,系统会自动进行计算总采购数量和总价钱。
采购入库时要记录商品基本信息。
可对入库的商品基本信息进行保存和删除操作。
以上代码实现了保存功能。
privatevoidtsb_Btn_Save_Click(objectsender,EventArgse)
{
Save();
lp=GetProductInfoByProt_Name("");
dgv_PrdouctInfo.DataSource=lp;
Clear();
Conceal();
tsb_Btn_Amend.Enabled=true;
tsb_Btn_Delete.Enabled=true;
}
3.2.2采购退货
当商品库存量为0时,想要彻底地删除该商品,需要两步:
首先要确保库存中该商品数量为0,其次需要到基本信息维护菜单中选择商品信息维护选项,单击该选项系统会弹出维护商品信息窗体,在其上的商品信息列表中找到要彻底删除的商品,单击“删除”按钮,若显示删除成功,至此才彻底删除了需要删除的商品。
privatevoidtxt_Out_Num_KeyDown(objectsender,KeyEventArgse)
{if(e.KeyCode==Keys.Enter)
{try
{
StoreRooms=common.s;
if(Convert.ToInt32(txt_Out_Num.Text)>s.Store_sum)
{MessageBox.Show("库存不够,请进货或减少销售");
txt_Out_Num.SelectAll();
return;
}
if(Convert.ToInt32(txt_Out_Num.Text)<=0)
{MessageBox.Show("销售退货不能为负值和0");
txt_Out_Num.SelectAll();
return;
}
else
{boolb=true;
foreach(StoreRoomvarinls)
{if(var.Prot_id==common.s.Prot_id)
{
if(var.In_Out_StoreRoom+Convert.ToInt32(txt_Out_Num.Text)>var.Store_sum)
{MessageBox.Show("库存不够,请进货,或减少销售");
txt_Out_Num.SelectAll();
return;
}
var.In_Out_StoreRoom+=Convert.ToInt32(txt_Out_Num.Text);
sum+=Convert.ToInt32(txt_Out_Num.Text);
money+=Convert.ToInt32(txt_Out_Num.Text)*var.Prot_tradeprice;
if(var.Store_sum-var.In_Out_StoreRoom{
MessageBox.Show("请注意该商品销售后,该商品库存小于库存下线,请尽快进货","警告",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
b=false;
break;
}
}
common.s=null;
dgv_Store.DataSource=null;
dgv_Store.DataSource=ls;
Clear();
txt_Prot_Name.Focus();
lb_money.Text=money.ToString();
lb_num.Text=num.ToString();
lb_sum.Text=sum.ToString();
}
}
catch(Exception)
{
MessageBox.Show("请输入正确的数字格式");
txt_Out_Num.SelectAll();
}
}
}
3.3销售管理功能
3.3.1销售出库
当光标进入商品名称文本框时,按下Enter键,选择要销售的商品。
按下Enter键,输入销售数量,按下Enter键。
之后单击“保存”按钮,提示销售成功或失败!
当销售的商品数量小于该商品的库存警报数量时,提示该商品已经到达销售警报位置,需要进货。
系统提供了按商品名称查询商品的详细信息,并且支持模糊查询。
其中品牌名称和供应商绑定到了下拉列表框中,以备客户选择。
实现退出功能的代码:
privatevoidtsb_Btn_Exit_Click(objectsender,EventArgse)
{
this.Close();
}
窗体加载:
privatevoidFrm_SellOut_Load(objectsender,EventArgse)
{
dgv_Store.AutoGenerateColumns=false;
cbb_Cards_Name.DisplayMember="Cardsname";
cbb_Cards_Name.ValueMember="Cardsid";
cbb_Cards_Name.DataSource=LoginInfo.GetCardsByCards_name("");
cbb_Priv_Name.DisplayMember="Priv_name";
cbb_Priv_Name.ValueMember="Priv_id";
cbb_Priv_Name.DataSource=LoginInfo.GetProvidersByPriv_name("");
}
这是连接数据库的代码:
privatestaticreadonlystringconStr=DBHelper.conStr;
这是商品信息集合:
Listlp=newList();
3.3.2销售退货
光标进入商品名称文本框时,按下Enter键后系统将弹出库存信息查询窗体,与此同时将该窗体上的修改、删除、取消和查询按钮设为隐藏,并显示所有的商品信息列表。
商品名称按键事件:
privatevoidtxt_Prot_Name_KeyDown(objectsender,KeyEventArgse)
{
try
{
if(e.KeyCode==Keys.Enter)
{
common.Prot_name=txt_Prot_Name.Text;
Frm_StoreQueryfs=newFrm_StoreQuery();
common.Prot_EnterAndOut=true;
fs.ShowDialog();
StoreRooms=common.s;
txt_Prot_Bigunit.Text=s.Prot_Bigunit;
txt_Prot_Name.Text=s.Prot_name;
txt_Prot_Rate.Text=s.Prot_rate.ToString();
txt_Prot_Retailpri