数据结构课程设计报告设计题目:专业软件工程班级0902班学生周雷学号09430225指导教师张雪21.客户消费积分管理系统问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实施不同程度的打折优惠。1.采用一定存储结构进行客户信息存储。2.对客户信息可以修改、删除、添加。3.能够根据消费情况进行客户积分计算。4.根据积分情况实行不同程度的打折优惠。1.本程序对于客户消费积分管理系统利用线性表的链表存储方式,使用结构体指针将每一个用户联系起来。使用结构体指针的链表动态链接形式将便于客户的封装,节省空间,便于插入和删除。2.程序中设计了①添加用户②查找用户③修改用户④删除用户⑤统计客户数量的功能。3.①添加用户:函数voidGetelem(cnode*head);添加用户中,采用结构体将每个用户的信息封装,其中包括用户姓名name、用户省份证号ID、用户消费金额consume、积分integer的信息。输入一个客户信息后再开辟新的节点连接。开一个空间加一个用户可以节省空间,解决实现开辟的空间不够的问题。4.②voidSearch(cnode*head,charID[]);查找用户利用指针一个一个用户比对信息知道,直到找到正确信息并显示。5③voidAmend(cnode*head,charID[]);查找并显示然后修改。6④voidDelete(cnode*head,charID[]);查找显示并删除。7⑤voidShowall(cnode*head);遍历链表并显示客户。8⑥voidcount(cnode*head);遍历统计客户数量显示9⑦doubledisplay_discount(doubleinteger);计算客户折扣,每次显示用户信息调用一次保证客户为最新打折信息。主函数主菜单①添加用户②查找用户③修改用户④删除用户⑤统计客户数量⑥退出。各个函数通过调用头结点连接。4.功能模块详细设计、运行结果。添加查找显示客户删除添加客户修改信息查找客户客户删除客户客户消费积分打折操作系统统计修改修改客户统计客户源代码:#includestdio.h#includestdlib.h#includestring.htypedefstructcnode{charname[20];charID[20];doubleconsume;doubleinteger;structcnode*next;}cnode;voidInitstack(cnode*&head)/*初始化链表*/{head=(cnode*)malloc(sizeof(cnode));//开辟节点空间head-next=NULL;}voidGetelem(cnode*head);voidSearch(cnode*head,charID[]);voidAmend(cnode*head,charID[]);voidDelete(cnode*head,charID[]);voidShowall(cnode*head);voidcount(cnode*head);doubledisplay_discount(doubleinteger);voidmain(){cnode*head;intchoice;chary[20];Initstack(head);do{printf(\n);printf(客户消费积分管理系统\n\n);printf(****************************);printf(\n**\n);printf(\n*主菜单*\n);printf(\n*1添加客户*\n);printf(\n*2查找客户*\n);printf(\n*3修改客户*\n);printf(\n*4删除客户*\n);printf(\n*5显示客户*\n);printf(\n*6统计客户*\n);printf(\n*7退出*\n);printf(\n**\n);printf(***************************);printf(\n请输入您的选择(1,2,3,4,5,6):);scanf(%d,&choice);if(choice==1){Getelem(head);}//添加elseif(choice==2){printf(\n请输入您查找客户的身份证号:);scanf(%s,y);while(strlen(y)!=18){printf(身份证号码位数有误请重新输入(18位):);scanf(%s,y);}Search(head,y);}//查找elseif(choice==3){printf(\n请输入您想修改客户的身份证号:);scanf(%s,y);while(strlen(y)!=18){printf(身份证号码位数有误请重新输入(18位):);scanf(%s,y);}Amend(head,y);}//修改elseif(choice==4){printf(\n);printf(请输入你想要删除的客户的身份证号:);scanf(%s,y);Delete(head,y);}//删除elseif(choice==5){printf(\n);Showall(head);}//显示elseif(choice==6){printf(\n);count(head);}//统计elseif(choice==7)exit(1);}while(choice=7);}voidGetelem(cnode*head){//添加客户函数以头节点为参数cnode*p;doubley;p=(cnode*)malloc(sizeof(cnode));/*申请空的节点空间*/printf(请输入姓名:);scanf(%s,&p-name);printf(请输入身份证号(18位):);scanf(%s,&p-ID);while(strlen(p-ID)!=18){printf(身份证号码位数有误请重新输入(18位):);scanf(%s,&p-ID);}printf(请输入消费金额:);scanf(%lf,&p-consume);p-integer=p-consume/100;y=display_discount(p-integer);//调用函数计算折扣printf(折扣:);printf(%.1lf,y);printf(折\n);p-next=head-next;head-next=p;}voidSearch(cnode*head,charID[]){cnode*p;doubley;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){p=p-next;if(strcmp(ID,p-ID)==0){//判断身份证号是否相同printf(姓名:);printf(%s\n,p-name);printf(身份证号:);printf(%s\n,p-ID);printf(消费:);printf(%.2lf\n,p-consume);printf(积分:);printf(%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:);printf(%.1lf,y);printf(折\n);}}}}voidAmend(cnode*head,charID[]){//修改客户函数cnode*p;doubley,z;intchoose,x;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){p=p-next;if(strcmp(ID,p-ID)==0){//判断身份证号是否相同printf(姓名:);printf(%s\n,p-name);printf(身份证号:);printf(%s\n,p-ID);printf(消费:);printf(%.2lf\n,p-consume);printf(积分:);printf(%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:);printf(%.1lf,y);printf(折\n);}}printf(请选择你要修改的1、姓名。2、身份证号。3、消费金额。);scanf(%d,&choose);if(choose==1){printf(请输入修改后姓名;);scanf(%s,&p-name);}if(choose==2){printf(请输入修改后的身份证号:);scanf(%s,&p-ID);while(strlen(p-ID)!=18){printf(身份证号码位数有误请重新输入(18位):);scanf(%s,&p-ID);}}if(choose==3){printf(1.覆盖以前消费、2.续加上现在费用!!请选择:);scanf(%d,&x);if(x==1){printf(请输入修改后的消费:);scanf(%lf,&p-consume);}else{printf(请输入续加金额:);scanf(%lf,&z);p-consume+=z;}}printf(姓名:);printf(%s\n,p-name);printf(身份证号:);printf(%s\n,p-ID);printf(消费:);printf(%.2lf\n,p-consume);p-integer=p-consume/100;printf(积分:);printf(%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:);printf(%.1lf,y);printf(折\n);}}voidDelete(cnode*head,charID[]){//删除客户函数cnode*p;intx;doubley;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){head=p;p=p-next;if(strcmp(ID,p-ID)==0){//判断身份证号是否相同printf(姓名:);printf(%s\n,p-name);printf(身份证号:);printf(%s\n,p-ID);printf(消费:);printf(%.2lf\n,p-consume);printf(积分:);printf(%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:);printf(%.1lf,y);printf(折\n);}}printf(你确认删除?1、确定。2、取消。请请选择:);scanf(%d,&x);if(x==1){head-next=p-next;printf(删除成功!);}else{printf(删除失败!);}}}voidShowall(cnode*head){//显示所有客户函数cnode*p;doubley;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){p=p-next;printf(姓名:);printf(%s\n,p-name);printf(身份证号:);printf(%s\n,p-ID);printf(消费:);printf(%.2lf\n,p-consume);printf(积分:);printf(%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:);printf(%.1lf,y);printf(折\n);}}}voidcount(cnode*head){//显示所有客户函数cnode*p;inti=0;p=head;if(p-ne