资源描述
课程设计(论文)
题 目: 客户消费积分管理
院 (系):信息与控制工程学院
专业班级: 计算机
姓 名: 若小木
学 号:
指导教师: 张高丽
年 月 日
西安建筑科技大学课程设计(论文)任务书
专业班级: 计算机班 学生姓名: 若小木 指导教师(签名):
一、课程设计(论文)题目
客户消费积分管理:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
二、本次课程设计(论文)应达到的目的
数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
本题目要达到目的:熟练掌握链表的实现。
三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)
基本要求:
1. 采用一定的存储结构进行客户信息的存储;
2. 对客户的信息可以进行修改、删除、添加;
3. 能够根据消费情况进行客户积分的计算;
4. 根据积分情况实行不同程度的打折优惠;
四、应收集的资料及主要参考文献:
由于本课程没有安排“课内上机”学时,因此,在课程设计之前必须自己已经上机练习了“线性表”的基本操作。
参考文献:
.本年级使用的教材:数决结构与算法分析(版),电子工业出版社 编著
. 数据结构与算法,科学出版社,赵文静 祁飞等编著
. 数据结构语言描述,西安交通大学出版社,,赵文静编著
深入详解,电子工业出版社,孙鑫,于安萍编著
程序设计, 清华大学出版社, 编著
五、审核批准意见
教研室主任(签字)
设计总说明
数据结构是一门专门讲述如何管理和处理数据的课程,包括堆栈,队列,链表,图和树等等经典的数据结构类型,使人们在数据的处理方面的效率大大提高。
人民生活水平日益提高,超市购物的人越来越高。为了吸引更多的老顾客,超市往往会根据客户的以往购物情况实施不同程度的打折优惠的策略。但是对于客户的购物历史记录的存储就是一个尤为重要的问题,因此我们尝试用数据结构中的有关知识进行解决。
本设计用于管理客户的消费情况,从而根据客户的消费积分对客户实行不同程度的打折优惠。对于客户消费积分管理系统利用线性表的链表存储方式,使用结构体指针将每一个用户联系起来。程序中设计了①添加用户②查找用户③修改用户④删除用户⑤统计客户数量的功能,充分满足对于管理系统的要求。
关键字:数据结构; 链表; 客户
目录
《数据结构》课程设计
客户消费积分管理
.设计目的
“数据结构”是计算机科学与技术专业一门十分重要的专业技术基础课,计算机科学各领域及有关的应用软件都要使用到各种数据结构。对于从事计算机科学及其应用的科技工作者来说,数据结构与算法是必须透彻地掌握的重要基础。
学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。课程设计是加强学生实践能力的一个强有力手段。课程设计所安排的题目,在难度和深度方面都大于平时的上机训练,要求同学在完成设计和编写中小型软件的过程中,深化对数据结构与算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。
课程设计要求学生在完成程序设计的同时能够撰写比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。
2. 问题描述
本设计用于管理客户的消费情况,从而根据客户的消费积分对客户实行不同程度的打折优惠。客户消费积分管理系统具体应该使用一定的存储结构将用户的消费信息存储起来,以方便管理。其中用户的信息包括用户姓名,用户身份证号码,用户消费金额,用户积分多少。继而完成对于客户信息的增删查改等管理。
.需求分析
数据需求
应使用结构体对每个用户的信息进行封装。其中用户的信息包括用户姓名,用户身份证号码,用户消费金额,用户积分多少。
然后运用链表的存储结构将所有用户信息进行保存。继而完成各种功能。
基本功能需求
本设计应该同时完成以下功能①添加用户②查找用户③修改用户④删除用户⑤统计客户数量⑥按一定顺序显示客户信息⑦清空用户信息⑧用一定的存储方法实现用户信息的永久保存,充分满足对于管理系统的要求。
非功能性需求
用户界面需求:简洁、易用、易懂、友好的用户界面。
硬件要求:装有 的计算机。
可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。
.概要设计
数据结构
本设计采用链表的存储方式对用户的信息进行临时性的存储,其中每个节点的信息用结构体进行封装,其中用户的信息包括用户姓名,用户身份证号码,用户消费金额,用户积分数量。
系统包含的函数
系统包含的函数有:添加函数,按姓名查找函数,按身份证号查找函数,修改函数,删除函数,显示函数,统计函数,排序函数,计算折扣函数,清空函数,文件保存函数,文件读取函数,身份证验证函数和主函数。共计个函数。
函数间的关系
①显示函数调用计算折扣函数,计算出客户的折扣信息,并在屏幕上显示;
②主函数在调用添加,修改,删除,清空函数之后都必须调用文件保存函数进行保存。
③调用显示函数之前先调用排序函数,以便屏幕输出有序的用户信息。
④调用添加函数之前先调用身份验证函数,判断身份证号是否重复。
⑤其它各个函数都各自独立。
系统功能模块图
图 系统功能模块图
注释:此处的调用不是真正意义上的调用,而是在主函数中调用函数前,先调用函数。以此来类比函数调用函数。
.详细设计
结构体的详细定义
构造一个结构体,封装客户的个人信息,作为链表中每个节点的模板。括用户姓名,用户身份证号码,用户消费金额,用户积分数量。具体实现如下:
定义一个结构体
{
[];
[];
;
;
*;
};
系统函数详细介绍
①添加用户。函数 ( *);采用类将每个用户的信息封装,其中包括用户姓名、用户省份证号、用户消费金额、积分的信息。输入一个客户信息后再开辟新的节点连接。如添加一个客户:定义指针,用于申请空的结点空间,(*)(()),利用函数输入姓名,身份证号,并保证身份证号的正确。
( *) 增加客户
{
*;
;
(*)(()); 申请空的节点空间
<<"请输入姓名:";
>>>;
<<"请输入身份证号(位):";
>>>;
((>))
{
<<"身份证号码位数有误请重新输入(位):";
>> >;
}
<<"请输入消费金额:";
>>>;
>>;
(>); 调用函数计算折扣
<<"折扣:"<<<<"折";
>>;
>;
}
② ( * []);和 ( * []);查找用户,用每一个节点的信息或者姓名信息和待查信息进行比对,直到找到正确信息并显示。用身份证号()核对的程序实现如下:
:: ( * []) 查找用户
{
*;
;
;
(>)
<<"没有客户!"; 判断链表是否为空
{
(>)
{
>;
((>)) 判断身份证号是否相同
{
<< " ****************************"<<;
<<"姓名:"<<><<;
<<"身份证号:"<<><<;
<<"消费:"<<><<;
<<"积分:"<<><<;
(>);
<<"折扣:"<<<<"折"<<;
<< " ****************************"<<;
}
}
}
}
③ ( * []);查找并显示然后修改。先判断链表是否为空,若为空则提示没有客户;若不为空,则用每一个节点信息和待查节点信息进行比对,知道找到该节点,然后对该节点信息进行修改。以下程序以修改客户姓名为例。
:: ( * []) 修改客户函数
{
*;
;
;
;
(>)
<<"没有客户!";
{
(>)
{
>;
((>)) 判断身份证号是否相同
{
<< " ****************************"<<;
<<"姓名:"<<><<;
<<"身份证号:"<<><<;
<<"消费:"<<><<;
<<"积分:"<<><<;
(>);
<<"折扣:"<<<<"折"<<;
<< " ****************************"<<;
}
}
<<"请选择你要修改的、姓名。、身份证号。、消费金额。";
>>;
()
{
<<"请输入修改后姓名;";
>>>;
}
④ ( * []);查找显示并删除。查找时的做法与上述两个函数基本相同,以下程序用来实现删除该客户(该节点)的功能。<<"你确认删除?、确定。、取消。请选择:";
>>;
()
{
>>;
<<"删除成功!";
}
{
<<"删除失败!";
}
⑤ ( *);遍历链表并显示客户。用一个语句实现打印每一个用户。
(>)
{
<< " ****************************"<<;
>;
<<"姓名:"<<><<;
<<"身份证号:"<<><<;
<<"消费:"<<><<;
<<"积分:"<<><<;
(>);
<<"折扣:"<<<<"折"<<;
}
⑥ ( *);遍历统计客户数量显示。用一个计数变量遍历链表实现计数功能。
(>)
{
>;
;
}
⑦ :: ( *);清空所有客户信息。代码实现如下:
:: ( *)
{
*;
;
(>)
{
;
>;
>>;
}
<<"清空成功!";
}
⑧ ( );计算客户折扣,每次显示用户信息调用一次保证客户为最新打折信息。根据每个客户的积分不同,用和语句打印出不同的折扣信息。详见附录。
⑨ ( *);排序函数,用冒泡排序法将用户信息按照积分从小到大的顺序排列。在显示用户信息的时候调用。代码详见附录。
⑩ (*);和 (*);将用户信息从链表中写入文件中,并可以从文件中读入链表。代码如下:
(*)
{
;
("" ) ;
()
{
<<" ."<< ;
<<"保存失败!"<< ;
}
{
*;
>;
()
{
<<><< ' '<< >
<< ' '<<><<' ' <<><<'\' ;
> ;
}
<<"保存成功,保存文件为:"<<"";
}
}
(*)
{
;
[] [] ;
("");
(>>>>>>>>)
{
* ();
>>;
>;
}
()
<<"加载失败,请检查格式是否正确或文件是否有效!";
<<"加载成功!";
}
(* []);身份验证函数。判断身份证号是否重复。
系统功能模块介绍
①添加用户模块。函数 ( *);采用类将每个用户的信息封装,其中包括用户姓名、用户省份证号、用户消费金额、积分的信息。输入一个客户信息后再开辟新的节点连接。如添加一个客户:定义指针,用于申请空的结点空间,(*)(()),利用函数输入姓名,身份证号,并保证身份证号的正确。
②查找模块 ( * []);和 ( * []);查找用户,用每一个节点的信息或者姓名信息和待查信息进行比对,直到找到正确信息并显示。
③修改模块 ( * []);查找并显示然后修改。先判断链表是否为空,若为空则提示没有客户;若不为空,则用每一个节点信息和待查节点信息进行比对,知道找到该节点,然后对该节点信息进行修改。
④删除模块 ( * []);查找显示并删除。查找时的做法与上述两个函数基本相同,以下程序用来实现删除该客户(该节点)的功能。<<"你确认删除?、确定。、取消。请选择:";
⑤显示模块 ( *);遍历链表并显示客户。用一个语句实现打印每一个用户。
⑥统计模块 ( *);遍历统计客户数量显示。用一个计数变量遍历链表实现计数功能。
⑦清空模块 :: ( *);清空所有客户信息。
⑧计算折扣模块 ( );计算客户折扣,每次显示用户信息调用一次保证客户为最新打折信息。根据每个客户的积分不同,用和语句打印出不同的折扣信息。
⑨排序模块 ( *);排序函数,用冒泡排序法将用户信息按照积分从小到大的顺序排列。在显示用户信息的时候调用。
⑩文件读取模块 (*);和 (*);将用户信息从链表中写入文件中,并可以从文件中读入链表。
(* []);身份验证函数。判断身份证号是否重复。
具体模块设计
①添加模块流程流程图
图 添加模块流程流程图
②查找函数模块流程图
图 查找函数模块流程图
③统计函数模块流程图
图 统计函数模块流程图
④计算折扣函数
图 计算折扣函数
⑤文件保存模块
图 文件保存模块流程图
⑥文件读取函数
图 文件读取函数流程图
⑦修改函数,删除函数,显示函数,清空函数,查找函数基本相同,这里不在赘述。
.调试分析
本软件是基于的编程开发,所以,软件调试必须在环境下进行。调试前须做好准备工作:
(1) 需要安装 的计算机一台;
配置好之后,在 环境下进行软件的调试。
(2) 测试数据:
客户信息输入:
在“输入数据”模块中,根据主界面提示,键入数字,确定,再按提示进行操作测试,添加一条记录后,发现在数据文本中有保存该记录,如果错误输入,观察是否能正常提示信息。否则修改程序再进行调试。
客户信息的查询:
按姓名进行查询、按进行查询、这两个功能模块在具体编程实现上基本上是一样的,因为都是针对学生信息的查询。因此我们仅以“按姓名进行查询”为例来说明一下这两个功能模块的详细实现过程。另一个个模块仅介绍其实现思想。
(3) 算法改进设想:
在程序设计前期,我们并没有用文件来保存学生信息。经过我不断的修改以及调试后,该程序总算可以进行文本的读出与写入,并且添加学生信息后可以直接将信息保存在文本文件中。
.使用说明
①主函数界面
图 主界面图
②增加客户
图 增加客户
③查找客户
图 查找客户示意图
④修改客户
图 修改客户示意图
⑤删除客户
图 删除客户示意图
⑥显示客户
图 显示客户示意图
⑦统计客户
图 统计客户示意图
⑧清空客户
图 清空客户示意图
⑨加载客户信息
图 加载客户信息示意图
8. 设计总结
这次课程设计在我和同学们以及老师的努力下顺利完成了。这是第二次独自完成的课程设计,虽然有了上次的经验,但难度还是很大。不过在此同时我也学到了很多宝贵的东西,相信对我以后的学习会有很大的启发。
首先,我深刻地认识到了一个好的管理系统在生活中所发挥的作用是巨大的,能够大大降低劳动力成本,提高工作效率。因此,开发一个好的管理系统对程序员的要求也是很大的。开发系统之前一定要详细了解客户的需求,并尽可能优化客户需求。开发过程中,一定要注意程序的运行效率,以及人机交互界面的友好,这些都是非常重要的。
在程序设计前期,我们并没有用文件来保存学生信息。经过我不断的修改以及调试后,该程序总算可以进行文本的读出与写入,并且添加学生信息后可以直接将信息保存在文本文件中。从此,自己又可以掌握了文件存储的知识要点。
开始的时候,客户信息的存储时混乱的,没有顺序和规律的。最后下决心运用链表排序的方法对客户信息进行一定标准的排序,并且获得成功。弥补了当时学习链表的时候的一大短板。并且复习巩固了与之相关的知识。
在开始遇到问题的时候,只是机械地一遍一遍地读程序,期待发现程序的错误,但是没有取得很好的效果。最后我采用了加断点调试等多种方法才解决了悬而未决的一些问题。使我的调试能力有了大大地提高。
这次设计虽然顺利地完成了任务,但是还有很多不足。最主要的缺点就是界面问题,界面太过单调,也不够友好。因为一开始担心工作量太过庞大,没有用制作界面的想法。所以选择了相对比较低级的界面。在完成设定的任务之后,我曾尝试改版成界面。但由于时间仓促,并没有完成预期结果。但也学到了很多关于的知识,相信以后一定会取得成功。
一个好的数据存储方式可以大大降低程序员的工作量,也可以解放使用者的劳动力。所以,数据结构可谓是所有程序员应该掌握的重要财富。只要学好数据库,并且在以后的实践中敢于尝试,我相信,一定会创作出满意的东西。
.参考文献
[] ,编著,数决结构与算法分析(版),电子工业出版社,
[] 赵文静,祁飞等编著,数据结构与算法,科学出版社,
[] 赵文静编著,数据结构语言描述,西安交通大学出版社,
[] 孙鑫,于安萍编著,深入详解,电子工业出版社,
[] 编著,程序设计,清华大学出版社,
各位同学:
大家好!
现将存在的共性问题描述如下,大家以此为标准进行撰写修改:
.报告文件的命名统一命名成“学号姓名题目",方便我归档整理;
.封面,页眉,页脚都调整好了,按照这个模板把你设计的内容一部分一部分填写进去,具体要求注意的问题已在模板中进行了批注;
.论文中出现图的地方应该在图下方有标记,例如如果在“概要设计”部分有一个系统流程图,就在图的正下方居中写上“图 系统流程图”,其他的地方依次类推。
图的大小应该跟页面大小一致,太大的缩小一些,居中,“图号 图名”也要居中。
.有表的地方在表格上方正中写上类似于“表 .。。。。表”的字样,不清楚可以看一下课本中是如何书写的。
.使用说明应简明扼要,但也应该有相应的文字说明
.课设总结要写你课设过程中遇到的诸多问题及解决方法,并且写出你的真实收获和感受,不应少于页。
.参考文献按照模板中的格式书写。
.字体大小和行间距等均参照模板进行修改,段首空两个汉字的宽度。全文同级字体应统一.
.文档修改完成之后,修改页脚的“共?页”中的问号为你正文的页数,最后更新目录中的页码。
.全部修改完成,老师认可后再打印,打印纸张为.
.上交材料为报告和程序的压缩包(删除其中的目录).
请各位同学务必认真参照上面的注意事项一条条修改,谢谢!
李智杰
以上文档以李老师发给三班使用的模板为基础,做了一点点改动。衷心感谢李老师的辛勤工作!
请大家极度重视报告的撰写!!!
何箐 祁飞
""
""
""
""
""
定义一个结构体
{
[];
[];
;
;
*;
();
( [] [] *);
};
( [] [] *)
{
( <)
{
[][];
}
( <)
{
[][];
}
;
;
;
}
( * ) 初始化链表
{
(*)(()); 开辟节点空间
>;
}
定义一个类,封装功能函数
{
:
( *); 添加客户
( * []); 查找客户
( * []); 查找客户
( * []); 修改客户
( * []); 删除客户
( *); 显示客户
( *); 统计客户
( *); 排序函数
( ); 计算折扣
( *); 清空函数
(* []); 身份验证函数
(*); 文件存储函数
(*); 文件读取函数
};
()
{
;
*;
;
[];
();
(" ");
("");
{
<<;
<< " 客户消费 积分管理系统 "<<;
<< " ****************************"<<;
<< " * *"<<;
<< " * 主菜单 *"<<;
<< " * 添加客户 *"<<;
<< " * 查找客户() *"<<;
<< " * 查找客户() *"<<;
<< " * 修改客户 *"<<;
<< " * 删除客户 *"<<;
<< " * 显示客户 *"<<;
<< " * 统计客户 *"<<;
<< " * 清空 *"<<;
展开阅读全文