课程设计客户积分管理系统.docx

上传人:b****5 文档编号:5017147 上传时间:2022-12-12 格式:DOCX 页数:25 大小:492.49KB
下载 相关 举报
课程设计客户积分管理系统.docx_第1页
第1页 / 共25页
课程设计客户积分管理系统.docx_第2页
第2页 / 共25页
课程设计客户积分管理系统.docx_第3页
第3页 / 共25页
课程设计客户积分管理系统.docx_第4页
第4页 / 共25页
课程设计客户积分管理系统.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

课程设计客户积分管理系统.docx

《课程设计客户积分管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计客户积分管理系统.docx(25页珍藏版)》请在冰豆网上搜索。

课程设计客户积分管理系统.docx

课程设计客户积分管理系统

编号

课程设计报告

2015~2016学年第二学期

客户积分管理系统

 

实习类别

课程设计

学生姓名

xxx

专业

软件工程

学号

xxxxxxxxxx

指导教师

何巍、刘丹

学院

计算机科学技术学院

二〇一六年十二月

起止周

17~18

周数

2

实习地点

南研1213/1208/1201实验室

课程设计目的:

数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。

通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

通过此次软件基础算法课程设计主要达到以下目的:

●了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;

●初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

●提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

●训练学生用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

课程设计要求:

1、独立思考,独立完成:

课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。

2、做好上机准备:

每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。

3、实践设计以实际应用中的小型题目为主,要求学生独立完成或合作完成。

要求学生能根据不同的题目类型选择一种或两种开发模式,完成从系统定义,指定开发计划,需求分析,设计,编码/测试,直至运行/维护的软件生存期的全过程。

完成课程设计题目《客户积分管理系统》

进度安排及主要内容:

第一周:

调研;需求分析及总体设计;规范化数据结构模型;设计数据结构。

第二周:

详细设计及测试;使用具体语言实现算法;调试程序;编写课程设计报告。

成绩:

指导教师(签字)

 

年月日

一、概述

在我们的生活中,很多超市、酒店等都有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<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"<

(2)<consume<

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣:

"<

}

之后进入主菜单界面并提示输入一个数字选择后续操作。

如图-7所示

图-7

 

3.6显示所有客户

遍历输出所有节点信息,在链表不为空的情况下

while(p->next!

=NULL)

{

p=p->next;

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"<

(2)<consume<

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣:

"<

}

之后进入主菜单界面并提示输入一个数字选择后续操作。

3.7统计客户数目

遍历链表对客户进行计数,而后输出客户数目。

当客户数目不为空时

while(p->next!

=NULL)

{

p=p->next;

i++;

}

cout<<"现有客户数量为"<

"<

之后进入主菜单页面并提示输入一个数字选择后续操作。

六、软件测试

1测试方案

依次测试程序的相关功能,对每个功能都进行多次测试,并记录测试结果。

对每个功能的各输入项进行不同格式的输入,检测其是否可以按预期运行,测试程序的健壮性和可行性。

2测试用例及测试结果

2.1添加客户

首先输入姓名,之后输入身份证号码,当输入的身份证号不足18位或者不符合身份证号编码规则时,提示所输入的格式不正确,并要求重新输入,如图-8所示。

当身份证号码输入正确后,要求输入消费金额,之后输出并进入主菜单界面,如图-9所示。

图-8

图-9

其余测试属于及测试情况如表-1所示

表-1添加客户信息测试数据及测试情况

测试项

测试数据内容

程序反应

姓名

为空

需要重新输入

Adad

读入成功

Daads1331

读入成功

ID

411141241

要求重新输入

411233aaaaaaaaaaaaa1

要求重新输入

411209************

读入成功

41121019900989112S

要求重新输入

41120919870987789X

读入成功

消费情况

1

9.8折

3000

9.8折

13232

9.2折

143233

7折

6000

9.5折

9000

9.5折

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

#include

#include"stdlib.h"

#include

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&ID);

voidDelete(cnode*head,string&ID);

voidShowall(cnode*head);

voidcount(cnode*head);

doubledisplay_discount(doubleinteger);

intmain()

{

cnode*head;

intchoice;

stringy;

Initstack(head);

do

{

cout<

cout<<"客户消费积分管理系统"<

cout<<"******************************"<

cout<<"**"<

cout<<"*主菜单*"<

cout<<"*1添加客户*"<

cout<<"*2查找客户*"<

cout<<"*3修改客户*"<

cout<<"*4删除客户*"<

cout<<"*5显示客户*"<

cout<<"*6统计客户*"<

cout<<"*7退出*"<

cout<<"**"<

cout<<"******************************"<

cout<<"请输入您的选择(1,2,3,4,5,6):

";

cin>>choice;

if(choice==1)

Getelem(head);//添加

elseif(choice==2)

{

cout<<"请输入您查找客户的身份证号:

";

cin>>y;

isID(y);

Search(head,y);//查找

}

elseif(choice==3)

{

cout<<"请输入您想修改客户的身份证号:

";

cin>>y;

isID(y);

Amend(head,y);

}//修改

elseif(choice==4)

{

cout<<"请输入你想要删除的客户的身份证号:

";

cin>>y;

isID(y);

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;/*申请空的节点空间*/

p->ID="";

cout<<"请输入姓名:

";

cin>>p->name;

cout<<"请输入身份证号(18位):

";

cin>>p->ID;

isID(p->ID);

cout<<"请输入消费金额:

";

cin>>p->consume;

p->integer=p->consume/100;

cout<<"积分:

"<integer<

y=display_discount(p->integer);//调用函数计算折扣

cout<<"折扣:

"/*<

(1)*/<

p->next=head->next;

head->next=p;

}

voidSearch(cnode*head,string&ID)

{

cnode*p=newcnode;

doubley;

p=head;

if(p->next==NULL)

cout<<"没有客户!

"<

else

{

while(p->next!

=NULL)

{

p=p->next;

if(ID==p->ID)//判断身份证号是否相同

{

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"<

(2)<<*/p->consume<

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣"<

(1)<<*/y<<"折"<

return;

}

}

cout<<"不存在该客户!

"<

}

}

/*

修改客户函数

通过ID获取信息

可以修改身份证号、姓名、消费金额

修改消费金额有覆盖原有金额及续加两种方式

*/

voidAmend(cnode*head,string&ID){

cnode*p;

doubley,z;

intchoose,x;

p=head;

if(p->next==NULL)

cout<<"没有客户!

"<

else

{

while(p->next!

=NULL)

{

p=p->next;

if(ID==p->ID)//判断身份证号是否相同

{

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"/*<

(2)*/<consume<

cout<<"积分:

"<

(1)<<*/p->integer<

y=display_discount(p->integer);

cout<<"折扣:

"<

(1)<<*/y<<"折"<

cout<<"请选择你要修改的1、姓名。

2、身份证号。

3、消费金额。

";

cin>>choose;

if(choose==1)

{

cout<<"请输入修改后姓名;";

cin>>p->name;

}

if(choose==2)

{

cout<<"请输入修改后的身份证号:

";

cin>>p->ID;

isID(p->ID);

}

if(choose==3)

{

cout<<"1.覆盖以前消费、2.续加上现在费用!

请选择:

";

cin>>x;

if(x==1)

{

cout<<"请输入修改后的消费:

";

cin>>p->consume;

}

else{

printf("请输入续加金额:

");

cin>>z;

p->consume+=z;

}

}

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"<

(2)<<*/p->consume<

p->integer=p->consume/100.0;

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣:

"/*<

(1)*/<

return;

}

}

cout<<"不存在该客户!

"<

}

}

voidDelete(cnode*head,string&ID)

{

//删除客户函数

cnode*p;

intx;

doubley;

p=head;

if(p->next==NULL)

cout<<"没有客户!

"<

else

{

while(p->next!

=NULL)

{

head=p;

p=p->next;

if(ID==p->ID)

{//判断身份证号是否相同

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"/*<

(2)*/<consume<

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣:

"<

(1)<<*/y<<"折"<

cout<<"你确认删除?

1、确定。

2、取消。

请选择:

";

cin>>x;

if(x==1)

{

head->next=p->next;

cout<<("删除成功!

");

}

else

cout<<"删除失败!

";

return;

}

}

cout<<"不存在该客户!

"<

}

}

voidShowall(cnode*head)//显示所有客户函数

{

cnode*p;

doubley;

p=head;

if(p->next==NULL)

cout<<"没有客户!

"<

else

while(p->next!

=NULL)

{

p=p->next;

cout<<"姓名:

"<name<

cout<<"身份证号:

"<ID<

cout<<"消费:

"<

(2)<<*/p->consume<

cout<<"积分:

"<integer<

y=display_discount(p->integer);

cout<<"折扣:

"<

(1)<<*/y<<"折"<

}

}

voidcount(cnode*head)

{

cnode*p;

inti=0;

p=head;

if(p->next==NULL)

cout<<"没有客户!

"<

else

while(p->next!

=NULL)

{

p=p->next;

i++;

}

cout<<"现有客户数量为"<

"<

}

doubledisplay_discount(doublepoints)

{

//计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣

doublediscount;

if(points==0)

discount=0;

if(points>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1