资源描述
目录
一、系统开发的背景 1
二、系统分析与设计 1
(一) 系统功能要求 1
(二) 系统模块结构设计 1
三、系统的设计与实现 2
(一) 增添消费者信息:void zentian() 2
(二) 删除消费者信息:void shanchu() 3
(三) 修改消费者信息:void xiugai() 5
(四) 查看消费者信息:void chakan() 8
(五) 根据积分计算打折后消费总价格:void jisuan() 10
(六) 删除运行过的信息并返回第一页主菜单:void qingping() 13
(七) 退出程序: 14
四、系统测试 15
(一) 测试( void zentian()//增添消费者信息 )函数: 15
(二) 测试( void shanchu()//删除消费者信息)函数: 17
(三) 测试( void xiugai()//修改消费者信息 )函数: 18
(四) 测试( void chakan()//查看消费者信息 )函数: 19
(五) 测试( void jisuan()//根据积分计算打折后消费总价格 )函数: 21
(六) 测试( void qingping()//删除运行过的信息并返回第一页主菜单 )函数: 22
(七) 测试退出函数: 23
五、总结 23
六、附件 24
(一)(全部代码) 24
(二)(部分测试图) 33
客户消费积分管理系统
一、系统开发的背景
为了更便捷科学的管理客户信息和为客户服务,跟着现代化的步伐。因此设计开发了此客户消费积分管理系统来更好的为客户服务。
二、系统分析与设计
(一) 系统功能要求
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
1、 对客户的信息可以进行修改、删除、添加和查看;
2、 能够根据消费情况进行客户积分的计算;
3、 根据积分情况实行不同程度的打折优惠;
(二) 系统模块结构设计
通过对系统功能的分析,客户消费积分管理系统功能如图1所示。
图1 客户消费积分管理系统功能图
通过上图的功能分析,把整个系统划分为7个模块:
1、 增添消费者信息,该模块主要实现:对新客户的添加(包括对新客户所有信息的添加)。借助的函数是void zentian()来实现;
2、 删除消费者信息,该模块主要实现:对保存的所有客户中的任意一个客户的删除。借助的函数是void shanchu()来实现;
3、 修改消费者信息,该模块主要实现:(1)、对任意一个客户所有信息的修改。(2)、可以对任意一个客户信息中的客户编号、客户姓名、客户身份证号码、积分、消费额中的任意一个信息的修改。借助的函数是void xiugai()来实现;
4、 查看消费者信息,该模块主要实现:(1)、全部客户基本信息(客户编号、客户姓名、客户身份证号码、积分、消费额)的输出。(2)、某个客户基本信息(客户编号、客户姓名、客户身份证号码、积分、消费额)的输出。借助的函数是void chakan()来实现;
5、 根据积分计算打折后消费总价格,该模块主要实现:根据客户所对应积分计算出打折优惠和打折后的消费额。借助的函数是void jisuan()来实现;
6、 删除运行过的信息并返回第一页主菜单,该模块主要实现:运行内容太多时此功能可以简化运行页面。借助的函数是void qingping()来实现;
7、 退出程序,该模块主要实现:退出该运行程序。
三、系统的设计与实现
(一) 增添消费者信息:void zentian()
分析:首先输出主菜单,然后根据提示输入要添加几条新客户信息,然后输入客户全部信息即可。流程图如图2所示。
图2:void zentian()流程图
该模块的具体代码如下所示:
void zentian()//增添消费者信息
{
int i,k;
printf("\n");
printf(" 请输入您要添加几条新信息:");
scanf("%d",&k);
printf("\n");
printf(" 请输入要添加的客户信息(编号最小为10006),回车后信息将自动保存:\n\n");
printf("客户编号 客户名 身份证号(18位) 积分 消费额\n\n");
for(i=5;i<5+k;i++)
{
scanf("%d %s %s %lf %lf",&m[i].kehubh,
&m[i].name,&m[i].shengfzh,&m[i].jifen,&m[i].xiaofe);
printf("\n");
}
printf(" 保存成功!请到查看消费者信息中查看!\n\n");
}
(二) 删除消费者信息:void shanchu()
分析:首先输出主菜单,然后输入要删除的客户编号,然后回车即可删除该客户的所有信息。流程图如图3所示。
图3:void shanchu()流程图
该模块的具体代码如下所示:
void shanchu()//删除消费者信息
{
int q,b,i;
printf("\n");
printf(" 请输入您所要删除的客户编号:");
scanf("%d",&b);
printf("\n");
printf(" 删除成功!\n\n");
printf(" 删除后剩余客户信息为:\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
for(i=0;i<5+k;i++)
{
if(b!=m[i].kehubh)
{
q=i;
printf(" %d %s %s %6.2lf %6.2lf\n",m[q].kehubh,
m[q].name,m[q].shengfzh,m[q].jifen,m[q].xiaofe);
}
}
}
(三) 修改消费者信息:void xiugai()
分析:首先输出主菜单,然后选择要修改某个客户的全部信息还是某条信息。若修改全部信息则重新输入该客户的全部信息即可,若修改某处则选择要修改哪里然后重新输入即可。流程图如图4所示。
图4:void xiugai()流程图
该模块的具体代码如下所示:
void xiugai()//修改消费者信息
{
int i,a,b,q,p;
double j;
printf("\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n");
printf(" & &\n");
printf(" & 修改某处信息,请选择1 &\n");
printf(" & &\n");
printf(" & 修改全部信息,请选择2 &\n");
printf(" & &\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n\n");
printf(" 请输入您的选择:");
scanf("%d",&p);
if(p==1)
{
printf("\n");
printf(" 请输入要修改的客户信息的编号:");
scanf("%d",&a);
for(i=0;i<5+k;i++)
if(a==m[i].kehubh)
{
printf("\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n");
printf(" # #\n");
printf(" # 修改客户编号,请选择1 #\n");
printf(" # #\n");
printf(" # 修改客户名,请选择2 #\n");
printf(" # #\n");
printf(" # 修改客户身份证号,请选择3 #\n");
printf(" # #\n");
printf(" # 修改客户积分,请选择4 #\n");
printf(" # #\n");
printf(" # 修改客户消费额,请选择5 #\n");
printf(" # #\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n\n");
printf(" 请输入您的选择:");
scanf("%d",&b);
if(b==1)
{
printf("\n");
printf(" 原客户编号为%d\n\n",m[i].kehubh);
printf(" 请输入新客户编号为:");
scanf("%d",&q);
m[i].kehubh=q;
printf("\n");
printf(" 修改成功!\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
if(b==2)
{
printf("\n");
printf(" 原客户姓名%s\n",m[i].name);
printf(" 请输入新客户姓名为:");
scanf("%s",&m[i].name);
printf("\n");
printf(" 修改成功!\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
if(b==3)
{
printf("\n");
printf(" 原客户身份证号%s\n",m[i].shengfzh);
printf(" 请输入新客户身份证号为:");
scanf("%s",&m[i].shengfzh);
printf("\n");
printf(" 修改成功!\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
if(b==4)
{
printf("\n");
printf(" 原客户积分%6.2lf\n",m[i].jifen);
printf(" 请输入新客户积分为:");
scanf("%lf",&j);
m[i].jifen=j;
printf("\n");
printf(" 修改成功!\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
if(b==5)
{
printf("\n");
printf(" 原客户消费额%6.2lf\n",m[i].xiaofe);
printf(" 请输入新客户消费额为:");
scanf("%lf",&j);
m[i].xiaofe=j;
printf("\n");
printf(" 修改成功!\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
}
}
if(p==2)
{
printf("\n");
printf(" 请输入要修改的客户信息的编号:");
scanf("%d",&a);
for(i=0;i<5+k;i++)
if(a==m[i].kehubh)
{
printf("\n");
printf(" 原客户信息为:\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
printf(" (输成如上形式,中间用空格,可以是多个空格)\n");
printf(" 请输入修改后客户信息为:\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
scanf("%d %s %s %lf %lf",&m[i].kehubh,
&m[i].name,&m[i].shengfzh,&m[i].jifen,&m[i].xiaofe);
printf("\n");
printf(" 修改成功!\n\n");
}
}
}
(四) 查看消费者信息:void chakan()
分析:首先输出主菜单,然后选择查看全部还是查看某一个。若查看全部则输出全部客户信息,若查看某个客户信息则输入要查看的客户的编号即可输出该客户的详细信息。流程图如图5所示。
图5:void chakan()流程图
该模块的具体代码如下所示:
void chakan()//查看消费者信息
{
int a,b,p,i;
printf("\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n");
printf(" & &\n");
printf(" & 要查看全部客户信息请选择1 &\n");
printf(" & &\n");
printf(" & 要查看某个客户信息请选择2 &\n");
printf(" & &\n");
printf(" & & & & & & & & & & & & & & & & & & & &\n\n");
printf(" 请输入您的选择:");
scanf("%d",&a);
if (a==1)
{
printf("\n");
printf(" 您所查看全部客户信息为(有0的是需用户添加的):\n\n");
printf("客户编号 客户名 身份证号 积分 消费额\n");
for(i=0;i<5+k;i++)
printf(" %d %s %s %6.2lf %6.2lf\n",m[i].kehubh,
m[i].name,m[i].shengfzh,m[i].jifen,m[i].xiaofe);
}
if(a==2)
{
printf("\n");
printf(" 请输入所查客户编号:");
scanf("%d",&b);
for(i=0;i<5+k;i++)
{
if(b==m[i].kehubh)
p=i;
}
if(p>=0&&p<5+k)
{
printf("\n");
printf(" 您所要查看%d客户的详细信息为:\n\n",m[p].kehubh);
printf("客户编号 客户名 身份证号 积分 消费额\n\n");
printf(" %d %s %s %6.2lf %6.2lf\n",m[p].kehubh,
m[p].name,m[p].shengfzh,m[p].jifen,m[p].xiaofe);
}
else
printf(" 对不起,您输入有误!\n\n");
}
}
(五) 根据积分计算打折后消费总价格:void jisuan()
分析:首先输出主菜单,然后输入要计算积分是多少的客户,输入后即可计算出该客户打折优惠信息并输出该客户的详细信息。流程图如图6所。
图6:void jisuan()流程图
该模块的具体代码如下所示:
void jisuan()//根据积分计算打折后消费总价格
{
int i,p;
double sum,a;
printf("\n");
printf(" 请输入积分:");
scanf("%lf",&a);
if(a<=30.00)
{
for(i=0;i<5+k;i++)
if(a==m[i].jifen)
{
p=i;
}
printf("\n");
printf(" <<该客户打折信息为>>:\n");
printf(" 客户编号:%d\n",m[p].kehubh);
printf(" 客 户 名:%s\n",m[p].name);
printf(" 身份证号:%s\n",m[p].shengfzh);
printf(" 积 分:%6.2lf\n",m[p].jifen);
printf(" 消 费 额:%6.2lf\n",m[p].xiaofe);
printf(" 打折优惠:9.8折\n");
sum=0.98*m[p].xiaofe;
printf(" 打折后消费额:%6.2lf元\n",sum);
}
else
if(a<=40.00)
{
for(i=0;i<5+k;i++)
if(a==m[i].jifen)
{
p=i;
}
printf("\n");
printf(" <<该客户打折信息为>>:\n");
printf(" 客户编号:%d\n",m[p].kehubh);
printf(" 客 户 名:%s\n",m[p].name);
printf(" 身份证号:%s\n",m[p].shengfzh);
printf(" 积 分:%6.2lf\n",m[p].jifen);
printf(" 消 费 额:%6.2lf\n",m[p].xiaofe);
printf(" 打折优惠:9.5折\n");
sum=0.95*m[p].xiaofe;
printf(" 打折后消费额:%6.2lf元\n",sum);
}
else
if(a<=60.00)
{
for(i=0;i<5+k;i++)
if(a==m[i].jifen)
{
p=i;
}
printf("\n");
printf(" <<该客户打折信息为>>:\n");
printf(" 客户编号:%d\n",m[p].kehubh);
printf(" 客 户 名:%s\n",m[p].name);
printf(" 身份证号:%s\n",m[p].shengfzh);
printf(" 积 分:%6.2lf\n",m[p].jifen);
printf(" 消 费 额:%6.2lf\n",m[p].xiaofe);
printf(" 打折优惠:9.0折\n");
sum=0.90*m[p].xiaofe;
printf(" 打折后消费额:%6.2lf元\n",sum);
}
else
if(a<=80.00)
{
for(i=0;i<5+k;i++)
if(a==m[i].jifen)
{
p=i;
}
printf("\n");
printf(" <<该客户打折信息为>>:\n");
printf(" 客户编号:%d\n",m[p].kehubh);
printf(" 客 户 名:%s\n",m[p].name);
printf(" 身份证号:%s\n",m[p].shengfzh);
printf(" 积 分:%6.2lf\n",m[p].jifen);
printf(" 消 费 额:%6.2lf\n",m[p].xiaofe);
printf(" 打折优惠:8.5折\n");
sum=0.85*m[p].xiaofe;
printf(" 打折后消费额:%6.2lf元\n",sum);
}
else
{
for(i=0;i<5+k;i++)
if(a==m[i].jifen)
{
p=i;
}
printf("\n");
printf(" <<该客户打折信息为>>:\n");
printf(" 客户编号:%d\n",m[p].kehubh);
printf(" 客 户 名:%s\n",m[p].name);
printf(" 身份证号:%s\n",m[p].shengfzh);
printf(" 积 分:%6.2lf\n",m[p].jifen);
printf(" 消 费 额:%6.2lf\n",m[p].xiaofe);
printf(" 打折优惠:8.0折\n");
sum=0.80*m[p].xiaofe;
printf(" 打折后消费额:%6.2lf元\n",sum);
}
}
(六) 删除运行过的信息并返回第一页主菜单:void qingping()
分析:首先输出主菜单,然后输入要运行的序号即可删除运行过得信息并返回首页主菜单。流程图如图7所示。
图7:void qingping()流程图
该模块的具体代码如下所示:
要有#include <stdlib.h>
void qingping()//删除运行过的信息并返回第一页主菜单
{
system("cls");
}
(七) 退出程序:
分析:首先输出主菜单,然后输入要运行的序号即可退出该程序。流程图如图8所示。
图8:退出程序流程图
该模块的具体代码如下所示:
scanf("%d",&j);
switch(j)
case 0: break;
四、系统测试
测试该函数使用的测试方法,测试的具体步骤,测试用例的选取,测试的结果。
(一) 测试( void zentian()//增添消费者信息 )函数:
(二) 测试( void shanchu()//删除消费者信息)函数:
(三) 测试( void xiugai()//修改消费者信息 )函数:
注:其他修改请在附件中查看
(四) 测试( void chakan()//查看消费者信息 )函数:
(五) 测试( void jisuan()//根据积分计算打折后消费总价格 )函数:
(六) 测试( void qingping()//删除运行过的信息并返回第一页主菜单 )函数:
(七) 测试退出函数:
五、总结
系统完成了对客户信息的增添、删除、修改、查看、根据积分情况实行不同程度的打折优惠、删除运行过的信息并返回第一页主菜单和退出功能。
系统有(1)、当删除某个客户信息后,在主菜单客户信息中查看刚刚删除的客户信息时信息还在却无法删除,并且不能一次性删除多个客户信息,要删除多个客户信息时必须运行该删除功能多次,比较麻烦而且不方便。(2)、此系统没有用到文件、链表和指针。(3)、当客户信息中的积分有相同时,计算并输出的客户信息只有一个而不能全部显示出来。以上三点不足。
经过对客户消费积分管理系统的前期了解以及自己构思到最后设计成此系统全部功能,也遇到了许多阻碍,但最终还是一步一步的修改好了。但是我从中也学到了好多,尤其对一维数组还有for循环和if语句的使用和定义有了进一步的提高。对结构体的使用和选择结构也有了进一步的提高。
六、附件
(一)(全部代码)
#include <stdio.h>
#include <stdlib.h>
int k;
struct xiaofxx//结构体(消费信息)
{
int kehubh; //客户编号
char name[12]; //客户名
char shengfzh[19]; //身份证号
double jifen; //积分
double xiaofe; //消费额
}xiaofxx[1000];
struct xiaofxx m[100]={
{10001,"xiao hua","622426199304129876",30.0,300.0},
{10002,"xiaoming","622538199402339820",40.0,400.0},
{10003,"wangjing","622424199209312351",60.0,600.0},
{10004,"huanhuan","622426199205129123",80.0,800.0},
{10005,"lu lu","622426199305128432",100.0,1000.0}};//数组初始化
void main()//主函数
{ void zentian();
void shanchu();
void xiugai();
void chakan();
void jisuan();
void qingping();
int j=1;
while(j)
{
printf("\n\n");
printf(" <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n");
printf(" <> <>\n");
printf(" <> 客户消费积分管理系统 <>\n");
printf(" <> <>\n");
printf(" <> <>\n");
printf(" <> 增添消费者信息,请选择1 <>\n");
printf(" <> <>\n");
printf(" <> 删除消费者信息,请选择2 <>\n");
printf(" <> <>\n");
printf(" <> 修改消费者信息,请选择3 <>\n");
printf(" <> <>\n");
printf(" <> 查看消费者信息,请选择4 <>\n");
printf(" <> <>\n");
printf(" <> 根据积分计算打折后消费总价格,请选择5 <>\n");
printf(" <> <>\n");
printf(" <> 删除运行过的信息并返回第一页主菜单,请选择6 <>\n");
printf(" <> <>\n");
printf(" <> 退出,请选择0 <>\n");
printf(" <> <>\n");
printf(" <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>\n\n");
printf(" 温馨提示:请选择所要运行的序号:");
scanf("%d",&j);
printf("\n");
switch(j)
{
case 0: break;
case 1: zentian() ; break;
case 2: shanchu() ; break;
case 3: xiugai() ; break;
case 4: chakan() ; break;
case 5: jisuan() ; break;
case 6: qingping(); break;
展开阅读全文