客户消费积分管理系统.docx
《客户消费积分管理系统.docx》由会员分享,可在线阅读,更多相关《客户消费积分管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
![客户消费积分管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/31/9b42d221-c63f-4862-b6aa-060c8068207c/9b42d221-c63f-4862-b6aa-060c8068207c1.gif)
客户消费积分管理系统
软件综合课程设计
客户消费积分管理系统
小学生数据习题库系统
二〇一四年六月
客户消费积分管理系统
一、问题陈述
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
基本要求:
1.采用一定的存储结构进行客户信息的存储;
2.对客户的信息可以进行修改、删除、添加;
3.能够根据消费情况进行客户积分的计算;
4.根据积分情况实行不同程度的打折优惠;
2、需求分析
要求:
(1)用C++语言实现程序设计;
(2)利用线性表的链表存储方式进行相关信息处理;
(3)根据系统的功能要求设计函数;
(4)画出功能模块的设计图;
(5)系统的各个功能模块要求用函数的形式实现;
(6)良好的人机互交环境,程序要有注释。
任务:
(1)设计添加用户函数,采用结构体将每个用户的信息封装,其中包括用户姓名name、用户省份证号ID、用户消费金额consume、积分integer的信息。
输入一个客户信息后再开辟新的节点连接。
(2)设计各个功能函数,实现对于客户,消费金额,消费积分的管理。
(3)画出功能模块的设计图;
(4)编写代码;
(5)程序分析与调试。
三、概要设计
(1)本程序对于客户消费积分管理系统利用线性表的链表存储方式,使用结构体指针将每一个用户联系起来。
使用结构体指针的链表动态链接形式将便于客户的封装,节省空间,便于插入和删除。
(2)程序中设计了①添加用户②查找用户③修改用户④删除用户⑤统计客户数量的功能。
(3)添加用户:
函数voidGetelem(C*head);添加用户中,采用结构体将每个用户的信息封装,其中包括用户姓名name、用户省份证号ID、用户消费金额consume、积分integer的信息。
输入一个客户信息后再开辟新的节点连接。
开一个空间加一个用户可以节省空间,解决实现开辟的空间不够的问题。
(4)voidSearch(C*head,charID[]);查找用户利用指针一个一个用户比对信息知道,直到找到正确信息并显示。
(5)voidAmend(C*head,charID[]);查找并显示然后修改。
(6)voidDelete(C*head,charID[]);查找显示并删除。
(7)voidShowall(C*head);遍历链表并显示客户。
(8)voidcount(C*head);遍历统计客户数量显示。
(9)doubledisplay_discount(doubleinteger);计算客户折扣,每次显示用户信息调用一次保证客户为最新打折信息。
四、详细设计
(1)功能模块详细设计
(2)详细设计思想
本程序运用链表对客户信息进行存储,首先对结点进行定义,结点中的数据域分别定义了消费者的消费号、身份证、消费价格、积分,其中身份证和消费价格用了字符型数组进行定义,然后定义了客户消费信息链表,每添加一个客户,先分配内存,再添加消费者的信息,之后将链表中最后一个指针指向该新的消费者,删除时,需先找到该消费者前面的消费者,直接将其指针指向删除消费者的下一个消费者,修改信息时,先找到该消费者,选择修改的内容,再进行修改,添加消费的价格时,先找到该消费者,根据情况对增加或减少消费价格,并根据价格计算积分,打折时,根据消费者打折的要求,进行打折。
5、程序代码
#include
#include
#include
#include
classC//定义一个C类
{
public:
charname[20];
charID[20];
doubleconsume;
doubleinteger;
C*next;
};
voidInitstack(C*&head)/*初始化链表*/
{
head=(C*)malloc(sizeof(C));//开辟节点空间
head->next=NULL;
}
classA//定义一个A类,封装功能函数
{
public:
voidGetelem(C*head);
voidSearch(C*head,charID[]);
voidAmend(C*head,charID[]);
voidDelete(C*head,charID[]);
voidShowall(C*head);
voidcount(C*head);
doubledisplay_discount(doubleinteger);
voidcreateFile(C*head);
};
intmain()
{
Aa;
C*head;
intchoice;
chary[20];
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)
{
a.Getelem(head);
}//添加
elseif(choice==2)
{
cout<<"请输入您查找客户的身份证号:
";
cin>>y;
while(strlen(y)!
=18)
{
cout<<"身份证号码位数有误请重新输入(18位):
";
cin>>y;
}
a.Search(head,y);
}//查找
elseif(choice==3)
{
cout<<"请输入您想修改客户的身份证号:
";
cin>>y;
while(strlen(y)!
=18)
{
cout<<"身份证号码位数有误请重新输入(18位):
";
cin>>y;
}
a.Amend(head,y);//修改
}
elseif(choice==4)
{
cout<cout<<"请输入你想要删除的客户的身份证号:
";
cin>>y;
a.Delete(head,y);//删除
}
elseif(choice==5)
{
cout<a.Showall(head);//显示
}
elseif(choice==6)
{
cout<a.count(head);//统计
}
elseif(choice==7)
exit
(1);
}
while(choice<=7);
return0;
}
voidA:
:
createFile(C*head){
FILE*fw=fopen("用户数据.txt","wt");
C*p;
p=head;
while(p->next!
=NULL){
p=p->next;
fprintf(fw,"用户名:
%s,身份证号:
%s,消费金额:
%lf,积分:
%lf\n",p->name,p->ID,p->consume,p->integer);
}
fclose(fw);
}
voidA:
:
Getelem(C*head){
C*p;
doubley;
p=(C*)malloc(sizeof(C));/*申请空的节点空间*/
cout<<"请输入姓名:
";
cin>>p->name;
cout<<"请输入身份证号(18位):
";
cin>>p->ID;
while(strlen(p->ID)!
=18){
cout<<"身份证号码位数有误请重新输入(18位):
";
cin>>p->ID;
}
cout<<"请输入消费金额:
";
cin>>p->consume;
p->integer=p->consume;
y=display_discount(p->integer);//调用函数计算折扣
cout<<"折扣:
"<p->next=head->next;
head->next=p;
createFile(head);
}
voidA:
:
Search(C*head,charID[])
{
C*p;
doubley;
p=head;
if(p->next==NULL)
cout<<"没有客户!
";
else
{
while(p->next!
=NULL)
{
p=p->next;
if(strcmp(ID,p->ID)==0)//判断身份证号是否相同
{
cout<<"姓名:
"<name;
cout<<"身份证号:
"<ID;
cout<<"消费:
"<consume;
cout<<"积分:
"<integer;
y=display_discount(p->integer);
cout<<"折扣:
"<}
}
}
}
voidA:
:
Amend(C*head,charID[])//修改客户函数
{
C*p;
doubley,z;
intchoose,x;
p=head;
if(p->next==NULL)
cout<<"没有客户!
";
else
{
while(p->next!
=NULL)
{
p=p->next;
if(strcmp(ID,p->ID)==0)//判断身份证号是否相同
{
cout<<"姓名:
"<name;
cout<<"身份证号:
"<ID;
cout<<"消费:
"<consume;
cout<<"积分:
"<integer;
y=display_discount(p->integer);
cout<<"折扣:
"<}
}
cout<<"请选择你要修改的1、姓名。
2、身份证号。
3、消费金额。
";
cin>>choose;
if(choose==1)
{
cout<<"请输入修改后姓名;";
cin>>p->name;
}
if(choose==2)
{
cout<<"请输入修改后的身份证号:
";
cin>>p->ID;
while(strlen(p->ID)!
=18)
{
cout<<"身份证号码位数有误请重新输入(18位):
";
cin>>p->ID;
}
}
if(choose==3)
{
cout<<"1.覆盖以前消费、2.续加上现在费用!
!
请选择:
";
cin>>x;
if(x==1)
{
cout<<"请输入修改后的消费:
";
cin>>p->consume;
}
else
{
cout<<"请输入续加金额:
";
cin>>z;
p->consume+=z;
}
}
cout<<"姓名:
"<name;
cout<<"身份证号:
"<ID;
cout<<"消费:
"<consume;
cout<<"积分:
"<integer;
y=display_discount(p->integer);
cout<<"折扣:
"<}
}
voidA:
:
Delete(C*head,charID[])//删除客户函数
{
C*p;
intx;
doubley;
p=head;
if(p->next==NULL)
cout<<"没有客户!
";
else
{
while(p->next!
=NULL)
{
head=p;
p=p->next;
if(strcmp(ID,p->ID)==0)//判断身份证号是否相同
{
cout<<"姓名:
"<name;
cout<<"身份证号:
"<ID;
cout<<"消费:
"<consume;
cout<<"积分:
"<integer;
y=display_discount(p->integer);
cout<<"折扣:
"<}
}
cout<<"你确认删除?
1、确定。
2、取消。
请选择:
";
cin>>x;
if(x==1)
{
head->next=p->next;
cout<<"删除成功!
";
}
else
{
cout<<"删除失败!
";
}
}
}
voidA:
:
Showall(C*head)//显示所有客户函数
{
C*p;
doubley;
p=head;
if(p->next==NULL)
cout<<"没有客户!
";
else
{
while(p->next!
=NULL)
{
p=p->next;
cout<<"姓名:
"<name;
cout<<"身份证号:
"<ID;
cout<<"消费:
"<consume;
cout<<"积分:
"<integer;
y=display_discount(p->integer);
cout<<"折扣:
"<}
}
}
voidA:
:
count(C*head)//显示所有客户函数
{
C*p;
inti=0;
p=head;
if(p->next==NULL)
cout<<"没有客户!
";
else
{
while(p->next!
=NULL)
{
p=p->next;
i++;
}
}
cout<<"现有客户数量:
"<cout<
doubleA:
:
display_discount(doublepoints)//计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣
{
doublediscount;
if(points==0)
discount=0;
if(points>0&&points<=50)
discount=9.8;
if(points>50&&points<=100)
discount=9.5;
if(points>100&&points<=150)
discount=9.2;
if(points>150&&points<=200)
discount=9.0;
if(points>200&&points<=300)
discount=8;
elseif(points>300)
discount=7;
returndiscount;
}
6、运行结果与测试
(1)程序运行主窗口
(2)添加客户
(3)查找客户
(4)修改客户
(5)删除客户
(6)显示客户
(7)统计客户
小学生数学习题库系统
1、问题陈述(包括系统总体框图及功能描述)
利用栈求表达式的值,可供小学生作业,并能给出分数。
要求:
建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后的评价。
此课题是研究表达式求值的问题,以帮助小学生完成测试。
为了达到这个功能,实际我们要做的就是出题,和计算分数给出评价的工作。
整体设计都是以这个要求为轴心进行的。
为了直观和方便,现画出软件整体设计模块图。
整体设计模块图可以清晰的看出软件的几大模块。
整个系统的操作流程图可以看出操作的整体流程,如下图
(输入1)(输入2)
(输入0)
二、程序代码
#include
#include
#include
#include
#include
#defineMAXLEN100
typedefstructshiti
{
intbianhao;
chartimu[20];
}xuanti;
typedefstruct
{
charop;
intlevel;
}opt;
typedefstruct//定义操作符栈
{
optst[MAXLEN];
inttop;
}op_stack;
typedefstruct//定义值栈
{
doubleD[MAXLEN];
inttop;
}D_stack;
optpeek(op_stack*s)//定义看栈顶函数
{
opterror={'$',-2};
if(s->top>=0)
returns->st[s->top];
else
returnerror;
}
intIsEmpty(op_stack*s)//定义判断栈空的函数
{
if(s->top<0)
return0;
else
returns->st[s->top].op;
}
charpush(op_stack*s,optc)//定义入栈函数
{
s->top++;
s->st[s->top]=c;
returnc.op;
}
optpop(op_stack*s)//定义出栈函数
{
opti;
opterror={'$',-2};
if(s->top>=0)
{
i=s->st[s->top];
s->st[s->top].op='\0';
s->top--;
returni;
}
else
returnerror;
}
voidclear(op_stack*s)//定义初始化栈
{
s->top=-1;
}
//-----------------------------definethevaluestack-----------------------
doubleDpeek(D_stack*s)//定义看栈顶函数
{
if(s->top>=0)
returns->D[s->top];
else
return0;
}
intDIsEmpty(D_stack*s)//定义判断栈空的函数
{
if(s->top<0)
return0;
else
return(int)(s->D[s->top]);
}
doubleDpush(D_stack*s,doublec)//定义入栈函数
{
s->top++;
s->D[s->top]=c;
returnc;
}
doubleDpop(D_stack*s)//定义出栈函数
{
doublei;
if(s->top>=0)
{
i=s->D[s->top];
s->D[s->top]='\0';
s->top--;
returni;
}
else
return0;
}
voidDclear(D_stack*s)//定义初始化栈
{
s->top=-1;
}
voidcreateNumberFile(intn)
{
FILE*fw=fopen("题目个数.txt","wt");
if(fw==NULL)
{
printf("文件写入失败!
\n");
exit(0);
}
fprintf(fw,"%d",n);
fclose(fw);
}
intreadNumberFile()
{
FILE*fr=fopen("题目个数.txt","rt");
if(fr==NULL)
{
printf("文件读取失败!
\n");
exit(0);
}
charnumBuf[5];
fgets(numBuf,5,fr);
intn=atoi(numBuf);
fclose(fr);
returnn;
}
voidcreateQuestionFile()
{
FILE*fw=fopen("试题库.txt","wt");
if(fw==NULL)
{
printf("文件写入失败!
\n");
exit(0);
}
intnum;
printf("请输入出题个数:
");
scanf("%d",&num);
fflush(stdin);
createNumberFile(num);
printf("请出%d道题目放入试题库:
\n",num);
charwtBuf[20];
for(inti=1;i<=num;i++)
{
printf("第%d题:
",i);
gets(wtBuf);
fprintf(fw,"%d:
%s\n",i