伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

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

/*课设。客户消费积分管理系统的设计与实现
问题描绘:
   针对客户的消费情况,停止客户管理,根据客户的消费积分对客户实行不同水平的打折优惠。
  根本要求:
  ⑴采用一定的存储构造停止客户信息的存储;
  ⑵对客户的信息可以停止修改、删除、添加;
  ⑶可以根据消费情况停止客户积分的累加;
  ⑷根据积分情况,对客户实行不同水平的打折优惠;
*/
#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;
}

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

Happy柠檬
注册会员
主题 22
回复 21
粉丝 0
|网站地图
快速回复 返回顶部 返回列表