客户消费积分管理系统的设计与实现客户消费积分管理系统摘要:客户消费积分管理系统开发的总体目标是实现酒吧会员卡的积分和打折管理。
主要是通过对客户积分卡积分的统计,再通过不同层段的积分有不同的折扣。
本系统根据客户及商品的数据需求,采用了线性表的链式存储结构,主要功能包括数据的录入、插入、删除、修改、以及数据的显示,对客户积分的管理,对客户购物时依据积分的数目进行不同打折处理。
关键词:C++语言;客户积分管理系统;数据结构;链式存储结构;1前言当今世界由于人类文明进入了高速发展阶段,计算机技术已经取得了长足的发展,计算机已经普及到各大商城和小市场的管理当中,介于此,经过了网上的资料查阅和数据分析,开发了这个客户消费积分管理系统,对一些商品进行折扣的统计和管理。
设计一个程序用于管理客户的消费情况,从而根据客户的消费积分对客户实行不同程度的打折优惠。
对于客户消费积分管理系统利用线性表的链表存储方式,使用结构体指针将每一个用户联系起来。
程序中设计了①添加用户②查找用户③修改用户④删除用户⑤统计客户数量的功能,充分满足对于管理系统的要求。
2设计分析根据题目要求及本次课程设计的目的,采用结构体来存储每组数据,用单链表对每组数据进行相应的操作。
现把相应的设计思路及各个函数解析如下。
2.1数据结构设计分析2.1.1 存储客户信息的结构体客户资料有姓名、身份证号、客户编号、消费金额、客户积分等信息。
具体结构如下:struct Client//客户信息{string CCardNumber;//客户编号string CNumber;//客户身份证号float CBuy;//客户消费金额float CGrade;//客户积分string CName;//客户名称};2.1.2 存储商品信息的结构体首先用一个商品信息的结构体Production存储商品的价格、商品的固定积分、商品的名称,在用一个数组进行存储每一件商品,使用数组和for 循环能够便捷并容易的进行数据的操作。
另外再用一个商品消费的记录ProCli,用来记录每个客户消费商品的记录具体结构如下:struct Production//商品信息{float PPrice;//商品价格int PGrade;//商品积分string PName;//商品名称};struct PN/产品消费的信息记录{string ProName[16];//记录消费了的产品的名称int mount[16];//记录该产品的消费数量};struct ProCli{string Cardnum;//客户的名称PN CPN;//消费产品和数量}2.2各个函数分析2.2.1 主函数函数原型:int main()main()函数主要是整个系统的控制端,主要功能是控制整个程序的运行。
从主函数开始调用各相关函数来达到相应的功能。
由于有多个不同的选项,所以用一个switch()语句控制每个函数调用,控制起来方便、明了。
关键代码如下:switch(work){case 1:cout<<"继续请输入1,返回请输入2"<<endl;cin>>work;if(work==1){cout<<"请输入要查询客户的名称或编号或身份证号: ";cin>>str;locateElem_L(client,str);}else if(work==2){system("cls");face();}else{cout<<"输入错误!"<<endl;system("cls");}break;case 2:cout<<"删除请输入1,增加请输入2,返回请输入3: ";cin>>work;if(work==1)deleteElem_L(client,procli);else if(work==2){cout<<"请输入客户编号"<<endl;cin>>ardNumber;cout<<"请输入客户身份证号"<<endl;cin>>umber;cout<<"请输入客户名称"<<endl;cin>>ame;cout<<"请输入客户消费金额"<<endl;cin>>clients.CBuy;cout<<"请输入客户积分"<<endl;cin>>clients.CGrade;insertElem_L(client,procli,clients);}else if(work==3){system("cls");face();}else{cout<<"输入错误!"<<endl;system("cls");}break;case 3:cout<<"现在进行客户信息修改:继续请输入1,返回请输入2"<<endl;cin>>work;if(work==1){cout<<"请输入要修改的客户的名称或编号或身份证号: ";cin>>str;recompose(client,str);}else if(work==2){system("cls");face();}else{cout<<"输入错误!"<<endl;system("cls");face();}break;case 4:trverseLnode(client);break;case 5:purchase(client,procli);break;case 6:cout<<"继续请输入1,返回请输入2"<<endl;cin>>work;if(work==1){cout<<"查询的客户消费资料,请输入客户名称:";cin>>str;locateElem_P(procli,str);}else if(work==2){system("cls");face();}else{cout<<"输入错误!"<<endl;system("cls");face();}break;case 7:system("cls");face();break;case 8:cout<<"是否确定退出,是,请输入\'yes\',否,请输入\'no\'!: ";cin>>str;if(str=="yes"){cout<<"是否确定保存,是,请输入\'yes\',否,请输入\'no\'!: ";cin>>str1;if(str1=="yes"){printer(client);printer(procli);cout<<"已经保存成功"<<endl;}cout<<"已成功退出!"<<endl;return 0;}else if(str =="no")break;}2.2.2 读文件函数函数原型:无把存储在文件中的客户信息、产品信息及产品消费信息读入到链表中去,为各操作做准备,也就相当于打开系统时,加载数据一样。
在读文件中时,主要用到C++里的文件流操作,从文件(客户信息)client.txt和(客户消费信息保存文件)clientproduction.txt两个文件中读取信息,分别存放到链表client和procli 中。
client.txt文件是每一行存放一个客户的信息,是按客户编号、客户身份证号、客户名称、客户消费金额、客户积分存放的。
而clientproduction.txt 文件是客户姓名、产品名称、产品的消费数量的顺序存储的。
在读取客户信息时,判断客户编号和客户省份证号是否为“NULL”来确定客户是否全部读完。
代码如下:initList_L(client);clientp = client;ifstream enter;enter.open("client.txt",ios::in);do{hi = new LNode;hi->next = clientp->next;enter>>hi->ardNumber;enter>>hi->umber;enter>>hi->data.CBuy;enter>>hi->data.CGrade;enter>>hi->ame;clientp->next = hi;clientp = clientp->next;//cout<<clientp->ardNumber<<" "<<clientp->umber<<""<<clientp->ame<<endl;}while((clientp->ardNumber!="NULL")&&(clientp->umber !="NULL"));2.2.3 菜单函数函数原型:void face()在主函数调用此函数,展示整个系统可供用户选择的功能选项,清晰明了,使用户对系统的操作更容易掌握。
显示各个选项,把后台功能显示在显示器上,给用户以提醒。
2.2.4 显示函数函数原型:void trverseLnode(LinkList L)此函数用来显示所有客户的信息,包括姓名、身份证号、客户编号、消费金额、客户积分等信息,当客户想查看所有客户信息时,可以使用此功能。