JAVA简单项目购物系统的整个开发过程详解内含源码和注释Word下载.docx
《JAVA简单项目购物系统的整个开发过程详解内含源码和注释Word下载.docx》由会员分享,可在线阅读,更多相关《JAVA简单项目购物系统的整个开发过程详解内含源码和注释Word下载.docx(39页珍藏版)》请在冰豆网上搜索。
(8)GiftManagement类:
用于处理抽奖活动的相关功能。
这个类和(6)、(7)中的类存在的理由基本一致,该类对抽奖活动进行了统一管理,上一级菜单只需要通过调用该类的方法就可以实现抽奖的功能。
(9)Gift类:
用于管理礼物。
既然设计了抽奖环节,那么肯定需要礼物,那么我们会给出什么样的礼物呢,我们总不能每一样礼物都详细列出来吧,这样十分冗余,也很麻烦,所以我们干脆抽象出一个礼物类,把礼物的一些属性:
礼物名称和价格等保存成该类的成员变量,然后就可以很方便的管理该类,需要什么样的礼物就直接新建一个礼物对象,然后对该对象的属性进行修改和管理即可,这样的实现类似于一个接口,但是又和接口完全不一样,功能差不多。
总之,上面的类都是经过一些功能模块划分后抽象出来的,有些地方也并不一定合理,主要还是需要看需求,根据不同的需求制定不同的方案。
在这里,我想就”Gift类“再强调一点,这个类的设计十分符合面向对象的思想,举个例子来看,如果购物系统中需要很多礼物,比如手机、电脑、移动电源等,那么如果我们一个个写这些礼物,会使得系统代码十分冗余,因为礼物的属性基本一样,所以我们就可以抽象成一个类,从而在需要什么礼物的时候只定义一个对象,然后赋予一定的属性即可,比如需要手机、电脑,那么我们只需要new一个Gift类的对象,然后在需要手机的时候设置其属性为手机,在需要电脑的时候设置其属性为电脑,需要什么设置什么即可,这样就使得我们的代码得到了简化,也使得结构比较清晰。
在更为复杂的系统中,其实礼物用接口来实现更为合理,这样就可以根据该接口实现不同的礼物类,从而满足不同的需求,就类似于我们的电脑上的USB接口,只需要这个接口,我们就可以插上很多各种各样的外围设备,道理差不多。
2.购物系统的类之间的关系和流程(用图示法表示)
下图是我用MicrosoftOfficeVisio2003画图工具画出的这9个类之间的关系。
从上图中可以清晰地看出来各类之间的关系,大致关系和流程如下所述:
(1)StartSMS类是启动类,内含main方法,这个类里面定义了VerifyEqual类和Data类的对象,用来存储数据和验证信息,同时Data类中包含了Manager类,用来存储预存的用户账号信息,然后在main方法中通过一定的逻辑,去调用Menu类中的showLoginMenu()方法,用于处理一级菜单---登录修改流程;
(2)如果登录成功,就调用Menu类中的showMainMenu()方法,用于处理二级菜单---购物系统的主流程,如果登录失败3次,就直接退出系统;
(3)在Menu类中的showMainMenu()方法中,通过选择不同的二级菜单选项,从而调用Menu类中的showCustMMenu()方法来处理客户信息管理流程或者调用Menu类中的showSendMenu()方法来处理抽奖活动流程,亦或者调用Pay类中的calcPrice()方法来处理购物结算流程;
(4)如果选择了二级菜单中的客户信息管理选项,那么就会调用Menu类中的showCustMMenu()方法,这个方法会调用CustManagement类中的各种方法,用以处理客户信息管理的不同操作;
(5)如果选择了二级菜单中的购物结算选项,那么就会调用Pay类中的calcPrice()方法,从而处理购物结算的流程,注意在Pay类中的getDiscount()方法是用来根据客户会员信息来计算打折率的;
(6)如果选择了二级菜单中的真情回馈选项,即抽奖活动,那么就会调用Menu类中的showSendMenu()方法,这个方法会调用GiftManagement类中的各种方法,用以处理抽奖活动的不同操作;
注意到在CustManagement类和GiftManagement类中都有一个returnLastMenu()方法,该方法是用来返回上一级菜单使用的。
3.代码实现
需要说明的一点是这些代码都应该放在cn.itcast包下。
3.1
StartSMS类
[java]viewplaincopy
1.package
cn.itcast;
2.import
java.util.Scanner;
3./**
4.
*
该类是这个系统的主方法类,用于启动购物系统
5.
6.
@author
7.
8.
*/
9.publicclass
StartSMS
{
10./**
11.
空构造方法
12.
13.
14.public
StartSMS()
15.
}
16./**
17.
系统主方法
18.
19.
@param
args
20.
21.publicstaticvoid
main(String
args[])
22.//
创建已有的数据类的对象,并初始化已有的商品信息和顾客信息
23.
Data
data
=
new
Data();
24.
data.initial();
25.//
创建菜单类的对象
26.
Menu
menu
Menu();
27.//
这里将初始化的已有数据信息送给了菜单对象
28.
menu.setData(
29.
data.goodsName,
30.
data.goodsPrice,
31.
data.custNo,
32.
data.custBirth,
33.
data.custScore);
34.//
显示一级菜单,即登录界面
35.
menu.showLoginMenu();
36.//
该标志用来判断是否发生了系统操作错误,当操作不当的时候flag为假,从而退出系统,默认为无错误
37.boolean
flag
true;
38.//
处理整个系统的流程
39.do
40.//
发生操作错误,退出系统
41.if
(!
flag)
42.break;
43.//
创建验证用户登录的账户和密码是否正确的类的对象,这里只创建对象,并没有执行验证方法
44.
VerifyEqual
verifyequal
VerifyEqual();
45.//
输入一级菜单中的选择
46.
Scanner
scanner
Scanner(System.in);
47.int
i
scanner.nextInt();
48.//
根据用户对一级菜单的选择做出不同的响应,注意这里就是经典的switch-case的用法
49.switch
(i)
50.case1:
//
用户选择"
登录系统"
51.//
定义计数器,表示用户最多只能尝试3次,3次输入错误直接退出系统
52.int
j
3;
53.//
处理登录系统的流程
54.do
55.if
(verifyequal.verify(data.manager.username,
56.
data.manager.password))
57.//
用户登录成功,显示购物二级菜单!
!
58.
menu.showMainMenu();
59.break;
60.
61.if
(j
!
1)
62.//
用户输入有误,还没有达到3次,允许重新输入
63.
System.out.println("
\n用户名和密码不匹配,请重新输入:
"
);
64.
else
65.//
3次尝试结束,设置退出标志,并退出do-while循环
66.
\n您没有权限进入系统!
谢谢!
67.
false;
68.break;
69.
70.//
每输入一次将计数器减1,用于表示已经尝试了多少次
71.
j--;
72.
while
(true);
73.break;
74.case2:
更改管理员信息"
75.if
76.
77.//
输入新信息前要先验证原来的信息,此处表示已经验证成功
78.
System.out.print("
请输入新的用户名:
79.
data.manager.username
scanner.next();
80.
请输入新的密码:
81.
data.manager.password
82.
用户名和密码已更改!
83.//
信息更改成功,选择下一步的操作
84.
\n请选择,输入数字:
85.
86.//
信息验证失败,设置退出标志
87.
抱歉,你没有权限修改!
88.
89.
90.break;
91.case3:
退出"
92.
谢谢您的使用!
93.
System.exit(0);
94.break;
95.default:
一级菜单输入错误,需要重新选择
96.
\n输入有误!
请重新选择,输入数字:
97.break;
98.
99.
(flag);
100.
101.}
3.2
Data类
2./**
3.
存放购物系统的初始化数据的数据类,该类只是存放了已有的商品信息和顾客信息
8.publicclass
9./**
10.
默认构造方法,初始化变量,由于都是数组对象或类对象,所以都需要采用new
13.public
Data()
14.
goodsName
String[50]
;
goodsPrice
newdouble[50]
16.
custNo
newint[100]
custBirth
String[100];
custScore
manager
Manager()
21./**
22.
初始化该类的数据
25.publicvoid
initial()
26./*====================添加了初始的7种商品信息====================*/
27.
[0]
addidas运动鞋"
goodsPrice[0]
880D;
[1]
Kappa网球裙"
goodsPrice[1]
200D;
[2]
网球拍"
goodsPrice[2]
780D;
[3]
addidasT恤"
34.
goodsPrice[3]
420.77999999999997D;
[4]
Nike运动鞋"
36.
goodsPrice[4]
900D;
37.
[5]
Kappa网球"
38.
goodsPrice[5]
45D;
39.
[6]
KappaT恤"
40.
goodsPrice[6]
245D;
41./*====================添加了初始的7个顾客信息====================*/
42.
1900;
43.
custBirth[0]
08/05"
custScore[0]
2000;
45.
1711;
custBirth[1]
07/13"
47.
custScore[1]
4000;
48.
1623;
49.
custBirth[2]
06/26"
50.
custScore[2]
5000;
51.
1545;
52.
custBirth[3]
04/08"
53.
custScore[3]
2200;
54.
1464;
55.
custBirth[4]
08/16"
custScore[4]
1000;
57.
1372;
custBirth[5]
12/23"
59.
custScore[5]
3000;
1286;
61.
custBirth[6]
12/21"
62.
custScore[6]
10080;
64./*====================定义该类所拥有的变量====================*/
65.public
String
[];
商品的名称
66.publicdouble
goodsPrice[];
商品的价格
67.publicint
顾客的会员号
68.public
顾客的生日
69.publicint
顾客的积分
70.public
Manager
管理员类,仅仅存储了管理员的用户名和密码
71.}
3.3
Manager类
@author
设置默认的用户名和密码
username
itcast"
password
17./*====================定义该类所拥有的变量====================*/
18.public
username;
用户名
19.public
password;
密码
20.}
3.4
VerifyEqual类
验证用户登录的账户和密码是否正确的类
Veri