/*课设。客户消费积分管理系统的设计与实现
问题描述:
  针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
 基本要求:
 ⑴采用一定的存储结构进行客户信息的存储;
 ⑵对客户的信息可以进行修改、删除、添加;
 ⑶能够根据消费情况进行客户积分的累加;
 ⑷根据积分情况,对客户实行不同程度的打折优惠;
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

#define OK 1
#define ERROR 0
#define NAME_INIT_MAXSIZE 20
#define CREDITS_INIT 100
#define LINK_MAXSIZE 1000
typedef int Status;
int NUM=1;
//顾客信息
typedef struct
{
 int num;
 int age,number;
 int credits;
 double discount;
 char name[NAME_INIT_MAXSIZE];
}ElemType;
//链表存储
typedef struct LNode
{
 ElemType information;
 LNode *next;
}LNode,*LinkList;
Status AddInformation(LinkList &L,char Name[],int Age);
Status Init(LinkList &L);
Status Calculate_discount(LinkList &L);
//链表长度
int LinkLength(LinkList L)
{
 int l=0;
 while(L->next!=NULL)
 {
  l++;
  L=L->next;
 }
 return l;
}
//初始化
Status InitList(LinkList &L)
{
 L=(LinkList)malloc(sizeof(LNode));
 L->next=NULL;
 L->information.credits=0;
 return OK;
}
//插入到第n个结点后面
Status InsertNode(LinkList &L,int n,ElemType e)
{
 if(n>LinkLength(L))
 {
  printf("Insert Error!\n");
  return ERROR;
 }
 LinkList p =L;
 int i=0; 
 while(p->next!=NULL && i<n)
 {
  i++;
  p=p->next;
 }
 LinkList s=(LinkList)malloc(sizeof(LNode));
 e.num=NUM++;
 s->information=e;
 s->next=p->next;
 p->next=s;
 return OK;
}
//追加
Status SupperaddNode(LinkList &L,ElemType e)
{
 LinkList p=L,s=(LinkList)malloc(sizeof(LNode));
 while(p->next!=NULL) p=p->next;
 e.num=NUM++;
 s->information=e;
 s->next=NULL;
 p->next=s;
 return OK;
}
//输出一个
Status PrintSingle(ElemType e)
{
 printf("序号:%2d\tName:%s\tAge:%d\t积分:%d\t编号:%.5d\t折扣:%.2f\n",e.num,e.name,e.age,e.credits,e.number,e.discount);
 return OK;
}
//删除
Status DeleteNode(LinkList &L,int n,ElemType &e)
{
 if(n>LinkLength(L))
 {
  printf("Delete Error!\n");
  return ERROR;
 }
 LinkList p=L;
 int i=1;
 while(p->next!=NULL && i!=n)
 {
  i++;
  p=p->next;
 }
 LinkList s=p->next;
 PrintSingle(s->information);
 p->next=s->next;
 free(s);
 return OK;
}
//添加初始用户
Status AddInformation(LinkList &L,char Name[],int Age)
{
 ElemType e;
 strcpy(e.name,Name);
 e.age=Age;
 e.credits=CREDITS_INIT;
 e.number=rand()%100000;
 e.discount=1.0;
 SupperaddNode(L,e);
 return 0;
}
//输出所有
Status PrintAll(LinkList L)
{
 printf("所有客户信息.\n");
 printf("_____________________________________________________\n");
 int i=0;
 while(L->next!=NULL)
 { 
  i++;
  L=L->next;
  PrintSingle(L->information);
 }
 printf("_____________________ 共有%d名客户 __________________\n",i);
 return OK;
}
//查找_Name
Status FindNode_name(LinkList L)
{
 printf("Input Name:");
 char Name[NAME_INIT_MAXSIZE];
 gets(Name);
 bool flag=0;
 while(L->next!=NULL)
 {
  L=L->next;
  if(strcmp(L->information.name,Name)==0)
  {
   flag=1;
   PrintSingle(L->information);
  }
 }
 if(!flag) printf("Not Find!\n");
 return OK;
}
//查找_number
Status FindNode_number(LinkList L)
{
 printf("Input Number:");
 int Num;
 bool flag=0;
 scanf("%d",&Num);
 while(L->next!=NULL)
 {
  L=L->next;
  if(Num == L->information.number)
  {
   flag=1;
   PrintSingle(L->information);
  }
 }
 if(!flag) printf("Not Find!\n");
 return OK;
}
//查找_age
Status FindNode_age(LinkList L)
{
 printf("Input Age:");
 int Age;
 bool flag=0;
 scanf("%d",&Age);
 while(L->next!=NULL)
 {
  L=L->next;
  if(L->information.age==Age)
  {
   PrintSingle(L->information);
   flag=1;
  }
 }
 if(!flag) printf("Not Find!\n");
 return OK;
}
//查找_credits
Status FindNode_credits(LinkList L)
{
 printf("Input Credits:");
 int Credits;
 scanf("%d",&Credits);
 bool flag=0;
 while(L->next!=NULL)
 {
  L=L->next;
  if(Credits == L->information.credits)
  {
   flag=1;
   PrintSingle(L->information);
  }
 }
 if(!flag) printf("Not Find!\n");
 return OK;
}
//模拟_购物 积分=购物价格*2
Status Shopping(LinkList &Ll)
{
 int length=LinkLength(Ll),range=100,i=0;
 LinkList L=Ll;
 printf("\t\t**** 共有%d名顾客消费 ****\n",length);
 printf("此次最大消费额度为:");
 scanf("%d",&range);
 printf("此次购物额为:\n\n");
 printf("\t理论购物\t折扣后价钱\t折扣\n");
 while(L->next!=NULL && i++<=length)
 {
  L=L->next;
  double sum=rand()%range;
  double price=(1-L->information.discount)*sum;
  printf("%d.\t%8.2f 元\t%8.2f 元\t%2.2f\n",i,sum,price,L->information.discount);
  L->information.credits+=(int) price*2;
 }
 printf("\n购物结束 !\n重新计算折扣...\n");
 Calculate_discount(Ll);
 return OK;
}
/*计算折扣
 (0) 100-200 1%
 (1) 200-500 2%
 (2) 500-1000 6%
 (3) 100-2000 9%
 (4) 2000-5000 12%
 (5) 5000-9000 15%
 (6) 9000-36000 18%
 (7) >36000 24%
*/
Status Calculate_discount(LinkList &L)
{
 LinkList p=L;
 while(p->next!=NULL)
 {
  p=p->next;
  int cd=p->information.credits;
  if(100<=cd && cd<200) p->information.discount=0.01;
  else if(200<=cd && cd<500) p->information.discount=0.02;
  else if(cd<1000) p->information.discount=0.06;
  else if(cd<2000) p->information.discount=0.09;
  else if(cd<4000) p->information.discount=0.12;
  else if(cd<6000) p->information.discount=0.15;
  else if(cd<360000) p->information.discount=0.18;
  else p->information.discount=0.24;
 }
 return OK;
}
//查找菜单
int Find_menu()
{
 printf("\t            查找           \n");
 printf("\t___________________________\n");
 printf("\t       1.按姓名查找        \n");
 printf("\t___________________________\n");
 printf("\t       2.按年龄查找        \n");
 printf("\t___________________________\n");
 printf("\t       3.按编号查找        \n");
 printf("\t___________________________\n");
 printf("\t       4.按积分数查找      \n");
 printf("\t___________________________\n");
 printf("\t       5.返回              \n");
 printf("\t___________________________\n");
 printf("--------请选择:");
 char c[5];
 scanf("%s",c);
 getchar();
 return atoi(c);
}
//查找
Status Find(LinkList L)
{
 switch(Find_menu())
 {
 case 1:FindNode_name(L);break;
 case 2:FindNode_age(L);break;
 case 3:FindNode_number(L);break;
 case 4:FindNode_credits(L);break;
 case 5:break;
 default:printf("Input Error!\n");break;
 }
 return OK;
}
//添加菜单
int Add_menu()
{
 printf("\t\t_______ 添加 _______\n\n");
 printf("\t\t      1.往后追加. \n\n");
 printf("\t\t      2.直接插入. \n\n");
 printf("\t\t      3.返回.     \n\n");
 printf("\t\t____________________\n");
 printf("------请输入:");
 char s[5];
 scanf("%s",s);
 getchar();
 return atoi(s);
}
//添加
Status Add(LinkList &L)
{
 int select=Add_menu();
 if(select==3) return OK;
 if(select!=1 && select!=2)
 {
  printf("输入错误!\n");
  return ERROR;
 }
 ElemType e;
 char Name[NAME_INIT_MAXSIZE];
 int Age;
//姓名
 printf("Input Name:");
 gets(Name);
// getchar();
//年龄
 printf("Input Age:");
 scanf("%d",&Age);
//存入
 strcpy(e.name,Name);
 e.age=Age; 
 e.credits=CREDITS_INIT;
 e.number=rand()%1000000;
//插入或追加
 if(select==1) SupperaddNode(L,e);
 else if(select==2)
 {
  int p;
  printf("请输入你想插入的位置:");
  scanf("%d",&p);
  InsertNode(L,p,e);
 }
 Calculate_discount(L);
 printf("添加成功!\n");
 return OK;
}
//修改客户信息
Status AlterInformation(LinkList &L)
{
 printf("请输入客户编号:");
 int num;
 bool flag=0;
 LinkList p=L;
 scanf("%d",&num);
 getchar();
 while(p->next!=NULL)
 {
  p=p->next;
  if(p->information.number == num)
  {
   flag=1;
   break;
  }
 }
 if(!flag) printf("Not Find!\n");
 else
 {
  PrintSingle(p->information);
  char Name[NAME_INIT_MAXSIZE];
  int Age;

printf("Name:");
  gets(Name);

printf("Age:");
  scanf("%d",&Age);
  getchar();

num=rand()%1000000;
  printf("随机生成编号为:%.6d\n",num);

char c;
  printf("是否确认 y/n :");
  scanf("%c",&c);
  if(c!='y' && c!='Y')
  {
   printf("操作失败!\n");
   return ERROR;
  }

p->information.age=Age;
  strcpy(p->information.name,Name);
  p->information.number=num;
  printf("操作成功!\n");
  return OK;
 }
 return OK;
}
//删除
Status Delete(LinkList &L)
{
 int num;
 ElemType e;
 printf("请输入要删除的序号:");
 scanf("%d",&num);
 LinkList p =L;
 DeleteNode(L,num,e);
 printf("已删除!\n");
 return OK;
}
//主菜单
int Main_menu()
{
 printf("\n\t\t\t           主菜单          \n");
 printf("\t\t\t_____________________________\n"); 
 printf("\t\t\t      1.模拟消费             \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      2.显示所有客户信息.    \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      3.查找客户.            \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      4.添加客户.            \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      5.修改客户信息.        \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      6.删除客户记录.        \n");
 printf("\t\t\t_____________________________\n");
 printf("\t\t\t      7.退出.                \n");
 printf("\t\t\t_____________________________\n");
 printf("--------请选择:");
 char chio[4];
 scanf("%s",chio);
 return atoi(chio);
}
//主函数
int main()
{
 LinkList L;
 Init(L);
 while(true)
 {
  switch(Main_menu())
  {
  case 1:Shopping(L);break;
  case 2:PrintAll(L);break;
  case 3:Find(L);break;
  case 4:Add(L);break;
  case 5:AlterInformation(L);break;
  case 6:Delete(L);break;
  case 7:printf("谢谢使用,再见!\n");return 0;
  default:printf("Error!\n");
  }
  system("pause");
 }
 return 0;
}
//
Status Init(LinkList &L)

 printf("\t\t******** 欢迎来到客户消费积分管理系统 ********\n");
 srand(time(0));
 InitList(L);
  AddInformation(L,"Elen",19);
  AddInformation(L,"Amy",21);
  AddInformation(L,"Sunny",19);
 AddInformation(L,"Jeniffer",20);
 AddInformation(L,"章鱼",6);
 AddInformation(L,"光头强",12);
 AddInformation(L,"鞋类",99);
 Calculate_discount(L);
// PrintAll(L);
 return OK;
}

客户消费积分管理系统的设计与实现相关推荐

  1. 基于java的超市积分管理系统的设计与实现

    超市会员积分管理系统主要用于实现了企业管理数据统计等.本系统结构如下: (1)网络会员管理中心界面: 会员修改密码信息模块:实现会员密码功能: 会员登陆模块:实现会员登陆功能: 会员注册模块:实现会员 ...

  2. 超市积分管理系统(论文+源码)

    摘 要 随着计算机和网络的不断革新,世界已经进入了前所未有的电子时代.作为实用性强.应用范围广泛的会员管理系统也正在被越来越多的各类企业用于消费管理领域.然而,那些针对性强.企业理念清晰的大型超市也正 ...

  3. [附源码]Java计算机毕业设计SSM超市会员积分管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. [附源码]Java计算机毕业设计SSMjspm计算机学院党员积分管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  5. java积分管理系统代码_【全套设计下载】JAVA某店POS积分管理系统(源代码+论文)...

    [全套设计下载]JAVA某店POS积分管理系统(源代码+论文) 摘 要 开发一个大而复杂的POS积分管理软件系统,将它进行适当的分解,不但可以降低其复杂性,还可以减少开发工作量,降低开发成本,提高软件 ...

  6. 基于java的CRM客户关系管理系统的设计和实现

    基于java的CRM客户关系管理系统的设计和实现这个系统开发的开发环境: 开发工具:MyEclipse2010版数据库:MySql+HeidiSqlJDK:MyEclipse2010自带的JDK1.7 ...

  7. 基于java的CRM客户关系管理系统的设计与实现

    本科毕业设计(论文) 题 目: 基于java的CRM客户关系管理系统的设计与实现 专题题目: 说 明 请按以下顺序编排: 封面 任务书 开题报告 中外文摘要及关键词 目录 正文 附录(可选) 参考文献 ...

  8. 完整的门店CRM客户管理系统原型设计

    完整的门店CRM客户管理系统原型设计,源文件版本,返劵配置,完美原型,100多个页面截图显示.供参考和学习使用. 编号:9245666249674319年丰巷愉快的麦冬

  9. 基于Java的客户管理系统的设计与实现

    技术:Java.JSP等 摘要: 现代社会,经济快速发展,科技日新月异,计算机的发展解放了人力,提高了生活和工作效率,人们的生活和工作环境变得更自动化.规范化.科学化. 本篇论文写的是基于Java的客 ...

  10. 毕业设计之 - 基于java的CRM客户关系管理系统的设计与实现【源码+论文】

    文章目录 前言 一.项目设计 1. 模块设计 数据库设计 2. 实现效果 二.部分源码 项目源码 前言 今天学长向大家分享一个 java web 毕业设计 项目: 基于java web 的CRM客户关 ...

最新文章

  1. shell实例第5讲:检查软件包是否安装
  2. C++ Primer 5th笔记(6)chapter6 函数:函数指针
  3. 在Init之前究竟执行了什么?
  4. [Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果
  5. python声明编码格式_使用python将doc文件转为utf8编码格式的txt
  6. 活动报名小程序源码/thinkphp后台管理报名小程序源码
  7. pg库sharelock_PostgreSQL 行锁解读
  8. uci数据集_有关葡萄酒质量的数据分析
  9. (2)通过输入参数(测量数据)构建三维体模型(01)
  10. 分治法-求最大最小元素
  11. RT-Thread定时器
  12. keras中sample_weight的使用
  13. ECCV 2020 五项大奖出炉!普林斯顿邓嘉获最佳论文奖
  14. 统计红楼梦人物出场次数python_红楼梦人物出场次数统计及人物出场词云
  15. Java格式化字符串
  16. 干货 | 使用pyecharts绘制交互式动态地图
  17. BiocManager安装R包解决下载速度太慢的问题
  18. html5绘制好看的时钟,利用纯html5绘制出来的一款非常漂亮的时钟
  19. 新型无线充电技术:能为人体植入设备充电
  20. book review----Philosophical Issues in Tourism (Aspects of Tourism)

热门文章

  1. Windows环境下Python中multiprocessing关于RuntimeError异常的处理方式
  2. 纯前端canvas手绘海报
  3. IT精英?OR IT民工?
  4. python模拟微信登录公众号_Python3微信公众平台requests模拟登陆
  5. w ndoWs10开机时间长,如何解决Win10正式版开机慢且开机黑屏时间长问题【图文教程】...
  6. vim-plug插件安装
  7. 研究生如何写好毕业论文?(上)【中国人民大学龚新奇】
  8. 06js超级玛丽小游戏
  9. No such file or directory: ‘/tmp/tmpxxx/tmpxxx.py‘
  10. matlab postscript,Postscript软件特点全面解析