收藏 分销(赏)

超市会员购物系统.docx

上传人:pc****0 文档编号:8957614 上传时间:2025-03-09 格式:DOCX 页数:49 大小:1.49MB 下载积分:10 金币
下载 相关 举报
超市会员购物系统.docx_第1页
第1页 / 共49页
超市会员购物系统.docx_第2页
第2页 / 共49页


点击查看更多>>
资源描述
《数据库实用技术》课外实践报告 项 目 名 称: 超市会员购物系统 所 在 班 级: 级本信管班 小 组 成 员: 指 导 教 师: 起 止 时 间: 12月10日——12月30日 项目基本信息 项目名称 超市会员购物系统 项目简介 该系统可实现管理员对商品的信息进行增删改查的功能,也可修改其密码,管理员也可对会员进行管理工作。 对于会员,本系统可实现对商品的信息进行查询以及商品的购买,也可修改自己的密码。 小组成员 任务分工 xx负责数据库的创建及数据的录入。 xx负责系统设计和源代码编写。 xx负责系统调试、维护工作。 xx负责word、PPT制作。 一、 问题描述及分析 1.1 背景 从20世纪90年代后期特别是近几年,我国的超市产业飞速发展,其经营模式更为复杂,旧的管理体制已经无法适应超市的发展,这就迫切的需要引进新的管理技术。超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生。依靠现代化的计算机信息处理技术来管理超市,节省了大量的人力、物力,改善了员工的并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。网络购物也随之越来越运用广泛,本系统也借鉴了网络购物的一些功能。 1.2 数据需求 (1)会员的信息。 (2)商品的信息。 (3)管理员的信息。 (4)供货商信息。 1.3 事务需求 保证PREFERENTIAL表的商品号、商品名、价格于购物表的一致性,另外保证member表与购物表里会员号的一致性。保证会员信息和购物表信息的持久性。 1.4 安全性体现 在用户和管理员登录系统时,设置了权限,然后在数据库中创建了备份。对数据库中的数据进行了约束。 二、解决方案 ( 或数据库系统设计 ) 2.1 E-R 模型设计 订单 查看 管理员 管理 会员 购买 商品 修改 修改 密码 管理 会员号 密码 姓名 电话 地址 密码 账号 商品号 商品名 种类 原价 折扣 折扣后价 积分要求 会员号 商品号 商品名 价格 地址 电话 接收人姓名 时间 管理 供货商 供货商号 名称 联系人 电话 地址 信誉 供应 m n m n m n n m m n n m 2.2 数据字典 ADMINISTRATOR(管理员登录表) 字段名 数据类型 主键 是否为空 其它约束 账号 Varchar(10) 是 否 UNIQUE 密码 Varchar(20) 否 否 MEMBER(会员登录表) 字段名 数据类型 主键 是否为空 其它约束 用户名 Varchar(10) 是 否 UNIQUE 密码 Varchar(20) 否 否 姓名 Varchar(6) 否 否 电话 Varchar(11) 否 否 积分 Bigint 否 否 备注 nvarchar(50) 否 是 PREFERENTIAL(商品表) 字段名 数据类型 主键 是否为空 其它约束 商品号 Varchar(20) 是 否 Unique 商品名 Varchar(30) 否 否 种类 Varchar(10) 否 否 原价 Money 否 是 折扣 Float 否 否 折扣后价 Money 否 是 积分要求 Bigint 否 否 购物表 字段名 数据类型 主键 是否为空 其它约束 会员号 Varchar(10) 否 否 商品号 Varchar(20) 否 否 商品名 Varchar(30) 否 否 价格 Money 否 否 地址 Varchar(30) 否 是 电话 Varchar(11) 否 是 接收人电话 Varchar(10) 否 是 时间 Date 否 是 供货商表 字段名 数据类型 主键 是否为空 其它约束 供货商号 Varchar(10) 是 否 Unique 名称 Varchar(20) 否 否 联系人 Varchar(10) 否 否 电话 Varchar(11 否 是 地址 Varchar(20) 否 是 信誉 Varchar(10) 否 是 备注 Varchar(50) 否 是 进货表 字段名 数据类型 主键 是否为空 其它约束 供货商号 varchar(10) 是 否 UNIQUE 商品号 varchar(20) 否 否 商品名 varchar(30) 否 否 进货数量 Int 否 是 2.3系统数据流分析 自助查询系统 用户 用户 输入信息 输出信息 库文件 管理员 三、系统实现 3.1 开发环境 本系统开发是运用内存为2G,32位操作系统,处理器为Inter(R)Core(TM)i3-2310M CPUx2.10GHz.本系统采用T-SQL和Microsoft Visual C#2008语言,可应用于windows XP、Windows 7. 3.2 系统流程图 开始 登陆界面 管理员 管理员登录 登录成功 否 是 是 管理商品 查看订单 管理会员 结束 修改密码 会员登录 登录成功 查看商品 购买商品 是 管理供应商   3.3 系统功能模块及结构描述   现对系统各功能模块进行详细分解。 1. 系统登录模块:该模块用于管理员及用户的登录; 2. 管理员管理模块:管理员可以通过该模块对商品进行增删改查、会员信息的管理以及对会员订单的查询; 3. 会员查询模块:该模块可以为会员提供商品折扣信息; 4. 会员购买商品模块:用户可以通过该模块进行商品选购; 5. 修改密码模块:管理员及会员可以通过该模块修改密码; 6. 管理供应商模块:管理员可以通过此系统管理供应商。 7. 进货模块:管理员可以通过此模块按条件查询商品的剩余量,进行合理的进货。 超市会员购物系统 管理员管理 增加优惠商品 删除优惠商品 查看订单 会员管理 修改优惠商品 系统管理 登录系统 取消登录 会员管理 查看商品 购买物品 修改密码 修改密码 管理供应商 进货 功能模块图 3.4 系统调试 系统的测试的主要任务是发现并排除在分析、设计、编程各阶段中产生的各种类型的错误,以得到可使用的软件系统。 3.4.1 登录模块测试 使用本系统时,先从登录界面登录,根据登陆身份的不同,可以登录到达不同的界面,在商家界面的界面里有系统的功能模块及模块下的子模块,直接输入即可进入处理界面。 3.4.2 管理员管理模块测试 信息处理模块就是以添加、修改和删除信息的功能为主,在信息界面中的文本框中输入正确的信息,点击修改就可以把数据库中的信息更新,达到修改目的。点击删除按钮就可以把该条信息删除。点击添加就可以把新信息添加到数据库中。处理模块能让商家更快的修改优惠项的信息,大大减少了工作时间。 该模块还能进行会员管理,在信息界面对输入正确的信息就能对会员基本信息进行查看。在文本框中修改会员信息,点击修改就能达到修改的目的。 此外,点击查询订单选项能够进入到会员订单查询界面,点击查看按钮,用户订单的所有信息就能够清楚地看到,可以让管理员及时地看到用户订单。 3.4.3 会员查询模块测试 在会员查询设计界面里,直接点击查询全部信息选项即可看到所有折扣商品的信息,还可以分成不同方式的查询,按类别查询是对不同类型的商品进行查询;点击按折扣查询时,可以看到相同折扣的商品有哪些;点击按积分要求查询,可以清楚的看到各种折扣商品的折扣对象。为了方便用户的购买,在用户查询优惠项后可以直接进行商品的购买,方便买家的商品购买。 3.4.4 进货模块测试 在进货界面中,点击按库存查看商品余量,管理员可以查看各个有可能需要进货的商品,然后根据需要进行购买活动。 四、使用说明 本系统只适合管理员和会员两个身份的人使用,管理员输入账号、密码点击登录可进入管理员管理界面,增加商品时,管理员需要填入下面框内的信息然后点击增加商品按钮即可添加商品。删除商品时,管理员只需输入要删除商品的商品号即可。修改商品时,输入要修改商品的商品号,然后在修改它的其它项即可。点击刷新列表就可查询所有的商品。点击修改密码,即可进入管理员修改密码的界面,在修改密码时只需要输入帐号,然后输入两次修改后的密码,点击确认重置就可。在管理员管理界面点击管理会员按钮,即可进入管理会员界面。在管理会员界面有查看、添加、修改、退出按钮,产看按钮用于查看会员的信息,添加按钮用于添加新的会员,修改按钮用于修改会员的基本信息,这两个按钮的用法和增加商品、修改商品按钮的用法相似。在管理员管理界面,点击查看订单按钮,即可进入查看订单界面,其中的查看所有的按钮用于查看所有人的订单。若不想查看所有的订单,可按照时间、地址条件进行查询,当在地址框内输入地址,然后再点击查看,即可看到在此地址的所有订单,在时间框内输入时间,再点击查看,即可查看在此时间订货的信息。 会员输入会员号、密码点击登录可进入会员查询界面,在会员查询设计界面里,直接点击查询全部信息选项即可看到所有折扣商品的信息,还可以分成不同方式的查询,按类别查询是对不同类型的商品进行查询;点击按折扣查询时,可以看到相同折扣的商品有哪些;点击按积分要求查询,可以清楚的看到各种折扣商品的折扣对象。为了方便用户的购买,在用户查询优惠项后可以直接进行商品的购买,方便买家的商品购买。当在会员查询界面点击按钮购买商品时,即可进入购买物品界面,再次界面会员可以根据自己的需求,填入您所想要的商品的商品号,然后输入接收人地址,接收人电话、接收人姓名、日期然后点击添加,您所选得商品就可加入到您的购物表中,不需要输入商品名和价格,系统会根据您的商品号,自动的给您匹配好,如果您要选多种商品时,接收人地址,接收人电话、接收人姓名、日期只需要在选第一个商品时输入即可。选完您所要的物品,点击下面的查看按钮,就可查看您的订单,另外注明,在您选物品时,最好点击一下清除按钮,此按钮的功能是清除您原来选的商品,也可用于取消订单。点击总计按钮,可查看您所选物品的总价格。在会员查看界面点击修改密码,即可进入会员修改密码的界面,在修改密码时只需要输入会员号,然后输入两次修改后的密码,点击确认重置就可。点击返回登录界面即可进入最先的登录界面。 在管理进货商界面,点击查看供货商信息就可查询所有的供货商信息,在增加供货商时,需要先输入下面框内的信息,然后点击增加供货商即可。删除供货商时,只需要输入供货商号即可。修改时,除了供货商号不能修改,其余的都可先在框内填入信息,然后点击修改供应商即可修改。在此界面点击返回上一界面即可进入到管理员管理界面1.点击退出即可退出系统。 在进货界面中,点击按库存查看商品余量,管理员可以查看各个有可能需要进货的商品,然后根据需要进行购买活动。 五、问题及解决方法 问题一:在登陆时密码总是显示出来? 解决方法:修改了txtPwd的PasswordChar属性。如图:。 结果:当管理员或者会员输入密码时,密码不会显示出来而是以*的形式显示,保证了密码的安全性。登陆时如下图: 问题二:当在写代码是,数据库与c#连接语句要重复写好多次? 解决方法:新增了一个DBHelper类,类中写了打开数据库,连接数据库,关闭数据库的所有语句。代码如下: namespace 超市会员购物系统1 { class DBHelper { private string connStr = null; private SqlConnection connection; public DBHelper(string connStr) { this.connStr = connStr; connection = new SqlConnection(connStr); } public void DBopen() { try { if (connection.State == ConnectionState.Broken)//如果连接对象的状态时Broken,那么必须先关闭连接,才能去打开,直接打开会出现异常 { connection.Close(); } connection.Open(); } catch (Exception ex) { throw ex; } } public void DBClose() { this.connection.Close(); } public string SplExecuteScalar(string sql) { try { this.DBopen(); SqlCommand cmd = new SqlCommand(sql, this.connection); return cmd.ExecuteScalar().ToString(); } catch (Exception ex) { throw ex; } finally { this.DBClose(); } } public int SqlExecuteNonQuery(string sql) { try { this.DBopen(); SqlCommand cmd = new SqlCommand(sql, this.connection); return cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally { this.DBClose(); } } public DataSet GetDataSet(string sql) { try { this.DBopen(); DataSet ds = new DataSet();//创建dataset对象 SqlDataAdapter sda = new SqlDataAdapter(sql, this.connection);//创建Ssql适配器 sda.Fill(ds); return ds; } catch (Exception ex) { throw ex; } finally { this.DBClose(); } } } 结果:在每次要连接数据库时只需要写一句代码就可以,节约了大量的时间,也是代码看着简洁、易懂。 代码是: DBHelper db = new DBHelper("server=.;initialcatalog=MARKET;integrated security=true"); 问题三:在管理会员界面,当管理员增加新的会员的时候,会有密码的设置,如果密码是管理员随便输入的,这样会不好管理会员的信息? 解决方法:当添加新的会员时,我们默认了会员的密码是123,积分是0,因此在添加时就不用输入会员的密码和积分。默认会员密码和积分的代码是: textBox2.Text = "123"; textBox4.Text = "0";注:textBox2是密码框,textBox4是积分框。 结果:避免了管理员一次次的输入密码和积分,节省了时间,使工作效率得到了提高。输入 时如下图: 然后点击添加按钮即可。 问题四:在修改密码时,如果在让用户重新输入一遍帐号和原密码,好像是不需要的,因为只有自己登陆后才能修改自己的密码,因此原密码是不需要确认的。 解决方法:在修改密码界面只设计了三个输入框,用户名、新密码、确认密码,而且用户名是通过窗体传值来设计的,而且设计时用户名框内传来的值是不能修改的,这样就避免了会有人修改别人的密码。窗体传值的代码如下: 上一界面的代码:string txtValue1 = this.label8.Text; 修改密码 a = new 修改密码(txtValue1); a.Show(); this.label8.Text = a.returnValue; 在修改密码界面的代码:public string returnValue; public 修改密码(string txtValue1) { InitializeComponent(); this.textBox1.Text = txtValue1; } 结果:用户只需要填写新密码和确认密码两个框内的值就可。 问题五:如何体现sql语言的灵活性、完整性和安全性? 解决方法:创建了两个简单的存储过程。代码如下: create procedure cxgwb as select * from 购物表 create procedure cxsp as select * from PREFERENTIAL 并且在管理员查看商品时调用了存储过程:string sql = "execute cxsp"; 问题六:如何让会员查询方便? 解决方法:在会员查询界面设计了可以按照不同的方面进行查询,有可以查看所有的商品,有按照类别进行查看,有按照积分进行查看,有按照折扣进行查看。 结果:大大节省了会员的时间,使他们可以按照自己的需求按照不同的方面进行查看自己需要的商品。 问题七:如何使会员在购买商品时方便? 解决方法:我们设计的是只要用户输入商品号,然后商品名和价格就不用自己输入了,在这里我们是创建了个视图而且在输入接收人姓名、接收人电话、接收人地址、日期给了会员只需要在第一次购买的时候输入即可。创建视图的代码是: create view dc_sp as select 商品号,商品名,折扣后价 from PREFERENTIAL 在c#用时的代码是:sql = "select 商品名,折扣后价 from dc_sp where 商品号='" + textBox1.Text.Trim() + "'"; DataTable dt = db.GetDataSet(sql).Tables[0]; textBox2.Text = dt.Rows[0][0].ToString(); textBox3.Text = dt.Rows[0][1].ToString(); (注:textBox2是商品名书写框,textBox3是价格的书写框) 问题八:计算总计时怎么使会员只计算这次的点餐? 解决方法:在购物界面增加了一个清除界面,用于用户清除自己原来的顶的物品,并且给与提醒。清除的代码: string sql = "delete from 购物表 where 会员号='" + textBox4.Text + "'"; 问题九:如何使购物表的商品号改变时preferential的商品号也改变? 解决方法:定义了一个触发器,触发器代码是: create trigger preferential_update on preferential after update as begin declare xold_sph varchar(10),xnew_sph varchar(10) select xold_sph=商品号 from deleted select xnew_sph=商品号 from inserted update 购物表 set 商品号=xnew_sph where 商品号=xold_sph end 问题十:当会员购买完商品后,如何是preferential表的库存量也减少? 解决方法:在sql中定义了个当购物表的份数增加后,preferential表的库存量相应的减少。代码是: use MARKET go create trigger gwb_pre on 购物表 after insert as begin declare xsph varchar(20),xspm varchar(30) declare xfs int select xsph=商品号,xspm=商品名 from inserted select xfs=份数 from 购物表 where 商品号=xsph update PREFERENTIAL set 库存=(库存-xfs) where 商品号=xsph print'修改成功' end 问题十一:根据老师的建议,我们又增加了进货界面,管理供货商界面;在数据库中建了供货商表和进货表。 进货界面图: 在此界面为了使管理员更好的进行进货活动,我们增加了按照库存查看商品余量的按钮,管理员可以按照余量进行进货。而且当输入进货数量是有在sql中添加了个触发器,使preferential表中相应的库存也增加:代码如下: use MARKET go create trigger jhb_pre on 进货表 after insert as begin declare xsph varchar(20),xspm varchar(30) declare xjhsl int select xsph=商品号,xspm=商品名 from inserted select xjhsl=进货数量 from 进货表 where 商品号=xsph update PREFERENTIAL set 库存=(库存+xjhsl) where 商品号=xsph print'修改成功' end 管理供货商界面图: 进货表设计: 供货商表设计: 。 六、课外实践总结 回顾该系统从选题,到设计、编码实现、测试等,论文的撰写,这系列连贯的过程,感想颇多,收获也很多。大致的总结几点,如下: 1.设计开发一个软件,首先要了解所涉及到行业的现状,一定要想办法进行行业调研,从不同途径获取该行业的专业知识。合理安排系统设计开发时间,进行实际开发会发现需求分析与系统设计占主要的时间,如果前面的工作做好了,编码实现占用的时间很短。所以我们要借助软件工程的思想---对软件开发过程进行控制。 2. 在开发一个系统时,前期的分析准备工作非常的重要。对于系统的需求要明确,这样才能做到有的放矢。特别是对于系统中数据的存储和重要算法的设计,设计的不好会出现大量的冗余,不仅浪费存储空间,还影响查询效率。 3.在设计的初期,对一个功能模块的设计,要想出两种或两种以上方案,这样可以进行比较,从而获得更佳的设计方案,设计开发过程中一定要吸取经验教训,避免返工。尤其是一些重要算法或功能。在对具体实现功能模块进行编程时,要养成良好的加注释的习惯,这样的话不仅能理清思路,而且可以为以后的调试程序带来很大的方便。 4. 懂得充分利用网络资源。 5.后期的晚上也是很重要的,在每个系统都存在着些许缺点,但重要的是我们能发现并对它们进行改进,这样才能一步步地编写一个较完整的系统 七、源代码 7.1 sql server 2008 的源代码: --多表查询以及模糊查询 select 购物表.会员号,购物表.商品号,购物表.商品名,PREFERENTIAL.种类 from PREFERENTIAL,MEMBER,购物表 where 购物表.会员号=MEMBER.会员号 and 购物表.商品号 like '00一八%' go --插入会员信息 insert into MEMBER values('120123','123','张安','1235434','0',null) go --修改会员信息 update MEMBER set 积分='100' where 会员号='120123' go --删除会员信息 delete from member where 会员号='120123' go --从表PREFERENTIAL查询商品号,商品名,折扣后价(视图) create view dc_sp as select 商品号,商品名,折扣后价 from PREFERENTIAL --存储过程 create procedure cxgwb as select * from 购物表 --存储过程 create procedure cxsp as select * from PREFERENTIAL -- 备份 use master go exec sp_addumpdevice'disk','sql','f:\sql.bak' backup database market to sql with noinit --修改preferential表的商品名购物表的商品名也会改变触发器 create trigger preferential_update on preferential after update as begin declare xold_spm varchar(10),xnew_spm varchar(10) select xold_spm=商品名 from deleted select xnew_spm=商品名 from inserted update 购物表 set 商品名=xnew_spm where 商品名=xold_spm end --创建触发器,当向购物表中插入一个商品时,将PREFERENTIAL中该商品的分数表相应的减少 use MARKET go create trigger gwb_pre on 购物表 after insert as begin declare xsph varchar(20),xspm varchar(30) declare xfs int select xsph=商品号,xspm=商品名 from inserted select xfs=份数 from 购物表 where 商品号=xsph update PREFERENTIAL set 库存=(库存-xfs) where 商品号=xsph print'修改成功' end --创建触发器,当向进货表中插入一个商品时,将PREFERENTIAL中该商品的分数表相应的增加 use MARKET go create trigger jhb_pre on 进货表 after insert as begin declare xsph varchar(20),xspm varchar(30) declare xjhsl int select xsph=商品号,xspm=商品名 from inserted select xjhsl=进货数量 from 进货表 where 商品号=xsph update PREFERENTIAL set 库存=(库存+xjhsl) where 商品号=xsph print'修改成功' end 7.2 Microsoft Visual Studio 2008 C#源代码: 登录界面图: 登录界面源代码: public partial class enter : Form { DBHelper db = new DBHelper("server=.;initial catalog=MARKET;integrated security=true"); public enter() { InitializeComponent(); } private void btnLogin_Click(object sender, EventArgs e) { if (radAdministrator.Checked == true) { if (txtID.Text == "" || txtPwd.Text == "") { MessageBox.Show("账号、密码不能为空"); } else { string userName = txtID.Text.Trim(); string passWord = txtPwd.Text.Trim(); try { string sql = "Select * From ADMINISTRATOR Where 账号='" + userName + "' and 密码='" + passWord + "'"; int count = int.Parse(db.SplExecuteScalar(sql)); if (count > 0) { string txtValue = this.txtID.Text; 管理员界面 f7 = new 管理员界面(txtValue); f7.Show(); this.txtID.Text = f7.returnValue; } else { MessageBox.Show("用户名或密码有误,请重试"); } } catch (Exception ex) { MessageBox.Show("出现错误:" + ex.Message); } } } if (radMember.Checked == true) { if (txtID.Text == "" || txtPwd.Text == "")
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服