客户消费积分管理系统-课程设计客户消费积分管理系统-课程设计
客户消费积分管理系统的设计与实现
客户消费积分管理系统
摘 要:客户消费积分管理系统开发的总体目标是实现酒吧会员卡的积分和打折管理。主要是通过对客户积分卡积分的统计,再通过不同层段的积分有不同的折扣。本系统根据客户及商品的数据需求,采用了线性表的链式存储结构,主要功能包括数据的录入、插入、删除、修改、以及数据的显示,对客户积分的管理,对客户购物时依据积分的数目进行不同打折处理。
关键词 :C++语言;客户积分管理系统;数据结构;链式存储结构;
1前言
当今世界由于人类文明进入了高速发...
客户消费积分管理系统-课程
客户消费积分管理系统的设计与实现
客户消费积分管理系统
摘 要:客户消费积分管理系统开发的总体目标是实现酒吧会员卡的积分和打折管理。主要是通过对客户积分卡积分的统计,再通过不同层段的积分有不同的折扣。本系统根据客户及商品的数据需求,采用了线性
的链式存储结构,主要功能包括数据的录入、插入、删除、修改、以及数据的显示,对客户积分的管理,对客户购物时依据积分的数目进行不同打折处理。
关键词 :C++语言;客户积分管理系统;数据结构;链式存储结构;
1前言
当今世界由于人类文明进入了高速发展阶段,计算机技术已经取得了长足的发展,计算机已经普及到各大商城和小市场的管理当中,介于此,经过了网上的 资料查阅和数据
,开发了这个客户消费积分管理系统,对一些商品进行折扣的统计和管理。设计一个程序用于管理客户的消费情况,从而根据客户的消费积分对客户实行不同程度的打折优惠。对于客户消费积分管理系统利用线性表的链表存储方式,使用结构体指针将每一个用户联系起来。程序中设计了?添加用户?查找用户?修改用户?删除用户?统计客户数量的功能,充分满足对于管理系统的要求。
2设计分析
1
根据
目要求及本次课程设计的目的,采用结构体来存储每组数据,用单链表对每组数据进行相应的操作。现把相应的设计思路及各个函数解析如下。 2.1数据结构设计分析
2.1.1 存储客户信息的结构体
客户资料有姓名、身份证号、客户编号、消费金额、客户积分等信息。具体结构如下:
struct Client//客户信息
{
CCardNumber;//客户编号 string
stringCNumber;//客户身份证号
float CBuy;//客户消费金额
float CGrade;//客户积分
string CName;//客户名称
};
2.1.2 存储商品信息的结构体
首先用一个商品信息的结构体Production存储商品的价格、商品的固定积分、商品的名称,在用一个数组进行存储每一件商品,使用数组和for循环能够便捷并容易的进行数据的操作。另外再用一个商品消费的记录ProCli,用来记录每个客户消费商品的记录具体结构如下:
structProduction//商品信息
{
float PPrice;//商品价格
int PGrade;//商品积分
string PName;//商品名称
};
struct PN/产品消费的信息记录
{
string ProName[16];//记录消费了的产品的名称
int mount[16];//记录该产品的消费数量
};
2
struct ProCli
{
string Cardnum;//客户的名称
PN CPN;//消费产品和数量
}
2.2各个函数分析
2.2.1 主函数
函数原型:intmain()
main()函数主要是整个系统的控制端,主要功能是控制整个程序的运行。从主函数开始调用各相关函数来达到相应的功能。由于有多个不同的选项,所以用
一个switch()语句控制每个函数调用,控制起来方便、明了。关键代码如下:
switch(work)
{
case 1:
cout<<"继续请输入1,返回请输入2"<
>work;
if(work==1)
{
cout<<"请输入要查询客户的名称或编号或身份证号: ";
cin>>str;
locateElem_L(client,str);
}
else if(work==2)
{
system("cls");
face();
}
else
{
cout<<"输入错误!"<>work;
if(work==1)
deleteElem_L(client,procli);
else if(work==2)
{
cout<<"请输入客户编号"<>clients.CCardNumber;
cout<<"请输入客户身份证号"<>clients.CNumber;
cout<<"请输入客户名称"<>clients.CName;
cout<<"请输入客户消费金额"<>clients.CBuy;
cout<<"请输入客户积分"<>clients.CGrade;
insertElem_L(client,procli,clients);
}
else if(work==3)
{
system("cls");
face();
}
else
{
cout<<"输入错误!"<>work;
if(work==1)
{
cout<<"请输入要修改的客户的名称或编号或身份证号: ";
cin>>str;
recompose(client,str);
}
else if(work==2)
{
system("cls");
face();
}
else
{
cout<<"输入错误!"<>work;
if(work==1)
{
cout<<"查询的客户消费资料,请输入客户名称:";
cin>>str;
locateElem_P(procli,str);
}
else if(work==2)
{
system("cls");
face();
}
else
{
cout<<"输入错误!"<>str;
if(str=="yes")
{
cout<<"是否确定保存,是,请输入\'yes\',否,请输入\'no\'!: ";
6
cin>>str1;
if(str1=="yes")
{
printer(client);
printer(procli);
cout<<"已经保存成功"<next = clientp->next;
enter>>hi->data.CCardNumber;
enter>>hi->data.CNumber;
enter>>hi->data.CBuy;
enter>>hi->data.CGrade;
enter>>hi->data.CName;
clientp->next = hi;
clientp = clientp->next;
// cout<data.CCardNumber<<" "<data.CNumber<<"
"<data.CName<data.CCardNumber!="NULL")&&(clientp->data.CNumber
!="NULL"));
2.2.3 菜单函数
函数原型:void face()
在主函数调用此函数,展示整个系统可供用户选择的功能选项,清晰明了,使用户对系统的操作更容易掌握。显示各个选项,把后台功能显示在显示器上,给用户以提醒。
2.2.4 显示函数
函数原型:void trverseLnode(LinkList L)
此函数用来显示所有客户的信息,包括姓名、身份证号、客户编号、消费金额、客户积分等信息,当客户想查看所有客户信息时,可以使用此功能。不过说白了,也就是把链表中的东西打印出来。代码如下:
void trverseLnode(LinkList L) //遍历链表
{
8
Lnode *p;
cout<<"客户编号 "<<"身份证号 "<<"客户名称 "<<"消费
"<<"客户积分"<next; p!=NULL; p=p->next)
{
->data.CCardNumber!="NULL") if(p
{
cout<data.CCardNumber<<" "<data.CNumber<<" "<data.CName
" <<" "<data.CBuy<<" "<data.CGrade<next;
while(p)
9
{
if(p->data.CCardNumber==e)
break;
else if(p->data.CNumber==e)
break;
else if(p->data.CName==e)
break;
p = p->next;
}
if(p)
{
cout<<"客户编号 "<<"身份证号 "<<"客户名称
"<<"消费金额 "<<"客户积分"<data.CCardNumber<<"
"<data.CNumber<<" "<data.CName<<"
"<data.CBuy<<" "<data.CGrade<next;
while(p)
10
{
if(p->data.Cardnum==e)
break;
p = p->next;
}
if(p)
{
cout<<"客户名称 "<<"产品名称 "<<"消费数量 "<data.CPN.mount[0]<0)
flag = true;
for(i=0,j=0; p->data.CPN.mount[j]>0; i++,j++)
{
cout<data.CPN.ProName[i]<<" "<<"
"<data.CPN.mount[j]<next;
LPode *pi = PI->next;
bool flag1 = false,flag2 = false;
string cname; //输入的客户名
string proname; //输入的产品名
int count; //输入的产品数量
int i,j;
cout<<"请输入客户的姓名: "<>cname;
while(p)
{
if(p->data.CName==cname)
{
flag1 = true;
break;
}
p = p->next;
}
while(pi)
{
if(pi->data.Cardnum==cname)
{
12
flag2 =true;
break;
}
pi = pi->next;
}
if(p)
{
cout<data.CCardNumber<<" "<data.CNumber<<"
"<data.CName
<<" "<data.CBuy<<" "<data.CGrade<>proname>>count;
if(flag1&&flag2)
{
for(i=0,j=0; pi->data.CPN.mount[i]>0; i++,j++)
{
if(pi->data.CPN.ProName[j]==proname)
{
pi->data.CPN.mount[i] = pi->data.CPN.mount[i]+count;
}
}
if(pi->data.CPN.mount[i]<0)
{
pi->data.CPN.mount[i] = count;
pi->data.CPN.ProName[j] = proname;
13
}
}
if(flag1)
{
for(i=0; i<16; i++)
{
if(proname == production[i].PName)
{
if(p->data.CGrade>=50&&p->data.CGrade<=100)
{
p->data.CBuy = p->data.CBuy + count*production[i].PPrice*0.95;
p->data.CGrade = p->data.CGrade/2;
}
else if(p->data.CGrade>100)
{
p->data.CBuy = p->data.CBuy + count*production[i].PPrice*0.85;
p->data.CGrade = p->data.CGrade/2;
}
else
{
if(count>3)
{
p->data.CBuy = p->data.CBuy +count*production[i].PPrice;
p->data.CGrade=p->data.CGrade+count*production[i].PGrade+count-3;
}
else
{
14
p->data.CBuy = p->data.CBuy +count*production[i].PPrice;
p->data.CGrade =
p->data.CGrade+count*production[i].PGrade;
}
}
}
}
}
}
2.2.7 修改客户信息函数
函数原型:void recompose(LinkList L,string numb)
此函数首先会打印用户要修改的客户信息,然后再打印出一个子菜单让用户选择不同的功能,进行修改该客户不同的信息,然后要求用户输入要选择的功能的编号。用户只需按照系统给出的提示,就可以修改客户的信息。
2.3算法及平台分析
本系统用到的算法主要有链表的前插法、后插法及搜索等基本算法,没有用到其它比较复杂的算法,操作起来简单,并且容易控制;还用到输入输出流的一些操作来使显示的信息对称,不凌乱;再就是一些文件操作,更改存储文件中的内容,保存操作后的所有信息。
本系统是在Microsoft Visual C++ 6.0上设计及运行的,所有的信息显示均是在dos界面中显示出来,利用system("color 0B")操作使主界面以黑色为背景,前景色为亮蓝色,而其它界面显示及字的显示均为绿色。并且在每一步操作后,都利用system("cls")对dos界面进行清屏,使显示器显示的信息清晰、整齐。
15
3实现方法
通过对设计题目的深入分析,及题目的要求,在设计时,主要实现八大功能模块,大致满足一个客户消费积分管理系统系统的基本需要,主要的流程及实现方法请看下面的报告。
3.1客户消费积分管理系统系统框架图
客户消费积分管理系
统
查增修显购返查退 询加改示买回询出
客或客所产首客系
统 户删户有品 面 户
信除信客消
息 客息 户费
户 信状
息 况
客户编号 客户名称
客客
户户客户身份证号
消信产品名称 费息 客户姓名 产16 品
星
客户消费金额 消费产品数量
客户积分
3.2 客户消费积分管理系统系统主函数流程图
开始
初始化
录入函数
显示函数
输入work值
switch(work)
查购返退修显查增 询买回出改示询客产首系客所加客 户品面统户有 户或信信客消 删息息户 费信状除 息 况 客 户
结束
17
4 调试问题
在制作和编写系统的过程中,碰到不少问题。在着手写代码时,我首先把主界面设计好,并按照主界面上显示的各种功能设计各个函数,这样不至于太盲目了。可是当我测试主界面时,出现了好多问题,出现好多函数没有声明的错误,然后把所有的屏蔽掉,就可以运行了。接着就是写第一个读取文件中的信息的函数,本想用二进制进行读写操作,但是使用之后,输出的信息全是些乱码,最后也只能确定用ASCII码进行读写了。
在写到购买产品函数的时候,由于每一次购买后,都要把信息储存到文件中去,所以要用到写入文件操作,但是由于项目比较多,所以在编写代码的时候漏掉了终点时间没有写入,所以在保存后,退出系统后重新启动系统时,读入函数读入客户信息和客户消费信息时,在文件中所能读到的信息就缺少了一项,所以会把后面的信息读入到链表的头表中去,从而使数据读入时出现交错错误,使一些变量没有读得信息,从而在显示的时候,就会打印出乱码,这个错误在我找了好久,才从文件的数据中找到。
还有个问题就是显示方面的。在写那些函数时,总会清屏上一次的屏幕,把函数写完之后,也会做同样的工作,所以在运行到system(“cls”)时,就会清除屏幕信息而显示其它内容。所以要想清晰看到每次操作的信息,就要延迟system(“cls”)的执行。在没有做处理之前,总会出现一闪而过的现象,一瞬即逝,根本看不清所要显示的信息。在system(“cls”)前加上两行getchar()函数,它会吸收一个回车,然后再等待用户输入一个字符来结束当前的操作,所以在用户进入下一个操作时,按下任意一个键就行了。这使得用户可以看清自己想要的信息,做好下一步操作的准备工作。
当然,在编写代码调试程序的时候,还碰到很多大大小小的问题,但在自己一遍又一遍的调试中改正了,从而使系统的功能更加完善,使系统的功能更从人性化,容错能力更加强大。但是系统还有可能有这样或那样的问题,只是自己没有发现,在测试过程中,没有用到一些特别的样例,可能会使系统崩溃,我想这也是可能的,希望老师加以指正和指导。
5 系统的使用书
对于整个系统的使用及每一次你所作出选择和操作之后会出现什么样的界面及操作结果,在下面的说明中作出详细的说明及展示,具体如下所示。
18
5.1 主界面说明
当运行系统时,首先进入的是主界面,显示了整个系统所提供的功能选项,在最后一行有提示让您输入你所要选择的功能项。如下所示:
5.2 查询客户信息功能介绍
根据系统的提示选择主界面的功能的序号,输入查询客户信息功能的序号1回车,系统就会打印出客户信息。
5.3 增加或删除功能介绍
根据系统的提示选择主界面的功能的序号,键入2进行增加或删除功能的操作,但是这个时候,系统会打印出一个信息对用户进行提示,若用户要求进行删除操作就需要客户键入1,若客户要求进行增加客户的操作就需要用户键入2,删除的具体操作如下所示
19
用户若是增加客户,键入2时,系统会打印出一些增加客户所需要的输入的信息,用户需要按照系统给出的提示,输入客户的信息,添加成功后系统会打印
出增加成功的字样进行提示,增加客户的操作如下所示
5.4 修改客户信息功能介绍
首先根据系统的提示选择主界面的功能的序号,键入3回车后,系统会弹出一个修改客户信息的子菜单和要修改的客户的客户信息。用户可以按照子菜单上的功能编号进行选择,然后键入相应的编号。
例如以下就是键入功能编号D之后,就可以修改客户的消费金额。根据系统提示键入新的客户消费金额。成功之后,系统会弹出提示修改成功~
20
5.5 查询客户信息功能介绍
首先根据系统的提示选择主界面的功能的序号,键入4回车后,用户就可以看到所有客户的信息资料。
5.6 购买产品功能介绍
选择购买产品功能,需要首先根据系统的提示选择主界面的功能的序号,键入5回车后,系统会弹出“请输入客户的姓名”提示,用户就需要填写客户的姓名,回车之后系统会弹出该客户的一些信息,然后系统给出提示,要用户填入需要购买的产品的名称和数量。购买之后系统会弹出“购买成功”的提示。
5.7 查询客户消费资料功能介绍
首先根据系统的提示选择主界面的功能的序号,键入6回车后,系统会弹出“请输入客户的姓名”提示,用户就需要填写客户的姓名,回车之后系统会弹出该客户的一些消费记录信息。
5.8 退出系统功能
首先根据系统的提示选择主界面的功能的序号,键入8回车后,系统就会弹出“是否确定退出,是,请输入‘yes’,否请输入‘no’!:”提示,需要用户根据选择进行键入。最后系统会询问用户是否要对之前的一些操作,进行保存,如果需要的话,用户可以根据提示,键入‘yes’,如果不需要保存的话,用户可
21
以根据提示,键入‘no’。系统就不会保存之前的一切操作而退出系统。
6 结论
经过几天的忙碌,最终把课程设计任务完成了。要做好一件事,只能一步一步的去做,不可能一下子就完成。本来以为简单的几个功能,要实现以为很容易,至多一天就可以做完,可是在真正实现、编写代码的过程却发现有太多的问题没有解决。比如要存储哪些数据,用什么方式存储;用怎么样的结构去保存各种数据等。
要做好一个系统,一个严谨的思维是不可以或缺的,每一个联系都要考虑,每个细节都需要注意,每一种错误都要会解决。只有把每一种问题都解决了,才能做出一个完善的系统出来。
参考文献
[1]谭浩强.C程序设计(第三版). 北京: 清华大学出版社,2005
[2]严蔚敏著.吴伟民.数据结构(C语言版). 北京: 清华大学出版社,2007 [3]谭浩强著.C++程序设计. 北京:清华大学出版社,2004.6
源代码:(注:此处包含两个文件1、main.cpp 2、head.h ,将代码分边写入两个文件中置于一个目录下)
Main.cpp代码如下:
#include
#include
#include
#include "head.h"
using namespace std;
22
void face()
{
cout<<"================================================================================";
cout<<"** ðÇÀ??Å?È(?̺?Îø?кù?Õ?Ú?íεÌ?) **";
cout<<"**ª??Å?ÈË???µÃ?òÅ?ÇçÎÁ?? **";
cout<<"** Å? ?Å *Æ?µ?Å??Å *Ð???Å??Å
*Ð?º?Å??Å **";
cout<<"** *?×ÌúÅ??Å
**";
cout<<"** ???Å *?È?Å *?Ø?Å
*Â?Ë? **";
cout<<"** *ÍåÀ?Ñ? *?,Àñ?? *?Å?í?Å **";
cout<<"** ?ì?Å *?,?Å?ì?Å *ÎãéÃ
*º,ÎÃ???Æ **";
cout<<"** *ÌúÀò *ÔÄÓ? *?Ø?Û **";
cout<<"**============================================================================**";
cout<<"**ÆèÐ?Ó,ª?εÌ?Ë???ÑÓÎÁ??ÃÚµÃÏî?Ä
**";
cout<<"** 1???éÐ??̺?ÏÄÎ? 2??Óö?ÒºîÈ??ù?̺? **";
cout<<"** 3??ÏÜ?Ã?̺?ÏÄÎ? 4??ÎÓÉ?ÊñÒÏ?̺?ÏÄÎ? **";
cout<<"** 5????Áî?òÅ? 6???éÐ??̺?Îø?Ð???ö **";
cout<<"** 7???µºÖÉ?Âæ 8??ÌÊ?öεÌ?
23
**";
cout<<"====================================================================
============";
}
void recompose(LinkList L,string numb) {
LNode *p = L->next;
char ch;
float cont;
string str;
while(p)
{
if(p->data.CCardNumber==numb)
break;
else if(p->data.CNumber==numb)
break;
else if(p->data.CName==numb)
break;
p = p->next;
}
if(p)
{
cout<<"ÃòÑ,ÏÜ?õÃ?̺?ÏÄÎ?:"<data.CCardNumber<<" "<data.CNumber<<" "<data.CName
<<" "<data.CBuy<<" "<data.CGrade<>ch;
switch (ch)
{
case'A':
case'a':
cout<<"ÉäÇèÏÁµÃ?̺?ª??Ä: ";
cin>>str;
p->data.CCardNumber = str;
cout<<"ÏÜ?Ã?È??!"<>str;
p->data.CNumber = str;
cout<<"ÏÜ?Ã?È??!"<>str;
p->data.CName = str;
cout<<"ÏÜ?Ã?È??!"<>cont;
p->data.CBuy = cont;
cout<<"ÏÜ?Ã?È??!"<>cont;
p->data.CGrade = cont;
cout<<"ÏÜ?Ã?È??!"<next;
LPode *pi = PI->next;
bool flag1 = false,flag2 = false;
string cname; //ÉäÇèµÃ?̺?Âø
string proname; //ÉäÇèµÃ?òÅ?Âø
int count; //ÉäÇèµÃ?òÅ?ÉùÀ?
int i,j;
int work;
cout<<"ÆèÉäÇè?̺?µÃÏÔÂø: "<>work;
if(work==2)
{
system("cls");
face();
return;
}
else if(work!=1&&work!=2)
{
cout<<"ÉäÇè?íÍï!"<>cname;
while(p)
{
if(p->data.CName==cname)
{
flag1 = true;
break;
}
p = p->next;
}
while(pi)
{
if(pi->data.Cardnum==cname)
{
flag2 =true;
break;
27
}
pi = pi->next;
}
if(p)
{
cout<data.CCardNumber<<" "<data.CNumber<<" "<data.CName
<<" "<data.CBuy<<" "<data.CGrade<>proname>>count;
if(flag1&&flag2)
{
for(i=0,j=0; pi->data.CPN.mount[i]>0; i++,j++)
{
if(pi->data.CPN.ProName[j]==proname)
{
pi->data.CPN.mount[i] = pi->data.CPN.mount[i]+count;
}
}
if(pi->data.CPN.mount[i]<0)
{
pi->data.CPN.mount[i] = count;
pi->data.CPN.ProName[j] = proname;
}
}
28
if(flag1)
{
for(i=0; i<16; i++)
{
if(proname == production[i].PName)
{
if(p->data.CGrade>=50&&p->data.CGrade<=100)
{
p->data.CBuy = p->data.CBuy + count*production[i].PPrice*0.95;
p->data.CGrade = p->data.CGrade/2;
}
else if(p->data.CGrade>100)
{
p->data.CBuy = p->data.CBuy + count*production[i].PPrice*0.85;
p->data.CGrade = p->data.CGrade/2;
}
else
{
if(count>3)
{
p->data.CBuy = p->data.CBuy +count*production[i].PPrice;
p->data.CGrade =
p->data.CGrade+count*production[i].PGrade+count-3;
}
else
{
p->data.CBuy = p->data.CBuy +count*production[i].PPrice;
p->data.CGrade =
p->data.CGrade+count*production[i].PGrade;
29
}
}
}
}
}
}
void printer(LinkList L) {
ofstream output;
output.open("client.txt",ios::out);
LNode *p = L->next;
LNode *q;
delete L;
do
{
if(p->data.CCardNumber!="NULL")
{
output<data.CCardNumber<<" ";
output<data.CNumber<<" ";
output<data.CBuy<<" ";
output<data.CGrade<<" ";
output<data.CName<next;
delete q;
} while (p!=NULL);
30
output<<"NULL NULL 0 0 NULL"<next;
LPode *qi;
delete PI;
do
{
i =0; j=0;
do
{
output<data.Cardnum<<" ";
output<data.CPN.ProName[j]<<" ";
output<data.CPN.mount[i]<<" "<data.CPN.mount[i]>0);
qi = pi;
pi = qi->next;
delete qi;
} while (pi);
output<<"NULL NULL -1"<>production[i].PPrice;
input>>production[i].PGrade;
input>>production[i].PName;
}
input.close();
initList_L(client);
clientp = client;
ifstream enter;
enter.open("client.txt",ios::in);
do
32
{
hi = new LNode;
hi->next = clientp->next;
enter>>hi->data.CCardNumber;
enter>>hi->data.CNumber;
enter>>hi->data.CBuy;
enter>>hi->data.CGrade;
enter>>hi->data.CName;
clientp->next = hi;
clientp = clientp->next;
}while((clientp->data.CCardNumber!="NULL")&&(clientp->data.CNumber!="NULL")
);
enter.close();
initList_P(procli);
proclip = procli;
enter.open("clientproduction.txt",ios::in);
flag = false;
do
{
pi = new LPode;
for (i=0,j=0; i<16; i++,j++)
{
pi->data.CPN.mount[i] = -1;
pi->data.CPN.ProName[j] = "NULL";
}
pi->next = proclip->next;
i =0; j=0;
if(!flag)
{
enter>>strs;
33
flag = false;
}
if(strs=="NULL")
break;
pi->data.Cardnum = strs;
do
{
if(flag)
{
enter>>strs;
}
flag = true;
enter>>pi->data.CPN.ProName[j];
enter>>pi->data.CPN.mount[i];
i++; j++;
} while (pi->data.Cardnum==strs);
proclip->next = pi;
proclip = proclip->next;
} while (1);
enter.close();
face();
while(1)
{
cout<<"ÆèÐ?Ó,??ÃÚÏî?Ä: "<>ch;
switch(ch)
{
case '1':
34
cout<<"ÆèÉäÇèÑ,?éÐ??̺?µÃÂø?źîª??ĺîÈí?ÛÕ??Ä: ";
cout<<"?ËÏ?ÆèÉäÇè1?,?µºÖÆèÉäÇè2"<>work;
if(work==1)
{
cin>>str;
locateElem_L(client,str);
}
else if(work==2)
{
system("cls");
face();
}
else
{
cout<<"ÉäÇè?íÍï!"<>work;
if(work==1)
deleteElem_L(client,procli);
else if(work==2)
{
cout<<"ÆèÉäÇè?̺?ª??Ä"<>clients.CCardNumber;
35
cout<<"ÆèÉäÇè?̺?Èí?ÛÕ??Ä"<>clients.CNumber;
cout<<"ÆèÉäÇè?̺?Âø?Å"<>clients.CName;
cout<<"ÆèÉäÇè?̺?Îø?Ð?,?,"<>clients.CBuy;
cout<<"ÆèÉäÇè?̺?ºù?Õ"<>clients.CGrade;
insertElem_L(client,procli,clients);
}
else if(work==3)
{
system("cls");
face();
}
else
{
cout<<"ÉäÇè?íÍï!"<>work;
if(work==1)
{
cout<<"ÆèÉäÇèÑ,ÏÜ?õÃ?̺?µÃÂø?źîª??ĺîÈí?ÛÕ??Ä: ";
cin>>str;
recompose(client,str);
36
}
else if(work==2)
{
system("cls");
face();
}
else
{
cout<<"ÉäÇè?íÍï!"<>work;
if(work==1)
{
cin>>str;
locateElem_P(procli,str);
}
else if(work==2)
{
37
system("cls");
face();
}
else
{
cout<<"ÉäÇè?íÍï!"<>str;
if(str=="yes")
{
cout<<"ÉÆ?,Ç???ª??æ?,ÉÆ,ÆèÉäÇè\'yes\',?,,ÆèÉäÇè\'no\'!:
";
cin>>str1;
if(str1=="yes")
{
printer(client);
printer(procli);
cout<<"ÑÐ?,ª??æ?È??"< #include
using namespace std;
struct Client
{
string CCardNumber; //?̺?ª??Ä
string CNumber; //?̺?Èí?ÛÕ??Ä
float CBuy; //?̺?Îø?Ð?,?,
float CGrade; //?̺?ºù?Õ
string CName; //?̺?Âø?Å };
struct Production
39
{
float PPrice; //ÈËÅ??Ù?,
int PGrade; //ÈËÅ?ºù?Õ
string PName; //ÈËÅ?Âø?Å };
//?òÅ?Îø?ÐÆé?ö
struct PN
{
string ProName[16]; //?òÅ?Âø?Å
int mount[16]; //ÉùÀ?
};
struct ProCli
{
string Cardnum; //?̺?ÏÔÂø
PN CPN ; //Îø?Ð?òÅ??ÌÉùÀ? };
typedef Client Elemtype;
typedef struct LNode {
Elemtype data;
struct LNode *next; }Lnode, *LinkList; //ÒÂLinkList??ÑåÌ?Õ?Ôè?,ÒÂLNode*??Ñå??µãÕ?Ôè
///////////////////////////////////////////////////////////////////////////////
//?̺?Îø?еÃ?éÐ?
typedef struct LPode {
ProCli data;
struct LPode *next;
40
}LPode, *LinkListP; //ÒÂLinkList??ÑåÌ?Õ?Ôè?,ÒÂLPode*??Ñå??µãÕ?Ôè
bool initList_L(LinkList &L)//?õÉ?º?µ,À?ªí
{
L = new LNode;
L->next=NULL;
return true;
}
bool locateElem_L(LinkList L,string e)//??Õµ?éÔÑ {
LNode *p = L->next;
while(p)
{
if(p->data.CCardNumber==e)
break;
else if(p->data.CNumber==e)
break;
else if(p->data.CName==e)
break;
p = p->next;
}
if(p)
{
cout<<"?̺?ª??Ä "<<"Èí?ÛÕ??Ä "<<"?̺?Âø?Å
"<<"Îø?Ð?,?, "<<"?̺?ºù?Õ"<data.CCardNumber<<" "<data.CNumber<<"
"<data.CName
<<" "<data.CBuy<<" "<data.CGrade<data.CPN.mount[i] = -1;
si->data.CPN.ProName[j] = "NULL";
}
if(!L->next)
{
s->data.CCardNumber = e.CCardNumber;
s->data.CNumber = e.CNumber;
s->data.CName = e.CName;
s->data.CBuy = e.CBuy;
42
s->data.CGrade = e.CGrade;
s->next = L->next;
L->next = s;
cout<<"Óö?Ò?È????"<next; p->next!=NULL; p=p->next)
{
// cout<data.Cardnum<data.CName==e.CName)
{
flag1 = false;
cout<<"?Ê?̺?ÑÐ?æÓØ??"<data.CCardNumber = e.CCardNumber;
s->data.CNumber = e.CNumber; s->data.CName = e.CName; s->data.CBuy = e.CBuy;
s->data.CGrade = e.CGrade; s->next = p->next;
p->next = s;
}
if(!PI->next)
43
{
si->data.Cardnum = e.CName;
si->next = PI->next;
PI->next = si;
return true;
}
// cout<next; pi->next!=NULL; pi=pi->next)
{
if(pi->data.Cardnum==e.CName)
{
flag2 =false;
break;
}
}
if(flag2)
{
si->data.Cardnum = e.CName;
si->next = pi->next;
pi->next = si;
}
else
delete si;
cout<next->data.Cardnum<<" "<next->data.CPN.ProName[0]<<"
"<next->data.CPN.mount[0]<>str;
for(p=L; p->next!=NULL; p=p->next)
{
if (p->next->data.CName==str)
{
q = p->next;
p->next = q->next;
delete q;
cout<<"ÑÐÈ??ù?È????"<next!=NULL; pi=pi->next)
{
// cout<data.Cardnum<<" 2 "<next->data.Cardnum<next->data.Cardnum==str)
{
45
qi = pi->next;
pi->next = qi->next;
/* if(!qi)
cout<<"qiÍ,?Ô??"<data.Cardnum<<" "<next<next)
break;
}
if(flag)
cout<<"?º?æÓØ?Ê?̺?!!!"<next; p!=NULL; p=p->next)
{
if(p->data.CCardNumber!="NULL")
{
cout<data.CCardNumber<<" "<data.CNumber<<"
"<data.CName
<<" "<data.CBuy<<" "<data.CGrade<next=NULL;
return true;
}
bool insertElem_P(LinkListP L,ProCli e) //ªé?ò?åÇè
{
LPode *p;
LPode *s = new LPode;
int i,j;
if(!L->next)
{
s->data.Cardnum = e.Cardnum;
for(i=0; e.CPN.mount[i]>0; i++)
s->data.CPN.mount[i] = e.CPN.mount[i];
for(j=0; e.CPN.ProName[j]!="NULL"; j++)
s->data.CPN.ProName[j] = e.CPN.ProName[j];
s->next = L->next;
L->next = s;
return true;
}
for(p = L->next; p->next!=NULL; p=p->next);
s->data.Cardnum = e.Cardnum;
47
for(i=0; e.CPN.mount[i]>0; i++)
s->data.CPN.mount[i] = e.CPN.mount[i];
for(j=0; e.CPN.ProName[j]!="NULL"; j++)
s->data.CPN.ProName[j] = e.CPN.ProName[j];
s->next = p->next;
p->next = s;
cout<<"Óö?Ò?È????";
return true;
}
bool locateElem_P(LinkListP L,string e)//??Õµ?éÔÑ||ªé?ò?éÐ? {
int i,j;
bool flag = false;
LPode *p = L->next;
while(p)
{
if(p->data.Cardnum==e)
break;
p = p->next;
}
if(p)
{
cout<<"?̺?Âø?Å "<<"?òÅ?Âø?Å "<<"Îø?ÐÉùÀ? "<data.CPN.mount[0]<0)
flag = true;
for(i=0,j=0; p->data.CPN.mount[j]>0; i++,j++)
{
cout<data.CPN.ProName[i]<<" "<<"
"<data.CPN.mount[j]<
本文档为【客户消费积分管理系统-课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。