课程设计客户积分管理系统Word文档下载推荐.docx
《课程设计客户积分管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《课程设计客户积分管理系统Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
完成课程设计题目《客户积分管理系统》
进度安排及主要内容:
第一周:
调研;
需求分析及总体设计;
规范化数据结构模型;
设计数据结构。
第二周:
详细设计及测试;
使用具体语言实现算法;
调试程序;
编写课程设计报告。
成绩:
指导教师(签字)
年月日
一、概述
在我们的生活中,很多超市、酒店等都有vip卡,可以通过记录客户每次的消费情况计以积分,并根据不同的消费情况还会给予客户不同程度的优惠,以此方式来激励客户进行更多的消费,而商家需要一个可以做客户积分管理的系统来帮助其完成计入积分、计算折扣等操作。
在这样的理念下,本程序实现了一个小型的客户积分管理系统,可针对客户的消费情况,进行客户管理,并且根据客户的消费积分对客户实行不同的优惠。
二、需求分析
题目要实现一个客户积分管理系统,因其经常需要进行增删客户,故经考虑,应选取链式结构作为其存储结构,从而减少增删过程中频繁进行大量数据移动。
三、技术方案
在Windows7平台下,利用MicrosoftVisualStudio2010,以C++为主体,在数据结构的理论指导下,通过使用链表这种存储结构,实现对客户积分信息的管理,实现了一个简易的客户积分管理系统,可以通过客户积分对客户进行不同的折扣优惠和相关信息的管理。
四、总体设计
在使用系统过程中,我们需要根据客户的情况对客户进行一系列的操作:
添加客户、查找客户、删除客户、修改客户等,其对应着链表的增加节点、查找特定节点、删除节点、修改节点信息等,我们通过对链表节点的操作来实现对客户信息的管理,从而进行一系列的操作。
五、详细设计
1客户积分管理系统的功能模块
程序主要分为六大功能模块:
添加客户、查找客户、删除客户、修改客户、显示所有客户、统计客户,通过这六大模块可对客户积分进行管理。
图-1
2程序的业务流程
图-2
3具体功能实现
3.1主菜单界面
在控制台上显示所能进行的操作及对应的编号(如图-3),并提示输入根据输入的内容调用对应的功能。
图-3
3.2添加客户信息
给链表添加节点从而实现添加客户信息,节点信息包括姓名、ID、消费金额以及对应折扣。
当在主菜单界面输入1时,进入该功能函数,依次要求输入姓名、身份证号(并且对身份证号码进行校验,当不符合身份证号编码规则时提示重新输入)、消费金额。
当输入完成后,页面显示折扣。
后再次进入主菜单并提示输入一个数字选择后续操作。
运行过程如图-4所示。
3.3查找客户信息
通过对链表节点的遍历并进行节点ID匹配进行查找对应客户,当查找成功时,输出客户信息;
反之,输出“不存在该客户!
”。
之后进入主菜单界面并提示输入一个数字选择后续操作。
运行情况如图-5所示。
3.4修改客户信息
通过ID找到对应客户修改其信息,在消费情况上可选择覆盖以前消费或者续加此次消费,然后显示出修改后的客户信息;
若系统中没有该ID,则提示“不存在该客户!
后程序进入主菜单并提示输入一个数字选择后续操作。
如图-6所示。
图-4
图-5
图-6
3.5删除客户信息
通过ID找到对应客户,然后输出其信息,经过确认之后删除其信息。
3.6显示所有客户
遍历输出所有节点信息,在链表不为空的情况下
while(p->
next!
=NULL)
{
p=p->
next;
cout<
<
"
姓名:
"
p->
name<
endl;
身份证号:
ID<
消费:
setprecision
(2)<
consume<
积分:
integer<
y=display_discount(p->
integer);
折扣:
y<
折"
}
如图-7所示
图-7
3.7统计客户数目
遍历链表对客户进行计数,而后输出客户数目。
当客户数目不为空时
i++;
cout<
现有客户数量为"
i<
位!
之后进入主菜单页面并提示输入一个数字选择后续操作。
六、软件测试
1测试方案
依次测试程序的相关功能,对每个功能都进行多次测试,并记录测试结果。
对每个功能的各输入项进行不同格式的输入,检测其是否可以按预期运行,测试程序的健壮性和可行性。
2测试用例及测试结果
2.1添加客户
首先输入姓名,之后输入身份证号码,当输入的身份证号不足18位或者不符合身份证号编码规则时,提示所输入的格式不正确,并要求重新输入,如图-8所示。
当身份证号码输入正确后,要求输入消费金额,之后输出并进入主菜单界面,如图-9所示。
图-8
图-9
其余测试属于及测试情况如表-1所示
表-1添加客户信息测试数据及测试情况
测试项
测试数据内容
程序反应
姓名
为空
需要重新输入
Adad
读入成功
Daads1331
ID
411141241
要求重新输入
411233aaaaaaaaaaaaa1
411209************
41121019900989112S
41120919870987789X
消费情况
1
9.8折
3000
13232
9.2折
143233
7折
6000
9.5折
9000
17000
9折
24000
8折
2.2查找客户
当链表为空时,弹出界面如图-10,提示“没有客户!
图-10
当身份证号输入不正确时,提示输入格式不正确,并要求重新输入。
当身份证号输入正确并且链表不为空时,遍历进行ID的字符串匹配,当不存在该ID时,系统提示不存在该客户;
当查询成功时,输出对应客户的相关信息,如图-7所示。
图-11
2.3修改客户
当链表为空时,提示没有客户。
当链表不为空时,提示输入要修改的客户的ID,若没有此客户,则提示不存在此客户!
反之,输出该客户信息,并提示输入选择所要修改的信息项,然后输入修改之后的内容,之后输出修改后的客户信息,如图-12所示
图-12
2.4删除客户
当链表不为空时,提示输入要删除的客户ID,进行ID匹配,若找不到提示不存在该客户,反之,显示对应客户信息,并提示是都确认删除,进行“确定”、“取消”的选择,操作之后进入主菜单,如图-13所示。
图-13
2.5显示客户
当链表为空时,提示没有客户,反之依次输出所有客户信息。
之后进入主菜单界面。
2.6统计客户
链表为空时,显示“没有客户”,反之提示客户数目。
七、总结
在程序刚开始时,由于节点中包括string类型,利用malloc开辟空间,但未调用相应的构造函数,string对象未进行实例化,从而引发内存使用问题导致程序不能正常运行,在上网查资料和认真思考之后,改malloc为使用new从而解决问题。
New和malloc都具有按需开辟空间的功能,但new同时调用构造函数对相关对象进行实例化。
第一次使用Visio,刚开始画出的图出现这样那样的问题,经过几次制作之后慢慢找到了一些感觉,发现Visio是一个很强大的工具。
附录1
参考文献
[1]StephenPrata.C++PrimerPlus第6版[M].北京:
人民邮电出版社,2012.
[2]stpeace聊聊malloc和new的区别---当malloc和string相遇时,容易出错.
[3]ThomasH.CormenCharlesE.LeisersonRonaldL.RivestCliffordStein.算法导论第3版[M].北京:
机械工业出版社,2013.
[4]谭浩强.C++程序设计[M].北京:
清华大学出版社,2011.
附录2
程序主要代码
/**客户消费积分管理系统的设计与实现
*针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
*1、采用一定的存储结构进行客户信息的存储;
*2、对客户的信息可以进行修改、删除、添加;
*3、能够根据消费情况进行客户积分的累加
*4、根据积分情况,对客户实行不同程度的打折优惠;
**/
#include<
iostream>
iomanip>
#include"
stdlib.h"
string>
usingnamespacestd;
boolisID(string&
);
typedefstructcnode
{
charname[20];
stringID;
doubleconsume;
doubleinteger;
structcnode*next;
}cnode;
voidInitstack(cnode*&
head)/*初始化链表*/
head=newcnode();
//开辟节点空间
head->
next=NULL;
voidGetelem(cnode*head);
voidSearch(cnode*head,string&
ID);
voidAmend(cnode*head,string&
voidDelete(cnode*head,string&
voidShowall(cnode*head);
voidcount(cnode*head);
doubledisplay_discount(doubleinteger);
intmain()
cnode*head;
intchoice;
stringy;
Initstack(head);
do
{
客户消费积分管理系统"
******************************"
**"
*主菜单*"
*1添加客户*"
*2查找客户*"
*3修改客户*"
*4删除客户*"
*5显示客户*"
*6统计客户*"
*7退出*"
请输入您的选择(1,2,3,4,5,6):
;
cin>
>
choice;
if(choice==1)
Getelem(head);
//添加
elseif(choice==2)
请输入您查找客户的身份证号:
y;
isID(y);
Search(head,y);
//查找
}
elseif(choice==3)
请输入您想修改客户的身份证号:
Amend(head,y);
}//修改
elseif(choice==4)
请输入你想要删除的客户的身份证号:
Delete(head,y);
}//删除
elseif(choice==5)
Showall(head);
//显示
elseif(choice==6)
count(head);
//统计
elseif(choice==7)
exit
(1);
while(choice<
=7);
system("
pause"
return0;
voidGetelem(cnode*head)
//添加客户函数以头节点为参数
cnode*p;
doubley;
p=newcnode;
p->
next=newcnode;
/*申请空的节点空间*/
ID="
请输入姓名:
name;
请输入身份证号(18位):
ID;
isID(p->
请输入消费金额:
consume;
integer=p->
consume/100;
//调用函数计算折扣
折扣:
/*<
setprecision
(1)*/<
y<
next=head->
next=p;
ID)
cnode*p=newcnode;
p=head;
if(p->
next==NULL)
没有客户!
else
while(p->
if(ID==p->
ID)//判断身份证号是否相同
{
/*setprecision
(2)<
*/p->
积分:
折扣"
/*setprecision
(1)<
*/y<
return;
不存在该客户!
/*
修改客户函数
通过ID获取信息
可以修改身份证号、姓名、消费金额
修改消费金额有覆盖原有金额及续加两种方式
*/
ID){
doubley,z;
intchoose,x;
setprecision
(2)*/<
请选择你要修改的1、姓名。
2、身份证号。
3、消费金额。
choose;
if(choose==1)
请输入修改后姓名;
if(choose==2)
请输入修改后的身份证号:
if(choose==3)
1.覆盖以前消费、2.续加上现在费用!
请选择:
x;
if(x==1)
请输入修改后的消费:
else{
printf("
请输入续加金额:
z;
consume+=z;
consume/100.0;
//删除客户函数
intx;
head=p;
ID)
{//判断身份证号是否相同
你确认删除?
1、确定。
2、取消。
next=p->
("
删除成功!
删除失败!
return;
}
voidShowall(cnode*head)//显示所有客户函数
voidcount(cnode*head)
inti=0;
doubledisplay_discount(doublepoints)
//计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣
doublediscount;
if(points==0)
discount=0;
if(points>