客户消费积分管理系统的设计与实现-课程设计.doc
《客户消费积分管理系统的设计与实现-课程设计.doc》由会员分享,可在线阅读,更多相关《客户消费积分管理系统的设计与实现-课程设计.doc(22页珍藏版)》请在咨信网上搜索。
编号 课程设计报告 2015~2016学年 第一学期 客户消费积分管理系统的设计与实现 The Design and Implementation of a Client Integral Management System 实 习 类 别 课程设计 学 生 姓 名 李志莹 专 业 软件工程 学 号 140521329 指 导 教 师 刘丹、 何巍 学 院 计算机科学技术学院 二〇一五年十二月 长春理工大学计算机科学技术学院课程设计报告 起 止 周 17~18 周数 2 实习地点 南研1213/1208/1201实验室 课程设计目的: l 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; l 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; l 提高综合运用所学的理论知识和方法独立分析和解决问题的能力; l 训练学生用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 课程设计要求: 1、独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。 2、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。 3、实践设计以实际应用中的小型题目为主,要求学生独立完成或合作完成。要求学生能根据不同的题目类型选择一种或两种开发模式,完成从系统定义,指定开发计划,需求分析,设计,编码/测试,直至运行/维护的软件生存期的全过程。 完成课程设计题目《客户消费积分管理系统的设计与实现》 进度安排及主要内容: 第1次课:布置任务;第2次课:问题分析及解决方案确定; 第3次课:形成编程思路;第4次课:使用具体语言实现算法; 第5次课:上机调试程序;第6次课:编写课程设计报告; 成绩: 指导教师(签字) 年 月 日 一、概述 1.1 设计主要完成的任务 1.1.1 题目要求 针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。 ⑴采用一定的存储结构进行客户信息的存储; ⑵对客户的信息可以进行修改、删除、添加; ⑶能够根据消费情况进行客户积分的累加; ⑷根据积分情况,对客户实行不同程度的打折优惠; 1.2 解决的主要问题 1.2.1 采用何种数据结构和编程语言实现客户抽象 由于客户数目不定,所以采用链表结构实现客户的增删改查等基本操作,用C#窗体图形用户界面技术编写程序。 本程序要运用链表对客户信息进行存储,首先对结点进行定义,采用C#泛型思想和接口建立单链表类,并实现单链表的基本操作,代码主要参考的是《数据结构(C#语言版)》,但是在实际编写过程中略有调整。 1.2.2 界面设计 (1) 主界面:功能按钮导航; (2) 添加界面:添加新客户的信息; (3) 删除界面:按客户ID删除已有客户。 (4) 修改界面:按客户ID修改已有客户信息。 (5) 查找界面:按客户ID查找已有客户。 (6) 显示界面:遍历显示表中所有的客户的所有信息。 (7) 消费界面:按客户ID对已有客户进行消费操作。 1.2.3 数据结构中单链表的C#实现 对于单链表的操作,主要用到两个类,一个是Node类,一个是List类。 Node类主要是建立节点的类,这个类包含数据内容data和“指针”next用于指向下一个节点,实现单链表的连接。List类主要是进行对单链表的各种操作: v 初始化头节点为空的链表。 v 求单链表的长度。 v 清空单链表。 v 判断链表是否为空。 v 在单链表尾部追加数据元素。 v 在单链表的第i个结点的位置前插入一个值为value的结点。 v 删除单链表的第i个结点,只是修改引用域,逻辑上的删除,由垃圾回收器回收。 v 获得单链表中第i个数据元素。 v 在单链表中查找值为value的结点。 所有的操作都是基于List中的私有变量head和通过方法得到的长度,利用他们实现节点的查找和定位。 1.2.4 客户的抽象 客户用类进行抽象建模,在客户类Consumer中定义相关字段(信息)、属性(字段的操作方式)、构造方法(客户创建方式)和实例方法(操作函数)。 所要定义的属性、字段和方法参见图-1。 图-1 客户类的结构 图-1中类要调用消费方法时,消费方法又调用计算折扣方法。左边一列没有注释的内容为类中各字段对应的属性,用于对外写入和读入字段的值。右边带有注释的内容为属于类的字段,是对客户信息的抽象。 二、需求分析 2.1 客户(管理对象)需求 2.1.1 客户的基本信息 注册登记时,每个客户都有唯一的ID,在方便管理的基础上,管理员可对客户的基本个人信息,如ID,姓名,电话等等,进行增加、删除、修改和查找,但是无法直接修改客户的累计消费、享有优惠、积分,这三个信息是执行消费操作时由系统后台自动更改的。 2.1.2 积分设置 当用户每消费一次,都由管理员用系统执行添加消费操作,操作成功就有一笔积分与以前的积分进行累加,记录在系统中,并按照相关的积分政策,可享受打折优惠等,或累计一定的积分,可为会员类型进行升级。 2.1.3 消费设置 在系统中,每次消费操作得到管理员输入的有效消费金额,调用折扣计算函数访问客户的享有优惠信息,计算出实际支付款,显示次实付款以及此次消费享有的优惠,购买成功后显示最新积分。 2.2 数据需求 应使用string对每个客户的基本信息进行存储。用户消费、积分用double类型存储。然后运用链表的存储结构将用户所有信息进行保存。继而完成各种功能。 2.3题目的功能 v 采用一定的存储结构进行客户信息的存储; v 对客户的信息可以进行修改、删除、添加; v 能够根据消费情况进行客户积分的累加; v 根据积分情况,对客户实行不同程度的打折优惠; 2.4系统各项功能描述 2.4.1根据不同的积分区间对客户进行打折具体如下: 积分满500享受1元优惠, 积分满1000享受2元优惠, 积分满2000享受5元优惠, 积分满5000享受9折优惠, 积分满10000享受VIP的7折优惠。 2.4.1用例分析 v 用例1 v 用例名:录入客户及商品信息 行为者:超市管理员 v 目的:完成对客户及商品信息的录入管理 v 过程描述: v 录入客户(商品)的详细信息包括客户的姓名、身份证号、及现有的积分(商品名、商品的序列号、商品的价格、商品的数量) 通过客户文件in.txt(in2.txt)文件或者键盘输入读取客户(商品)信息 对键盘输入的客户的积分初始化为0;输入客户(商品)名称能查找到相应信息; 根据客户的积分信息及打折信息给客户实现打折优惠; v 异常处理:无。 v 用例2 v 用例名:客户信息管理 。 行为者:超市管理员。 v 目的:完成对客户信息的管理。 v 过程描述: v 超市管理员输入客户的姓名和ID号。 对客户进行相应的增、删、查、改的操作并能正确的显示客户信息 对客户进行报表统计;保存客户信息录入客户信息文件out.txt v 异常处理:无。 v 用例 3 v 用例名:客户消费管理 。 行为者:超市管理员。 v 目的:完成对客户购买消费的计算并根据客户消费返回客户积分; v 过程描述: v 超市管理员输入客户的身份证号查找到相应的客户并显示客户的积分及打折信息,如果客户不存在则打印此用户不存在;输入客户购买的商品序号 打印出商品的信息。输入客户购买的商品数量并累加到consumer的消费中;退出系统; v 异常处理:无。 三、技术方案 3.1软硬件环境 3.1.1 系统软件: 本课程设计的系统开发平台为Windows XP及以上。程序设计语言为C#语言,程序运行平台可Windws98/2000/XP/Seven。 需要Visual Studio 2013编程软件和.Net Framework组件。 3.1.2系统硬件的需求: Pentium4 800MHZ或者更高主频CPU 512MB以上内存。 3.2配置方案 Windows7操作系统,VS2013开发工具及平台。 3.3 关键技术 C#窗体应用技术,c#泛型和面向对象编程,数据结构原理及算法,单链表的基本操作。 四、 总体设计 4.1 系统功能架构 系统的功能架构参见图-2: 图-2 系统功能的结构 4.2 各模块功能架构 4.2.1添加 图-3 添加客户 4.2.2删除 图-4 删除客户 4.2.3修改 图-5 修改客户 4.2.4查找 图-6 查找客户 4.2.5添加消费 图-7 添加消费 4.2.6 查看所有 图-8 查看所有 五、详细设计 5.1节点的定义 class Node<T> { // 定义单链表数据结构 private T data; //数据域 字段 public T Data // 数据域 属性 { get { return data; } set { data = value; } } private Node<T> next; //指针域 字段 public Node<T> Next //指针域 属性 { get { return next; } set { next = value; } } //构造函数 public Node() //空节点 { this.data = default(T); this.next = null; } public Node(T data, Node<T> next) //数据域,指针域 节点 { this.data = data; this.next = next; } public Node(T data) //数据域 节点 { next = null; this.data = data; } public Node(Node<T> next) //指针域 节点 { this.next = next; } } 5.2单链表的实现以及基本操作接口 5.2.1单链表的字段、构造方法: class List<T> : IListDS<T> { private Node<T> head; // 单链表头结点 字段 // 头结点属性 public Node<T> Head { get { return head; } set { head = value; } } // 构造方法 public List() { head = null; } } 5.2.2 单链表类接口: //接口的定义 public interface IListDS<T> { int GetLength(); //求长度 void Clear(); //清空操作 bool IsEmpty(); //判断线性表是否为空 bool Append(T item); //附加操作 bool Insert(T item, int i); //插入操作 T Delete(int i); //删除操作 T GetElem(int i); //取表元 int Locate(T value); //按值查找 } 5.3 各功能模块流程图 5.3.1 添加流程 图-9 添加流程 5.3.2删除流程 图-10 删除流程 5.3.3修改流程、查找流程 图-11 修改流程、查找流程 5.3.4添加消费、查看所有客户流程 图-12 添加消费、查看所有客户流程 六、软件测试 6.1针对目标系统的测试方案 6.1.1测试流程 添加几个用例,删除其中之一,再试着查找不存在的客户,给存在的客户添加消费,查看所有客户信息。 6.1.2用例以及测试结果 添加4个客户----ID 姓名 身份证号 电话 会员类型 ----a a a a 普通, b b b b 普通, c c c c 普通, d d d d VIP, 删除a,修改b为ba ba ba ba VIP, 查找f,为c添加消费500元,查看所有客户。 测试结果: |---ID---| |-姓名-| |-----身份证号-----| |----电话---| |会员类型| |--累计消费--| |--积分--| |享受优惠| 1 ba ba ba ba VIP 0 0 打七折 2 c c c c 普通 500 500 减1元 3 d d d d VIP 0 0 打七折 6.1.3测试结论 程序可以正常增删改除客户,具有一定友好性。 七、总结 在本次课程设计当中,我对许多以往掌握不够熟练或者是使用较少而易忽略的知识点有了一定的掌握,比如说泛型,单链表的基本操作,new和delete的动态内存分配与内存空间的释放,通过设计前对整个客户积分系统的分析,使我对面向对象的结构化程序设计有了更深一层次的认识,通过对用户需求所作的人性化分析,在设计程序的过程中,我更加合理的构建了能够最大限度的满足用户需求的系统功能,使用户在使用时可以随心所欲,在编写代码的过程当中,我通过查阅有关的资料和分析实例,从中学到了很多能够不断优化自己代码,可以提高代码利用率的知识,并且更加合理的构建了各个知识点之间的联系,充分的利用了循环和选择性语句,在存储过程中,对文件的部分知识也有了一个深层次的了解和掌握,对于如何修改文件信息以及保存有了一定的概念和运用。 当然,在代码的编写过程中,也遇到了许多问题,我通过自身的努力去改正它们,在这个过程中我也学到了很多东西,在代码的调试过程中,我碰到了许多以前所没有碰到过的错误,在老师的悉心指导和自己的努力思考下, 我最终把这些问题一一解决掉,并把教训牢记在心,努力使自己得到更大的收获和提高。 总之,在本次课程设计的过程中,我首先从代码的编写中发现了一些解决问题所必须具备的基本能力和素质,在设计程序时,我感受到了作为一名软件开发者所必须具备的统筹安排,注重层次与结构的素养,为我以后从事软件开发工作标明了方向,自己设计的最终实现为自己以后的努力树立了信心,这次课程设计使我受益匪浅。 附录1 参考文献 [1] 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,2007. [2] 谭浩强.C++程序设计(第2版).北京:清华大学出版社,2011.8. [3] 刘莉,李梅,姜志坚.C#程序设计教程.北京:清华大学出版社,2014. 附录2 关键源代码 v private void addButton_Click(object sender, EventArgs e) { //单击添加页的添加按钮函数:获取各文本框字符串,调用构造方法//创建新客户,以此调用构造链表的Append()方法将新客户插入链表尾。 string type; if (radioButton_Normal.Checked == true) type = "普通"; else type = "VIP"; Consumer con = new Consumer(textBoxID.Text, textBoxName.Text, textBoxIDnum.Text, textBoxTel.Text, type ); L.List.Append(con); MessageBox.Show("ID:" + con.IID + ",姓名:" + con.Name + ",身份证号:" + con.IIDnum + ",电话:" + con.Tel + ",会员类型:" + con.Type + "。" + "\n客户总数:" + L.List.GetLength(), "添加客户成功!"); this.Close(); } v private void modButton_Click(object sender, EventArgs e) {//单击修改页的修改按钮函数 /*省略:i值获取和基本信息参数获取*/ Consumer con = new Consumer( /*省略:基本信息参数*/ //旧节点的累计消费 L.List.GetElem(i).PayoutSum, //旧节点的积分 L.List.GetElem(i).Integral ); L.List.Insert(con,i); //修改的实现:1.先在i位置插入新节点 L.List.delete(value); // 2.删除旧节点 this.Close(); /*省略消息对话框提示代码,与上文相似*/ } /*删除和查找的代码实现与以上添加和修改原理相似,故不赘述!*/ v private void confButton_Click(object sender, EventArgs e) {//添加消费页的确定按钮单击函数 /*省略:i值获取*/ if (i <= L.List.GetLength() && i >= 1) { double amount = 0; try { amount = double.Parse(textBox_amount.Text); if (amount > 0) { textBox_amount_show.Text = amount.ToString(); textBox_discountRate_show.Text = L.List.GetElem(i).DiscountRate; double payout = L.List.GetElem(i).consume(textBox_amount.Text); textBox_payout_show.Text = payout.ToString(); label_successBuy.Visible = true; textBox_integral_show.Visible = true; textBox_integral_show.Text = L.List.GetElem(i).Integral.ToString(); } else MessageBox.Show("请重新输入金额!"); } catch (FormatException e1) { MessageBox.Show("请重新输入金额!"); } } else MessageBox.Show("客户ID不存在!"); //this.Close(); } v private void viewForm_Load(object sender, EventArgs e) {//查看所有客户页的加载函数:用循环获取每项元素的各个字段值,加到富文本框richTextBox_view的文本内容中。 string title = " " + "|---ID---|" + "\t" + "|-姓名-|" + "\t" + "|-----身份证号-----|" + "\t" + "|----电话---|" + "\t" + "|会员类型|" + "\t" + "|--累计消费--|" + "\t" + "|--积分--|" + "\t" + "|享受优惠|" + "\n"; richTextBox_view.Text = title; for (int i = 1; i <= L.List.GetLength(); i++) { Consumer item = L.List.GetElem(i); string str = i.ToString() + " " + item.IID + "\t" + item.Name + "\t" + item.IIDnum + "\t" + item.Tel + "\t" + item.Type + "\t" + item.PayoutSum.ToString() + "\t" + item.Integral.ToString() + "\t" + item.DiscountRate + "\n"; richTextBox_view.Text += str; } - 19 - - 21 -- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 客户 消费 积分 管理 系统 设计 实现 课程设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文