1、完成课程设计题目客户积分管理系统进度安排及主要内容:第一周:调研;需求分析及总体设计;规范化数据结构模型;设计数据结构。第二周:详细设计及测试;使用具体语言实现算法;调试程序;编写课程设计报告。成绩:指导教师(签字)年 月 日一、概述在我们的生活中,很多超市、酒店等都有vip卡,可以通过记录客户每次的消费情况计以积分,并根据不同的消费情况还会给予客户不同程度的优惠,以此方式来激励客户进行更多的消费,而商家需要一个可以做客户积分管理的系统来帮助其完成计入积分、计算折扣等操作。在这样的理念下,本程序实现了一个小型的客户积分管理系统,可针对客户的消费情况,进行客户管理,并且根据客户的消费积分对客户实
2、行不同的优惠。二、需求分析题目要实现一个客户积分管理系统,因其经常需要进行增删客户,故经考虑,应选取链式结构作为其存储结构,从而减少增删过程中频繁进行大量数据移动。三、技术方案在Windows7平台下,利用Microsoft Visual Studio2010,以C+为主体,在数据结构的理论指导下,通过使用链表这种存储结构,实现对客户积分信息的管理,实现了一个简易的客户积分管理系统,可以通过客户积分对客户进行不同的折扣优惠和相关信息的管理。四、总体设计在使用系统过程中,我们需要根据客户的情况对客户进行一系列的操作:添加客户、查找客户、删除客户、修改客户等,其对应着链表的增加节点、查找特定节点、
3、删除节点、修改节点信息等,我们通过对链表节点的操作来实现对客户信息的管理,从而进行一系列的操作。五、详细设计1 客户积分管理系统的功能模块程序主要分为六大功能模块:添加客户、查找客户、删除客户、修改客户、显示所有客户、统计客户,通过这六大模块可对客户积分进行管理。图-12 程序的业务流程图-23 具体功能实现3.1 主菜单界面在控制台上显示所能进行的操作及对应的编号(如图-3),并提示输入根据输入的内容调用对应的功能。图-33.2 添加客户信息给链表添加节点从而实现添加客户信息,节点信息包括姓名、ID、消费金额以及对应折扣。当在主菜单界面输入1时,进入该功能函数,依次要求输入姓名、身份证号(并
4、且对身份证号码进行校验,当不符合身份证号编码规则时提示重新输入)、消费金额。当输入完成后,页面显示折扣。后再次进入主菜单并提示输入一个数字选择后续操作。运行过程如图-4所示。3.3 查找客户信息通过对链表节点的遍历并进行节点ID匹配进行查找对应客户,当查找成功时,输出客户信息;反之,输出“不存在该客户!”。之后进入主菜单界面并提示输入一个数字选择后续操作。运行情况如图-5所示。3.4 修改客户信息通过ID找到对应客户修改其信息,在消费情况上可选择覆盖以前消费或者续加此次消费,然后显示出修改后的客户信息;若系统中没有该ID,则提示“不存在该客户!后程序进入主菜单并提示输入一个数字选择后续操作。如
5、图-6所示。图-4图-5图-63.5 删除客户信息通过ID找到对应客户,然后输出其信息,经过确认之后删除其信息。3.6 显示所有客户遍历输出所有节点信息,在链表不为空的情况下while(p-next!=NULL) p=p-next; coutnameendl;身份证号:ID消费:setprecision(2)consume积分:integerinteger);折扣: y折如图-7所示图-73.7 统计客户数目遍历链表对客户进行计数,而后输出客户数目。当客户数目不为空时 i+;cout现有客户数量为i位!之后进入主菜单页面并提示输入一个数字选择后续操作。六、软件测试1测试方案依次测试程序的相关功
6、能,对每个功能都进行多次测试,并记录测试结果。对每个功能的各输入项进行不同格式的输入,检测其是否可以按预期运行,测试程序的健壮性和可行性。2 测试用例及测试结果2.1 添加客户首先输入姓名,之后输入身份证号码,当输入的身份证号不足18位或者不符合身份证号编码规则时,提示所输入的格式不正确,并要求重新输入,如图-8所示。当身份证号码输入正确后,要求输入消费金额,之后输出并进入主菜单界面,如图-9所示。图-8图-9其余测试属于及测试情况如表-1所示表-1 添加客户信息测试数据及测试情况测试项测试数据内容程序反应姓名为空需要重新输入Adad读入成功Daads1331ID411141241要求重新输入
7、411233aaaaaaaaaaaaa1411209*41121019900989112S41120919870987789X消费情况19.8折3000132329.2折1432337折60009.5折9000170009折240008折2.2 查找客户当链表为空时,弹出界面如图-10,提示“没有客户!图-10当身份证号输入不正确时,提示输入格式不正确,并要求重新输入。当身份证号输入正确并且链表不为空时,遍历进行ID的字符串匹配,当不存在该ID时,系统提示不存在该客户;当查询成功时,输出对应客户的相关信息,如图-7所示。图-112.3 修改客户当链表为空时,提示没有客户。当链表不为空时,提示输
8、入要修改的客户的ID,若没有此客户,则提示不存在此客户!反之,输出该客户信息,并提示输入选择所要修改的信息项,然后输入修改之后的内容,之后输出修改后的客户信息,如图-12所示图-122.4删除客户当链表不为空时,提示输入要删除的客户ID,进行ID匹配,若找不到提示不存在该客户,反之,显示对应客户信息,并提示是都确认删除,进行“确定”、“取消”的选择,操作之后进入主菜单,如图-13所示。图-132.5 显示客户当链表为空时,提示没有客户,反之依次输出所有客户信息。之后进入主菜单界面。2.6 统计客户链表为空时,显示“没有客户”,反之提示客户数目。七、总结在程序刚开始时,由于节点中包括string
9、类型,利用malloc开辟空间,但未调用相应的构造函数,string对象未进行实例化,从而引发内存使用问题导致程序不能正常运行,在上网查资料和认真思考之后,改malloc为使用new从而解决问题。New和malloc都具有按需开辟空间的功能,但new同时调用构造函数对相关对象进行实例化。第一次使用Visio,刚开始画出的图出现这样那样的问题,经过几次制作之后慢慢找到了一些感觉,发现Visio是一个很强大的工具。附录1参考文献1 Stephen PrataC+ Primer Plus第6版M北京:人民邮电出版社,2012.2 stpeace 聊聊malloc和new的区别-当malloc和str
10、ing相遇时,容易出错3 Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein. 算法导论第3版M北京:机械工业出版社,2013.4 谭浩强C+程序设计M北京:清华大学出版社,2011.附录2程序主要代码/* *客户消费积分管理系统的设计与实现*针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。* 1、采用一定的存储结构进行客户信息的存储;* 2、对客户的信息可以进行修改、删除、添加;* 3、能够根据消费情况进行客户积分的累加* 4、根据积分情况,对客户实行不同程度的打折优惠;* *
11、/#includeiomanip#include stdlib.hstringusing namespace std;bool isID(string &);typedef struct cnode char name20; string ID; double consume; double integer; struct cnode *next;cnode;void Initstack(cnode * &head)/*初始化链表*/ head= new cnode(); /开辟节点空间 head-next=NULL;void Getelem (cnode *head);void Search
12、(cnode *head,string &ID);void Amend(cnode *head,string &void Delete(cnode *head,string &void Showall(cnode *head);void count(cnode *head);double display_discount(double integer);int main() cnode *head; int choice; string y; Initstack(head); do 客户消费 积分管理系统 * * * * 主菜单 * * 1 添加客户 * * 2 查找客户 * * 3 修改客户
13、 * * 4 删除客户 * * 5 显示客户 * * 6 统计客户 * * 7 退出 *请输入您的选择(1,2,3,4,5,6):; cinchoice; if(choice=1) Getelem(head); /添加 else if(choice=2)请输入您查找客户的身份证号:y; isID(y); Search(head,y); /查找 else if(choice=3)请输入您想修改客户的身份证号: Amend(head,y); /修改 else if(choice=4)请输入你想要删除的客户的身份证号: Delete(head,y); /删除 else if(choice=5) Sh
14、owall(head); /显示 else if(choice=6) count(head); /统计 else if(choice=7) exit(1); while(choicenext=new cnode;/*申请空的节点空间*/ID=请输入姓名:name;请输入身份证号(18位):ID; isID(p-请输入消费金额:consume;integer=p-consume/100; /调用函数计算折扣折扣:/*setprecision(1)*/ynext=p;ID) cnode *p=new cnode; p=head; if(p-next=NULL)没有客户! else while(p-
15、 if(ID=p-ID) /判断身份证号是否相同 /*setprecision(2)积分:折扣/*setprecision(1)*/y return;不存在该客户!/*修改客户函数通过ID获取信息可以修改身份证号、姓名、消费金额修改消费金额有覆盖原有金额及续加两种方式*/ID) double y,z; int choose,x;setprecision(2)*/(删除成功!删除失败! return ; void Showall(cnode *head) /显示所有客户函数void count(cnode *head) int i=0;double display_discount(double points) /计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣 double discount; if(points = 0) discount = 0; if(points
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1