C++之客户消费积分管理系统

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

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

需求:

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

  1. 采用一定的存储结构进行客户信息的存储
  2. 对客户的信息可以进行修改、删除、添加
  3. 能够根据消费情况进行客户积分的累加
  4. 根据积分情况,对客户实行不同程度的打折优惠
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     else
119     {
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     else
152     {
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     else
215     {
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                 else
236                     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     else
251         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     else
271         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     else
317         return '0'+12-k;
318 }
319 
320 bool isNumber(string str);
321 bool isID(string &number)
322 {
323     do
324     {
325             if(18==number.length()&&isNumber(number))
326             if (number[17] == s(number))
327                 return true;
328             else
329                 return false;
330         else
331             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     else
344         return false;
345 }

原文链接: https://www.cnblogs.com/Arthurian/p/7103573.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/256253

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午9:53
下一篇 2023年2月14日 上午9:54

相关推荐