第一部分:项目概述
第二部分:项目构成模块及其功能
第三部分:项目测试
第四部分:总结和提升
附录:程序代码 (打开项目时请用visual studio打开名为P8.vcxproj的工程文件)
源代码链接:https://pan.baidu.com/s/1VMp81glMiUWT533fXFikVw 提取码:feui
第一部分:项目概述
- 项目概述
第二部分:项目构成模块及其功能
- 项目各模块设计思路及其功能
- 项目达成目的
第三部分:项目测试
- 登陆界面
- 系统主界面
- 购物车界面
- 添加商品
- 更改商品
- 查看商品特殊信息
- 删除商品
第一部分:项目概述
- 项目概述
- 项目概述
随着 “网络空间命运共同体”这一倡议的提出,以及21世纪计算机行业飞速的发展,越来越的多年轻人开始选择网上购物,被我们一直以来认为很少网购的老年人也加入到网购行列中来,可以说网购现在已经成为一种趋势,成为人们的一种生活方式。在发达城市,你可以足不出户享受清晨从农人田里摘来的新鲜果蔬,也可以享受几百公里外的特色美味,还可以购得国外的新潮商品。这些都得益于我们飞速发展的互联网,然而在这其中个人购物车管理就显得尤为重要。
我设计这个项目时,受启发与java课程中的一个网站购物管理系统中的购物车管理系统,从购物车管理系统联想到了以后的物流管理系统,再到人工智能管理物流,使快递小哥哥再也不用风里雨里地送快递啦!对于用户来讲,本系统能更好的为其管理购物车而设计,其中有几个大的模块,第一个是用户账号管理模块,第二个是购物车管理模块;同时也分别实现了对这两个模块数据的持久化。
- 系统基本功能
- 用户管理模块
- 用户登录
- 新用户的注册
- 购物车管理模块
- 添加商品
- 删除商品
- 修改商品
- 预览购物车中的商品
- 查看价格最高、最低以及数量最多最少的商品
- 项目达成目的
在本项目,首先实现了已有用户的登陆和新用户的注册,实现了用户信息的持久化,存放在 “用户管理文本文件”中;也实现了用户购物车中商品信息的持久化。
其次,实现了用户在购物车中增加、删除、查找、更改商品的功能,能够较好的实现商品信息管理。
第二部分:项目构成模块及其功能
- 项目各模块设计思路
- 登陆页面类
- LoginPage类图
|
LoginPage |
|
|
+SetLoginPage(us[]:CommodityClass*p int):int |
设置登录界面,验证用户的合法性 |
|
+CheckLoginInfo(us[]:CommodityClass*p intuserId:stringpsw:string):int |
检查登录信息的正确性 |
|
-JoinWindows(userId:stringpsw:stringus[]:CommodityClass *p:int):int |
设置登录窗口 |
|
-NewWindows(us[]:CommodityClass*p:int):int |
设置注册窗口 |
|
-ComWindows():void |
设置通用窗口(包含了登陆和注册选项) |
- 设计思路
设计了面向用户的登陆的三个方法,将用户登录和新用户的注册,也就是JoinWindows和NewWindows方法集成在私有方法ComWindows中,在SetLoginPage方法调用ComWindows,完成对登录界面的设置,达到只需要调用一个方法就可以进行接下来的两种不同的选择。
CheckLoginInfo是对新注册用户和已有用户登陆是用户名和密码的核对,采用“==”判别两个string型变量,也即是用户名和密码的核对。
- 购物车主菜单类
- MainMenu类图
|
MainMenu |
|
|
+mainMenu(us[]:CommodityClassid:int*p:int):void |
设置购物车主页面 |
|
+saveUser(users[]:CommodityClass *p:int):void |
保存用户购物车中的商品 |
- 设计思路
mainMenu是用户在登陆之后显示的系统的主界面,如果是新用户注册,那么就通过saveUser把用户的信息保存在文本文档当中。
- 用户类
- UserClass类图
|
UserClass |
|
|
+UserClass() |
默认构造函数 |
|
+UserClass(id:stringpsw:stringname:string age:intsex:chartelph:stringmail:string) |
用户含参构造函数 |
|
+UserInfoShow():void |
显示用户信息 |
|
+setUserId(id :string):void |
设置用户id |
|
+getUserId() |
得到用户id |
|
+getPassword() |
得到用户密码 |
|
+setPassword |
设置用户密码 |
|
+getUserName() |
得到用户名 |
|
+setUserName |
设置用户名 |
|
+getUserAge() |
得到用户年龄 |
|
+setUserAge |
设置用户年龄 |
|
+getUserSex() |
得到性别 |
|
+setUserSex |
设置性别 |
|
+getTelephone() |
得到电话号码 |
|
+setTelephone |
设置电话号码 |
|
+getE_mail() |
得到邮箱 |
|
+setE_mail |
设置邮箱 |
|
-useId:string |
用户id |
|
-password:string |
用户密码 |
|
-userName:string |
字符串类型姓名 |
|
-userAge:int |
整数类型年龄 |
|
-userSex:char |
字符类型性别 |
|
-telephone:string |
电话号码 |
|
-e_mail:string |
邮箱地址 |
。
- 设计思路
含参构造方法UserClass(id:stringpsw:stringname:string age:intsex:chartelph:stringmail:string)是用于在新用户注册时,对用户类对象的实例化。
用户信息分别包括了用户id、姓名、密码、年龄、邮箱、电话号码、性别,同时也设置了get和set方法,是用户信息可以通过外部方法进行获取和更改。
- 商品类
- CommodityClass类图
|
CommodityClass |
|
|
+ commodityInfo:vector<CommodityInfo> |
定义了一个容器,每个元素包括每一件商品的各类信息 |
|
+cartSum:float |
购物车中的总金额 |
|
+CommodityClass() |
无参构造方法 |
|
+AddCommodityInfo(Account:CommodityInfo):void |
在购物车中添加商品 |
|
+UsercommodityInfoShow():void |
展示登陆用户的信息 |
|
+showCommodities():void |
展示购物车中商品的信息 |
|
+getComInfoNum():int |
得到购物车中的商品总数 |
|
+setCartMoney(money:float):void |
设置购物车中商品的金额 |
|
+getcartMoney():float |
获取当前购物车的商品金额 |
|
+CommoditiesSave():void |
保存购物车中商品到文件 |
|
+userCommoInfoRead():void |
在文件中读取用户的购物车信息 |
(说明:商品类继承自用户类,每个用户都有专属的商品类)
- 设计思路
将每个用户的购物车中的商品信息都放在一个向量容器中,在购物车中方便商品总额的计算,方便对商品的增加和删除,方便对商品信息的更改等等,它是一个高度封装的数据操作集。
userCommoInfoRead按照登陆用户的id,把用户的购物车信息读取到CommodityInfo类对象中。
- 购物车操作类
- CartRecordPage类图
|
CartRecordPage |
|
|
+CartInfoShow(&userCommodity:CommodityClass):void |
列出购物车中所有的商品 |
|
-addCommodity(&userCommodity:CommodityClass):void |
在个人购物车中加入商品 |
|
-deleCommodity(&userCommodity:CommodityClass):void |
从个人购物车中删除商品 |
|
-CommodityInfoEdit(&userCommodity:CommodityClass ):void |
编辑购物车的商品 |
|
-void commodityMaxMin(CommodityClass &userCommodity) |
查看购物车中商品的信息 |
|
-ConfirmInfo():bool |
对某次输入信息的确认 |
- 设计思路
CartInfoShow方法展示了购物车中所有的操作信息,通过addCommodity、deleCommodity、deleCommodity、CommodityInfoEdit、commodityMaxMin实现了对购物车中商品的增、删、查、改。同时在添加和删除上平时用ConfirmInfo向用户确认输入。
- 商品信息类
- CommodityInfo类图
|
CommodityInfo |
|
|
+CommodityInfo(mnam="":stringmon = 0:floatnum=0:intdesc = "":stringinCondc = true:bool) |
含参构造函数 |
|
+getDate():string |
得到商品的加入时间 |
|
+setDate(accDate:string):void |
设置商品的加入时间 |
|
+getName():string |
得到商品名 |
|
+setName(string name):void |
设置商品名 |
|
+getMoney():float |
得到商品金额 |
|
+setMoney(money:float):void |
设置商品金额 |
|
+setNumber(int number):void |
设置商品数量 |
|
+getNumber():int |
得到商品数量 |
|
+getDescribe():string |
得到商品详情 |
|
+setdescribe(describe:string):void |
设置商品详情 |
|
+getcondition():bool |
得到添加、删除购物车状态信息 |
|
+setcondition(inCond:bool):void |
设置添加、删除标记信息 |
|
+condtion:bool |
购物车商品状态,标识true为添加,false为删除 |
|
-mname:string |
商品名称 |
|
-money:float |
商品价格 |
|
-number:int |
商品数量 |
|
-describe:string |
商品详情 |
|
-addDate:string |
商品加入时间 |
- 设计思路
设计了一个含参的商品信息构造方法,CommodityInfo(mnam="":stringmon = 0:floatnum=0:intdesc = "":stringinCondc = true:bool),实现对单条商品信息的实例化;同时设计了商品的状态condtion,通过condition的true或者fals判断一条商品是被添加还是删除;需要说明的是,只需要通过实例用户的商品信息容器中的setcondition对购物车商品进行删除。
- 查询商品信息类
- queryCartPage类图
|
queryCartPage |
|
|
+cartCommodityShow(&commodityInfo:CommodityClass):void |
查询商品信息的页面 |
- 设计思路
用cartCommodityShow调用了商品信息类中的购物车商品信息展示函数showCommodities对购物车信息进行展示。
- 时间戳类
- TimeStamp类图
|
TimeStamp |
|
|
+TimeStamp(long s = 0) |
时间标签类无参构造函数 |
|
+ get():time_t |
时间标记的整数表示 |
|
+getAsString():string |
时间标记的字符串表示(例如:Sun Mar 09 14:27:25 2014) |
|
+getYear():string |
时间标记的年 |
|
+getMonth():string |
时间标记的月 |
|
+getDay():string |
时间标记的日 |
|
+getHour():string |
时间标记的小时 |
|
+getMinute():string |
时间标记的分钟 |
|
+getSecond():string |
时间标记的秒 |
|
+getWeek():string |
时间标记的星期 |
|
+getYearMonthDay() |
时间标记的字符串表示(年-月-日格式,例如:2014-03-09) |
|
-extract( int pos int len):string |
固定输出日期的长度 |
|
-stamp:time_t |
日期变量 |
- 设计思路
定义了无参构造函数,为了更灵活的对日期和时间进行操作,分别又定义了获取年份、月份、日、小时、分钟、秒数的方法,用以得到这些数值。
- 项目达成目的
- 实现新用户的注册;
- 实现新用户信息写入文本文档;
- 实现老用户的登录;
- 实现老用户信息从文本文档中读取;
- 实现对当前登录用户信息的查看;
- 实现购物车中商品信息的增、删、查、改,其中“查”中可以查到购物车中最贵的商品和最便宜的商品,也可以查到购物车中数量最多的商品和数量最少的商品;
- 实现了对购物车中商品信息写到当前用户所对应的文本文件。
第三部分:项目测试
- 登录界面
- 用户注册
新用户数据的持久化:
- 用户登录
- 系统主界面
查看账户信息:
- 购物车界面
- 添加商品
购物车预览:
文本文件查看:
- 更改商品
购物车中查看:
- 查看商品特殊信息
- 删除商品
查看购物车删除情况:
查看文本文件删除情况:
第四部分:总结和提升
- 总结
本次面向对象程序设计让我对于利用面向对象的思维解决问题有了更深层次的理解,本程序设计充分体现了面向对象中的封装、继承、多态三大特性,同时也利用了容器的概念来实例化类对象数组。程序代码大概接近1200行,虽说对于现阶段来讲,这些代码量非常大,但是通过类继承和函数调用的思想都可以比较全面的设计程序的执行过程。
该程序是基于微软公司的编程集成开发环境Visual Studio 2012开发的,在为期一周的开发过过程中,从最初的什么素材都没有,只能通过学习课本上的项目来设计自己程序的思路,在开发过程中遇到了外部变量无法解释,连接文件错误,访问内存冲突,内存读写冲突等等的问题,通过课下问老师、问同学、上网查阅资料,最终都解决了程序中遇到的错误,使程序更接近预期的设计。
- 不足
因为设计该程序时接近期末,有好多功能都为实现,也有一些运行时无法解决的错误,比如不能对所有用户的信息进行查看,在添加商品时不能判断是否与购物车中的商品有重复;在运行时,只有完全执行完程序后,才能保存购物车信息到对应的文本文件当中。