数据结构课程设计客户消费积分系统_第1页
数据结构课程设计客户消费积分系统_第2页
数据结构课程设计客户消费积分系统_第3页
数据结构课程设计客户消费积分系统_第4页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告设计题目:客户消费积分系统学院、系:电子与信息工程学院专业班级:学生姓名:指导教师:成绩:2013年1月8日目录1、需求分析 21.1 问题描述 31.2 基本要求 32、概要设计 32.1数据结构 .42.2程序模块 .42.3各模块之间的调用关系以及算法设计 .43、详细设计 .54、测试与分析 .65、总结 .106、附录 .111、需求分析:11 问题描述1、采用动态分配顺序表存储客户信息,并用文件保存和读写数据2、能对客户信息进行添加、查询、修改、删除等基本操作3、根据客户消费额,合理计算出客户消费所得积分4、根据客户积分值,实行不同情况的优惠(即计算折扣)12 基本要求

2、进行添加客户时要注意不能超过所定义数组的最大容量,查找时输入的身份证号要求为 18 位,本程序能对客户信息进行添加、查询、修改、删除等基本操作,根据客户消费额, 合理计算出客户消费所得积分,根据客户积分值, 实行不同情况的优惠。2、概要设计:1. 数据结构线性表的抽象数据类型定义InitList前置条件:线性表不存在输入:无功能:线性表的初始化输出:无后置条件:一个空的线性表DestroyList前置条件:线性表已存在输入:无功能:销毁线性表输出:无后置条件:释放线性表所占的内存空间Length前置条件:线性表已存在输入:无功能:求线性表的长度输出:线性表中元素个数后置条件:、线性表不变Get

3、前置条件:线性表已存在输入:元素的序号i功能:在线性表中去序号为i 的元素输出:如果序号合法,返回序号为 i 的元素值,否则抛出异常后置条件:、线性表不变Insert前置条件:线性表已存在输入:插入位置i ,插入元素 x功能:在线性表的第i 个位置,插入元素X输出:若插入不成功,抛出异常后置条件:若插入成功,表中增加了一个元素Delete前置条件:线性表已存在输入:删除位置i功能:删除线性表的第i 个元素输出:若删除成功,返回被删除元素,否则抛出异常后置条件:若删除成功,表中减少了一个元素Print前置条件:线性表已存在输入:无功能:按位置的先后次序依次输出线性表中的元素输出:线性表中的各个元

4、素后置条件:线性表不变2. 程序模块主函数 main()动态获取表空间,初始化链表,打开文件将客户数据加载入表中,进行表操作,操作结束将表数据保存到文件,文件关闭。2.1 添加客户信息遍历当前单链表,若待添加的用户编号已存在,则返回用户已存在的提示信息;若待添加的用户不存在, 则将该客户信息添加到顺序表最后, 并将单链表表长度加 1。2.2 删除客户信息遍历当前顺序表,若要删除的用户标号不存在,则返回提示信息;否则提示用户是否确定删除,确定即删除。删除操作即将待删除记录的后面记录依次向前移动1 步。2.3 更改客户信息遍历当前单链表,若待更改的用户编号不存在,则返回用户不存在的提示信息;若待添

5、加的用户存在,则提示输入新的信息。2.4查找客户信息输入待查找用户的身份证号,若存在则返回用户的信息2.5显示客户信息遍历整个单链表,显示当前所有客户2.6统计客户遍历单链表,统计当前链表中所有客户的总数3. 各模块之间的调用关系以及算法设计客户消费积分管理系统添查删更显统加找除改示计客客客客客客户户户户户户信信信信信总息息息息息数客户消费积分管理系统功能3、详细设计添加客户信息伪代码:1.初始化工作指针P,申请空的结点空间;2.输入姓名,输入身份证号;3.若省份证号不等于18,输出输入有误,否则输入消费金额,并调用函数进行折扣计算;查找客户信息:1. 初始化工作指针 P,工作指针 P 指向头

6、结点,并定义折扣;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 后

7、移;3 判断身份证号是否相同,若相同输出姓名、身份证号、消费、折扣、积分;4 选择是否删除,选 1 返回删除成功,选 2,返回删除失败;显示客户信息:1初始化工作指针 p ,定义折扣;2判断指针 P 是否为空,若为空输出没有客户,否则p 后移;3 输出每位姓名、身份证号、消费、折扣、积分统计客户信息:1初始化工作指针p ,累加器 i 初始化;2判断指针 P 是否为空,若为空输出没有客户,否则p 后移;3累加器 i 加 1;4输出现有客户数量i 位;计算折扣函数:1. 定义折扣 discount2. 若积分为 0,则折扣为 0;若积分大于 0 小于 50,则折扣为 9;若积分大于等于 50,于1

8、00,则折扣为 8,;若积分大于等于 100,小于等于 150,则折扣为 7;若积分大于等于150,小于等于 200,则折扣为 7;若积分大于等于 150,小于等于 200,则折扣为 6.5 若积分大于等于 200,小于等于 300,则折扣为 6,;若积分大于 300,折扣为 6.4、测试与分析添加客户信息:查找客户信息:修改客户信息:删除客户信息:显示客户:统计客户:退出:5、总结: 在本次课程设计当中,我对许多以往掌握不够熟练或者是使用较少而易忽略的知识点有了一定的掌握,而且通过本次试验提高了我的实际操作能力,在编写代码的过程当中,我通过查阅有关的资料和分析实例,从中学到了很多能够不断优化

9、自己代码,可以提高代码利用率的知识,并且更加合理的构建了各个知识点之间的联系,充分的利用了循环和选择性语句,在存储过程中,对文件的部分知识也有了一个深层次的了解和掌握,对于如何修改文件信息以及保存有了一定的概念和运用。当然,在代码的编写过程中,也遇到了许多问题,我通过自身的努力去改正它们,在这个过程中我也学到了很多东西,在代码的调试过程中,我碰到了许多以前所没有碰到过的错误,但通过同学的帮助解决了这些困难,并且自身得到了一定的提高。通过本学期的学习我对数据结构有了更深的了解,数据结构重在思想,通过学习数据结构的思想和C+ 结合来编写程序,虽然现在编程仍有许多困难,但以后的学习中,我会更加努力,

10、希望能够不断的提高自己!6、附录:源程序#include<iostream>using namespace std;struct cnodechar name20;char ID20;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,ch

11、ar 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 y20;Initstack(head);docout<<"n"cout<<"客户消费积分管理系统nn"cout<<"*"cout<<"n*n&q

12、uot;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<&

13、lt;"*"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<

14、;<"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"Showal

15、l(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(

16、p->ID)!=18)cout<<" 身份证号码位数有误请重新输入 cin>>p->ID;(18 位 ): "cout<<" 请输入消费金额:"cin>>p->consume;p->integer=p->consume/100;y=display_discount(p->integer);cout<<" 折扣 :"cout<<y;cout<<" 折 n"p->next=head->ne

17、xt;head->next=p;void Search(cnode *head,char ID)cnode *p;double y;p=head;if(p->next=NULL)cout<<" 没有客户 !n"elsewhile(p->next!=NULL)p=p->next;if(strcmp(ID,p->ID)=0)cout<<" 姓名: "cout<<p->name;cout<<" 身份证号: "cout<<p->ID;cout

18、<<" 消费: "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

19、)cout<<" 没有客户 !n"elsewhile(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-&g

20、t;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<<" 请输入修改后的身份证号

21、:"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;elsecout<<" 请输入续加金额:"

22、;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-&g

23、t;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"elsewhile(p->next!=NULL)head=p;p=p->next;if(strcmp(ID,p->ID)=0)cout<<" 姓名: "cou

24、t<<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<<&

25、quot; 你确认删除?1、确定。 2、取消。请选择:"cin>>x;if(x=1)head->next=p->next;cout<<" 删除成功 !"elsecout<<" 删除失败 !"void Showall(cnode *head)cnode *p;double y;p=head;if(p->next=NULL)cout<<" 没有客户 !n"elsewhile(p->next!=NULL)p=p->next;cout<<&qu

26、ot; 姓名: "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&q

27、uot;void count(cnode *head)cnode *p;int i=0;p=head;if(p->next=NULL)cout<<" 没有客户 !n"elsewhile(p->next!=NULL)p=p->next;i+;cout<<" 现有客户数量为"<<i<<" 位 !"double display_discount(double points)double discount;if(points = 0)discount = 0;if(points

28、 > 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 > 3

29、00)discount = 5;return discount;奔波在俗世里,不知从何时起,飘来一股清流,逼着每个人优秀。人过四十,已然不惑。我们听过别人的歌,也唱过自己的曲,但谁也逃不过岁月的审视,逃不过现实的残酷。如若,把心中的杂念抛开,苟且的日子里,其实也能无比诗意。借一些时光,寻一处宁静,听听花开,看看花落,翻一本爱读的书,悟一段哲人的赠言,原来,日升月落,一切还是那么美。洗不净的浮沉,留给雨天;悟不透的凡事,交给时间。很多时候,人生的遗憾,不是因为没有实现,而是沉于悲伤,错过了打开心结的时机。有人说工作忙、应酬多,哪有那么多的闲情逸致啊?记得鲁迅有句话:“时间就像海绵里的水,只要挤总是有的。”不明花语,却逢

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论