收藏 分销(赏)

数据结构课程设计--客户消费积分系统.doc

上传人:a199****6536 文档编号:1955536 上传时间:2024-05-12 格式:DOC 页数:19 大小:405.50KB 下载积分:8 金币
下载 相关 举报
数据结构课程设计--客户消费积分系统.doc_第1页
第1页 / 共19页
数据结构课程设计--客户消费积分系统.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
课程设计报告 设计题目: 客户消费积分系统 学院、系: 电子与信息工程学 院 专业班级: 学生姓名: 指导教师: 成 绩: 2013年 1 月 8 日 目录 1、 需求分析…………………………………………………………2 1.1问题描述………………………………………………………3 1.2基本要求………………………………………………………3 2、概要设计…………………………………………………………3 2.1数据结构……………………………………………………….4 2.2程序模块……………………………………………………….4 2.3各模块之间的调用关系以及算法设计……………………….4 3、详细设计………………………………………………………...5 4、测试与分析……………………………………………………..6 5、总结……………………………………………………………..10 6、附录……………………………………………………………..11 1、需求分析: 1.1问题描述 1、采用动态分配顺序表存储客户信息,并用文件保存和读写数据 2、能对客户信息进行添加、查询、修改、删除等基本操作 3、根据客户消费额,合理计算出客户消费所得积分 4、根据客户积分值,实行不同情况的优惠(即计算折扣) 1.2基本要求 进行添加客户时要注意不能超过所定义数组的最大容量,查找时输入的身份证号要求为18位,本程序能对客户信息进行添加、查询、修改、删除等基本操作,根据客户消费额,合理计算出客户消费所得积分,根据客户积分值,实行不同情况的优惠。 2、 概要设计 : 1. 数据结构 线性表的抽象数据类型定义 InitList 前置条件:线性表不存在 输入:无 功能:线性表的初始化 输出:无 后置条件:一个空的线性表 DestroyList 前置条件:线性表已存在 输入:无 功能:销毁线性表 输出:无 后置条件:释放线性表所占的内存空间 Length 前置条件:线性表已存在 输入:无 功能:求线性表的长度 输出:线性表中元素个数 后置条件:、线性表不变 Get 前置条件:线性表已存在 输入:元素的序号i 功能:在线性表中去序号为i的元素 输出:如果序号合法,返回序号为i的元素值,否则抛出异常 后置条件:、线性表不变 Insert 前置条件:线性表已存在 输入:插入位置i ,插入元素x 功能:在线性表的第i个位置,插入元素X 输出:若插入不成功,抛出异常 后置条件:若插入成功,表中增加了一个元素 Delete 前置条件:线性表已存在 输入:删除位置i 功能:删除线性表的第i个元素 输出:若删除成功,返回被删除元素,否则抛出异常 后置条件:若删除成功,表中减少了一个元素 Print 前置条件:线性表已存在 输入:无 功能:按位置的先后次序依次输出线性表中的元素 输出:线性表中的各个元素 后置条件:线性表不变 2. 程序模块 主函数main() 动态获取表空间,初始化链表,打开文件将客户数据加载入表中,进行表操作,操作结束将表数据保存到文件,文件关闭。 2.1添加客户信息 遍历当前单链表,若待添加的用户编号已存在,则返回用户已存在的提示信息;若待添加的用户不存在,则将该客户信息添加到顺序表最后,并将单链表表长度加1。 2.2删除客户信息 遍历当前顺序表,若要删除的用户标号不存在,则返回提示信息;否则提示用户是否确定删除,确定即删除。 删除操作即将待删除记录的后面记录依次向前移动1步。 2.3更改客户信息 遍历当前单链表,若待更改的用户编号不存在,则返回用户不存在的提示信息;若待添加的用户存在,则提示输入新的信息。 2.4 查找客户信息 输入待查找用户的身份证号,若存在则返回用户的信息 2.5 显示客户信息 遍历整个单链表,显示当前所有客户 2.6 统计客户 遍历单链表,统计当前链表中所有客户的总数 3. 各模块之间的调用关系以及算法设计 添加客户信息 客户消费积分管理系统 查找客户信息 删除客户信息 更改客户信息 显示客户信息 统计客户 总数 客户消费积分管理系统功能 3、详细设计 添加客户信息伪代码: 1.初始化工作指针P,申请空的结点空间; 2.输入姓名,输入身份证号; 3.若省份证号不等于18,输出输入有误,否则输入消费金额,并调用函数进行折扣计算 ; 查找客户信息: 1. 初始化工作指针P,工作指针P指向头结点,并定义折扣; 2.判断P是否为空,若为空,输出无用户,否则P后移直到身份证号相同; 3.若相同调用函数计算折扣; 更改客户信息: 1. 初始化工作指针p ,定义折扣和续加金额; 2. 判断指针P是否为空,若为空输出没有客户,否则p后移; 3. 判断身份证号是否相同,若相同输出姓名、身份证号、消费、折扣、积分; 4. 输入要修改的项目; 4.1选择1,输入修改后的姓名 4.2 选择2,输入修改后的身份证号4.3选择3,覆盖以前消费、续加上现在费用; 5. 调用积分函数,计算折扣; 删除客户信息: 1. 初始化工作指针p ,定义折扣; 2判断指针P是否为空,若为空输出没有客户,否则p后移; 3判断身份证号是否相同,若相同输出姓名、身份证号、消费、折扣、积分; 4选择是否删除,选1返回删除成功,选2,返回删除失败; 显示客户信息: 1初始化工作指针p ,定义折扣; 2判断指针P是否为空,若为空输出没有客户,否则p后移; 3输出每位姓名、身份证号、消费、折扣、积分 统计客户信息: 1初始化工作指针p ,累加器i初始化; 2判断指针P是否为空,若为空输出没有客户,否则p后移; 3累加器i加1; 4输出现有客户数量i位; 计算折扣函数: 1. 定义折扣discount 2. 若积分为0,则折扣为0;若积分大于0小于50,则折扣为9;若积分大于等于50,于100,则折扣为8,;若积分大于等于100,小于等于150,则折扣为7;若积分大于等于150,小于等于200,则折扣为7;若积分大于等于150,小于等于200,则折扣为6.5 若积分大于等于200,小于等于300,则折扣为6,;若积分大于300,折扣为6. 4、测试与分析 添加客户信息: 查找客户信息: 修改客户信息: 删除客户信息: 显示客户: 统计客户: 退出: 5、总结: 在本次课程设计当中,我对许多以往掌握不够熟练或者是使用较少而易忽略的知识点有了一定的掌握,而且通过本次试验提高了我的实际操作能力,在编写代码的过程当中,我通过查阅有关的资料和分析实例,从中学到了很多能够不断优化自己代码,可以提高代码利用率的知识,并且更加合理的构建了各个知识点之间的联系,充分的利用了循环和选择性语句,在存储过程中,对文件的部分知识也有了一个深层次的了解和掌握,对于如何修改文件信息以及保存有了一定的概念和运用。 当然,在代码的编写过程中,也遇到了许多问题,我通过自身的努力去改正它们,在这个过程中我也学到了很多东西,在代码的调试过程中,我碰到了许多以前所没有碰到过的错误,但通过同学的帮助解决了这些困难,并且自身得到了一定的提高。通过本学期的学习我对数据结构有了更深的了解,数据结构重在思想,通过学习数据结构的思想和C++结合来编写程序,虽然现在编程仍有许多困难,但以后的学习中,我会更加努力,希望能够不断的提高自己! 6、 附录:源程序 #include<iostream> using namespace std; struct cnode { char name[20]; char ID[20]; double consume; double integer; struct cnode *next; }; void Initstack(cnode * &head) { head= new cnode; head->next=NULL; } void Getelem (cnode *head); void Search(cnode *head,char ID[]); void Amend(cnode *head,char ID[]); void Delete(cnode *head,char ID[]); void Showall(cnode *head); void count(cnode *head); double display_discount(double integer); void main() { cnode *head; int choice; char y[20]; Initstack(head); do{ cout<<"\n"; cout<<" 客户消费 积分管理系统 \n\n"; cout<<" ****************************"; cout<<"\n * *\n"; cout<<"\n * 主菜单 *\n"; cout<<"\n * 1 添加客户 *\n"; cout<<"\n * 2 查找客户 *\n"; cout<<"\n * 3 修改客户 *\n"; cout<<"\n * 4 删除客户 *\n"; cout<<"\n * 5 显示客户 *\n"; cout<<"\n * 6 统计客户 *\n"; cout<<"\n * 7 退出 *\n"; cout<<"\n * *\n"; cout<<" ***************************"; cout<<"\n 请输入您的选择(1,2,3,4,5,6):"; cin>>choice; if(choice==1) { Getelem(head); } else if(choice==2) { cout<<"\n 请输入您查找客户的身份证号:"; cin>>y; while(strlen(y)!=18) { cout<<"身份证号码位数有误请重新输入(18位):"; cin>>y; } Search(head,y); } else if(choice==3) { cout<<"\n 请输入您想修改客户的身份证号:"; cin>>y; while(strlen(y)!=18) { cout<<"身份证号码位数有误请重新输入(18位):"; cin>>y; } Amend(head,y); } else if(choice==4) { cout<<"\n"; cout<<" 请输入你想要删除的客户的身份证号:"; cin>>y; Delete(head,y); } else if(choice==5) { cout<<"\n"; Showall(head); } else if(choice==6) { cout<<"\n"; count(head); } else if(choice==7) exit(1); }while(choice<=7); } void Getelem (cnode *head) { cnode *p; double y; p=new cnode; /*申请空的节点空间*/ cout<<"请输入姓名:"; cin>>p->name; cout<<"请输入身份证号(18位):"; cin>>p->ID; while(strlen(p->ID)!=18) { cout<<"身份证号码位数有误请重新输入(18位):"; cin>>p->ID; } cout<<"请输入消费金额:"; cin>>p->consume; p->integer=p->consume/100; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; p->next=head->next; head->next=p; } void Search(cnode *head,char ID[]) { cnode *p; double y; p=head; if(p->next==NULL) cout<<"没有客户!\n"; else { while(p->next!=NULL) { p=p->next; if(strcmp(ID,p->ID)==0) { cout<<"姓名:"; cout<<p->name; cout<<"身份证号:"; cout<<p->ID; cout<<"消费:"; cout<<p->consume; cout<<"积分:"; cout<<p->integer; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; } } } } void Amend(cnode *head,char ID[]) { cnode *p; double y,z; int choose,x; p=head; if(p->next==NULL) cout<<"没有客户!\n"; else { while(p->next!=NULL) { p=p->next; if(strcmp(ID,p->ID)==0) { cout<<"姓名:"; cout<<p->name; cout<<"身份证号:"; cout<<p->ID; cout<<"消费 "; cout<<p->consume; cout<<"积分:"; cout<<p->integer; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; } } cout<<"请选择你要修改的1、姓名。2、身份证号。3、消费金额。"; cin>>choose; if(choose==1) { cout<<"请输入修改后姓名;"; cin>>p->name; } if(choose==2) { cout<<"请输入修改后的身份证号:"; cin>>p->ID; while(strlen(p->ID)!=18) { cout<<"身份证号码位数有误请重新输入(18位):"; cin>>p->ID; } } if(choose==3) { cout<<"1.覆盖以前消费、2.续加上现在费用!!请选择:"; cin>>x; if(x==1) { cout<<"请输入修改后的消费:"; cin>>p->consume; } else { cout<<"请输入续加金额:"; cin>>z; p->consume+=z; } } cout<<"姓名:"; cout<<p->name; cout<<"身份证号:"; cout<<p->ID; cout<<"消费:"; cout<<p->consume; p->integer=p->consume/100; cout<<"积分:"; cout<<p->integer; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; } } void Delete(cnode *head,char ID[]) { cnode *p; int x; double y; p=head; if(p->next==NULL) cout<<"没有客户!\n"; else { while(p->next!=NULL) { head=p; p=p->next; if(strcmp(ID,p->ID)==0) { cout<<"姓名:"; cout<<p->name; cout<<"身份证号:"; cout<<p->ID; cout<<"消费:"; cout<<p->consume; cout<<"积分:"; cout<<p->integer; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; } } cout<<"你确认删除?1、确定。2、取消。请选择:"; cin>>x; if(x==1) { head->next=p->next; cout<<"删除成功!"; } else { cout<<"删除失败!"; } } } void Showall(cnode *head) { cnode *p; double y; p=head; if(p->next==NULL) cout<<"没有客户!\n"; else { while(p->next!=NULL) { p=p->next; cout<<"姓名:"; cout<<p->name; cout<<"身份证号:"; cout<<p->ID; cout<<"消费:"; cout<<p->consume; cout<<"积分:"; cout<<p->integer; y=display_discount(p->integer); cout<<"折扣:"; cout<<y; cout<<"折\n"; } } } void count(cnode *head) { cnode *p; int i=0; p=head; if(p->next==NULL) cout<<"没有客户!\n"; else { while(p->next!=NULL) { p=p->next; i++; } } cout<<"现有客户数量为"<<i<<"位!"; } double display_discount(double points) { double discount; if(points == 0) discount = 0; if(points > 0&&points <= 50) discount = 9; if(points > 50&&points <= 100) discount = 8; if(points > 100&&points <= 150) discount = 7; if(points > 150&&points <= 200) discount = 6.5; if(points > 200&&points <= 300) discount = 6; else if(points > 300) discount = 5; return discount; } 其中专业理论知识内容包括:保安理论知识、消防业务知识、职业道德、法律常识、保安礼仪、救护知识。作技能训练内容包括:岗位操作指引、勤务技能、消防技能、军事技能。 二.培训的及要求培训目的 安全生产目标责任书 为了进一步落实安全生产责任制,做到“责、权、利”相结合,根据我公司2015年度安全生产目标的内容,现与财务部签订如下安全生产目标: 一、目标值: 1、全年人身死亡事故为零,重伤事故为零,轻伤人数为零。 2、现金安全保管,不发生盗窃事故。 3、每月足额提取安全生产费用,保障安全生产投入资金的到位。 4、安全培训合格率为100%。 二、本单位安全工作上必须做到以下内容: 1、对本单位的安全生产负直接领导责任,必须模范遵守公司的各项安全管理制度,不发布与公司安全管理制度相抵触的指令,严格履行本人的安全职责,确保安全责任制在本单位全面落实,并全力支持安全工作。 2、保证公司各项安全管理制度和管理办法在本单位内全面实施,并自觉接受公司安全部门的监督和管理。 3、在确保安全的前提下组织生产,始终把安全工作放在首位,当“安全与交货期、质量”发生矛盾时,坚持安全第一的原则。 4、参加生产碰头会时,首先汇报本单位的安全生产情况和安全问题落实情况;在安排本单位生产任务时,必须安排安全工作内容,并写入记录。 5、在公司及政府的安全检查中杜绝各类违章现象。 6、组织本部门积极参加安全检查,做到有检查、有整改,记录全。 7、以身作则,不违章指挥、不违章操作。对发现的各类违章现象负有查禁的责任,同时要予以查处。 8、虚心接受员工提出的问题,杜绝不接受或盲目指挥; 9、发生事故,应立即报告主管领导,按照“四不放过”的原则召开事故分析会,提出整改措施和对责任者的处理意见,并填写事故登记表,严禁隐瞒不报或降低对责任者的处罚标准。 10、必须按规定对单位员工进行培训和新员工上岗教育; 11、严格执行公司安全生产十六项禁令,保证本单位所有人员不违章作业。 三、 安全奖惩: 1、对于全年实现安全目标的按照公司生产现场管理规定和工作说明书进行考核奖励;对于未实现安全目标的按照公司规定进行处罚。 2、每月接受主管领导指派人员对安全生产责任状的落 19
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服