超市会员购物系统(共49页).doc_第1页
超市会员购物系统(共49页).doc_第2页
超市会员购物系统(共49页).doc_第3页
超市会员购物系统(共49页).doc_第4页
超市会员购物系统(共49页).doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据库实用技术课外实践报告项 目 名 称: 超市会员购物系统 所 在 班 级: 级本信管班 小 组 成 员: 指 导 教 师: 起 止 时 间: 12月10日12月30日 项目基本信息项目名称超市会员购物系统项目简介该系统可实现管理员对商品的信息进行增删改查的功能,也可修改其密码,管理员也可对会员进行管理工作。对于会员,本系统可实现对商品的信息进行查询以及商品的购买,也可修改自己的密码。小组成员任务分工xx负责数据库的创建及数据的录入。xx负责系统设计和源代码编写。xx负责系统调试、维护工作。xx负责word、PPT制作。一、 问题描述及分析1.1 背景从20世纪90年代后期特别是近几年,我

2、国的超市产业飞速发展,其经营模式更为复杂,旧的管理体制已经无法适应超市的发展,这就迫切的需要引进新的管理技术。超市的数据和业务越来越庞大,而计算机就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生。依靠现代化的计算机信息处理技术来管理超市,节省了大量的人力、物力,改善了员工的并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。网络购物也随之越来越运用广泛,本系统也借鉴了网络购物的一些功能。1.2 数据需求 (1)会员的信息。(2)商品的信息。(3)管理员的信息。(4)供货商信息。1.

3、3 事务需求 保证PREFERENTIAL表的商品号、商品名、价格于购物表的一致性,另外保证member表与购物表里会员号的一致性。保证会员信息和购物表信息的持久性。1.4 安全性体现在用户和管理员登录系统时,设置了权限,然后在数据库中创建了备份。对数据库中的数据进行了约束。二、解决方案 ( 或数据库系统设计 ) 2.1 E-R 模型设计订单查看管理员 管理会员购买商品 修改 修改密码 管理会员号密码姓名电话地址密码账号商品号商品名种类原价折扣折扣后价积分要求会员号商品号商品名价格地址电话接收人姓名时间 管理供货商供货商号名称联系人电话地址信誉供应mnmnmnnmmnnm2.2 数据字典 AD

4、MINISTRATOR(管理员登录表)字段名数据类型主键是否为空其它约束账号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否否折

5、扣后价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)否是进货表字段名数据类型主

6、键是否为空其它约束供货商号varchar(10)是否UNIQUE商品号varchar(20)否否商品名varchar(30)否否进货数量Int否是2.3系统数据流分析自助查询系统用户用户输入信息输出信息库文件管理员三、系统实现 3.1 开发环境 本系统开发是运用内存为2G,32位操作系统,处理器为Inter(R)Core(TM)i3-2310M CPU2.10GHz.本系统采用T-SQL和Microsoft Visual C#2008语言,可应用于windows XP、Windows 7.3.2 系统流程图 开始登陆界面管理员管理员登录登录成功否是是管理商品查看订单管理会员结束修改密码会员登录

7、登录成功查看商品购买商品是管理供应商  3.3 系统功能模块及结构描述   现对系统各功能模块进行详细分解。1. 系统登录模块:该模块用于管理员及用户的登录;2. 管理员管理模块:管理员可以通过该模块对商品进行增删改查、会员信息的管理以及对会员订单的查询;3. 会员查询模块:该模块可以为会员提供商品折扣信息;4. 会员购买商品模块:用户可以通过该模块进行商品选购;5. 修改密码模块:管理员及会员可以通过该模块修改密码;6. 管理供应商模块:管理员可以通过此系统管理供应商。7. 进货模块:管理员可以通过此模块按条件查询商品的剩余量,进行合理的进货。超市会员购物系统管理员管理增

8、加优惠商品删除优惠商品查看订单会员管理修改优惠商品系统管理登录系统取消登录会员管理查看商品购买物品修改密码修改密码管理供应商进货 功能模块图3.4 系统调试 系统的测试的主要任务是发现并排除在分析、设计、编程各阶段中产生的各种类型的错误,以得到可使用的软件系统。3.4.1 登录模块测试使用本系统时,先从登录界面登录,根据登陆身份的不同,可以登录到达不同的界面,在商家界面的界面里有系统的功能模块及模块下的子模块,直接输入即可进入处理界面。3.4.2 管理员管理模块测试信息处理模块就是以添加、修改和删除信息的功能为主,在信息界面中的文本框中输入正确的信息,点击修改就可以把数据库中的信息更新,达到修

9、改目的。点击删除按钮就可以把该条信息删除。点击添加就可以把新信息添加到数据库中。处理模块能让商家更快的修改优惠项的信息,大大减少了工作时间。该模块还能进行会员管理,在信息界面对输入正确的信息就能对会员基本信息进行查看。在文本框中修改会员信息,点击修改就能达到修改的目的。此外,点击查询订单选项能够进入到会员订单查询界面,点击查看按钮,用户订单的所有信息就能够清楚地看到,可以让管理员及时地看到用户订单。3.4.3 会员查询模块测试在会员查询设计界面里,直接点击查询全部信息选项即可看到所有折扣商品的信息,还可以分成不同方式的查询,按类别查询是对不同类型的商品进行查询;点击按折扣查询时,可以看到相同折

10、扣的商品有哪些;点击按积分要求查询,可以清楚的看到各种折扣商品的折扣对象。为了方便用户的购买,在用户查询优惠项后可以直接进行商品的购买,方便买家的商品购买。 进货模块测试 在进货界面中,点击按库存查看商品余量,管理员可以查看各个有可能需要进货的商品,然后根据需要进行购买活动。四、使用说明本系统只适合管理员和会员两个身份的人使用,管理员输入账号、密码点击登录可进入管理员管理界面,增加商品时,管理员需要填入下面框内的信息然后点击增加商品按钮即可添加商品。删除商品时,管理员只需输入要删除商品的商品号即可。修改商品时,输入要修改商品的商品号,然后在修改它的其它项即可。点击刷新列表就可查询所有的商品。点

11、击修改密码,即可进入管理员修改密码的界面,在修改密码时只需要输入帐号,然后输入两次修改后的密码,点击确认重置就可。在管理员管理界面点击管理会员按钮,即可进入管理会员界面。在管理会员界面有查看、添加、修改、退出按钮,产看按钮用于查看会员的信息,添加按钮用于添加新的会员,修改按钮用于修改会员的基本信息,这两个按钮的用法和增加商品、修改商品按钮的用法相似。在管理员管理界面,点击查看订单按钮,即可进入查看订单界面,其中的查看所有的按钮用于查看所有人的订单。若不想查看所有的订单,可按照时间、地址条件进行查询,当在地址框内输入地址,然后再点击查看,即可看到在此地址的所有订单,在时间框内输入时间,再点击查看

12、,即可查看在此时间订货的信息。会员输入会员号、密码点击登录可进入会员查询界面,在会员查询设计界面里,直接点击查询全部信息选项即可看到所有折扣商品的信息,还可以分成不同方式的查询,按类别查询是对不同类型的商品进行查询;点击按折扣查询时,可以看到相同折扣的商品有哪些;点击按积分要求查询,可以清楚的看到各种折扣商品的折扣对象。为了方便用户的购买,在用户查询优惠项后可以直接进行商品的购买,方便买家的商品购买。当在会员查询界面点击按钮购买商品时,即可进入购买物品界面,再次界面会员可以根据自己的需求,填入您所想要的商品的商品号,然后输入接收人地址,接收人电话、接收人姓名、日期然后点击添加,您所选得商品就可

13、加入到您的购物表中,不需要输入商品名和价格,系统会根据您的商品号,自动的给您匹配好,如果您要选多种商品时,接收人地址,接收人电话、接收人姓名、日期只需要在选第一个商品时输入即可。选完您所要的物品,点击下面的查看按钮,就可查看您的订单,另外注明,在您选物品时,最好点击一下清除按钮,此按钮的功能是清除您原来选的商品,也可用于取消订单。点击总计按钮,可查看您所选物品的总价格。在会员查看界面点击修改密码,即可进入会员修改密码的界面,在修改密码时只需要输入会员号,然后输入两次修改后的密码,点击确认重置就可。点击返回登录界面即可进入最先的登录界面。在管理进货商界面,点击查看供货商信息就可查询所有的供货商信

14、息,在增加供货商时,需要先输入下面框内的信息,然后点击增加供货商即可。删除供货商时,只需要输入供货商号即可。修改时,除了供货商号不能修改,其余的都可先在框内填入信息,然后点击修改供应商即可修改。在此界面点击返回上一界面即可进入到管理员管理界面1.点击退出即可退出系统。在进货界面中,点击按库存查看商品余量,管理员可以查看各个有可能需要进货的商品,然后根据需要进行购买活动。五、问题及解决方法问题一:在登陆时密码总是显示出来?解决方法:修改了txtPwd的PasswordChar属性。如图:。结果:当管理员或者会员输入密码时,密码不会显示出来而是以*的形式显示,保证了密码的安全性。登陆时如下图:问题

15、二:当在写代码是,数据库与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

16、 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 SqlComman

17、d(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; fina

18、lly 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(); 结果:在每次要连接数据库时只需要写一句代码就可以,节约了大量

19、的时间,也是代码看着简洁、易懂。 代码是:DBHelper db = new DBHelper("server=.;initialcatalog=MARKET;integrated security=true");问题三:在管理会员界面,当管理员增加新的会员的时候,会有密码的设置,如果密码是管理员随便输入的,这样会不好管理会员的信息?解决方法:当添加新的会员时,我们默认了会员的密码是123,积分是0,因此在添加时就不用输入会员的密码和积分。默认会员密码和积分的代码是:textBox2.Text = "123" textBox4.Text = "

20、0"注:textBox2是密码框,textBox4是积分框。结果:避免了管理员一次次的输入密码和积分,节省了时间,使工作效率得到了提高。输入时如下图:然后点击添加按钮即可。问题四:在修改密码时,如果在让用户重新输入一遍帐号和原密码,好像是不需要的,因为只有自己登陆后才能修改自己的密码,因此原密码是不需要确认的。解决方法:在修改密码界面只设计了三个输入框,用户名、新密码、确认密码,而且用户名是通过窗体传值来设计的,而且设计时用户名框内传来的值是不能修改的,这样就避免了会有人修改别人的密码。窗体传值的代码如下:上一界面的代码:string txtValue1 = this.label8.

21、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

22、asselect * from 购物表create procedure cxspasselect * from PREFERENTIAL并且在管理员查看商品时调用了存储过程:string sql = "execute cxsp"问题六:如何让会员查询方便?解决方法:在会员查询界面设计了可以按照不同的方面进行查询,有可以查看所有的商品,有按照类别进行查看,有按照积分进行查看,有按照折扣进行查看。结果:大大节省了会员的时间,使他们可以按照自己的需求按照不同的方面进行查看自己需要的商品。问题七:如何使会员在购买商品时方便?解决方法:我们设计的是只要用户输入商品号,然后商品名和价格

23、就不用自己输入了,在这里我们是创建了个视图而且在输入接收人姓名、接收人电话、接收人地址、日期给了会员只需要在第一次购买的时候输入即可。创建视图的代码是:create view dc_spasselect 商品号,商品名,折扣后价 from PREFERENTIAL在c#用时的代码是:sql = "select 商品名,折扣后价 from dc_sp where 商品号='" + textBox1.Text.Trim() + "'" DataTable dt = db.GetDataSet(sql).Tables0; textBox2.Te

24、xt = dt.Rows00.ToString(); textBox3.Text = dt.Rows01.ToString();(注:textBox2是商品名书写框,textBox3是价格的书写框)问题八:计算总计时怎么使会员只计算这次的点餐?解决方法:在购物界面增加了一个清除界面,用于用户清除自己原来的顶的物品,并且给与提醒。清除的代码:string sql = "delete from 购物表 where 会员号='" + textBox4.Text + "'"问题九:如何使购物表的商品号改变时preferential的商品号也改变?

25、解决方法:定义了一个触发器,触发器代码是:create trigger preferential_updateon preferential after updateasbegindeclare old_sph varchar(10),new_sph varchar(10)select old_sph=商品号 from deletedselect new_sph=商品号 from insertedupdate 购物表 set 商品号=new_sph where 商品号=old_sphend问题十:当会员购买完商品后,如何是preferential表的库存量也减少?解决方法:在sql中定义了个当

26、购物表的份数增加后,preferential表的库存量相应的减少。代码是:use MARKETgocreate trigger gwb_preon 购物表 after insertasbegindeclare sph varchar(20),spm varchar(30)declare fs intselect sph=商品号,spm=商品名 from insertedselect fs=份数 from 购物表 where 商品号=sphupdate PREFERENTIAL set 库存=(库存-fs) where 商品号=sphprint'修改成功'end问题十一:根据老师

27、的建议,我们又增加了进货界面,管理供货商界面;在数据库中建了供货商表和进货表。进货界面图:在此界面为了使管理员更好的进行进货活动,我们增加了按照库存查看商品余量的按钮,管理员可以按照余量进行进货。而且当输入进货数量是有在sql中添加了个触发器,使preferential表中相应的库存也增加:代码如下:use MARKETgocreate trigger jhb_preon 进货表 after insertasbegindeclare sph varchar(20),spm varchar(30)declare jhsl intselect sph=商品号,spm=商品名 from insert

28、edselect jhsl=进货数量 from 进货表 where 商品号=sphupdate PREFERENTIAL set 库存=(库存+jhsl) where 商品号=sphprint'修改成功'end管理供货商界面图:进货表设计:供货商表设计:。六、课外实践总结回顾该系统从选题,到设计、编码实现、测试等,论文的撰写,这系列连贯的过程,感想颇多,收获也很多。大致的总结几点,如下:1设计开发一个软件,首先要了解所涉及到行业的现状,一定要想办法进行行业调研,从不同途径获取该行业的专业知识。合理安排系统设计开发时间,进行实际开发会发现需求分析与系统设计占主要的时间,如果前面的

29、工作做好了,编码实现占用的时间很短。所以我们要借助软件工程的思想-对软件开发过程进行控制。2. 在开发一个系统时,前期的分析准备工作非常的重要。对于系统的需求要明确,这样才能做到有的放矢。特别是对于系统中数据的存储和重要算法的设计,设计的不好会出现大量的冗余,不仅浪费存储空间,还影响查询效率。3.在设计的初期,对一个功能模块的设计,要想出两种或两种以上方案,这样可以进行比较,从而获得更佳的设计方案,设计开发过程中一定要吸取经验教训,避免返工。尤其是一些重要算法或功能。在对具体实现功能模块进行编程时,要养成良好的加注释的习惯,这样的话不仅能理清思路,而且可以为以后的调试程序带来很大的方便。4.

30、懂得充分利用网络资源。5.后期的晚上也是很重要的,在每个系统都存在着些许缺点,但重要的是我们能发现并对它们进行改进,这样才能一步步地编写一个较完整的系统 七、源代码7.1 sql server 2008 的源代码:-多表查询以及模糊查询select 购物表.会员号,购物表.商品号,购物表.商品名,PREFERENTIAL.种类from PREFERENTIAL,MEMBER,购物表where 购物表.会员号=MEMBER.会员号and 购物表.商品号 like '0018%'go-插入会员信息insert into MEMBER values('120123',

31、'123','张安','1235434','0',null)go-修改会员信息update MEMBER set 积分='100'where 会员号='120123'go-删除会员信息delete from member where 会员号='120123'go-从表PREFERENTIAL查询商品号,商品名,折扣后价(视图)create view dc_spasselect 商品号,商品名,折扣后价 from PREFERENTIAL-存储过程create procedure cx

32、gwbasselect * from 购物表-存储过程create procedure cxspasselect * from PREFERENTIAL- 备份use master goexec sp_addumpdevice'disk','sql','f:sql.bak'backup database market to sql with noinit-修改preferential表的商品名购物表的商品名也会改变触发器create trigger preferential_updateon preferential after updateas

33、begindeclare old_spm varchar(10),new_spm varchar(10)select old_spm=商品名 from deletedselect new_spm=商品名 from insertedupdate 购物表 set 商品名=new_spm where 商品名=old_spmend-创建触发器,当向购物表中插入一个商品时,将PREFERENTIAL中该商品的分数表相应的减少use MARKETgocreate trigger gwb_preon 购物表 after insertasbegindeclare sph varchar(20),spm var

34、char(30)declare fs intselect sph=商品号,spm=商品名 from insertedselect fs=份数 from 购物表 where 商品号=sphupdate PREFERENTIAL set 库存=(库存-fs) where 商品号=sphprint'修改成功'end-创建触发器,当向进货表中插入一个商品时,将PREFERENTIAL中该商品的分数表相应的增加use MARKETgocreate trigger jhb_preon 进货表 after insertasbegindeclare sph varchar(20),spm va

35、rchar(30)declare jhsl intselect sph=商品号,spm=商品名 from insertedselect jhsl=进货数量 from 进货表 where 商品号=sphupdate PREFERENTIAL set 库存=(库存+jhsl) where 商品号=sphprint'修改成功'end 7.2 Microsoft Visual Studio 2008 C#源代码:登录界面图:登录界面源代码:public partial class enter : Form DBHelper db = new DBHelper("server=

36、.;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

37、 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 =

38、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 = ""

39、) MessageBox.Show("会员号、密码不能为空"); else string userName = txtID.Text.Trim(); string passWord = txtPwd.Text.Trim(); try string sql = "Select * From MEMBER Where 会员号='" + userName + "' and 密码='" + passWord + "'" int count = int.Parse(db.SplExecuteS

40、calar(sql); if (count > 0) string txtValue2 = this.txtID.Text; string txtValue1 = this.txtID.Text; 购买物品界面 b = new 购买物品界面(txtValue1); 会员查询界面 a = new 会员查询界面(txtValue2); a.Show(); this.txtID.Text = a.returnValue2; this.txtID.Text = b.returnValue4; else MessageBox.Show("用户名或密码有误,请重试"); catc

41、h (Exception ex) MessageBox.Show("出现错误:" + ex.Message); if (radAdministrator.Checked = false && radMember.Checked = false) MessageBox.Show("请选择身份验证"); private void btnExit_Click(object sender, EventArgs e) this.Close(); 管理员管理界面图:管理员管理界面代码:public partial class 管理员管理界面1 : F

42、orm DBHelper db = new DBHelper("server=.;initial catalog=MARKET;integrated security=true"); public 管理员管理界面1() InitializeComponent(); public string returnValue; public 管理员管理界面1(string txtValue) InitializeComponent(); this.label8.Text = txtValue; private void 增加商品ToolStripMenuItem_Click(obje

43、ct sender, EventArgs e) string sph = textBox1.Text.Trim(); string spm = textBox3.Text.Trim(); string zl = comboBox1.Text; string yj = textBox2.Text.Trim(); string zk = textBox4.Text.Trim(); /string zkhj = textBox2.Text.Trim(); string jfyq = comboBox2.Text; string zkhj = (float.Parse(yj) * float.Pars

44、e(zk) / 10).ToString(); try if (sph = "" | spm = "" | zl = "" | yj = "" | zk = "" | zkhj = "" | jfyq = "") MessageBox.Show("请输入完整的信息"); else string sql = "INSERT INTO PREFERENTIAL(商品号,商品名,种类,原价,折扣,折扣后价,积分要求) VALUES('" + sph + "','" + spm + "','" + zl + "','" + yj + "','" + zk + "','" + zkhj + "','" + jfyq + "

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论