《《数据库程序设计》实验指导书.doc》由会员分享,可在线阅读,更多相关《《数据库程序设计》实验指导书.doc(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验十五 进销存:进货记录一、实验要求按照给出的操作步骤、代码及要求,编制进销存系统中的进货记录程序。程序包括:商品、商品类别、供应商信息维护,进货记录及库存信息处理,进货信息浏览及作废处理等功能。二、建立数据库表在“进销存数据库.mdb”中建立如下表:A商品类别表字段名称数据类型字段大小/格式其它类别文本32主键;必填;不为空序号数字整型状态文本16默认值:正常;有效性规则:正常 or 停用A商品表字段名称数据类型字段大小/格式其它商品编码文本32主键;必填;不为空类别文本32名称文本80上市日期日期/时间短日期库存量数字长整型进货价格货币固定备注文本255状态文本16默认值:正常;有效性规
2、则:正常 or 退市A供应商表字段名称数据类型字段大小/格式其它供应商文本32主键;必填;不为空序号数字整型联系人文本16联系电话文本16状态文本16默认值:正常;有效性规则:正常 or 停用A进货表字段名称数据类型字段大小/格式其它进货单号文本32主键;必填;不为空进货日期日期/时间短日期供应商文本32经办人文本16备注文本255状态文本16默认值:预写;有效性规则:预写 or 正常 or 作废作废原因文本80作废经办人文本16A进货明细表字段名称数据类型字段大小/格式其它进货单号文本32联合主键;必填;不为空商品编码文本32联合主键;必填;不为空进货数量数字长整型进货价格货币固定A退货表字
3、段名称数据类型字段大小/格式其它退货单号文本32主键;必填;不为空退货日期日期/时间短日期供应商文本32经办人文本16商品编码文本32退货数量数字长整型退货价格货币固定备注文本255状态文本16默认值:预写;有效性规则:预写 or 正常 or 作废作废原因文本80作废经办人文本16建立表之间的关系如下,各关系均勾选“实施参照完整性”、“级联修改相关字段”,不勾选“级联删除相关记录”。A商品类别表.类别A商品表.类别A商品表.商品编码A进货明细表.商品编码A商品表.商品编码A退货表.商品编码A供应商表.供应商A进货表. 供应商A供应商表.供应商A退货表. 供应商A进货表.进货单号A进货明细表.进
4、货单号用户表.用户名A进货表.经办人用户表.用户名A进货表.作废经办人用户表.用户名A退货表.经办人用户表.用户名A退货表.作废经办人三、建立/设置项目1. 建立项目运行VS2010;执行菜单项“文件新建项目”;在“新建项目”窗体中,选中模版“Visual C#Windows窗体应用程序”;点击“新建项目”窗体右下部的“浏览”按钮,将“位置”设置为本人文件夹;将“名称”文本框中的内容输入为“进货记录”;点击“确定”按钮。2. 主窗体设置将“From1.cs”改为“FormMain.cs”;将主窗体的“Text”属性值改为“进货记录(本人姓名)”;将主窗体的“Font”属性值设为“宋体,5号”;
5、将主窗体的“StartPosition”设为“CenterScreen”。3. 设置项目输出目录(很重要)在解决方案资源管理器中双击“Properties”;在编辑区域的“进货记录”页面,点击“生成”子页面;在“输出路径(O)”中,输入“.执行程序”;关闭“进货记录”页面。4. 设置对“公用类库”的引用执行VS菜单项:项目添加引用;在“添加引用”对话框中,切换到“浏览”页面;浏览到“.执行程序公用类库.dll”,双击该文件;在用到公用类库的cs文件中均添加引用语句:using 公用类库;四、编写主窗体代码1. 在主窗体中添加控件在主窗体中添加TreeView控件如下:将TreeView控件的“
6、(Name)”改为“treeViewMenu”,将“Dock”属性改为“Left”;将“ItemHeight”改为28;在控件上点右键,执行“编辑节点.”,将内容添加为如上图所示,将各节点的“Name”及“Text”设为相应的文本。2. 产生事件方法双击主窗体,产生Load事件方法;双击TreeView控件,产生AfterSelect事件方法;选中主窗体,将属性窗体转换到事件页面,找到“SizeChanged”事件,双击,产生主窗体的SizeChanged事件方法;找到“Move”事件,双击,产生主窗体的Move事件方法。3. 编写树状菜单代码在“FormMain.cs”文件中编写如下代码:u
7、sing System.Windows.Forms;using 公用类库;namespace 进货记录 public partial class FormMain : Form public FormMain() InitializeComponent(); treeViewMenu.ExpandAll(); /展开树状菜单 private void FormMain_Load(object sender, EventArgs e) Class安全.Init(); private void treeViewMenu_AfterSelect(object sender, TreeViewEven
8、tArgs e) Form curForm = null; /当前被打开的子窗体 int formWidth, formHeight; /当前窗体的原始宽度、高度 void OpenForm(Form fb) /打开给定的窗体fb if (curForm != null) /如果已打开有窗体 curForm.Hide(); /隐藏该窗体 curForm = fb; /将给定的窗体设为当前窗体 curForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; /将窗体设为无边框 AddOwnedForm(curForm);
9、/使子窗体属于主窗体,保证其总是显示在主窗体之上(不会被覆盖) formWidth = curForm.Width; /保存子窗体的原始宽度 formHeight = curForm.Height; /保存子窗体的原始高度 curForm.Show(); /打开或显示子窗体 SetFormLocation(); /设置子窗体的位置和尺寸 curForm.Focus(); void SetFormLocation() /在主窗体上设置子窗体的位置和尺寸 if (curForm = null) /如果没有已打开的子窗体 return; /返回 Rectangle cr = this.ClientR
10、ectangle; /获取主窗体客户区的尺寸 cr.Width -= treeViewMenu.Width; /宽度减去TreeView的宽度 Point lt = new Point(); /存放子窗体左上角位置 /计算子窗体左侧位置(相对于主窗体客户区) lt.X = (cr.Width - formWidth) / 2; if (lt.X 0) curForm.Width = cr.Width; lt.X = 0; else curForm.Width = formWidth; lt.X += treeViewMenu.Width; /计算子窗体上侧位置 lt.Y = (cr.Heigh
11、t - formHeight) / 2; if (lt.Y 0) curForm.Height = cr.Height; lt.Y = 0; else curForm.Height = formHeight; lt = PointToScreen(lt); /将客户区位置转换为屏幕位置 curForm.Top = lt.Y; /设置子窗体左侧位置 curForm.Left = lt.X; /设置子窗体上侧位置 private void FormMain_SizeChanged(object sender, EventArgs e) SetFormLocation(); /在主窗体尺寸改变时,重
12、设子窗体尺寸和位置 private void FormMain_Move(object sender, EventArgs e) SetFormLocation(); /在主窗体移动时,重设子窗体尺寸和位置 生成、运行程序,排除错误。4. 添加“退出”、“修改密码”功能在treeViewMenu_AfterSelect()事件方法中添加代码,实现退出程序、修改密码的功能。 private void treeViewMenu_AfterSelect(object sender, TreeViewEventArgs e) if (e.Node.Text = 退出) Application.Exit
13、(); else if (e.Node.Text = 修改密码) Form修改密码 frm = new Form修改密码(); frm.ShowDialog(); frm.Dispose(); treeViewMenu.SelectedNode = treeViewMenu.Nodes系统; /将被选中的节点设为“系统” 五、实现基础信息维护功能(一)商品类别维护1. 建立“商品类别”窗体点击VS菜单项“项目添加Windows窗体”;在“添加新项”窗体中,选中“Windows窗体”,将“名称”输入为“Form商品类别”,点击“添加”按钮;将窗体的“Text”输入为“商品类别”;将窗体的“Fon
14、t”设置为宋体五号字。2. 添加窗体控件在窗体中添加控件如下:DataGridView控件“(Name)”取为“dataGridView商品类别”;将BackgroundColor设为白色;勾选“启用添加”、“启用编辑”、“启用删除”、“启用列重新排序”;添加图中所示的三列,适当调整各列的宽度;将“状态”列的“ColumnType”设为“DataGridViewComboBoxColumn”,“DisplayStyle”设为“ComboBox”,在Items中输入“正常”、“停用”两行。建立“保存”按钮。用Label控件左下部的一行文字。3. 添加事件方法编写代码添加窗体的Load事件方法;添
15、加保存按钮的Click事件方法。添加如下代码:using System.Windows.Forms;using System.Data.OleDb;using 公用类库;namespace 进货记录 public partial class Form商品类别 : Form public Form商品类别() InitializeComponent(); private void Form商品类别_Load(object sender, EventArgs e) try OleDbConnection conn = new OleDbConnection(Class安全.StrDBConn);
16、OleDbCommand cmd = new OleDbCommand(); /定义数据库命令对象 cmd.Connection = conn; /将连接对象关联到命令对象 cmd.CommandText = select * From A商品类别表 ORDER BY 序号; DataTable dt = new DataTable(); /定义内存中的数据库表 OleDbDataAdapter da = new OleDbDataAdapter(cmd); /定义桥接器并关联到命令对象 da.Fill(dt); /通过桥接器将SQL语句的读入内容填入内存表 /对已定义列的数据网格,将各列对应
17、到所读入数据的各字段 dataGridView商品类别.Columns类别.DataPropertyName = 类别; dataGridView商品类别.Columns序号.DataPropertyName = 序号; dataGridView商品类别.Columns状态.DataPropertyName = 状态; dataGridView商品类别.DataSource = dt; /将内存表关联到数据网格 catch (Exception ex) MessageBox.Show(读入商品类别表错误rn + ex.ToString();/显示异常信息 private void button
18、保存_Click(object sender, EventArgs e) /注意,该段程序用于将数据网格中增、删、改的数据更新到数据库 try OleDbConnection conn = new OleDbConnection(Class安全.StrDBConn); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; cmd.CommandText = select * From A商品类别表 ORDER BY 序号; /提供读入数据时的SQL语句,以自动生成更新语句 OleDbDataAdapter da = new
19、OleDbDataAdapter(cmd); OleDbCommandBuilder cb = new OleDbCommandBuilder(da); /建立命令创建器对象,以自动生成更新数据库的语句 DataTable dt = (DataTable)dataGridView商品类别.DataSource; /将内存表连接到数据网格 da.Update(dt); /将内存表中的数据更新到数据库 catch (Exception ex) /操作出现异常 MessageBox.Show(更新商品类别异常rn + ex.Message); 4. 调用“商品类别”窗体在“FormMain.cs”文
20、件中添加如下代码。 private void FormMain_Load(object sender, EventArgs e) Class安全.Init(); Form frm商品类别 = null; private void treeViewMenu_AfterSelect(object sender, TreeViewEventArgs e) if (e.Node.Text = 退出) Close(); else if (e.Node.Text = 修改密码) Form修改密码 frm = new Form修改密码(); frm.ShowDialog(); frm.Dispose();
21、treeViewMenu.SelectedNode = treeViewMenu.Nodes系统; /将被选中的节点设为“系统” else if (e.Node.Text = 商品类别) if (frm商品类别 = null) frm商品类别 = new Form商品类别(); OpenForm(frm商品类别); 生成并运行程序,修改错误。对商品类别维护功能进行测试。(二)商品信息维护1. 建立“商品信息维护”窗体点击VS菜单项“项目添加Windows窗体”;在“添加新项”窗体中,选中“Windows窗体”,将“名称”输入为“Form商品”,点击“添加”按钮;将窗体的“Text”输入为“商品
22、信息维护”;将窗体的“Font”设置为宋体五号字。2. 添加窗体控件在窗体中添加控件如下:DataGridView控件“(Name)”取为“dataGridView商品”;将BackgroundColor设为白色;勾选“启用添加”、“启用编辑”、“启用删除”、“启用列重新排序”;添加图中所示的六列,适当调整各列的宽度;将“类别”列的“ColumnType”设为“DataGridViewComboBoxColumn”,“DisplayStyle”设为“ComboBox”;将“状态”列的“ColumnType”设为“DataGridViewComboBoxColumn”,“DisplayStyle
23、”设为“ComboBox”。建立“保存”按钮。用Label控件左下部的一行文字。3. 添加事件方法编写代码添加窗体的Load事件方法;添加保存按钮的Click事件方法;添加数据网格的DataError事件方法。添加如下代码:using System.Windows.Forms;using System.Data.OleDb;using 公用类库;namespace 进货记录 public partial class Form商品 : Form public Form商品() InitializeComponent(); private void Form商品_Load(object sende
24、r, EventArgs e) try OleDbConnection conn = new OleDbConnection(Class安全.StrDBConn); OleDbCommand cmd = new OleDbCommand(); /定义数据库命令对象 cmd.Connection = conn; /将连接对象关联到命令对象 cmd.CommandText = select 商品编码,类别,名称,上市日期,备注,状态 From A商品表 ORDER BY 商品编码; DataTable dt = new DataTable(); /定义内存中的数据库表 OleDbDataAdapt
25、er da = new OleDbDataAdapter(cmd); /定义桥接器并关联到命令对象 da.Fill(dt); /通过桥接器将SQL语句的读入内容填入内存表 /将数据网格的列关联到内存表的字段 dataGridView商品.Columns商品编码.DataPropertyName = 商品编码; dataGridView商品.Columns类别.DataPropertyName = 类别; dataGridView商品.Columns名称.DataPropertyName = 名称; dataGridView商品.Columns上市日期.DataPropertyName = 上市
26、日期; dataGridView商品.Columns状态.DataPropertyName = 状态; dataGridView商品.Columns备注.DataPropertyName = 备注; dataGridView商品.DataSource = dt; /将内存表关联到数据网格 /设定状态选择框中的内容 (DataGridViewComboBoxColumn)dataGridView商品.Columns状态).Items.Add(正常); (DataGridViewComboBoxColumn)dataGridView商品.Columns状态).Items.Add(退市); /将类别
27、选择框中的内容绑定到“A商品类别表” cmd.CommandText = select 类别,序号 From A商品类别表 Where 状态=正常 ORDER BY 序号; DataTable dt1 = new DataTable(); /定义内存中的数据库表 da.Fill(dt1); /通过桥接器将SQL语句的读入内容填入内存表 (DataGridViewComboBoxColumn)dataGridView商品.Columns类别).DataSource = dt1; (DataGridViewComboBoxColumn)dataGridView商品.Columns类别).Value
28、Member = 类别; (DataGridViewComboBoxColumn)dataGridView商品.Columns类别).DisplayMember = 类别; catch (Exception ex) MessageBox.Show(读入商品表错误rn + ex.ToString();/显示异常信息 private void button保存_Click(object sender, EventArgs e) try OleDbConnection conn = new OleDbConnection(Class安全.StrDBConn); OleDbCommand cmd =
29、new OleDbCommand(); cmd.Connection = conn; cmd.CommandText = select 商品编码,类别,名称,上市日期,备注,状态 From A商品表 ORDER BY 商品编码; /提供读入数据时的SQL语句,以自动生成更新语句 OleDbDataAdapter da = new OleDbDataAdapter(cmd); OleDbCommandBuilder cb = new OleDbCommandBuilder(da); /建立命令创建器对象,以自动生成更新数据库的语句 DataTable dt = (DataTable)dataGr
30、idView商品.DataSource; /将内存表连接到数据网格 da.Update(dt); /将内存表中的数据更新到数据库 catch (Exception ex) /操作出现异常 MessageBox.Show(更新商品表异常rn + ex.Message); private void dataGridView商品_DataError(object sender, DataGridViewDataErrorEventArgs e) 4. 调用“商品信息维护”窗体在“FormMain.cs”文件中添加如下代码。 Form frm商品类别 = null; Form frm商品 = null
31、; private void treeViewMenu_AfterSelect(object sender, TreeViewEventArgs e) if (e.Node.Text = 退出) Close(); else if (e.Node.Text = 修改密码) Form修改密码 frm = new Form修改密码(); frm.ShowDialog(); frm.Dispose(); treeViewMenu.SelectedNode = treeViewMenu.Nodes系统; /将被选中的节点设为“系统” else if (e.Node.Text = 商品类别) if (fr
32、m商品类别 = null) frm商品类别 = new Form商品类别(); OpenForm(frm商品类别); else if (e.Node.Text = 商品) if (frm商品 = null) frm商品 = new Form商品(); OpenForm(frm商品); 生成并运行程序,修改错误。对商品信息维护功能进行测试。(三)供应商信息维护自己完成。(四)建立商品数据自己构想一个商品经营项目,需为实物型计件商品,可以是如:化妆品、日用品、文具、某类食品、电脑、手机、某类配件等。对所经营商品至少定义3种类别,输入到系统中。输入至少3条模拟的供应商数据。输入至少8种商品的数据,商
33、品编码自行设定,取46位;商品名称必须是实际名称,不能随意取名,商品的其它属性可虚拟。六、实现“进货录入”功能实现录入进货单功能。进货单分为进货整体情况和进货明细两部分内容,需写到不同的表中。在将进货数据写入数据库的同时,要更新相应商品的库存量及进货价格。(一)实现“进货录入”窗体的基本部分1. 建立“进货录入”窗体点击VS菜单项“项目添加Windows窗体”;在“添加新项”窗体中,选中“Windows窗体”,将“名称”输入为“Form进货录入”,点击“添加”按钮;将窗体的“Text”输入为“进货录入”;将窗体的“Font”设置为宋体五号字。2. 添加窗体控件在主窗体上添加控件如下:将各控件的
34、类型及(Name)属性值分别设为:textBox经办人(只读);dateTimePicker日期;comboBox供应商;textBox备注;dataGridView明细(取消“启用添加”、“启用删除”,保留“启用编辑”);button添加明细;button删除明细;button清除;button确认。3. 添加事件方法编写代码添加窗体的Load事件方法。编写如下代码:using System.Windows.Forms;using System.Data.OleDb;using 公用类库;using System.Collections;namespace 进货记录 public partial class Form进货录入 : Form public Form进货录入() InitializeComponent(); DataTable dt进货明细 = new DataTable();