首页 > 代码库 > C++之客户消费积分管理系统
C++之客户消费积分管理系统
之前数据结构课程设计要求做这么一个小程序,现在贴上源码,来和大家进行交流学习,希望大家给出意见和建议
程序以链表为主要数据结构对客户信息进行存储,对身份证号码判断了位数及构成(前十七位为数字,最后一位是数字或X)
需求:
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
- 采用一定的存储结构进行客户信息的存储
- 对客户的信息可以进行修改、删除、添加
- 能够根据消费情况进行客户积分的累加
- 根据积分情况,对客户实行不同程度的打折优惠
1 #include<iostream> 2 #include<iomanip> 3 #include "stdlib.h" 4 #include<string> 5 using namespace std; 6 7 bool isID(string &); 8 typedef struct cnode 9 { 10 char name[20]; 11 string ID; 12 double consume; 13 double integer; 14 struct cnode *next; 15 }cnode; 16 17 void Initstack(cnode * &head)/*初始化链表*/ 18 { 19 head= new cnode(); //开辟节点空间 20 head->next=NULL; 21 } 22 23 void Getelem (cnode *head); 24 void Search(cnode *head,string &ID); 25 void Amend(cnode *head,string &ID); 26 void Delete(cnode *head,string &ID); 27 void Showall(cnode *head); 28 void count(cnode *head); 29 double display_discount(double integer); 30 31 int main() 32 { 33 cnode *head; 34 int choice; 35 string y; 36 Initstack(head); 37 do 38 { 39 cout<<endl; 40 cout<<" 客户消费 积分管理系统 "<<endl; 41 cout<<" ******************************"<<endl; 42 cout<<" * *"<<endl; 43 cout<<" * 主菜单 *"<<endl; 44 cout<<" * 1 添加客户 *"<<endl; 45 cout<<" * 2 查找客户 *"<<endl; 46 cout<<" * 3 修改客户 *"<<endl; 47 cout<<" * 4 删除客户 *"<<endl; 48 cout<<" * 5 显示客户 *"<<endl; 49 cout<<" * 6 统计客户 *"<<endl; 50 cout<<" * 7 退出 *"<<endl; 51 cout<<" * *"<<endl; 52 cout<<" ******************************"<<endl; 53 cout<<"请输入您的选择(1,2,3,4,5,6):"; 54 cin>>choice; 55 if(choice==1) 56 Getelem(head); //添加 57 else if(choice==2) 58 { 59 cout<<"请输入您查找客户的身份证号:"; 60 cin>>y; 61 isID(y); 62 Search(head,y); //查找 63 } 64 else if(choice==3) 65 { 66 cout<<"请输入您想修改客户的身份证号:"; 67 cin>>y; 68 isID(y); 69 Amend(head,y); 70 } //修改 71 else if(choice==4) 72 { 73 cout<<"请输入你想要删除的客户的身份证号:"; 74 cin>>y; 75 isID(y); 76 Delete(head,y); 77 } //删除 78 else if(choice==5) 79 Showall(head); //显示 80 else if(choice==6) 81 count(head); //统计 82 else if(choice==7) 83 exit(1); 84 } 85 while(choice<=7); 86 system("pause"); 87 return 0; 88 } 89 void Getelem (cnode *head) 90 { 91 //添加客户函数以头节点为参数 92 cnode *p; 93 double y; 94 p=new cnode; 95 p->next=new cnode;/*申请空的节点空间*/ 96 p->ID=" "; 97 cout<<"请输入姓名:"; 98 cin>>p->name; 99 cout<<"请输入身份证号(18位):";100 cin>>p->ID;101 isID(p->ID);102 cout<<"请输入消费金额:";103 cin>>p->consume;104 p->integer=p->consume/100;105 cout<<"积分:"<<p->integer<<endl;106 y=display_discount(p->integer); //调用函数计算折扣107 cout<<"折扣:"/*<<setprecision(1)*/<<y<<"折"<<endl;108 p->next=head->next;109 head->next=p;110 }111 void Search(cnode *head,string &ID)112 { 113 cnode *p=new cnode;114 double y;115 p=head;116 if(p->next==NULL)117 cout<<"没有客户!"<<endl;118 else119 {120 while(p->next!=NULL)121 {122 p=p->next;123 if(ID==p->ID) //判断身份证号是否相同124 { 125 cout<<"姓名:"<<p->name<<endl;126 cout<<"身份证号:"<<p->ID<<endl;127 cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;128 cout<<"积分:"<<p->integer<<endl;129 y=display_discount(p->integer);130 cout<<"折扣"<</*setprecision(1)<<*/y<<"折"<<endl;131 return;132 }133 }134 cout<<"不存在该客户!"<<endl;135 }136 }137 138 /*139 修改客户函数140 通过ID获取信息141 可以修改身份证号、姓名、消费金额142 修改消费金额有覆盖原有金额及续加两种方式143 */144 void Amend(cnode *head,string &ID){ 145 cnode *p;146 double y,z;147 int choose,x;148 p=head;149 if(p->next==NULL)150 cout<<"没有客户!"<<endl;151 else152 {153 while(p->next!=NULL)154 {155 p=p->next;156 if(ID==p->ID) //判断身份证号是否相同157 { 158 cout<<"姓名:"<<p->name<<endl;159 cout<<"身份证号:"<<p->ID<<endl;160 cout<<"消费:"/*<<setprecision(2)*/<<p->consume<<endl;161 cout<<"积分:"<</*setprecision(1)<<*/p->integer<<endl;162 y=display_discount(p->integer);163 cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;164 cout<<"请选择你要修改的1、姓名。2、身份证号。3、消费金额。";165 cin>>choose;166 if(choose==1)167 {168 cout<<"请输入修改后姓名;";169 cin>>p->name;170 }171 if(choose==2)172 {173 cout<<"请输入修改后的身份证号:";174 cin>>p->ID;175 isID(p->ID);176 }177 if(choose==3)178 {179 cout<<"1.覆盖以前消费、2.续加上现在费用!请选择:";180 cin>>x;181 if(x==1)182 {183 cout<<"请输入修改后的消费:";184 cin>>p->consume;185 }186 else{187 printf("请输入续加金额:");188 cin>>z;189 p->consume+=z;190 }191 }192 cout<<"姓名:"<<p->name<<endl;193 cout<<"身份证号:"<<p->ID<<endl;194 cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;195 p->integer=p->consume/100.0;196 cout<<"积分:"<<p->integer<<endl;197 y=display_discount(p->integer);198 cout<<"折扣:"/*<<setprecision(1)*/<<y<<"折"<<endl;199 return;200 }201 }202 cout<<"不存在该客户!"<<endl;203 }204 }205 void Delete(cnode *head,string &ID)206 {207 //删除客户函数208 cnode *p;209 int x;210 double y;211 p=head;212 if(p->next==NULL)213 cout<<"没有客户!"<<endl;214 else215 {216 while(p->next!=NULL)217 {218 head=p;219 p=p->next;220 if(ID==p->ID) 221 { //判断身份证号是否相同 222 cout<<"姓名:"<<p->name<<endl;223 cout<<"身份证号:"<<p->ID<<endl;224 cout<<"消费:"/*<<setprecision(2)*/<<p->consume<<endl;225 cout<<"积分:"<<p->integer<<endl;226 y=display_discount(p->integer);227 cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;228 cout<<"你确认删除?1、确定。2、取消。请选择:";229 cin>>x;230 if(x==1)231 {232 head->next=p->next;233 cout<<("删除成功!");234 }235 else236 cout<<"删除失败!";237 return ;238 }239 } 240 cout<<"不存在该客户!"<<endl;241 }242 }243 void Showall(cnode *head) //显示所有客户函数244 {245 cnode *p;246 double y;247 p=head;248 if(p->next==NULL)249 cout<<"没有客户!"<<endl;250 else251 while(p->next!=NULL)252 {253 p=p->next;254 cout<<"姓名:"<<p->name<<endl;255 cout<<"身份证号:"<<p->ID<<endl;256 cout<<"消费:"<</*setprecision(2)<<*/p->consume<<endl;257 cout<<"积分:"<<p->integer<<endl;258 y=display_discount(p->integer);259 cout<<"折扣:"<</*setprecision(1)<<*/y<<"折"<<endl;260 }261 }262 263 void count(cnode *head) 264 {265 cnode *p;266 int i=0;267 p=head;268 if(p->next==NULL)269 cout<<"没有客户!"<<endl;270 else271 while(p->next!=NULL)272 {273 p=p->next;274 i++;275 }276 cout<<"现有客户数量为"<<i<<"位!"<<endl;277 }278 double display_discount(double points) 279 {280 //计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣281 double discount;282 if(points == 0)283 discount = 0;284 if(points > 0&&points <= 50)285 discount = 9.8;286 if(points > 50&&points <= 100)287 discount = 9.5;288 if(points > 100&&points <= 150)289 discount = 9.2;290 if(points > 150&&points <= 200)291 discount = 9;292 if(points > 200&&points <= 300)293 discount = 8;294 else if(points > 300)295 discount = 7;296 return discount;297 }298 299 int cal(string a)300 {301 return (a[0] - ‘0‘) * 7 + (a[1] - ‘0‘) * 9 + (a[2] - ‘0‘) * 10 + (a[3] - ‘0‘) * 5 + (a[4] - ‘0‘) * 8 + 302 (a[5] - ‘0‘) *4 + (a[6] - ‘0‘) * 2 + (a[7] - ‘0‘) * 1 + (a[8] - ‘0‘) * 6 +(a[9] - ‘0‘) * 3 + 303 (a[10] - ‘0‘) * 7 + (a[11] - ‘0‘) * 9 + (a[12] - ‘0‘) * 10 + (a[13] - ‘0‘) * 5 + (a[14] - ‘0‘) * 8 + 304 (a[15] - ‘0‘) * 4 +(a[16] - ‘0‘) * 2;305 }306 307 char s(string a)308 {309 int k = cal(a) % 11;310 if (k == 0)311 return ‘1‘;312 else if (k == 1)313 return ‘0‘;314 else if (k == 2)315 return ‘X‘;316 else317 return ‘0‘+12-k;318 }319 320 bool isNumber(string str);321 bool isID(string &number)322 {323 do324 {325 if(18==number.length()&&isNumber(number))326 if (number[17] == s(number))327 return true;328 else329 return false;330 else331 cout<<"输入格式不正确,请重新输入:"<<endl;332 }while (cin >> number);333 334 }335 336 bool isNumber(string str)337 {338 for(int i=0;i<str.length()-1;i++)339 if(!isdigit(str[i]))340 return false;341 if((isdigit(str[str.length()-1]))||str[str.length()-1]==‘X‘)342 return true;343 else344 return false;345 }
C++之客户消费积分管理系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。