如何使用java web制作超市账单管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用java web制作超市账单管理系统相关的知识,希望对你有一定的参考价值。

1、业务需求概述
超市账单管理系统主要用于对超市的交易账单进行管理,如账单录入、账单修改、
账单删除,以及和超市商品相关的供应商、用户的管理等。所谓账单,就是超市与供应
商进行交易的凭据。超市采购部的职员、超市的部门经理是该系统的目标用户。
要求:
1. 使用jsp 、servlet、jstl 、html、jdk 特性(如抽象类或者接口)功能实现该系统。
2. 使用oracle 数据库。
3. 必须按照b/s 结构完成系统。
2、项目功能说明
序号 功能列表
1 登录。
使用用户名密码登录,成功则进入主页面,否则提示出错信息
2 账单信息。
账单的增、删、改、查,在操作过程中会根据用户权限判断操作范围
3 供应商信息。
供应商的增、删、改、查,在操作过程中会根据用户权限判断操作范围
4 用户信息。
用户的增、删、改、查,在操作过程中会根据用户权限判断操作范围,主要包括对用户权限的
操作。
本人有较为具体的素材

权限可以使用的那件---
“的作用----”权限来解决一个用户可以拥有多个角色,如座位一般工作人员的作用。李四的普通员工和人员的作用。
角色可以有多个权限,如一般工作人员可以登录,更改密码,查看部分,管理人员可以查看库存,采购的商品。

许可是对应于一个特定的功能,如的登陆权限密码权限查看产品的权限,采购权,如各种功能的权限。

出现这种情况,当一个用户登录必要的调查,他不落地许可,可能会被禁止降落。着陆后,你可以检查出他的角色,权限,每个角色对应不同的操作,在他的时代,这是必要的检查,他没有权限就行了。
参考技术A 权限可以使用的那件---
“的作用----”权限来解决一个用户可以拥有多个角色,如座位一般工作人员的作用。李四的普通员工和人员的作用。
角色可以有多个权限,如一般工作人员可以登录,更改密码,查看部分,管理人员可以查看库存,采购的商品。

许可是对应于一个特定的功能,如的登陆权限密码权限查看产品的权限,采购权,如各种功能的权限。

出现这种情况,当一个用户登录必要的调查,他不落地许可,可能会被禁止降落。着陆后,你可以检查出他的角色,权限,每个角色对应不同的操作,在他的时代,这是必要的检查,他没有权限就行了。
参考技术B 权限可以使用的那件---
“的作用----”权限来解决一个用户可以拥有多个角色,如座位一般工作人员的作用。李四的普通员工和人员的作用。
角色可以有多个权限,如一般工作人员可以登录,更改密码,查看部分,管理人员可以查看库存,采购的商品。

许可是对应于一个特定的功能,如的登陆权限密码权限查看产品的权限,采购权,如各种功能的权限。

出现这种情况,当一个用户登录必要的调查,他不落地许可,可能会被禁止降落。着陆后,你可以检查出他的角色,权限,每个角色对应不同的操作,在他的时代,这是必要的检查,他没有权限就行了。
参考技术C 这是jsp模型的model2模型用javabean和servlet来实现的非常容易的 你留QQ我发你一份相似的你可以看着做追问

442699975

参考技术D 你是在人家公司做项目吧!

基于Java的超市账单管理系统

获取项目源文件,技术交流与指导联系Q:1225467431

基于Java的超市账单管理系统

学生:高  指导老师:周

 

(安徽农业大学 经济技术学院 合肥 230036

 

摘要:随着科学的进步,网络变得越来越重要了。很多的公司也应用了相应的软件,来加快自身的发展。由于超市行业的不断壮大,也需要一套软件来相应的软件来管理。在这种情下超市账单管理系统也就产生了。在超市账单管理系统中主要是对账单、供应商、用户的简单管理。在超市管理系统中主要实现了增加、删除、修改、查询信息的功能。在该系统里由于信息量大不方便人们的查看,在这里运用了分页的方法方便人们的查看。该系统主要使用Java语言来开发的,用oracle数据库来存储信息,用PL/SQL来登录数据库,并查看数据库表里的信息。用eclipse软件编写代码。在该系统里主要运用了Servlet来处理用户的请求和页面之间的跳转,JDBC是一种连接数据库的技术。在超市里运用超市账单管理系统提高了工作效率,为人节省大量的时间。

关键词:javaServletPL/SQLjsporacle,超市账单管理系统

1引言

超级市场最早产生于1930年的美国纽约。1930年8月,美国人迈克尔·库仑(MichaelCullen)在美国纽约州开设了第一家超级市场——金库仑联合商店。当时,美国正处在经济大危机时期,迈克尔·库超市仑根据他几十年食品经营经验精确设计了低价策略,并首创商品品种别定价方法。它的超级市场平均毛利率只有9%,这和当时美国一般商店25-40%的毛利率相比是令人吃惊的。为了保证售价的低廉,必须做到进货价格的低廉,只有大量进货才能压低进价,迈克尔·库仑就以连锁的方式开设分号,建立起保证大量进货的销售系统。它首创了自助式销售方式,采取一次性集中结算。第二次世界大战后,特别是50、60年代,超级市场在世界范围内得到较快的发展。

在我国,超级市场被引入始于1978年,当时称作自选商场。1983年1月3日,中国第一家超级市场在北京市海淀区开业[1],那时购买者几乎都是外国人。20多年后的今天,人们去超市购物已经成为生活中不可缺少的部分。

体育营销超级市场顾客让渡价值论明确地告诉商家:谁能让消费者用最少的支出、最短的时间、最快的速度、最低的价格在最优质的服务下完成一次快乐的购物,谁便能最大化的占有市场竞争的优势。这句话不仅看起来繁琐,而且做起来难度更大。

超市在我们周围随处可见,现在的商品种类越来越多,人们对商品的需求量也非常大。这样工作人员对每个商品的详细信息和商品的供应商的详细信息,就不能够记得那么多和那么详细了。超市工作人员也记不住太多的用户的详细信息,所以需要一套可以记住每个商品的详细信息、商品的供应商的详细信息和用户的详细信息,这时候超市账单管理系统就产生。

所以通过以上所述,超市账单管理系统是对高效率完成工作是很有必要的。

2 超市账单管理系统的概述

超市账单管理系统主要是管理了账单、供应商、用户的信息。实现对每个模块的增加、删除、修改、查询的功能。每一批到货情况,是否付款等情况在这个管理模块中进行记录,并且标有记账时间,似的数据有依可循,供随时查询。此外可以根据商品的名称查出是否已经付款的功能。实现供应商信息的添加查询功能。

在账单管理模块主要记录了商品名称、编号、数量、交易金额、付款的状态、所属的供应商、该条商品的相关描述和商品添加时间。方便人们对商品的了解。

在供应商模块中记录了供应商编号、供应商名称、供应商描述、联系人、联系人的号码,和该供应商的地址。方便人们对供应商的充分了解。

在用户模块中记录了用户的详细信息。如用户的名字、性别、年龄、电话、住址。还有用户在超市的身份是普通用户还是经理,身份的不同进入的超市账单管理系统的模块是不同的。

 

2.1所需软、硬件技术准备

1.超市账单管理系统主要用到eclipse工具,使用oracle数据库来存储数据。使用PL/SQL登录数据库,来查看数据的数据。使用tomcat在浏览器里检测超市账单管理系统的效果。

软件环境:

(1)操作系统:Windows 7版本。

(2)数据库开发工具:oracle。

(3)应用程序开发工具:Eclipse。

(4)tomcat

技术准备:

(1)java基础

(2)jsp技术

(3)Servlet技术

(4) css

2.导入项目:

   把项目导入Eclipse中,打开Eclipse,点击fileàimportàGeneralàExisting Projects into worksapceà再选中nextà然后再找项目的路径就可以了。

3.运行项目:

选中login.jsp右击找到runas,点击run on server就可以了

管理员账号:高陈

管理员密码:aaa

2.2可行性分析

2.2.1 技术可行性

本系统使用Java语言来编写的,Java在大学期间已经学过了,在图书管理借了相关学习资料,和在网络上学习了jsp、Servlet。明白jsp和Servlet的用途和使用方法。JSP和Servlet技术统称为:Servlet-Jsp技术,Jsp的本质是Servlet类也就是Jsp被Jsp引擎编译之后会生成一个标准的Servlet类,Jsp是Html标签和Java代码组合而成的一个.jsp文件,jsp编译后生成的Servlet类里面Servlet通过输出流把html标签输出到浏览器显示生成动态的网页。制作本系统的相关软件可以再网上进行下载,超市账单管理系统的相关图片网上也可供下载。再说本人对Java方面比较感兴趣,以前做过一些简单的网页。综合上面所述。本系统的开发是完全可行的。

2.2.2 经济可行性

从经济方面考虑,该系统不需要投入什么经济,只要懂的相关技术即可。因此在经济上是可行的。

2.2.3 社会可行性

本系统编程所使用的是网上的图片,又不以获利为目的。因此不必承担任何法律责任。

3需求分析

3.1 需求分析的任务及主要内容 

3.1.1 具体业务的需求

(1)在账单管理模块中主要对账单的增加、账单的修改、账单的删除、账单的查询。查询时还可以进行分页浏览,也可以跳转到你想看的页面。

(2)在供应商管理模块中主要对供应商的增加、供应商的删除、供应商的修改和供应商的查询。查询时还可以进行分页浏览,也可以跳转到你想看的页面。

(3)在用户管理模块中主要对用户的增加、用户的修改、用户的删除、用户的查询。查询时还可以进行分页浏览,也可以跳转到你想看的页面。

3.1.2层次图

 

 

 

 

 

 

 

 

 

 

 

                               3-1 超市管理系统总模块

3.1.3数据流图

 

 

                          维护数据

 

 

 

          

 

 

 

 

                             3-2 经理用户管理的模块

 

                     登录                          数据维护

 

 

 

 

                                 

3-3 普通用户管理模块

4 系统总体设计

4.1 系统分析

在本系统中,分为基本信息的账单管理模块,供应商管理模块,用户管理模块。2个角色:经理、普通用户名。

1.用户所具有功能

(1)经理

拥有所有的模块的操作权限。

(2)普通用户

对账单管理模块的操作权限。

4.2技术路线选择

4.2.1 B/S架构

在超市账单管理系统中使用到了B/S架构,程序采用了浏览器/服务器的工作模式,又称为请求/响应。其中“B”表示Browser,即浏览器。而“S”则表示的是Server,即服务器。

使用B/S架构,在很大程度商上降低了对用户本地设备环境的要求。同时,也极大地降低了程序维护的成本,非常方便。

4.2.2 jsp技术

jsp是Java Service Page的简称,jsp是运行在服务器端的Java页面,当web服务器接收到jsp请求是,首先会对jsp文件进行翻译,将编好的jsp文件通过jsp引擎转换成可识别的Java文件。经过翻译后的jsp文件相当于我们编写好的Java源文件,此时仅有Java源文件是不够的,必须要将Java源文件编译成可执行的字节码文件。Web容器接受了客户端的请求,经过翻译和编译两个阶段,生成了可被执行的二进制字节码文件,此时就进入执行阶段。当执行结束后,会得到处理请求的结果,web容器再把生成的结果页面返回给客户端显示。

4.2.3 JDBC技术

JDBC是一种Java数据库连接技术,能实现Java程序对各种数据库的访问有一组使用Java语言编写的类和接口组成,这些类和接口称为JDBC API,它们位于包Java.sql以及javax.sql中。在项目开发中,使用JDBC可以实现应用程序与数据库之间进行数据的通信,JDBC主要作用是建立与数据库之间的访问连接,将编写好的sql语句发送到数据库进行执行,对数据库返回的执行结果进行处理。在JDBC中有四个重要的环节:DriverManager类:管理JDBC驱动、Connection接口:负责连接数据库并担任传递数据的任务、Statement接口:由Connection产生,负责执行sql语句、Resultset接口:负责保存Statement执行后所产生的查询结果。

4.2.4 tomcat

在超市账单管理系统中我们使用了tomcat,tomcat是Apache基金会旗下的一款免费、开源的web服务器。Web 服务器是可以向发出请求的浏览器提供文档的程序,它的主要功能就是提供网上信息浏览服务。

Tomcat是一个小型的轻量级应用服务器,技术先进、性能稳定,占用资源小、速度快,安装tomcat的过程很简单,可以使用解压版,无需安装即可使用。

4.2.5 eclipse 

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。在Eclipse里写程序的代码。

 

4-1 eclipse

4.3数据库的设计与实现

数据库在超市账单管理系统中是最重要的,因为在超市账单管理系统里有的操作数据都是保存在数据库中,在所有jsp页面中通过JDBC与数据库连接,来操作数据库中的数据,从而实现所需的功能。在本系统里可以通过PL/sql登陆数据,查看数据库里数据,数据库的设计是非常重要的一步,如果数据库表设计不好直接就决定了你后面的开发,不好的数据库表是制作不出好的系统。一个好的数据库开发一班是要系统分析,再看逻辑设计,然后物理实现。

一般人们再设计数据库表时,都要经过全面的分析,画出E-R图来显示数据库系统的需求,我们现在用的是谁第二代数据库即关系型数据库。

 

     

 

 

 

 

 

      

4-2 用户E-R图

 

                  

 

 

 

 

 

 

 

 

 

 

 

 

4-3 账单E-R图

 

 

 

 

 

 

 

 

 

 

 

 

 

4-4 供应商E-R图

4.3.1 数据库系统分析

关系型数据库的结构非常简单,只是包含单一的数据结构,关系数据库的数据结构虽然很简单却能够表达丰富的语义,描述出现实世界的实体以及实体间的各种关系。

在超市账单管理系统中,数据库中供应商和账单存在主外键关系,在账单表中billno是主键,providid为外键。而在供应商表中providerno是主键,providerno相当于是账单表中外键。这样账单表与供应商表就存在了关联。用户表独立于账单表和供应商表。

4.3.2 数据库物理实现

经过数据库系统分析后,数据库的结构已经非常清晰,剩下的就是用一种数据库软件实现这样的结构。本系统中数据库采用Oracle作为数据库。首先我们在Oracle中建一个数据库,命名为“shop”。 选中shop数据库,向数据库中添加3个表:bill,provider,user。下面是每个数据表中的属性。

 

 

 

 

 

 

1) provider表。provider表用来存储供应商信息。

4-1 provider表

字段名称

数据类型

providerno

number

providername

Varchar250

          providerdescript

             Varchar2(100)

provideruser

Varchar2(50)

providertel

number

provideraddress

Varchar2(500)

providerfax

Varchar2(50)

providenum

number

 

2) bill表。bill表用来存储账单的信息。

4-2 bill表

字段名称

数据类型

billno

number

billname

Varchar2(50)

billnumber

number

billmoney

number

                  billpay

number

providid

number

goods

Varchar2(500)

billtime

Date

billdanwei

Varchar2(50)

                billnum

                  number

 

 

 

3) user表。user表用来存储领登录用户明细。 

4-3 user表

字段名称

数据类型

username

Varchar2(50)

passowrd

Varchar2(50)

                 userno

number

                 usersex

number

userage

number

usertel

Varchar2(50)

useraddress

Varchar2(500)

userlimit

number

userid

number

 

5 详细设计

5.1 Servlet的详细应用

在Servlet工作流程中,根据web.xml中的配置将拦截所有通过servlet的请求,并根据URI决定分发给doGet还是doPost处理请求,然后调用相应的业务逻辑方法,调用相应的页面去执行响应。利用JDBCJava Data Base Connectivity技术处理与数据库连接,利用其Servlet API所定义的接口和类来封装与数据库交互的相关操作,使对数据库的操作变得相当容易,减少开发时间,而且能对系统进行灵活的设计和实现,使系统的各模块容易维护和重用。

5.2  特定模块的详细介绍

每个模块都有其特定功能,用户分别分为普通用户和经理用户。当普通用户登录时,进入的超市账单管理系统只显示账单管理模块和退出系统模块。当经理用户登录时显示账单管理模块、供应商管理模块、用户管理模块、退出系统模块。普通用户的账单管理模块、退出系统模块的功能和经理用户的账单管理模块、退出系统模块功能是一样的,所以下面只介绍经理用户来给大家展示超市账单管理系统功能。

5.2.1 登录模块

1.在登录页面时,可以输入用户名与密码,当你没有输入用户名时,提交网页时,login.jsp进行客户端验证和LoginServlet.java进行服务端验证,会提示你用户名不能为空。当你填写了用户名而没填写密码就提交页面,同样login.jsp进行客户端验证和LoginServlet.java进行服务端验证,会提示你密码不能为空。当然你输入的用户名与密码不对时,提交页面到LoginServlet.java进行服务端验证,在LoginServlet里通过request.getPaarameter()的方法得到提交的信息,通过调用UserServiceImpl层里checklogin()的方法来检查提交来的用户名和密码是否正确,如果不正确,页面里通过提示你用户名或密码错误。如果正确就提交到admin_index.jspadmin_left.jsp通过session判断用户是普通还是经理用户,如果是经理用户,显示账单管理模块、供应商管理模块、用户管理模块、退出系统四个模块。如果是普通用户则只显示账单管理模块和退出系统两个模块。当你填完用户名和密码时你想选择重填,这是你可以点击重置按钮,这时会清空你所填的内容,输入不同的角色名就会进入不同的模块,并完成相应的功能;登陆模块如图5-1所示。

 

5-1 登录页面

2.经理(用户)登录以后就会进入总页面如图5-2所示,在左侧可以看到经理进来后。

 

 

5-2 经理用户欢迎界面

3.普通用户登录,如图5-3所示。

 

5-3 普通用户登陆界面

 

 

5.2.2 账单管理模块

1.点击账单管理模块时,通过GetBillsServlet的request.getParameter()获得请求数据并调用BillServiceImpl层里的getBillsByPage()的方法获得全部的账单商品的所有相关信息并把全部数据发送到admin_bill_list页面中,在该页面中显示全部的账单编号、商品名、商品数量、交易金额、是否付款、供应商名称、商品描述、账单时间。如图5-4所示。在账单管理现实中还可以通过组合查询查出你想要的商品名称,也可通过模糊查询查出含有什么文字的商品名,组合查询中还可以通过付款的状态来查询出你想要的结果,例如:当你点击未付款时,账单 管理所显示的是未付款的所有商品,而不显示付过款的商品名。如图5-5所示。在账单管理中可以同过每页显示的页数来设置当前页显示的商品条数,也可点击下一页来查看下一的记录,同样可点击上一页、首页、末页来查看相应页面的记录,也可在“转到”的后面填写你想要跳转到的页数,填写后点击go图标就会跳转到你所入的页面,当然如果你输入不是第一页和最后一页之间的数字,页面会显示在当前页。如图5-6所示。

 

 

5-4 显示全部商品

                                 

 

5-5 组合查询

 

 

 

5-6 每页显示的条数

 

2.在账单管理中当你点击添加数据时,网页会跳到modify.jsp页面添加数据页面。如图5-7所示。页面中有些文本框后面有红色星,这说明该文本框是必填的,不能为空。有些文本框后面没有红色星说明该文本框可填可不填。当你的鼠标放到账单编号的文本框里时,该文本框后面的红色星消失并提示必须为纯数字。当鼠标放到交易金额的文本框时,该文本框后面的红色星消失并提示最多两位小数数字,且不能为负数。当鼠标放到交易数量的文本框时,该文本框后面的红色星消失并提示数量为正整数填完后点击确认时,modify.jsp进行客户端验证和BillSerclet.java通过request.getParameter()获得数据进行服务端验证。如果数据全部符合要求则会保存成功,如果数据不符合要求页面则会给出相应提示。当你点击返回时,则会返回到账单显示页面。

5-7 添加商品页面

3.在账单管理表格里商品名称一列,当你点击商品名称时,页面通过ToUpdateBillServlet获得该条商品所有数据提交到modify.jsp页面通过${}的方法显示所得到的数据,在此页面可以对数据进行修改。如图5-8所示。这里账单编号是不允许改变的,如果改变账单编号,提交时页面提示你账单不允许改变。在该页面对交易金额和交易数量的要求增加数据的要求相同。点击修改时DoAddBillServlet通过调用BillServiceImplements层的updateBill()方法就可以时修改了本条商品的信息。当你点击返回时,页面则会返回到账单显示页面。当你点击删除时,页面提示你确定删除,这就给你一个返回的机会,如果是点错了,就可以点击返回不进行删除了。如果你点击确定后页面跳到DodeleteBillServlet调用BillServiceImpl层的deleteBill()方法进行删除,删除成功后跳到显示数据页面。

 

5-8 修改商品页面

5.2.3 供应商管理模块

1.当点击供应商管理模块时,通过GetprovidersServlet的request的getParameter()获得请求数据并带调用ProviderServiceImplements层的getProvidersByPage()的方法获得全部的供应商的所有数据并把全部数据发送到providerAdmin页面中,如图5-9所示。在该页面中显示编号、供应商名称、供应商描述、联系人、电话、地址。在供应商管理现实中还可以通过组合查询查出你想要的商品供应商名称,也可通过模糊查询查出含有什么文字的供应商名,组合查询中还可以通过供应商的描述查询出你想要的结果,在供应商管理中可以同过每页显示的页数来设置当前页显示的供应商条数,也可点击下一页来查看下一的记录,同样可点击上一页、首页、末页来查看相应页面的记录,也可在“转到”的后面填写你想要跳转到的页数,填写后点击go图标就会跳转到你所入的页面,当然如果你输入不是第一页和最后一页之间的数字,页面会显示在当前页。

 

5-9 全部供应商信息页面

2.在供应商管理中当你点击添加数据时,网页会跳到providerAdd添加数据页面。如图5-10所示。页面中有些文本框后面有红色星,这说明该文本框是必填的,不能为空。有些文本框后面没有红色星说明该文本框可填可不填。当你的鼠标放到供应商编号的文本框里时,该文本框后面的红色星消失并提示编号必须为纯数据,点击提交时,providerAdd会进行客户端验证,DoProviderAddServlet通过request的getParameter()方法获得数据进行服务端验证,如果数据全部符合要求则会保存存成功,如果数据不符合要求页面则会给出相应的提示。当你点击返回时,则会返回到供应商显示页面。

 

 

5-10 添加供应商页面

3.在供应商管理表格里商品名称一列,当你点击供应商名称时,页面通过ToUpdateProviderSrvelet获得该条供应商所有的数据并提交到providerAdd页面通过${}的方法显示所得到的数据,在此页面可以对数据进行修改。如图5-11。这里供应商编号是不允许改变的,如果你改变了提交时页面会提示你供应商编号不允许改变。点击修改时DoProviderAddServlet通过jsp的request的getParameter()的方法得到数据并调用ProviderServiceImpl()层的updateProvider()方法就可修改本条供应商的数据了。当你点击返回时,页面则会返回到供应商显示页面。

 

5-11 修改供应商页面

 

4.当你点击删除时,如图5-12所示。页面提示你确定删除,这就给你一个返回的机会,如果是点错了,就可以点击返回不进行删除了。如果点击确认页面则会跳转到DodeleteProviderServlet里并使用jsp中请求的getParameter()的方法得到供应商的主键providerno,然后通过BillServiceImpl层的getBillByProvidid()的方法来判断此供应商在账单表中没有关联,如果没有就会直接删除,并跳转到供应商显示页面。如果此供应商与账单表有关联,页面会提示你如果想删除该供应商,就必须先删除账单管理中关联的供应商的商品,这样才能删除供应商的,并返回到显示页面。

 

5-12 删除供应商页面

5.2.4 用户管理模块

1.点击用户管理模块时,通过GetUsersServlet的request.getParameter()方法获得全部数据并调用UserServiceImpl层的userService.getUsersByPage 获得全部数据并通过useradmin显示所有用户和该用户的相关信息。如图5-13所示。在此显示页面显示了用户编号、用户名称、性别、年龄、电话、地址、权限。在用户管理现实中还可以通过组合查询查出你想要的用户名称,也可通过模糊查询查出含有什么文字的用户名,在用户管理中可以同过每页显示的页数来设置当前页显示的用户条数,也可点击下一页来查看下一的记录,同样可点击上一页、首页、末页来查看相应页面的记录,也可在“转到”的后面填写你想要跳转到的页数,填写后点击go图标就会跳转到你所入的页面,当然如果你输入不是第一页和最后一页之间的数字,页面会显示在当前页。

 

5-13 全部用户页面 

2.在用户管理中当你点击添加数据时,网页会跳到添加数据页面,如图5-14所示。页面中有些文本框后面有红色星,这说明该文本框是必填的,不能为空。有些文本框后面没有红色星说明该文本框可填可不填。当你的鼠标放到用户编号的文本框里时,该文本框后面的红色星消失并提示必须为纯数据。当你的鼠标放到用户名的文本框时,该文本框后面的红色星消失并提示你用户名不能为空。当你的鼠标放到用户密码的文本框时,该文本框后面的红色星消失并提示你以字母开头,长度在6-18之间,只能包含字符、数字和下划线。当你的鼠标放到用户年龄的文本框时,该文本框后面的红色星消失并提示你年龄在1到120岁。当你的鼠标放到电话的文本框时,该文本框后面的红色星消失并提示号码为11位数。填完后点击数据提交时,update.jsp会进行客户端验证。UserAddServlet通过request.getParameter()方法获得全部数据并进行服务端验证如果数据全部符合要求则会保存成功。如果数据有不符合要求的,页面会给出相应的提示。在这里需要注意的是,用户编号和用户名不能添加数据库中已有的编号和用户名,否则会添加不成功。当你点击返回时,则会返回到用户显示页面。

 

5-14 添加用户页面

3.在用户管理表格里用户名称一列,当你点击用户名称时,通过ToUsersupdateServlet页面调用UserServiceImpl层的getUserid()方法获得该用户所有信息提交到update.jsp页面并通过${}方法显得到的数据,在此页面可以对数据进行修改。如图5-15所示。这里用户号是不允许改变的,如果改变用户编号,提交时页面提示你用户不允许改变。修改用户名不能修改为数据库中已有的名字,否则修改不成功.点击修改时UserAddServlet调用UserServiceImpl层的updateUser()方法就可以修改本条数据了。当你点击返回时,页面则会返回到用户显示页面,显示用户的相关信息。

 

5-15 修改用户页面

4.当你点击删除时,页面提示你确定删除,这就给你一个返回的机会,如果是点错了,就可以点击返回不进行删除了。点击确认时,页面会跳转到DodeleteUserServlet里并使用jsp中请求的getParameter()的方法得到用户的主键userid然后通过UserServiceImpl层的getUsername()的方法来判断此用户是不是当前登陆的用户,如果不是就会直接删除,并跳转到用户显示页面。如果此用户是登陆用户,页面会提示你此用户已登录不允许删除,并返回到显示页面。如图5-16所示。

 

 

5-16 删除用户页面

5.2.5 退出系统理模块

    1.当点击退出系统时,系统会跳出超市账单管理系统,并清空session,返回到登录页面。

6 系统测试

软件测试是一个非常重要的一个过程。可以说一个系统的好坏全是测试的工程决定的,测试能保证系统的稳定性。

软件测试一定的测试方法,测试过程不是固定的,而是根据不同系统有着不同的测试方法,具体情况具体对待。以确保系统可以正常使用。

软件测试可以让程序员发现问题,并进行修改。一个好的系统就是通过这一步修改得到的,所以说一个好的系统是通过不断发现问题,不断修改而来的。软件测试不能盲目测试,要有一个顺序和目标。不然会乱套,这样不仅不能找出问题,,而且使得系统更加乱。

在超市账单管理系统中输入经理用户的账户和密码,看看能否进入经理用户的模块,经过测试确实进入了管理员的模块。再测试各个模块的功能是否能正常实现。

7.结束语

     经过这几个月的努力终于完成我的毕业设计了,在做毕业设计的时候,我遇到很多的困难,但是我遇到困难并没有放弃,而是通过导师的帮助和借助网络来解决我难题,在我这个超市账单管理系统里只是简单实现几个功能。但我感到很高兴,因为我明白了,在做任何事的时候遇到困难不能只是不停的抱怨,而是自己想办法去解决。

经过这几个月学习,我对Java有了很多新的认识,也弄明白以前不懂的问题,也明白了理论和实践相结合是很重要的,不仅要学好理论知识,更要去实践,这样才能自己的不足与缺点,才能知道该从那些方面改善自己,让自己变得更优秀。

 

 

参考文献

[1] 王国辉.Java Web 开发实战宝典[M].北京: 清华大学出版社,2010.10

[2] 李刚. 轻量级J2EE企业应用实战[M].北京:电子工业出版社,2007.04

[3] Jon Duckett著,杜静,敖富江译.Web编程入门经典:HTML、XHTML和CSS[M].北京:清华大学出版社,2010.01

[4] 刘京华.Web整合开发王者归来[M].北京: 清华大学出版社,2010.01. 

[5] (美)Paul Wilton ,Jeremy McPeak 著,施宏斌 译. JavaScript 入门经典(第三版)[M]. 北京:清华大学出版社 2009.2

[6] (英)福塔 著,刘晓霞,钟鸣 译. MySQL必知必会[ M ]. 北京:人民邮电出版社,2009

[7] Nicholas C Zakas著,曹力,张欣译. JavaScript高级程序设计 第五版M].北京: 人民邮电出版社,2007.07

[8] 王振辉,吴广茂. SQL查询语句优化研究[J]. 计算机应用, 2005

[9] Bruce Eckel. Thinking in Java 4th Edition[M].2006.01

[10] Cay S. Horstmann著,叶乃文译. JAVA 2核心技术 卷I 第七版[M]. 北京: 机械工业出版社,2006.05

 

英文摘要

The supermarket bill management system based on Java

gaochen

Abstract:Along with the science and technology unceasing development, the network more and more important. As a result of Supermarket has grown, also need a set of software to the software to management. In this case the supermarket bill management system also emerge as the times require. Supermarket bill management system is mainly the easy management of supermarket bills, suppliers, users. In the supermarket management system mainly implements the add, delete, modify, query the function of information.Due to the large amount of information in the system is not convenient to people‘s view, using the method of paging here convenient people‘s view.The system mainly USES the Java language to develop, use oracle database to store information, to log in with PL/SQL database, and view the database table information. With the eclipse software coding. In the system mainly USES the Servlet to handle the user‘s request and the page, the jump between the JDBC is a technology for connecting to the database.Use in supermarkets, supermarket bill management system improves the work efficiency, save a lot of time.

Keywords: java ,Servlet,PL/SQL,jsp,oracle,Supermarket bill management system

在这里我要感谢我的导师周琼,从论文的选题到定稿的过程都是周老师的帮助和严格要求。

Java学习中,每次遇到困难,导师和同学都会鼓励我,给我开导,给我很大帮助,也给我很大信心。在导师和同学的帮助下,让我顺利完成我的毕业设计。

从那以后我有了自信,有了希望。有的错误他也不能解决,我只好硬着头皮,去钻研,终于我成功,我很开心。他不仅教会如何自信,还让我学会如何利用网上的知识。我比以前更自信,更强大了。我非常感谢我的导师和同学,还要感谢那些为我默默付出的人。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附录1

登录代码:

<body class="blue-style">

<div id="login">

<div class="icon"></div>

<div class="login-box">

<form method="post"  name="form2" action="/biyesheji/login" onsubmit="return checkInput()">

<dl>

<dt>用户名:</dt>

<dd><input type="text" name="userName" class="input-text" /></dd>

<dt>密 码:</dt>

<dd><input type="password" name="passWord" class="input-text" /></dd>

</dl>

<div class="buttons">

<input type="submit" name="submit" value="登录系统" class="input-button" />

<input type="reset" name="reset" value="重  填" class="input-button" />

</div>

</form>

</div>

</div>

</body>

账单表Dao层:

public class BillDaoImpl extends BaseDao implements BillDao{

private  List<Bill> getBillsBySql(String sql,Object...args){

List list =new ArrayList();

Connection conn=null;

PreparedStatement pstmt=null;

ResultSet rs =null;

conn=getConn();

try {

pstmt=conn.prepareStatement(sql);

if(args!=null||args.length>0){

for(int i=0;i<args.length;i++){

pstmt.setObject(i+1, args[i]);

}

}

rs=pstmt.executeQuery();

while (rs.next()) {

Bill bill=new Bill();

        bill.setBillnum(rs.getInt("BILLNUM"));

bill.setBillno(rs.getInt("BILLNO"));

bill.setBillname(rs.getString("BILLNAME"));

bill.setBillmoney(rs.getDouble("BILLMONEY"));

bill.setBillnumber(rs.getInt("BILLNUMBER"));

bill.setBillpay(rs.getInt("BILLPAY"));

bill.setBilltime(rs.getTimestamp("BILLTIME"));

bill.setGoods(rs.getString("GOODS"));

bill.setProvidid(rs.getInt("PROVIDID"));

if(existColumn(rs, "PROVIDERNAME")){

bill.setProvidername(rs.getString("PROVIDERNAME"));

}

bill.setBilldanwei(rs.getString("BILLDANWEI"));

list.add(bill);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

closeAll(rs,pstmt,conn);

}

return list;

}

public List<Bill> getAllBill(){

String sql="select * from tt_bill";

return getBillsBySql(sql);

}

 

public List<Bill> getBillsByPage(Pager pager,Bill condition) {

String sql = "select t1.* from (select b.*,p.providername,rownum rn from tt_bill b inner join tt_provider p on b.providid = p.providerno where rownum <= ? ";

String conditionSql = "";

if(condition != null){

if(condition.getBillname()!=null&& !"".equals(condition.getBillname().trim())){

conditionSql+="and billname  like ‘%"+condition.getBillname().trim()+"%‘";

}

  if(condition.getBillpay()!=0){

 conditionSql+="and billpay = "+condition.getBillpay();

}

}

sql += conditionSql;

sql +=") t1 where t1.rn > ?";

 

List<Bill> list = getBillsBySql(sql, pager.getCurrentPage() * pager.getPageSize(),

(pager.getCurrentPage() - 1) * pager.getPageSize());

String countSql = "select count(*) from tt_bill where 1=1 " + conditionSql;

pager.setTotalCount(getCount(countSql));

return list;

}

 

public int getCount(String sql){

int row = 0; //返回的条数

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

 

try {

conn = getConn();

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

if(rs.next()){

row = rs.getInt(1);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

closeAll(rs, pstmt, conn);

}

return row;

}

public Bill getBillByBillno(int billno) {

String sql="select * from tt_bill where billno=?";

List<Bill> list=getBillsBySql(sql,billno);

return list!=null && list.size()>0?list.get(0):null;

}

public int deleteBill(int billno){

String sql="delete from tt_bill where billno=?";

return super.executeSQL(sql, billno);

}

 

public int updateBill(Bill bill){

                                          String sql="update tt_bill set billnum=?,billname=?,billnumber=?,billmoney=?,billpay=?,providid=?,goods=? ,billdanwei=? where billno=?";

return super.executeSQL(sql,bill.getBillnum(),bill.getBillname(),bill.getBillnumber(),bill.getBillmoney(),bill.getBillpay(),bill.getProvidid(),bill.getGoods(),bill.getBilldanwei(),bill.getBillno());

}

 public int addBill(Bill bill){

String sql="insert into tt_bill values(seq_user.nextval,?,?,?,?,?,?,sysdate,?,?)";

return super.executeSQL(sql,bill.getBillname(),bill.getBillnumber(),bill.getBillmoney(),bill.getBillpay(),bill.getProvidid(),bill.getGoods(),bill.getBilldanwei(), bill.getBillnum());

}

 public Bill getBillByProvidid(int providid){

 String sql="select * from tt_bill where providid=?";

 List<Bill> list=getBillsBySql(sql,providid);

return list!=null && list.size()>0?list.get(0):null;

 }

 public Bill getBillByBillnum(int billnum){

 String sql="select * from tt_bill where billnum=?";

 List<Bill> list=getBillsBySql(sql,billnum);

 return list!=null&& list.size()>0?list.get(0):null;

 }

}

 

 

供应商表dao

public class ProviderDaoImpl extends BaseDao implements ProviderDao{

 

private List<Provider> getProvidersBySql(String sql,Object...args){

List<Provider> list=new ArrayList();

Connection conn=null;

PreparedStatement pstmt=null;

ResultSet rs =null;

conn=getConn();

try {

pstmt=conn.prepareStatement(sql);

if(args!=null||args.length>0){

for(int i=0;i<args.length;i++){

pstmt.setObject(i+1, args[i]);

}

}

rs=pstmt.executeQuery();

while (rs.next()) {

Provider provider=new Provider();

provider.setProviderfax(rs.getString("PROVIDERFAX"));

provider.setProvideraddress(rs.getString("PROVIDERADDRESS"));

provider.setProviderdescript(rs.getString("PROVIDERDESCRIPT"));

provider.setProvidername(rs.getString("PROVIDERNAME"));

provider.setProviderno(rs.getInt("PROVIDERNO"));

provider.setProvidertel(rs.getString("PROVIDERTEL"));

provider.setProvideruser(rs.getString("PROVIDERUSER"));

provider.setProvidernum(rs.getInt("PROVIDERNUM"));

list.add(provider);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

closeAll(rs,pstmt,conn);

}

return list;

}

public List<Provider> getAllProviders(){

String sql="select * from tt_provider ";

return getProvidersBySql(sql);

}

 

public List<Provider> getProvidersByPage(Pager pager,Provider condition) {

String sql = "select * from (select t1.*,rownum rn from tt_provider t1 where rownum <=? ";

String conditionSql = "";

if(condition != null){

if(condition.getProvidername()!= null && !"".equals(condition.getProvidername().trim())){

conditionSql += " and providername like ‘%"+condition.getProvidername().trim()+"%‘";

}

if(condition.getProviderdescript()!= null && !"".equals(condition.getProviderdescript().trim())){

                                 conditionSql += " and providerdescript like ‘%"+condition.getProviderdescript().trim()+"%‘";

}

}

sql += conditionSql;

sql +=") t2 where t2.rn > ?";

List<Provider> list = getProvidersBySql(sql, pager.getCurrentPage() * pager.getPageSize(),

(pager.getCurrentPage() - 1) * pager.getPageSize());

String countSql = "select count(*) from tt_provider where 1=1 " + conditionSql;

pager.setTotalCount(getCount(countSql));

return list;

}

public int getCount(String sql){

int row = 0; //返回的条数

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

conn = getConn();

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

if(rs.next()){

row = rs.getInt(1);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

closeAll(rs, pstmt, conn);

}

return row;

}

   public int addProvider(Provider provider){

   String sql="insert into tt_provider values(seq_user.nextval,?,?,?,?,?,?,?)";

     return super.executeSQL(sql, provider.getProvidername(),provider.getProviderdescript(),provider.getProvideruser(),provider.getProvidertel(),provider.getProvideraddress(),provider.getProviderfax(),provider.getProvidernum());

   }

     public Provider getProviderByProviderno(int providerno){

   String sql="select * from tt_provider where providerno=?";

   List<Provider> list=getProvidersBySql(sql,providerno);

   return list!=null && list.size()>0?list.get(0):null;

   }

   public int updateProvider(Provider provider){

                       String sql="update tt_provider set providernum=?,providername=?,providertel=?,provideruser=?,providerdescript=?,providerfax=?,provideraddress=? where providerno=?" ;

  return super.executeSQL(sql,provider.getProvidernum() ,provider.getProvidername(),provider.getProvidertel(),provider.getProvideruser(),provider.getProviderdescript(),provider.getProviderfax(),provider.getProvideraddress(),provider.getProviderno());

   }

   public int deleteProvider(int providerno){

   String sql="delete from tt_provider where providerno=?";

return super.executeSQL(sql, providerno);

   }

   public Provider getProviderByProvidernum(int providernum){

   String sql="select * from tt_provider where providernum=?";

   List<Provider> list=getProvidersBySql(sql,providernum);

   return list!=null && list.size()>0?list.get(0):null;

   }

}

 

 

用户表dao

public class UserDaoImpl extends BaseDao implements UserDao{

private List<User> getUsersBySql(String sql,Object...args){

List<User> list=new ArrayList();

Connection conn=null;

PreparedStatement pstmt=null;

ResultSet rs =null;

conn=getConn();

try {

pstmt=conn.prepareStatement(sql);

if(args!=null||args.length>0){

for(int i=0;i<args.length;i++){

pstmt.setObject(i+1, args[i]);

}

}

rs=pstmt.executeQuery();

while (rs.next()) {

User item = new User();

item.setUserid(rs.getInt("USERID"));

item.setUsername(rs.getString("USERNAME"));

item.setPassword(rs.getString("PASSWORD"));

item.setUserno(rs.getInt("USERNO"));

item.setUsersex(rs.getInt("USERSEX"));

item.setUserage(rs.getInt("USERAGE"));

item.setUsertel(rs.getString("USERTEL"));

item.setUserlimit(rs.getInt("USERLIMIT"));

item.setUseraddress(rs.getString("USERADDRESS"));

list.add(item);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

closeAll(rs,pstmt,conn);

}

return list;

}

public User getUserByUserno(int userno){

String sql="select * from tt_user where userno=?";

List<User> list = getUsersBySql(sql, userno);

return list!=null && list.size()>0?list.get(0):null;

}

public User getUserid(int userid){

String sql="select * from tt_user where userid=?";

List<User> list = getUsersBySql(sql, userid);

return list!=null && list.size()>0?list.get(0):null;

}

 

public User getUsername(String username){

String sql="select * from tt_user where username=?";

List<User> list = getUsersBySql(sql, username);

return list!=null && list.size()>0?list.get(0):null;

}

 

public List<User> getUsersByPage(Pager pager,User condition) {

String sql = "select * from (select t1.*,rownum rn from tt_user t1 where rownum <=? ";

String conditionSql = "";

if(condition != null){

 

if(condition.getUsername() != null && !"".equals(condition.getUsername().trim())){

conditionSql += " and username like ‘%"+condition.getUsername().trim()+"%‘";

}

}

sql += conditionSql;

sql +=") t2 where t2.rn > ?";

List<User> list = getUsersBySql(sql, pager.getCurrentPage() * pager.getPageSize(),

(pager.getCurrentPage() - 1) * pager.getPageSize());

 

String countSql = "select count(*) from tt_user where 1=1 " + conditionSql;

pager.setTotalCount(getCount(countSql));

return list;

}

 

public int getCount(String sql){

int row = 0; //返回的条数

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

 

try {

conn = getConn();

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

if(rs.next()){

row = rs.getInt(1);

}

} catch (Exception e) {

e.printStackTrace();

}finally{

closeAll(rs, pstmt, conn);

}

return row;

 

}

public List<User> getAllUsers(){

String sql="select * from tt_user ";

return getUsersBySql(sql);

}

 

public int addUser(User item){

String sql="insert into tt_user values(?,?,?,?,?,?,?,?,seq_user.nextval)";

return super.executeSQL(sql,item.getUsername(),item.getPassword(),item.getUserno(),item.getUsersex(),item.getUserage(),item.getUsertel(),item.getUseraddress(),item.getUserlimit());

}

public int deleteUser(int userid){

String sql="delete from tt_user where userid=?";

return super.executeSQL(sql,userid);

}

public int updateUser(User user){

                                             String sql="update tt_user set userno=?,username=?,usersex=?,userage=?,usertel=?,useraddress=? where userid=?";

return super.executeSQL(sql,user.getUserno(),user.getUsername(),user.getUsersex(),user.getUserage(),user.getUsertel(),user.getUseraddress(),user.getUserid());

}

public int updateUserPassword(User user){

String sql="update tt_user set password=? where userid=?";

return super.executeSQL(sql,user.getPassword(),user.getUserid());

}

}

 

账单显示代码:

<body>

<div class="menu">

<form method="post" name="searchForm" action="GetBillsServlet">

<input name="flag" value="search" class="input-text" type="hidden">

<input type="hidden" name="currentPage" />

    <input type="hidden" name="pageSize" />

商品名称:<input type="text" name="productName" class="input-text" value="${condition.billname }" />    

是否付款:<select name="payStatus">

<option value="0" <c:if test="${condition.billpay==0}">selected</c:if>>请选择</option>

<option value="1" <c:if test="${condition.billpay==1}">selected</c:if>>已付款</option>

<option value="2" <c:if test="${condition.billpay==2}">selected</c:if>>未付款</option>

</select>    

<input type="submit"  value="组合查询" />

</form>

</div>

<div class="main">

<div class="optitle clearfix">

<em><input type="button" name="button" value="添加数据" class="input-button" onclick="location.href=‘ToAddBillServlet‘" /></em>

<div class="title">账单管理>></div>

</div>

<div class="content">

 

<table class="list">

<tr>

<td>账单编号</td>

<td>商品名称</td>

<td>商品数量</td>

<td>交易金额</td>

<td>是否付款</td>

<td>供应商名称</td>

<td>商品描述</td>

<td>账单时间</td>

</tr>

<c:forEach var="item" items="${requestScope.list }" >

<tr>

<td>${item.billnum}</td>

<td><a href="ToUpdateBillServlet?billno=${item.billno}">${item.billname }</a></td>

<td>${item.billnumber }</td>

<td>${item.billmoney }</td>

<td>${item.billpay==1? "已付款":"<font style=‘color:red‘>未付款</font>"}</td>

<td>${item.providername}</td>

<td><div style="width:100px;height:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title=" ${item.goods }">${item.goods}</div></td>

<td><fmt:formatDate value="${item.billtime}" pattern="yyyy-MM-dd" /></td>

</tr>

</c:forEach>

</table>

</div>

</div>

<%@ include file ="/common/page.jsp" %>

</body>

 

供应商显示代码:

<body>

<div class="menu">

<table>

<tbody><tr><td><form method="post" action="GetProvidersServlet">

<input name="flag" value="search" type="hidden">

<input type="hidden" name="currentPage" />

<input type="hidden" name="pageSize" />

供应商名称:<input name="providerName" class="input-text" type="text" value="${condition.providername }">

    供应商描述:<input name="providerDesc" class="input-text" type="text" value="${condition.providerdescript }">    <input value="组 合 查 询" type="submit">

</form></td></tr>

</tbody></table>

</div>

<div class="main">

<div class="optitle clearfix">

<em><input value="添加数据" class="input-button" onclick="window.location=‘providerAdd.jsp‘" type="button"></em>

<div class="title">供应商管理>></div>

</div>

 

<div class="content">

<table class="list">

  <tbody><tr>

    <td width="70" height="29"><div class="STYLE1" align="center">编号</div></td>

    <td width="80"><div class="STYLE1" align="center">供应商名称</div></td>

    <td width="100"><div class="STYLE1" align="center">供应商描述</div></td>

    <td width="100"><div class="STYLE1" align="center">联系人</div></td>

 

    <td width="100"><div class="STYLE1" align="center">电话</div></td>

    <td width="100"><div class="STYLE1" align="center">地址</div></td>

  </tr>

   <c:forEach var="item" items="${requestScope.list }">

  <tr>

  <td height="23"><span class="STYLE1"></span>${item.providernum}</td>

    <td><span class="STYLE1"><a href="ToUpdateProviderServlet?providerno=${item.providerno}">${item.providername}</a></span></td>

    <td><span class="STYLE1"></span><div style="width:100px;height:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title=" ${item.providerdescript}">${item.providerdescript }</div></td>

    <td><span class="STYLE1"></span>${item.provideruser}</td>

    <td><span class="STYLE1"></span>${item.providertel}</td>

    <td><span class="STYLE1"></span><div style="width:100px;height:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title=" ${item.provideraddress }">${item.provideraddress}</div></td>

    </tr>

  </c:forEach>

</tbody></table>

</div>

</div>

<%@ include file ="/common/page.jsp" %>

</body>

 

用户显示代码:

<body>      

<div class="menu">

<table>

<tbody><tr><td><form method="post" action="GetUsersServlet" name="searchForm">

<input name="flag" value="search" class="input-text" type="hidden">

<input type="hidden" name="currentPage" />

<input type="hidden" name="pageSize" />

用户名称:<input name="userName" class="input-text" type="text" value="${condition.username }">     <input value="查 询" type="submit">

</form></td></tr>

</tbody></table>

</div>

<div class="main">

<div class="optitle clearfix">

<em><input value="添加数据" class="input-button" onclick="window.location=‘update.jsp‘" type="button"></em>

<div class="title">用户管理>></div>

</div>

<div class="content">

<table class="list">

  <tbody><tr>

    <td width="70" height="29"><div class="STYLE1" align="center">编号</div></td>

    <td width="80"><div class="STYLE1" align="center">用户名称</div></td>

    <td width="100"><div class="STYLE1" align="center">性别</div></td>

    <td width="100"><div class="STYLE1" align="center">年龄</div></td>

    <td width="150"><div class="STYLE1" align="center">电话 </div></td>

    <td width="150"><div class="STYLE1" align="center">地址 </div></td>

    <td width="150"><div class="STYLE1" align="center">权限 </div></td>

  </tr> <c:forEach var="item" items="${requestScope.list }" > <tr>

    <td height="23"><span class="STYLE1"></span>${item.userno }</td>

    <td><span class="STYLE1"><a href="ToUsersUpdateServlet?userid=${item.userid }" onclick="doit(‘mod‘,1)">${item.username }</a></span></td>

    <td><span class="STYLE1"></span>${item.usersex==1?"":"" }</td>

    <td><span class="STYLE1"></span>${item.userage }</td>

    <td><span class="STYLE1"></span>${item.usertel }</td>

    <td><span class="STYLE1"></span>

    <div style="width:100px;height:30px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;" title=" ${item.useraddress }">

    ${item.useraddress }</div></td>

    <td><span class="STYLE1"> 

    </span>${item.userlimit==0?"普通用户":"<font style=‘color:red‘>经理</font>"}</td>

  </tr>

  </c:forEach>

</tbody></table>

</div>

</div>

<%@ include file ="/common/page.jsp" %>

</body>

 

增加或修改账单的页面代码:

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<link type="text/css" rel="stylesheet" href="css/style.css" />

<script type="text/javascript" >

function checkit(){

var obillnum=document.form1.billNum;

var reg=/^+?[1-9][0-9]*$/;

if(reg.test(obillnum.value)==false){

alert("账单编号为纯数字!");

obillnum.select();

return false;

}

var obillmoney=document.form1.money;

var reg1=/^[0-9]+(.[0-9]{1,2})?$/;

if(reg1.test(obillmoney.value)==false){

alert("交易金额最多两位小数,且不能为负数");

obillmoney.select();

return false;

}

var oamout=document.form1.amout;

var reg2=/^(0|[1-9][0-9]*)$/;

if(reg2.test(oamout.value)==false){

alert("交易数量为正整数!");

oamout.select();

return false;

}

 var discription=document.form1.discription;

 if(discription.value.length>500){

 alert("描述文字过多,请简要描述!");

 return false;

 }

return true;

}

function checkbillnum(){

var billnu=document.getElementById("billnu");

var billnum=document.getElementById("billnum");

var reg=/^+?[1-9][0-9]*$/;

if(reg.test(billnu.value)==false){

billnum.innerHTML="必须为纯数字!";

return false;

}

   billnum.innerHTML="";

return true;

}

function checkbillmoney(){

var billmoney=document.getElementById("billmoney");

var money=document.getElementById("money");

var reg=/^[0-9]+(.[0-9]{1,2})?$/;

if(reg.test(billmoney.value)==false){

money.innerHTML="最多两位小数数字,且不能为负数";

return false;

}

   money.innerHTML="";

return true;

}

 function checkamout(){

 var amoutt=document.getElementById("amoutt");

var amout=document.getElementById("amout");

var reg=/^(0|[1-9][0-9]*)$/;

if(reg.test(amoutt.value)==false){

amout.innerHTML="数量为正整数!";

return false;

}

   billnum.innerHTML="";

return true;

}

</script>

</head>

<body>

<div class="main">

<div class="optitle clearfix">

<em><input type="button" name="button" value="添加数据" class="input-button" onclick="location.href=‘modify.jsp‘" /></em>

<div class="title">账单管理>></div>

</div>

<form method="post" name="form1" action="DoAddBillServlet" onsubmit="return checkit();">

<input type="hidden" name="billno"  value="${bill.billno }"/>

<div class="content">

<table class="box">

<tr><td class="field">账单编号:</td>

<td><input type="text" name="billNum" class="text" value="${bill.billnum }"  onfocus="checkbillnum()" id="billnu"/><span id="billnum"><font style="color:red">*</font></span></td></tr>

<tr><td class="field">交易金额:</td>

        <td><input type="text" name="money" class="text" value="${bill.billmoney}" onfocus="checkbillmoney()" id="billmoney"/><span id="money"><font style="color:red">*</font></span></td></tr>

<tr><td class="field">交易单位:</td>

        <td><input type="text" name="danwei" class="text" value="${bill.billdanwei }"/><span ><font style="color:red">*</font></span></td></tr>

<tr><td class="field">交易数量:</td>

         <td><input type="text" name="amout" class="text" value="${bill.billnumber }" onfocus="checkamout()" id="amoutt"/><span id="amout"><font style="color:red">*</font></span></td></tr>

<tr><td class="field">商品名称:</td>

<td><input type="text" name="productname" class="text" value="${bill.billname }"/></td></tr>

<tr><td class="field">商品描述:</td>

<td><textarea name="discription">${bill.goods}</textarea></td></tr>

<tr><td class="field">是否付款:</td>

<td><select name="isPay">

<option value="1" <c:if test="${bill.billpay==1 }">selected</c:if>></option>

<option value="2" <c:if test="${bill.billpay==0 }">selected</c:if>></option>

</select></td></tr>

<tr><td class="field">所属供应商:</td>

<td><select name="isProvider">

<c:forEach var="provider" items="${requestScope.providerList }">

<option value="${provider.providerno }" <c:if test="${provider.providerno==bill.providid }">selected</c:if>>${provider.providername }</option>

</c:forEach>

</select></td>

</tr>

</table>

</div>

<div class="buttons">

<c:choose>

<c:when test="${bill.billno==null}">

       <input type="submit" name="submit" value="确认" class="input-button" />

   <input type="button" name="button" value="返回" class="input-button" onclick="history.back();" />

</c:when>

<c:otherwise>

        <input type="button" name="button" id="button" onclick="window.location.href=‘GetBillsServlet‘;" value="返回" class="input-button"/>

 <input type="submit" name="submit" value="修改" class="input-button" />

 

   <a href="javascript:if(confirm(‘确定要删除吗?‘)){window.location.href=‘DodeleteBillServlet?billno=${bill.billno}‘}"><input type="button" name="button" id="button"value="删除" class="input-button"/></a>   

</c:otherwise>

</c:choose>

</div>

</form>

</div>

</body>

</html>

 

增加或修改供应商的页面代码:

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<link type="text/css" rel="stylesheet" href="css/style.css" />

<script type="text/javascript">

function checkprovidernum(){

var o=document.form1.proId;

var providernum=document.getElementById("providernum");

var reg=/^+?[1-9][0-9]*$/;

if(reg.test(o.value)==false){

providernum.innerHTML="编号必须为纯数字";

return false;

}

providernum.innerHTML="";

return true;

}

function checkit(){

var o=document.form1.proId;

var reg=/^+?[1-9][0-9]*$/;

if(reg.test(o.value)==false){

alert("编号必须为纯数字");

return false;

}

var phone=document.form1.phone;

var reg=/^d{11}$/;

if(reg.test(phone.value)==false){

alert("电话必须为11位的纯数字 ");

return false;

}

var proname=document.form1.proName;

var reg=/^s*$/;

if(reg.test(proname.value)==true){

alert("供应商名不能为空!");

return false;

}

}

</script>

</head>

<body>

<div class="main">

<div class="optitle clearfix">

<div class="title">供应商管理>></div>

</div>

<c:choose>

<c:when test="${provider.providerno==null }">

          <form id="form1" name="form1" method="post" action="DoProviderAddServlet" onsubmit="return checkit();">

</c:when>

<c:otherwise>

                          <form id="form1" name="form1" method="post" action="DoProviderAddServlet?providerno=${provider.providerno }" onsubmit="return checkit();">

</c:otherwise>

</c:choose>

<div class="content">

<font color="red"></font>

<input name="flag" value="doAdd" type="hidden">

<table class="box">

<tbody><tr><td class="field">供应商编号:</td>

<td><input name="proId" id="textfield" class="text" type="text"  value="${provider.providernum}" onfocus="checkprovidernum()"> <span id="providernum"><font color="red">*</font></span></td></tr>

<tr><td class="field">供应商名称:</td>

<td><input name="proName" id="textfield2" class="text" type="text" value="${provider.providername }"/> <font color="red">*</font></td></tr>

<tr><td class="field">供应商描述:</td>

<td><textarea name="proDesc" id="textarea" cols="45" rows="5">${provider.providerdescript }</textarea></td></tr>

<tr><td class="field">供应商联系人:</td>

            <td><input name="contact" id="textfield2" value="${provider.provideruser }" class="text" type="text"></td></tr>

<tr><td class="field">供应商电话:</td>

          <td><input name="phone" id="textfield2" value="${provider.providertel}" class="text" type="text"><font color="red">*</font></td>

</tr>

<tr><td class="field">供应商传真:</td>

 

             <td><input name="fax" id="textfield2" value="${provider.providerfax }" class="text" type="text"></td></tr>

<tr><td class="field">供应商地址:</td>

            <td><input name="address" id="textfield2" value="${provider.provideraddress }" class="text" type="text"></td>

</tr>

</tbody></table>

</div>

<div class="buttons">

<c:choose>

<c:when test="${provider.providerno==null }">

<input name="button" id="button" value="提交" class="input-button" type="submit">

                 <input name="button" id="button" onclick="window.location=‘GetProvidersServlet‘;" value="返回" class="input-button" type="button">

</c:when>

<c:otherwise>

                                     <input name="button" id="button" onclick="window.location=‘GetProvidersServlet‘;" value="返回" class="input-button" type="button">

 <input name="button" id="button" value="修改" class="input-button" type="submit">

              <input name="button" id="button" onclick="window.location=‘DodeleteProviderServlet?providerno=${provider.providerno}‘;" value="删除" class="input-button" type="button">

</c:otherwise>

</c:choose>

</div>

</form>

</div>

</body>

</html>

 

增加或修改用户页面代码:

 

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<link type="text/css" rel="stylesheet" href="css/style.css">

<script type="text/javascript">

function checkit()

{

var reg=/^+?[1-9][0-9]*$/;

var userno=document.form1.userno;

if(reg.test(userno.value)==false){

alert("用户编号必须为纯整数!");

userno.select();

return false;

}

var age=document.form1.age;

var reg3=/^([1-9]|[1-9][0-9]|(1[01][0-9]|120))$/ ;

if(reg3.test(age.value)==false){

alert("年龄在0120之间!");

age.select();

return false;

}

var mobile = document.form1.mobile;

var reg1 =/^d{11}$/ ;

if(reg1.test(mobile.value)==false){

alert("手机号必须为11位的数字!");

mobile.select();

return false;

}

var pass=document.form1.password;

var reg2=/^[a-zA-Z]w{5,17}$/;

if(reg2.test(pass.value)==false){

alert("密码以字母开头,长度在6-18之间,只能包含字符、数字和下划线");

return false;

}

return true;

}

function checkuserno(){

var userno=document.form1.userno;

var usern=document.getElementById("userno");

var reg=/^+?[1-9][0-9]*$/;

if(reg.test(userno.value)==false){

usern.innerHTML="必须为纯数字!";

return false;

}

      usern.innerHTML="";

return true;

}

 function checkusername(){

 var username=document.form1.username;

var userna=document.getElementById("username");

var reg=/^s*$/;

if(reg.test(username.value)==true){

userna.innerHTML="用户名不能为空!";

return false;

}

userna.innerHTML="";

return true;

 }

 function checkpassword(){

 var password=document.form1.password;

var password11=document.getElementById("password11");

var reg=/^[a-zA-Z]w{5,17}$/;

if(reg.test(password.value)==false){

password11.innerHTML="以字母开头,长度在6-18之间,只能包含字符、数字和下划线!";

return false;

}

password11.innerHTML="";

return true;

 }

 function checkuserage(){

 var age=document.form1.age;

var userage=document.getElementById("userage");

var reg=/^([1-9]|[1-9][0-9]|(1[01][0-9]|120))$/;

if(reg.test(age.value)==false){

userage.innerHTML="年龄在0-120之间";

return false;

}

userage.innerHTML="";

return true;

 }

 

 function checkusertel(){

 var mobile=document.form1.mobile;

var usertel=document.getElementById("usertel");

var reg=/^d{11}$/;

if(reg.test(mobile.value)==false){

usertel.innerHTML="号码为11位数字!";

return false;

}

usertel.innerHTML="";

return true;

 }

</script>

</head>

<body>

<div class="main">

<div class="optitle clearfix">

<div class="title">用户管理>></div>

</div>

<form id="form1" name="form1" method="post" action="UserAddServlet" onsubmit="return checkit();">

<input type="hidden" name="flag" value="doAdd">

<input type="hidden" name="userid" value="${item.userid }" />

<div class="content">

<table class="box"><font color="red"></font>

<tr><td class="field">用户编号:</td>

<td><input type="text" name="userno" id="textfield"  class="text"  value="${item.userno}" onfocus="checkuserno()"/><span id="userno"><font color="red">*</font></span></td></tr>

<tr><td class="field">用户名称:</td>

<td><input type="text" name="username" class="text" id="textfield2"  value="${item.username }" onfocus="checkusername()"/><span id="username"><font color="red">*</font></span></td>

</tr>

<c:if test="${item.userid==null }">

<tr>

<td class="field">用户密码:</td>

 

<td><input type="password" name="password" class="text" id="textfield2" onfocus="checkpassword()"/><span id="password11" style="font-size:14px"><font color="red" >*</font></span> </td>

</tr>

<tr>

<td class="field">确认密码:</td>

<td><input type="password" name="password1" class="text"/><font color="red">*</font></td>

</tr>

</c:if>

<tr>

<td class="field">用户性别:</td>

<td><select name="usersex" id="select">

     <option value="0" <c:if test="${item.usersex==0}">selected</c:if> ></option>

    <option value="1" <c:if test="${item.usersex==1}">selected</c:if> > </option>

   

  </select></td></tr>

<tr><td class="field">用户年龄:</td>

<td><input type="text" name="age" class="text" id="textfield2"  value="${item.userage }" onfocus="checkuserage()"/><span id="userage"><font color="red">*</font></span></td></tr>

<tr><td class="field">用户电话:</td>

<td><input type="text" name="mobile" class="text" id="textfield2"  value="${item.usertel }" onfocus="checkusertel()"/><span id="usertel"><font color="red">*</font></span></td></tr>

<tr><td class="field">用户地址:</td>

<td><textarea name="address" id="textarea" class="text" cols="45" rows="5" >${item.useraddress}</textarea></td>

</tr><c:choose>

<c:when test="${item.userid==null }"><tr>

<td class="field">用户权限:</td>

<td><input type="radio" name="auth" id="auth" value="0" checked="checked"/>普通用户

<input type="radio" name="auth" id="auth" value="1" />经理 </td>

</tr>

</c:when>

<c:otherwise>

<tr><td class="field">用户权限:</td>

<td>${item.userlimit==0?"普通用户":"经理"}</td></tr>

</c:otherwise>

</c:choose>

</table>

</div>

<div class="buttons">

<c:choose>

<c:when test="${item.userid==null }">

<input type="submit" name="button" id="button" value="数据提交" class="input-button"/>

           <input type="button" name="button" id="button" onclick="window.location=‘GetUsersServlet‘;" value="返回" class="input-button"/>

</c:when>

<c:otherwise>

                                 <input type="button" name="button" id="button" onclick="window.location.href=‘GetUsersServlet‘;" value="返回" class="input-button"/>

              <input type="submit" name="button" id="button"  value="修改" class="input-button"/>  

      <a href="javascript:if(confirm(‘确定要删除吗?‘)){window.location.href=‘DodeleteUserServlet?userid=${item.userid}‘}"><input type="button" name="button" id="button"value="删除" class="input-button"/></a>   

  <input type="button" name="button" id="button" onclick="window.location=‘TopasswordServlet?userid=${item.userid}‘;" value="修改密码" class="input-button"/>  

</c:otherwise>

</c:choose>

</div>

</form>

</div>

</body>

</html>

以上是关于如何使用java web制作超市账单管理系统的主要内容,如果未能解决你的问题,请参考以下文章

基于Java的超市账单管理系统

超市账单管理系统之-------登录

超市账单管理------之获取总记录数

超市帐单系统

在 Xamarin UWP 中打印账单

如何确定角度应用的合适设计模式