之前数据结构课程设计要求做这么一个小程序,现在贴上源码,来和大家进行交流学习,希望大家给出意见和建议

程序以链表为主要数据结构对客户信息进行存储,对身份证号码判断了位数及构成(前十七位为数字,最后一位是数字或X)

需求:

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

  1. 采用一定的存储结构进行客户信息的存储
  2. 对客户的信息可以进行修改、删除、添加
  3. 能够根据消费情况进行客户积分的累加
  4. 根据积分情况,对客户实行不同程度的打折优惠
 #include<iostream>
#include<iomanip>
#include "stdlib.h"
#include<string>
using namespace std; bool isID(string &);
typedef struct cnode
{
char name[];
string ID;
double consume;
double integer;
struct cnode *next;
}cnode; void Initstack(cnode * &head)/*初始化链表*/
{
head= new cnode(); //开辟节点空间
head->next=NULL;
} void Getelem (cnode *head);
void Search(cnode *head,string &ID);
void Amend(cnode *head,string &ID);
void Delete(cnode *head,string &ID);
void Showall(cnode *head);
void count(cnode *head);
double display_discount(double integer); int main()
{
cnode *head;
int choice;
string y;
Initstack(head);
do
{
cout<<endl;
cout<<" 客户消费 积分管理系统 "<<endl;
cout<<" ******************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 主菜单 *"<<endl;
cout<<" * 1 添加客户 *"<<endl;
cout<<" * 2 查找客户 *"<<endl;
cout<<" * 3 修改客户 *"<<endl;
cout<<" * 4 删除客户 *"<<endl;
cout<<" * 5 显示客户 *"<<endl;
cout<<" * 6 统计客户 *"<<endl;
cout<<" * 7 退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************"<<endl;
cout<<"请输入您的选择(1,2,3,4,5,6):";
cin>>choice;
if(choice==)
Getelem(head); //添加
else if(choice==)
{
cout<<"请输入您查找客户的身份证号:";
cin>>y;
isID(y);
Search(head,y); //查找
}
else if(choice==)
{
cout<<"请输入您想修改客户的身份证号:";
cin>>y;
isID(y);
Amend(head,y);
} //修改
else if(choice==)
{
cout<<"请输入你想要删除的客户的身份证号:";
cin>>y;
isID(y);
Delete(head,y);
} //删除
else if(choice==)
Showall(head); //显示
else if(choice==)
count(head); //统计
else if(choice==)
exit();
}
while(choice<=);
system("pause");
return ;
}
void Getelem (cnode *head)
{
//添加客户函数以头节点为参数
cnode *p;
double y;
p=new cnode;
p->next=new cnode;/*申请空的节点空间*/
p->ID=" ";
cout<<"请输入姓名:";
cin>>p->name;
cout<<"请输入身份证号(18位):";
cin>>p->ID;
isID(p->ID);
cout<<"请输入消费金额:";
cin>>p->consume;
p->integer=p->consume/;
cout<<"积分:"<<p->integer<<endl;
y=display_discount(p->integer); //调用函数计算折扣
cout<<"折扣:"/*<<setprecision(1)*/<<y<<"折"<<endl;
p->next=head->next;
head->next=p;
}
void Search(cnode *head,string &ID)
{
cnode *p=new cnode;
double y;
p=head;
if(p->next==NULL)
cout<<"没有客户!"<<endl;
else
{
while(p->next!=NULL)
{
p=p->next;
if(ID==p->ID) //判断身份证号是否相同
{
cout<<"姓名:"<<p->name<<endl;
cout<<"身份证号:"<<p->ID<<endl;
cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;
cout<<"积分:"<<p->integer<<endl;
y=display_discount(p->integer);
cout<<"折扣"<</*setprecision(1)<<*/y<<"折"<<endl;
return;
}
}
cout<<"不存在该客户!"<<endl;
}
} /*
修改客户函数
通过ID获取信息
可以修改身份证号、姓名、消费金额
修改消费金额有覆盖原有金额及续加两种方式
*/
void Amend(cnode *head,string &ID){
cnode *p;
double y,z;
int choose,x;
p=head;
if(p->next==NULL)
cout<<"没有客户!"<<endl;
else
{
while(p->next!=NULL)
{
p=p->next;
if(ID==p->ID) //判断身份证号是否相同
{
cout<<"姓名:"<<p->name<<endl;
cout<<"身份证号:"<<p->ID<<endl;
cout<<"消费:"/*<<setprecision(2)*/<<p->consume<<endl;
cout<<"积分:"<</*setprecision(1)<<*/p->integer<<endl;
y=display_discount(p->integer);
cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;
cout<<"请选择你要修改的1、姓名。2、身份证号。3、消费金额。";
cin>>choose;
if(choose==)
{
cout<<"请输入修改后姓名;";
cin>>p->name;
}
if(choose==)
{
cout<<"请输入修改后的身份证号:";
cin>>p->ID;
isID(p->ID);
}
if(choose==)
{
cout<<"1.覆盖以前消费、2.续加上现在费用!请选择:";
cin>>x;
if(x==)
{
cout<<"请输入修改后的消费:";
cin>>p->consume;
}
else{
printf("请输入续加金额:");
cin>>z;
p->consume+=z;
}
}
cout<<"姓名:"<<p->name<<endl;
cout<<"身份证号:"<<p->ID<<endl;
cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;
p->integer=p->consume/100.0;
cout<<"积分:"<<p->integer<<endl;
y=display_discount(p->integer);
cout<<"折扣:"/*<<setprecision(1)*/<<y<<"折"<<endl;
return;
}
}
cout<<"不存在该客户!"<<endl;
}
}
void Delete(cnode *head,string &ID)
{
//删除客户函数
cnode *p;
int x;
double y;
p=head;
if(p->next==NULL)
cout<<"没有客户!"<<endl;
else
{
while(p->next!=NULL)
{
head=p;
p=p->next;
if(ID==p->ID)
{ //判断身份证号是否相同
cout<<"姓名:"<<p->name<<endl;
cout<<"身份证号:"<<p->ID<<endl;
cout<<"消费:"/*<<setprecision(2)*/<<p->consume<<endl;
cout<<"积分:"<<p->integer<<endl;
y=display_discount(p->integer);
cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;
cout<<"你确认删除?1、确定。2、取消。请选择:";
cin>>x;
if(x==)
{
head->next=p->next;
cout<<("删除成功!");
}
else
cout<<"删除失败!";
return ;
}
}
cout<<"不存在该客户!"<<endl;
}
}
void Showall(cnode *head) //显示所有客户函数
{
cnode *p;
double y;
p=head;
if(p->next==NULL)
cout<<"没有客户!"<<endl;
else
while(p->next!=NULL)
{
p=p->next;
cout<<"姓名:"<<p->name<<endl;
cout<<"身份证号:"<<p->ID<<endl;
cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;
cout<<"积分:"<<p->integer<<endl;
y=display_discount(p->integer);
cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;
}
} void count(cnode *head)
{
cnode *p;
int i=;
p=head;
if(p->next==NULL)
cout<<"没有客户!"<<endl;
else
while(p->next!=NULL)
{
p=p->next;
i++;
}
cout<<"现有客户数量为"<<i<<"位!"<<endl;
}
double display_discount(double points)
{
//计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣
double discount;
if(points == )
discount = ;
if(points > &&points <= )
discount = 9.8;
if(points > &&points <= )
discount = 9.5;
if(points > &&points <= )
discount = 9.2;
if(points > &&points <= )
discount = ;
if(points > &&points <= )
discount = ;
else if(points > )
discount = ;
return discount;
} int cal(string a)
{
return (a[] - '') * + (a[] - '') * + (a[] - '') * + (a[] - '') * + (a[] - '') * +
(a[] - '') * + (a[] - '') * + (a[] - '') * + (a[] - '') * +(a[] - '') * +
(a[] - '') * + (a[] - '') * + (a[] - '') * + (a[] - '') * + (a[] - '') * +
(a[] - '') * +(a[] - '') * ;
} char s(string a)
{
int k = cal(a) % ;
if (k == )
return '';
else if (k == )
return '';
else if (k == )
return 'X';
else
return ''+-k;
} bool isNumber(string str);
bool isID(string &number)
{
do
{
if(==number.length()&&isNumber(number))
if (number[] == s(number))
return true;
else
return false;
else
cout<<"输入格式不正确,请重新输入:"<<endl;
}while (cin >> number); } bool isNumber(string str)
{
for(int i=;i<str.length()-;i++)
if(!isdigit(str[i]))
return false;
if((isdigit(str[str.length()-]))||str[str.length()-]=='X')
return true;
else
return false;
}

作者:耑新新,发布于  博客园

转载请注明出处,欢迎邮件交流:zhuanxinxin@aliyun.com

C++之客户消费积分管理系统的更多相关文章

  1. Java SSM 客户管理 商户 管理系统 库存管理 销售报表 项目源码

    系统介绍: 1.系统采用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC浏览器使用) 2.springmvc +spring4.3.7+ mybaits3.3  SSM ...

  2. CRM客户关系管理系统修改(十四)

    修改的流程:

  3. 【Java EE 学习 55】【酒店会员管理系统项目总结】

    本酒店会员管理系统使用了SSH框架和传值播客提供的协同OA静态页面. 项目地址:https://github.com/kdyzm/HotelMembersManagement 一.需求分析 酒店会员管 ...

  4. 【需求设计1】VIP积分系统无聊YY

    RT,想到什么就写什么呗,这是最简单的方式,顺便给自己做一个记录,反正自己记忆力也不太好.本文是仿陆金所的积分系统,自己YY的一套东西. 首先我想做一个VIP兑换投资卷的功能: 我们先来确定一些我知道 ...

  5. 使用微软的(how-old.net)构建智能门店管理系统

    现在是大数据时代,每个企业都要对自己的客户有全面的认识,这样才能最准确的分析客户,做出相应的决策.在实体的门店中,对于客户的管理还是比较低级,很多客户对于企业来说是哑终端,即对于企业来说,完全不知道客 ...

  6. RFM模型的应用 - 电商客户细分(转)

    RFM模型是网点衡量当前用户价值和客户潜在价值的重要工具和手段.RFM是Rencency(最近一次消费),Frequency(消费频率).Monetary(消费金额) 消费指的是客户在店铺消费最近一次 ...

  7. Java生鲜电商平台-会员积分系统的设计与架构

    Java生鲜电商平台-会员积分系统的设计与架构 说明:互联网平台积分体系主要用于激励和回馈用户在平台的消费行为和活动行为,一个良好的积分体系可以很好的提升用户的粘性及活跃度. 一.互联网平台积分体系设 ...

  8. 电池管理系统(BMS)

    概述 电池管理系统(BMS)为一套保护动力电池使用安全的控制系统,时刻监控电池的使用状态,通过必要措施缓解电池组的不一致性,为新能源车辆的使用安全提供保障. 经纬恒润在控制系统开发方面拥有雄厚的实力和 ...

  9. 一步一步教你PowerBI数据分析:制作客户RFM数据分析

    客户分析就是根据客户信息数据来分析客户特征,评估客户价值,从而为客户制订相应的营销策略与资源配置.通过合理.系统的客户分析,企业可以知道不同的客户有着什么样的需求,分析客户消费特征与商务效益的关系,使 ...

随机推荐

  1. JavaScript--Dom直接选择器

    一.简介 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示 ...

  2. python基础之面向对象02

    ---继承 当我们定义完成某个类时,可以再定义一个新类,新类可以继承第一个类.新类被称为子类,而被继承的类称为父类/基类/超类. 继承就是子类继承父类的属性和方法(注意是类属性和类方法). 继承可以使 ...

  3. [HNOI 2013]切糕

    COGS 2398. [HNOI 2013]切糕 http://www.cogs.pro/cogs/problem/problem.php?pid=2398 ★★★☆   输入文件:nutcake.i ...

  4. 七、Kafka 用户日志上报实时统计之编码实践

    一.数据生产实现 1.配置数据生产模块 项目基础配置所包含的内容,如下所示: •项目工程的文件配置 •集群连接信息配置 •开发演示 2.实现 Flume 到 Kafka 模块 实现 Flume 到 K ...

  5. Web开发中的18个关键性错误

    前几年,我有机会能参与一些有趣的项目,并且独立完成开发.升级.重构以及新功能的开发等工作. 本文总结了一些PHP程序员在Web开发中经常 忽略的关键错误,尤其是在处理中大型的项目上问题更为突出.典型的 ...

  6. 介绍一个基于jQuery的Cookie操作插件

    在网页客户端,我们经常会遇到读取或者设置cookie的情况,如果用纯生的js我们可能会遇到一些兼容性带来的麻烦,这里给大家介绍一个比较实用jquery操作cookie的插件,插件的源代码如下: jQu ...

  7. 图片src拼接后台返回ID

    本文地址:http://www.cnblogs.com/veinyin/p/8507403.html  在学习 CSS 时只了解了给固定地址,但是如果给的是一个需要拼接的地址就蒙了,以下是基于 Vue ...

  8. sort函数(cmp)、map用法---------------Tju_Oj_2312Help Me with the Game

    这道题里主要学习了sort函数.sort的cmp函数写法.C++的map用法(其实和数组一样) Your task is to read a picture of a chessboard posit ...

  9. HDU 1010 Tempter of the Bone (广搜+减枝)

    题目链接 Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. How ...

  10. 13、Math类简介

    Math类概述 在java.lang包下,有个Math类,这个类包含用于执行基本数学运算的方法,如四舍五入,开方等等. package com.sutaoyu.usually_class; publi ...