客户消费积分管理系统.docx
- 文档编号:12473993
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:30
- 大小:327.16KB
客户消费积分管理系统.docx
《客户消费积分管理系统.docx》由会员分享,可在线阅读,更多相关《客户消费积分管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
客户消费积分管理系统
目录
一、系统开发的背景1
二、系统分析与设计1
(一)系统功能要求1
(二)系统模块结构设计1
三、系统的设计与实现2
(一)添加客户:
Getelem(cnode*head)2
(二)修改客户Amend(cnode*head,charname[])5
(三)删除客户Delete(cnode*head,charname[])8
(四)显示客户voidShowall(cnode*head)10
四、系统测试12
(一)测试voidnain()函数12
(二)部分调用函数的测试13
五、总结14
六、附件(代码)14
客户消费积分管理系统
一、系统开发的背景
为了能够快速根据客户的消费积分计算打折后的价格,以及优惠后的价格,给客户以心理上的刺激,激发客户的消费欲望。
并且减轻收银员的工作负担;因此,我特别编写了一套有关客户消费积分管理的系统,来方便在日常生活中的使用。
二、系统分析与设计
(一)系统功能要求
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
1、对客户的信息可以进行修改、删除、添加;
2、能够根据消费情况进行客户积分的计算;
3、根据积分情况实行不同程度的打折优惠;
(二)系统模块结构设计
通过对系统功能的分析,客户消费积分管理系统功能如图
(1)所示。
图
(1)客户消费管理系用统图
通过上图的功能分析,首先定义了一个数据域,来存储客户的基本信息;其次,基本函数成员有姓名,消费卡号,消费价格以及折扣后的价格。
最主要的是运用While语句和switch语句的套用来实现,此外,就是要用到malloc函数来存储客户的信息分配内存。
把整个系统主要划分为4个模块:
1、添加客户信息:
该模块主要实现,客户基本信息(姓名、消费卡号、消费金额)的添加,借助函数Getelem(cnode*head)来实现;
2、修改客户信息:
该模块主要实现,对消费者的基本信息的修改功能,借助函数Amend(cnode*head,charname[])来实现;
3、删除客户信息:
此模块的功能是,删除所要确定的客户信息,而达到从整个系统清除的目的,借助函数Delete(cnode*head,charname[])来实现;
4、显示客户信息:
此模块的主要作用是显示消费者的相关信息,借助函数Showall(cnode*head)来实现。
三、系统的设计与实现
(一)添加客户:
Getelem(cnode*head)
分析:
首先选择的添加客户的指令,然后输入客户的基本信息。
客户的姓名,客户的ID消费卡号,如果输入的不正确则需要提示重输,还有就是客户的消费金额,这样才能计算后面的积分优惠折扣。
最后就显示该添加客户的信息。
流程图如图
(2)所示。
运行结果如图(a)所示。
图
(2)-1模块分析图
图
(2)添加客户信息流程图
该模块的具体代码如下所示:
#include
#include
#include
structcnode
{
charname[20];//客户姓名
charID[4];//客户ID号
doubleconsume;//客户消费
doubleinteger;//客户积分
cnode*next;
};
doubledisplay_discount(doublepoints)//客户积分折扣函数
{
doublediscount;
if(points==0)
{discount=0;}
elseif(points>0&&points<=50)
{discount=9.8;}
elseif(points>50&&points<=100)
{discount=9.5;}
elseif(points>100&&points<=200)
{discount=9.0;}
elseif(points>200&&points<=300)
{discount=8.0;}
elseif(points>300)
{discount=7.0;}
returndiscount;
}
voidInitstack(cnode*&head)
{
head=(cnode*)malloc(sizeof(cnode));//malloc函数开辟内存单元,分配cnode长度字节的存储区
head->next=NULL;
}
voidGetelem(cnode*head)//添加客户函数
{cnode*p;
doubley;
p=(cnode*)malloc(sizeof(cnode));
printf("请输入姓名:
");
scanf("%s",&p->name);
printf("请输入ID(4位):
");
scanf("%s",&p->ID);
while(strlen(p->ID)!
=4)
{
printf("ID有误,请重新输入(4位):
");
scanf("%s",p->ID);
}
printf("请输入消费金额:
");
scanf("%lf",&p->consume);
p->integer=p->consume/100;
y=display_discount(p->integer);
printf("折扣:
%llf折\n",y);
p->next=head->next;
head->next=p;
system("pasue");
}voidmain()
{cnode*head;
intchoice;
charname[10];
Initstack(head);
do
{
printf("\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("$客户消费积分管理系统$\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n****************************");
printf("\n**");
printf("\n*<<主菜单>>*");
printf("\n*1.添加客户*");
printf("\n*2.查找客户*");
printf("\n*3.修改客户*");
printf("\n*4.删除客户*");
printf("\n*5.显示客户*");
printf("\n*6.统计客户*");
printf("\n*7.退出*");
printf("\n****************************");
printf("\n请输入您的选择(1,2,3,4,5,6,7):
");
Getelem(head);break;
system("cls");//程序运行后自动清屏
}while(choice<=7);}
图(a)
(二)修改客户Amend(cnode*head,charname[])
分析:
首先要确定该客户消费积分系统有没有客户,在有客户的条件下对所在客户的相关信息进行修改。
第一步要输入所要修改客户的姓名,第二步是选择修改客户的姓名、ID消费卡号、还是消费金额。
然而对消费金额的修改有可以选择是续加金额和覆盖原有的金额两种操作。
最后结果显示在屏幕上。
流程图如图(3)所示。
运行结果如图(b)所示。
如图(3)修改客户信息流程图
该模块的具体代码如下所示:
voidAmend(cnode*head,charname[])//修改客户函数
{cnode*p;
doubley,z;
intchoose,x;
p=head;
if(p->next==NULL)
{printf("\n没有客户!
");
}
else
{
while(p->next!
=NULL)
{p=p->next;
if(strcmp(name,p->name)==0)
{printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费:
%.2lf",p->consume);
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);
}
}
printf("\n请选择您要修改的资料:
1.姓名2.ID3.消费金额\n");
scanf("%d",&choose);
switch(choose)
{
case1:
printf("请输入修改后的姓名:
");
scanf("%s",p->name);break;
case2:
printf("请输入修改后的ID:
");
scanf("%s",p->ID);break;
while(strlen(p->ID)!
=4)
{printf("ID有误,请重输(4位):
");
scanf("%s",p->ID);
}break;
case3:
printf("请选择:
1覆盖以前的消费.2续加上现在的消费.");
scanf("%d",&x);
switch(x)
{case1:
printf("请输入修改后的消费:
");
scanf("%lf",&p->consume);break;
case2:
printf("请输入续加金额:
");
scanf("%lf",&z);
p->consume+=z;break;
}
}
printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费额:
%.2lf",p->consume);
p->integer=p->consume/100;
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);
}
system("pasue");
}
图(b)
(三)删除客户Delete(cnode*head,charname[])
分析:
首先也是要确定该客户消费积分系统有没有客户,在有客户的条件下对所在客户的相关信息进行删除。
第一步要输入所要删除的客户的姓名,第二步是就是对所选定的客户进行删除,在删除结束时,会出现是否删除成功的提示语,以便进行慎重的删除操作。
流程图如图(4)所示。
运行结果如
图(c)所示。
图(4)删除客户信息流程图
该模块的具体代码如下所示:
voidDelete(cnode*head,charname[])//删除客户函数
{
cnode*p;
intx;
doubley;
p=head;
if(p->next==NULL)
{
printf("\n没有客户!
");
}
else
{while(p->next!
=NULL)
{head=p;
p=p->next;
if(strcmp(name,p->name)==0)
{
printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费:
%.2lf",p->consume);
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);}
printf("确认删除?
1确认2取消请选择:
");
scanf("%d",&x);
if(x==1)
{head->next=p->next;
printf("删除成功!
");
}
else
{printf("删除失败!
");
}
}
}
printf("\n");
system("pause");
}
图(c)
(四)显示客户voidShowall(cnode*head)
分析:
首先还是要确定该客户消费积分系统有没有客户,在有客户的条件下对所有客户的相关信息进行显示。
最终将所有客户的相关信息显示在屏幕上。
流程图如图(5)所示。
运行结果如图(d)所示。
图(5)显示客户信息流程图
该模块的具体代码如下所示:
voidShowall(cnode*head)//显示客户函数
{cnode*p;
doubley;
p=head;
if(p->next==NULL)
{printf("没有客户!
");}
else
{while(p->next!
=NULL)
{p=p->next;
printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费:
%.2lf",p->consume);
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);}
}system("pause");}
图(d)
四、系统测试
(一)测试voidnain()函数
测试该函数使用的测试方法,测试的具体步骤,测试用例的选取,测试的结果。
首先,通过编译,运行两步的操作,排除了该程序中的基本语法错误,链接进一步的检查了程序的正确性与合法性,完全排除了程序中的逻辑错误,使得程序可以正确的运行出来。
然后检验程序的可实用性,通过操作者自己输入一些对客户操作要求,来完成检验这一步。
最后,还要看显示的结果是否正确可靠。
这样,一个客户消费积分系统的程序就完成了。
所以,下图(6)就是主函数测试的结果。
图(6)主函数测试结果
(二)部分调用函数的测试
如图(4)是查找函数的测试,如图(5)是统计函数的测试。
如图(4)查找函数的测试结果如图(5)是统计函数的测试结果
五、总结
系统完成了对一个消费商店内部,进行的一次优惠打折活动,根据顾客在本商店所进行的消费情况,对相关消费客户的信息进行了增加、删除和修改等的操作。
并且运用switch语句完成用户自行选择的要求,使得程序变得更加友善和谐,让用户根据每一步的提示来完成所需的操作,进而达到对有关消费客户的操作,并且与此次活动的优惠积分规定相一致,来计算顾客所得的积分及其相应的折扣。
并且完成了对消费客户信息的增加,删除,添改功能。
此外充分利用C语言的语法结构(顺序机构、循环结构及其选择机构),对整个程序进行了合理编写与调试。
尽量做到程序的简单、合理明白,加一些适当的注释说明部分。
系统不足:
这个系统的不足在于他不能的将客户的信息资料存储于磁
盘中,只能在完整的一次操作中,不退出此界面一直能有效正确的执行命
令。
但是退出一次之后,重新操作时,以前的客户信息就不再存在了。
因此,这是还有待于我不断改进完善的地方。
我的收获:
在此次的C++课程设计中,通过设计掌握了C++课程及其数据结构在以后学习C课程中的重要性。
数据机构中的基本理论和算法的综合应用是解决实际问题的重要手段。
在做这次课程设计中最让我得到提高的是自己的独立思考及实践能力,在完成此项设计的过程中,我利用各种和C有关的工具书、相关的网络信息完成了一个关于客户消费积分管理系统的程序,让我从中更多的了解了C这门语言及其有关知识,更让我对最初学C态度有了一个强烈转变——C中的奥秒就在于自己的不断探索与积累。
六、附件(代码)
#include
#include
#include
structcnode
{
charname[20];//客户姓名
charID[4];//客户ID号
doubleconsume;//客户消费
doubleinteger;//客户积分
cnode*next;
};
voidCount(cnode*head)//统计客户函数
{cnode*p;
inti=0;
p=head;
if(p->next==NULL)
{
printf("\n没有客户!
");
}
else
{
while(p->next!
=NULL)
{
p=p->next;
i++;
}
}
printf("\n现有客户数量为%d位\n",i);
system("pause");
}
doubledisplay_discount(doublepoints)//客户积分折扣函数
{
doublediscount;
if(points==0)
{discount=0;}
elseif(points>0&&points<=50)
{discount=9.8;}
elseif(points>50&&points<=100)
{discount=9.5;}
elseif(points>100&&points<=200)
{discount=9.0;}
elseif(points>200&&points<=300)
{discount=8.0;}
elseif(points>300)
{discount=7.0;}
returndiscount;
}
voidInitstack(cnode*&head)
{
head=(cnode*)malloc(sizeof(cnode));//malloc函数开辟内存单元,分配cnode长度字节的存储区
head->next=NULL;
}
voidGetelem(cnode*head)//添加客户函数
{cnode*p;
doubley;
p=(cnode*)malloc(sizeof(cnode));
printf("请输入姓名:
");
scanf("%s",&p->name);
printf("请输入ID(4位):
");
scanf("%s",&p->ID);
while(strlen(p->ID)!
=4)
{
printf("ID有误,请重新输入(4位):
");
scanf("%s",p->ID);
}
printf("请输入消费金额:
");
scanf("%lf",&p->consume);
p->integer=p->consume/100;
y=display_discount(p->integer);
printf("折扣:
%llf折\n",y);
p->next=head->next;
head->next=p;
system("pasue");
}
voidSearch(cnode*head,charname[])//查找客户函数
{cnode*p;
doubley;
intflag=false;
p=head;
if(p->next==NULL)
{printf("\n没有客户!
");
}
else
{while(p->next!
=NULL)
{p=p->next;
if(!
strcmp(name,p->name))
{printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费:
%.2lf",p->consume);
printf("积分:
%lf",p->integer);
printf("折扣:
%.llf折\n",y);
flag=true;
}
}
if(!
flag)
{
printf("该客户不存在!
\n");
}
}
system("pasue");
}
voidAmend(cnode*head,charname[])//修改客户函数
{cnode*p;
doubley,z;
intchoose,x;
p=head;
if(p->next==NULL)
{printf("\n没有客户!
");
}
else
{
while(p->next!
=NULL)
{p=p->next;
if(strcmp(name,p->name)==0)
{printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费:
%.2lf",p->consume);
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);
}
}
printf("\n请选择您要修改的资料:
1.姓名2.ID3.消费金额\n");
scanf("%d",&choose);
switch(choose)
{
case1:
printf("请输入修改后的姓名:
");
scanf("%s",p->name);break;
case2:
printf("请输入修改后的ID:
");
scanf("%s",p->ID);break;
while(strlen(p->ID)!
=4)
{printf("ID有误,请重输(4位):
");
scanf("%s",p->ID);
}break;
case3:
printf("请选择:
1覆盖以前的消费.2续加上现在的消费.");
scanf("%d",&x);
switch(x)
{case1:
printf("请输入修改后的消费:
");
scanf("%lf",&p->consume);break;
case2:
printf("请输入续加金额:
");
scanf("%lf",&z);
p->consume+=z;break;
}
}
printf("姓名:
%s\n",p->name);
printf("ID:
%s\n",p->ID);
printf("消费额:
%.2lf",p->consume);
p->integer=p->consume/100;
printf("积分:
%lf",p->integer);
y=display_discount(p->integer);
printf("折扣:
%.llf折\n",y);
}
system("pasue");
}
voidDelete(cnode*head,charname[])//删除客户函数
{
cnode*p;
intx;
doubley;
p=head;
if(p->next==NULL)
{
printf("\n没有客户!
");
}
else
{while(p->next!
=NULL)
{head=p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客户 消费 积分 管理 系统