广州XX学院课程设计报告课程数据结构与算法题目李CC专业计算机科学与技术指导教师XX班级计科XX学号22姓名李XX2020年1月3日2《数据结构与算法》课程设计任务书系别计算机系专业计算机科学与技术题目客户消费积分管理系统指导教师XX设计时间2019年12月30日至2020年1月2日共1周课程设计要求一、设计内容与要求1、设计内容1)至少有输入数据、显示数据、编辑、修改、删除等功能,可增加排序、查询等功能;2)要求汉字界面,比较美观,提示信息准确汉化,所有功能可以反复使用。根据相应的要求,采用对应的数据类型和文件存储和管理;3)可参考“谭浩强C程序设计(第四版)补充材料和实验”文件中的相应案例,增加文件存储功能。2、设计要求1)对系统进行功能模块分析、控制模块分析正确;2)系统设计要能完成题目所要求的功能;3)编程简练、可用,尽可能使系统的功能更加完善和全面;4)说明书、流程图要清楚;5)特别要求自己独立完成。二、课程设计说明书的编写写出不少于4000字的课程设计说明书,除了在封面应有题目、班级、姓名、学号和课程设计日期外,正文要有如下几个方面的内容:(1)需求分析(2)概要设计(3)详细设计(4)调试分析(5)测试结果(6)用户使用说明(7)附录或参考资料课程设计时间安排表(第17周)内容课时数需求分析1概要设计1代码设计14调试分析2课程设计说明书23银行排队系统的设计与实现一、设计要求1.问题描述针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。2.需求分析(1)采用一定存储结构进行客户信息存储;(2)对客户的信息可以进行修改、删除、添加;(3)能够根据消费情况进行客户积分的累加;(4)根据积分情况,对客户实行不同程度的打折优惠;(5)演示程序以用户和计算机的对话方式进行。二、概要设计1.主界面设计为了实现“客户消费积分管理系统”的各项功能,首先设计一个含有多个菜单项的主控菜单子程序,以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如下图1所示。2.存储结构设计4本系统采用链表存储客户消费积分管理系统中的客户信息。3.系统功能设计本系统分为以下7个功能模块。(1)添加客户:添加客户需要输入客户的姓名、身份证号码、电话号码、消费金额,在输入消费金额后系统会自动计算出该用户获得的积分,并且输出对应折扣到该客户信息中。(2)查找客户:查找需要输入客户相应的身份证号码。(3)修改客户:可以单独选择修改客户的姓名、身份证号码、电话号码、消费金额,也可以一次性全都修改。(4)删除客户:查找到需要删除的客户即可一键删除。(5)显示客户:显示外部文件保存的所有客户的信息。(6)统计客户:统计客户总数。(0)保存退出:保存所有修改删除操作到文件中。三、模块设计1.模块设计本程序包含3个模块:主程序模块、菜单选择模块和链表操作模块。调用关系如图所示。2.系统子程序及功能设计本系统共设置13个函数,包括主函数。各函数名及功能说明如下。(1)intmenu_select()//菜单函数(2)voidGetelem(cnode*head)//添加客户函数以头节点为参数(3)voidSearch(cnode*head,charID[])//查找函数(4)voidAmend(cnode*head,charID[])//修改客户函数(5)voidDelete(cnode*head,charID[])//删除客户函数(6)voidShowall(cnode*head)//显示所有客户函数(7)voidcount(cnode*head)//显示所有客户总数(8)doubledisplay_discount(doublepoints)/*计算客户折扣函数,接受一个double型的数作为参数,输出对应的折扣*/(10)cnode*creslink()//以创建新链表的方式读取文件数据(11)voidWritetoText(cnode*head)//将所有记录写入文件(12)voidmain()//主函数3.函数主要调用关系图系统主要函数调用关系如图所示。四、详细设计主程序模块菜单选择模块链表操作模块main1234560881151.数据类型定义(1)数组的结构体定义typedefstructcnode{charname[20];//名字charID[20];//身份证6位chartnumber[20];//电话doubleconsume;//消费金额doubleinteger;//积分doublediscount;//折扣structcnode*next;}cnode;(2)初始化链表voidInitstack(cnode*head)/*初始化链表*/{head=(cnode*)malloc(sizeof(cnode));//开辟节点空间head-next=NULL;}//头指针指向下一空节点(3)全局变量的定义doubledisplay_discount(doubleinteger);//定义折扣函数intcustomer_number=0;//初始客户数量系统主要子程序详细设计(1)添加客户函数voidGetelem(cnode*head)//添加客户函数以头节点为参数{cnode*p;doubley;p=(cnode*)malloc(sizeof(cnode));/*申请空的节点空间*/printf(\n请输入姓名:);scanf(%s,&p-name);printf(请输入身份证号:);scanf(%s,&p-ID);printf(请输入电话号码:);scanf(%s,&p-tnumber);printf(请输入消费金额:);scanf(%lf,&p-consume);p-integer=p-consume/10;printf(对应积分:%lf\n,p-integer);y=display_discount(p-integer);//调用函数计算折扣printf(折扣:%.1lf折,y);printf(\n);p-discount=y;printf(添加客户成功!\n\n);customer_number++;p-next=head-next;head-next=p;}(2)查找客户函数6voidSearch(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(姓名:%s\n,p-name);printf(身份证号:%s\n,p-ID);printf(电话号码:%s\n,p-tnumber);printf(消费:%.2lf\n,p-consume);printf(积分:%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:%.1lf折\n,y);p-discount=y;}}}}(3)修改客户函数voidAmend(cnode*head,charID[])//修改客户函数{cnode*p;doubley;intchoose1;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){p=p-next;if(strcmp(ID,p-ID)==0){//判断身份证号是否相同printf(\n姓名:%s\n,p-name);printf(身份证号:%s\n,p-ID);printf(电话号码:%s\n,p-tnumber);printf(消费:%.2lf\n,p-consume);printf(积分:%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:%.1lf折\n\n,y);p-discount=y;7}}printf(1.姓名2.身份证号3.电话号码4.消费金额5.修改全部\n);printf(请选择你要修改的选项:);scanf(%d,&choose1);if(choose1==1){printf(\n请输入修改后姓名:);scanf(%s,&p-name);printf(修改成功!\n);}if(choose1==2){printf(\n请输入修改后的身份证号:);scanf(%s,&p-ID);printf(修改成功!\n);}if(choose1==3){printf(\n请输入修改后电话:);scanf(%s,&p-tnumber);printf(修改成功!\n);}if(choose1==4){printf(\n请输入修改后的消费:);scanf(%lf,&p-consume);p-integer=p-consume/10;printf(积分:%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:%.1lf折\n\n,y);printf(修改成功!\n);}if(choose1==5){printf(\n请输入姓名:);scanf(%s,&p-name);printf(请输入身份证号:);scanf(%s,&p-ID);printf(请输入电话号码:);scanf(%s,&p-tnumber);printf(请输入消费金额:);scanf(%lf,&p-consume);p-integer=p-consume/10;8printf(对应积分:%lf\n,p-integer);y=display_discount(p-integer);//调用函数计算折扣printf(折扣:%.1lf折,y);printf(\n);p-discount=y;}}}(4)删除客户函数voidDelete(cnode*head,charID[])//删除客户函数{cnode*p,*q;charch[2];intj=0,i=0;doubley;p=head;if(p-next==NULL)printf(没有客户!\n);else{while(p-next!=NULL){q=p;p=p-next;j++;if(strcmp(ID,p-ID)==0){printf(\n姓名:%s\n,p-name);printf(身份证号:%s\n,p-ID);printf(电话号码:%s\n,p-tnumber);printf(消费:%.2lf\n,p-consume);printf(积分:%lf\n,p-integer);y=display_discount(p-integer);printf(折扣:%.1lf折\n\n,y);q-next=p-next;}}printf(已找到该客户,是否删除?(y/n));scanf(%s,ch);if(strcmp(ch,Y)==0||strcmp(ch,y)==0)/*判断是否要进行删除*/{for(i=j;i=customer_number;i++){q=q-next;}customer_number--;printf(删除成功!);}else{printf(删除失败!);}}}(5)显示客户函数voidShowall(cnode*head)//显示所有客户函数{cnode*p;doubley;p=head;if(p-next==NULL)printf(没有客户!\n);9else{while(p-next!=NULL){p=p-next;printf(姓名:%s\n,p-name);printf(身份证号:%s\n,p-ID);printf(电话号码:%s\n,p-tnumber);printf(消费:%.2lf\n,p-