客户消费积分管理系统.docx

上传人:b****6 文档编号:8622220 上传时间:2023-02-01 格式:DOCX 页数:38 大小:613.88KB
下载 相关 举报
客户消费积分管理系统.docx_第1页
第1页 / 共38页
客户消费积分管理系统.docx_第2页
第2页 / 共38页
客户消费积分管理系统.docx_第3页
第3页 / 共38页
客户消费积分管理系统.docx_第4页
第4页 / 共38页
客户消费积分管理系统.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

客户消费积分管理系统.docx

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

客户消费积分管理系统.docx

客户消费积分管理系统

软件综合课程设计

客户消费积分管理系统

小学生数据习题库系统

 

二〇一四年六月

客户消费积分管理系统

一、问题陈述

针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。

基本要求:

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

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

当前位置:首页 > 高等教育 > 农学

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

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