商店存货管理系统课程设计.doc

上传人:jian****018 文档编号:8949488 上传时间:2020-04-02 格式:DOC 页数:43 大小:241.50KB
返回 下载 相关 举报
商店存货管理系统课程设计.doc_第1页
第1页 / 共43页
商店存货管理系统课程设计.doc_第2页
第2页 / 共43页
商店存货管理系统课程设计.doc_第3页
第3页 / 共43页
点击查看更多>>
资源描述
课程设计(论文) 题 目:商店存货管理系统 院 (系):信息与控制工程学院专业班级: 计算机201201 姓 名: 高美虹 学 号: 120620103 指导教师: 张维琪 2014年 6 月 27日西安建筑科技大学课程设计(论文)任务书 专业班级: 计算机1201 学生姓名: 高美虹 指导教师(签名): 一、课程设计(论文)题目商店存货管理系统说明:使用线性表实现商店存货的管理二、本次课程设计(论文)应达到的目的数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。本题目要达到目的:熟练掌握线性表的实现。三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等) 输入数据:5种商品的具体信息。1建立一个文件,包括5个种类的货物情况。能对商品信息进行扩充(追加)、修改和删除以及简单的排序;2扩充商品数量,完成系统查询功能;3提供人机交互的界面。四、应收集的资料及主要参考文献: 由于本课程没有安排“课内上机”学时,因此,在课程设计之前必须自己已经上机练习了“线性表”的基本操作。 参考文献:1. Robert L. Kruse,Data Structures And Program Design in C+,高等教育出版社,2001.5.2. 严蔚敏等编著,数据结构(C语言版),清华大学出版社,1997.4;3. 赵文静等编著,数据结构与算法,科学出版社,2005.08;4. 孙鑫等编著,VC+深入详解,电子工业出版社,2007.7 五、审核批准意见教研室主任(签字) 设计总说明二十一世纪,计算机技术日渐成熟并逐步湿透至我们生活中的各个方面,作为计算机应用的部分,使用计算机对商店存货信息进行管理,具有手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等,这些优点能够极大的提高商店信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。本次设计主要用数据结构和类阐述一个功能比较强大的的商店存货信息管理系统的后台操作过程及一些关键技术,商店存货管理系统的实现主要用到了单链表,类,对象,指针,首先创建商品信息类型的链表,然后将商品信息存到链表中去,再到链表中对商品信息象进行增、删、改、查、排序,分别由系统的添加模块、删除模块、修改模块、查询模块和排序模块实现,程序中用到了遍历函数、拷贝构造函数和赋值运算符重载函数,可以遍历商品的每个节点并实现商品信息的拷贝。 本文档主要介绍了商店存货管理系统的设计目的、问题描述、需求分析、概要设计、详细设计、调试分析、使用说明、设计总结、参考文献等。本程序实现了基于DOS界面的商店存货管理系统。关键字:数据结构、类、单链表、节点、遍历 目录1.设计目的12.问题描述23.需求分析24.概要设计35.详细设计76.调试分析167.使用说明198.设计总结199.参考文献24数据结构课程设计-商店存货管理系统1.设计目的“数据结构”是计算机科学与技术专业一门十分重要的专业技术基础课,计算机科学各领域及有关的应用软件都要使用到各种数据结构。对于从事计算机科学及其应用的科技工作者来说,数据结构与算法是必须透彻地掌握的重要基础。学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。课程设计是加强学生实践能力的一个强有力手段。课程设计所安排的题目,在难度和深度方面都大于平时的上机训练,要求同学在完成设计和编写中小型软件的过程中,深化对数据结构与算法课程中基本概念、理论和方法的理解;训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念;使同学的程序设计与调试水平有一个明显的提高。课程设计要求学生在完成程序设计的同时能够撰写比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。2.问题描述 为了实现对商店货物的定量管理,设计了商店管理系统,系统主要用单链表实现对商品信息(种类、价格、货架)的增加、删除、修改、查询和排序。程序中用到了遍历函数,可以遍历商品的每个节点。该管理系统可以解决人工管理所不能胜任的许多问题,而且使用计算机对商店存货信息进行管理,具有手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长等。这些优点能够极大的提高商店信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。3.需求分析3.1 数据需求选择所需的模块:1.添加信息模块,2.删除信息模块,3.修改信息模块,4.查询信息模块,5.信息排序模块,6.存入文件模块,7.文件读取模块,6.退出选择。若选择为1,输入商品的种类、价格、货架和所插入的位置。若选择为2,输入所删除的位置,。若选择为3,输入商品的种类、价格、货架和所修改的位置。若选择为4,输入所查询的位置。若选择为6,输入要添加的文件名称。若选择为7,输入要查询的文件名称。3.2 基本功能需求 基于任务书中的开发目标,系统开发的范围确定如下:本系统涉及添加数据、删除数据、修改数据、查询数据、对数据进行排序、文件的存入和读取。1.输入数据:商品的具体信息:种类(5种)、价格、货架。2.建立一个单链表,能对商品信息进行扩充(追加)、删除、修改、查询以及排序(按价格由低到高排);3.将已有的信息存入文件,从已有文件中读取信息;4提供人机交互的界面。3.3 非功能性需求用户界面需求:简洁、易用、易懂、友好的用户界面。硬件要求:装有Visual C+6.0的计算机。可靠性需求:保证用户在正常使用本系统时,用户的操作或误操作不会产生数据的丢失。4.概要设计4.1 数据结构本次设计用到的数据结构有:单链表(class List):主要用到了数据结构中的链式存储结构对商品进行增加、删除、修改、查询和排序。类(class List):此程序是基于C+实现的,对链表的实现当然也用到了类,类中的成员函数实现链表的各个功能。结构体(struct Node):为了完成链表的实现,必须设一个Node作为它的一个节点,来存储商品的信息。4.2 系统包含的函数货物的插入函数:Error_code insert(.);货物的删除函数:Error_code remove(.);货物的修改函数:Error_code replace(.);货物的查询函数:Error_code retrieve(.);货物的排序函数:void sort();链表的构造函数:List();链表的析构函数:List();确定商品数量的函数:int size()const;货架判满函数:bool full()const;货架判空函数:bool empty()const;清除商品信息函数:void clear();商品遍历函数:void traverse(void (*visit)(List_entry &);链表的拷贝构造函数:List(const List©);赋值运算符重载:void operator=(const List©);保存商品信息到文件:void savedate(List& list);从文件读取商品信息:void loaddate(List& list)主函数:int main();界面函数:void face()4.3 函数间的关系 Insert、remove、replace、retrieve函数都调用了set_position函数来进行检索特点节点,也都用到了full()和empty()函数来进行判满和判空.node是class List的节点,用来表示商品的信息。class List通过调用Insert、remove、replace、retrieve、sort、savedate、loaddate函数实现对商品货物的增加、删除、修改、查询、把商品信息存入文件和从文件中读取商品信息,析构函数List通过调用clear()函数实现析构。4.4 系统功能模块图添加商品种类添加商品价格1.添加商品信息模块添加商品货架要删除商品种类2.删除商品信息模块修改后商品种类修改后商品种类3.修改商品信息模块商店存货管理系统修改后商品货架4.查询商品信息模块要查询商品种类 5.商品信息排序模块按价格从低到高依次排序输入文件名6.存入文件模块输入文件名6.从文件读取模块8.退出选择模块图4-1 系统功能模块图5.详细设计5.1 结构体的详细定义template struct Node string kind1;Node_entry price;Node_entry shelf;Node*next;Node();Node(string kind_1,Node_entry price2,Node_entry shelf2,Node*link);结构体中的数据成员有:kind kind1:其中kind是枚举类型(分别有 cigarette,water,gum,beer,bread五种类型);Node_entry price:Node_entry是模板定义的Node中的数据类型,price是商品的价格;Node_entry shelf:Node_entry是模板定义的Node中的数据类型,shelf是商品所处的货架;Node*next:Node_entry是模板定义的Node中的数据类型,next指针指向下一个节点;结构体中的成员函数有:Node();此函构造数定义next为空Node(kind kind2,Node_entry price2,Node_entry shelf2,Node*link):此函数用来确定节点中数据成员的信息和所指的下一个Node节点;5.2 系统函数详细介绍货物的插入函数Error_code insert(.):是实现对货物信息插入的函数,即实现给链表添加新节点的功能,分为插在表头、表中和表尾三种情况; 货物的删除函数Error_code remove(.):是实现对货物信息进行删除的函数,即实现对链表的节点删除的功能,分为在表头删、表中删和表尾删三种情况; 货物的修改函数Error_code replace(.):是实现对货物信息进行修改的函数,即实现对链表的节点的各项信息进行修改; 货物的查询函数Error_code retrieve(.):是实现对指定货物的信息进行查询的函数,即实现对链表的节点的各项信息进行查询; 货物的排序函数void sort():是实现对表中所有货物的信息按价格由低到高进行排序的函数,所使用的排序方法为简单插入排序链表办;链表的构造函数List():对商品信息进行初始化;链表的析构函数List():调用clear()函数将表中的空间释放掉;确定商品数量的函数int size()const:顾名思义,确定单链表中所存商品的数量;货架判满函数bool full()const:顾名思义,判断货架是否已满;货架判空函数bool empty()const:顾名思义,判断货架是否为空;清除商品信息函数void clear();将链表中所存储的商品的信息逐个清空;商品遍历函数void traverse(void (*visit)(List_entry &):将链表中已存货物的信息挨个输出;链表的拷贝构造函数List(const List©);将已有商店存货信息系统拷贝给另一个商店存货信息系统;赋值运算符重载:void operator=(const List©)将赋值运算符进行重载,使两个存货信息系统之间可以相互赋值;保存信息到文件void savedate(List& list):将已经存在的商品信息保存到文件中,以便下次使用;从文件读取信息:void loaddate(List& list):在已经存在的文件中读取商品信息。主函数int main():将函数的各个功能写成一个循环模式,以方便用户选择各功能模块进行使用;界面函数void face();将函数的功能界面输出,以方便用户选择各功能模块进行使用;5.3 系统功能模块介绍5.3.1添加商品信息模块 首先选择所要添加的位置,然后选择要添加商品的种类、价格和所处货架,再调用List的insert(.)函数对商品信息进行添加,最后对所添加的商品信息进行显示并按任意键继续。5.3.2删除商品信息模块 首先选择所要删除的位置,再调用List的remove(.)函数对商品信息进行删除,最后对所删除的商品信息进行显示并按任意键继续。5.3.3修改商品信息模块 首先选择所要修改的位置,然后选择要修改商品的种类、价格和所处货架,再调用List的replace(.)函数对商品信息进行修改,最后对修改后商品的信息进行显示并按任意键继续。5.3.4查询商品信息模块 首先选择所要查询的位置,再调用List的retrieve(.)函数对商品信息进行查询,最后对所查询的商品信息进行显示并按任意键继续。5.3.5商品信息排序模块 调用List的void sort()函数对商品信息进行排序,排序所用的算法是简单插入排序的链表版,按照商品价格由低到高对List中的货物进行排序,最后对排序后的商品信息进行显示。5.3.6存入文件模块 选择要存入的文件名,将已有商品信息存入文件。5.3.7商品信息排序模块 选择要读取的文件名,从已有文件中读取商品信息。5.3.8退出选择模块 退出商店存货管理系统的使用。5.4 具体模块设计5.4.1添加商品信息模块开始输入添加模块编号输入插入的位置和商品信息调用List的插入函数 显示插入的信息是否继续添加 是 结束 否图5-1商品信息的插入流程图5.4.2删除商品信息模块开始输入删除模块编号输入删除的位置调用List的删除函数 显示删除的信息是否继续添加 是 结束 否图5-2商品信息的删除流程图5.4.3修改商品信息模块开始输入修改模块编号输入修改的位置和商品信息 调用List的修改函数显示修改后的信息 是否继续添加 是 否结束 图5-3商品信息的修改流程图5.4.4查询商品信息模块开始输入查询模块编号输入查询的位置 调用List的修改函数显示查询的信息 是否继续添加 是 结束 否图5-4商品信息的查询流程图5.4.5商品信息排序模块开始输入排序模块编号调用List的排序函数 显示排好序的信息 结束 图5-5商品信息的排序流程图5.4.6写入文件模块开始输入要写入的文件名用savedate函数显示写入文件成功 结束 图5-6写入文件流程图5.4.7读取文件信息模块开始输入要读取的文件名调用savedate函数显示读取文件成功 结束 图5-7读取文件流程图6.调试分析本软件是基于Windows的编程开发,所以,软件调试必须在Windows环境下进行。调试前须做好准备工作:(1) 需要安装Visual C+6.0的计算机一台;配置好之后,在Visual C+6.0环境下进行软件的调试。(2) 测试数据:商品信息输入:在“插入商品信息”模块中,根据主界面提示,键入数字1,确定,再按提示进行操作测试,添加一条记录后,发现在数据文本中有保存该记录,如果错误输入,观察是否能正常提示信息。否则修改程序再进行调试。例如:输入1后确定,程序显示“请输入你要插入的位置:”,键入位置如2,继续操作,假设数据为:cigarette,12,1,程序正常运行。退出保存。商品信息删除:在“删除商品信息”模块中,根据主界面提示,键入数字2,确定,再按提示进行操作测试,删除一条记录后,发现在数据文本中有保存该记录,如果错误输入,观察是否能正常提示信息。否则修改程序再进行调试。例如:输入2后确定,程序显示“请输入你要删除的数据的位置:”,键入位置如2,继续操作,假设数据为:cigarette,12,1,程序正常运行。退出保存。商品信息修改:在“商品信息修改”模块中,根据主界面提示,键入数字3,确定,再按提示进行操作测试,输入修改位置及修改后的信息,如果错误输入,观察是否能正常提示信息。否则修改程序再进行调试。例如:输入3后确定,程序显示“请输入你要修改的位置:”,键入位置如2,继续操作,假设数据为:cigarette,12,1,程序正常运行。退出保存。商品信息的查询:按商品信息在单链表中所处的位置进行查询。在“商品信息查询”模块中,根据主界面提示,键入数字4,确定,再按提示进行操作测试,输入查询的位置,如果错误输入,观察是否能正常提示信息。否则修改程序再进行调试。例如:输入4后确定,程序显示“请输入你要查询的位置:”,键入位置如2,继续操作,假设输出数据为:cigarette,12,1,程序正常运行。退出保存。商品信息的排序:按商品价格由低到高进行排序。在“商品信息排序”模块中,根据主界面提示,键入数字5,确定,观察是否能正常显示商品信息,否则修改程序再进行调试。例如:输入5后确定,假设输出数据为:cigarette,12,1;cigarette,13,2;cigarette,14,3.程序正常运行。退出保存。商品信息加入文件:根据主界面提示,输入要加入的文件名,确定,观察是否能正常执行,否则修改程序再进行调试。例如:输入a后确定,假设输出数据为:加入文件成功,程序正常运行。退出保存。商品信息从文件中读取:根据主界面提示,输入要读取的文件名,确定,观察是否能正常执行,否则修改程序再进行调试。例如:输入a后确定,假设输出数据为:读取文件成功,程序正常运行。退出保存。(3) 算法改进设想:在程序设计前期,我们并没有用txt文件来保存商品信息。经过我不断的修改以及调试后,该程序总算可以进行txt文本的读出与写入,并且添加商品信息后可以直接将信息保存在txt文本文件中。7.使用说明7.1主菜单图7-1主菜单7.2添加商品信息图7-2添加商品信息7.3删除商品信息图7-3删除商品信息7.4修改商品信息图7-4修改商品信息7.5查询商品信息图7-5查询商品信息7.6商品信息排序图7-6商品信息排序7.7商品信息存入文件图7-7商品信息存入文件图7-8文件中的信息7.8商品信息从文件中读取图7-9商品信息从文件中读取8. 源程序# include# include#include#include#include#include#include using namespace std;enum Error_codesuccess,fail,range_error,underflow,overflow,fatal,not_present,duplicate_error,entry_inserted,entry_found,internal_error;/enum kindcigarette,water,gum,beer,bread;template struct Node string kind1;Node_entry price;Node_entry shelf;Node*next;Node();Node(string kind_1,Node_entry price2,Node_entry shelf2,Node*link);template Node:Node()next=NULL;template Node:Node(string kind_1,Node_entry price2,Node_entry shelf2,Node *link=NULL)kind1=kind_1;price=price2; shelf=shelf2;next=link;templateclass Listpublic:Error_code insert(List& list,const string &kind_1,const List_entry &price2,const List_entry &shelf2); Error_code remove(List& list,string &kind_1,List_entry &price2,List_entry &shelf2);Error_code replace(List& list,const string &kind_1,const List_entry &price2,const List_entry &shelf2);Error_code retrieve(List& list,string &kind_1,List_entry &price2,List_entry &shelf2)const;void sort();List();int size()const;bool full()const;bool empty()const;void clear();void traverse(void (*visit)(List_entry &);List();List(const List©);void operator=(const List©);void savedate(List& list);void loaddate(List& list);protected:int count; Node*head;Node*set_position(int position)const;template Error_code List:insert(List& list,const string &kind_1,const List_entry &price2,const List_entry &shelf2)int position=list.size();if(positioncount)return fail; Node*new_node,*previous,*following;if(position0)previous=set_position(position-1);following=previous-next;else following=head;new_node=new Node(kind_1,price2,shelf2,following);if(new_node=NULL)return overflow;if (position=0)head=new_node;elseprevious-next=new_node;count+;return success;template Error_code List:remove(List& list,string &kind_1,List_entry &price2,List_entry &shelf2)string kin_d;int position;coutkin_d;coutendl;Node* h=head;for(position=0;h-kind1!=kin_d;position+)h=h-next;Node*prior,*current;if(count=0)return fail;if(position=count)return fail;if(position0)prior=set_position(position-1);current=prior-next; prior-next=current-next;elsecurrent=head;head=head-next;kind_1=current-kind1;price2=current-price;shelf2=current-shelf;delete current;count-;return success;template Error_code List:replace(List& list,const string &kind_1,const List_entry &price2,const List_entry &shelf2)string kin_d;int position;coutkin_d;coutendl;Node* h=head;for(position=0;h-kind1!=kin_d;position+)h=h-next; Node *current;if(position=count)return fail;current=set_position(position); current-kind1=kind_1;current-price=price2;current-shelf=shelf2;return success;template Error_code List:retrieve(List& list,string &kind_1,List_entry &price2,List_entry &shelf2)conststring kin_d;int position;coutkin_d;coutendl;Node* h=head;for(position=0;h-kind1!=kin_d;position+)h=h-next;Node *current;if(position=count)return fail;current=set_position(position);kind_1=current-kind1;price2=current-price;shelf2=current-shelf;return success;template void List:sort()Node*first_unsorted,*last_sorted,*current,*trailing;if(head!=NULL)last_sorted=head;while(last_sorted-next!=NULL)first_unsorted=last_sorted-next;if(first_unsorted-priceprice)last_sorted-next=first_unsorted-next;first_unsorted-next=head;head=first_unsorted;elsetrailing=head;current=trailing-next;while(first_unsorted-pricecurrent-price)trailing=current;current=trailing-next;if(first_unsorted=current)last_sorted=first_unsorted;elselast_sorted-next=first_unsorted-next;first_unsorted-next=current;trailing-next=first_unsorted;Node* q=head;cout 排序后的信息:endl;for(int i=0;q;i+)cout 商品类型 商品价格 商品货架endl; cout ;coutkind1;cout ; coutprice; cout ; coutshelf;coutendlnext;system(pause);coutn;coutendl;template List:List()count=0;head=NULL;template int List:size()constreturn count;template bool List:full()constreturn false;template bool List:empty()constreturn count=0;template void List:clear()Node *p,*q;for(p=head;p;p=q)q=p-next;delete p;count=0; head=NULL;template void List:traverse(void (*visit)(List_entry &)Node *q;for(q=head;q;q=q-next);template List:List()clear();template List:List(const List©)count=copy.count; Node*new_node,*old_node=copy.head;if(old_node=NULL)head=NULL;elsenew_node=head=new Node(old_node-entry);while(old_node-next!=NULL)old_node=old_node-next;new_node-next=new Node(old_node-entry);new_node=new_node-next;template void List:operator=(const List©)List new_copy(copy);clear;count=new_copy.count;head=new_copy.head;new_copy.count=0;new_copy.head=NULL;template Node*List:set_position(int position)constNode*q=head;for(int i=0;inext;return q;void write_entry(char &c)coutc;void first_face()cout endl;cout endl ttendl tt endl tt 商店存货管理系统 endl tt endl tt 1. 商品增加 endl tt endl tt 2. 商品删除 endl tt endl tt 3. 商品修改 endl tt endl tt 4. 商品查询 endl tt endl tt 5. 商品排序 endl tt endl tt 6. 存入文件 endl tt endl tt 7. 文件读取endl tt endl tt 8. 退出系统 endl tt endl tt endl endl tt;template void List:savedate(List& list)int position;ofstream out;out.open(file.txt);out种类setw(10)价格setw(10)货架endl;Node* h=head;for(position=0;h;position+)outkind1setw(12)pricesetw(12)shelfnext;cout成功存入!endl;template void List:loaddate(List& list)/从文件中读取商品信息ifstream file;int position;char fname41;cout请输入读取的文件名:fname;file.open(fname,ios:in);if(!file)cout打开文件失败!endl;cin.get();elseNode* h=head; for(position=0;h;position+)if(file&!file.eof()file.read(reinterpret_cast(&list),sizeof(list);if(!list.empty() h=h-next;file.close();cout读取成功!endl;int main()int select;string kind1;int price;int shelf;List c_list; do first_face();coutselect; coutendl; switch (select) case 1: coutkind1; coutprice; coutshelf; coutendl; c_list.insert(c_list,kind1,price,shelf);cout 所添加的信息为:endl; cout 商品类型 商品价格 商品货架endl; cout ;coutkind1;cout ; coutprice; cout ; coutshelf; cout endl endl t该商品已经添加成功. endl endl t; system(pause); coutn; coutendl; break;case 2:c_list.remove(c_list,kind1,price,shelf);setw(10);cout所删除的信息为:endl;cout 商品类型 商品价格 商品货架endl; cout ;coutkind1;cout ; coutprice; cout ; coutshelf;cout endl endl t该商品已经删除成功. endl endl t; system(pause); break; cas
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!