版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华中科技大学计算机科学与技术学院C语言课程设计报告 题目: 菜市场商品销售管理系统专 业: 计算机科学与技术专业班 级: 学 号: 姓 名: 成 绩:指导教师: 完成日期: 2016年 10月 7日第II页 共2页华中科技大学计算机科学与技术学院 C语言课程设计报告目 录一、系统需求分析11.1数据维护功能11.2数据查询功能11.3数据统计功能11.4数据存取功能21.5辅助功能2二、总体设计22.1文件模块22.2数据维护模块32.3数据查询模块42.4数据统计模块52.5帮助6三、数据结构设计6四、详细设计与系统实现114.0主程序114.1数据维护114.1.1分类信息维护124.1.
2、2基本信息维护154.1.3销售信息维护194.2数据查询224.2.1分类信息查询224.2.2基本信息查询:234.2.3销售信息查询254.3数据统计284.3.1按类别统计:284.3.2按品种统计314.3.3按客户名称统计36五、运行测试与结果分析405.1输入数据405.2初始化界面425.3系统主界面425.4数据维护界面435.5数据查询界面:525.6数据统计界面575.7帮助模块界面62六、总结64七、参考文献65附录1 程序源代码66头文件:market.h66main.c文件:74I华中科技大学计算机科学与技术学院 C语言课程设计报告一、系统需求分析菜市场商品销售管理
3、系统用于管理人员对于菜市场的各类商品销售信息进行管理,主要包括商品分类信息,商品基本信息,商品销售信息 等三类信息,以帮助商场管理人员及时了解产品销售情况和变化。菜市场商品销售管理系统要求实现以下几方面的基本功能:1.1数据维护功能菜市场商品销售管理系统的基本信息主要包括以下三类:(1)商品分类信息:分类编码、分类名称等数据项。(2)商品基本信息:商品编号、商品名称、分类码、产地、单价、售出数量等数据项。(3)商品销售信息:销售编号、商品编号、销售重量、销售金额、销售日期、客户名称等数据项。系统应实现以上三种数据的录入、修改、和删除功能。信息录入时,系统应提供快捷方便的数据录入方式;同时应进行
4、自动数据校验,满足数据的正确性,合理性,有效性和依赖性要求。1.2数据查询功能系统应实现对三种基础数据的查询功能,提供按多种条件进行查询的方式,具体包括:(1)以分类编码为条件来查找并显示满足条件的商品分类信息。(2)商品名称中文字符子串为条件查找,并显示商品中包含指定子串的商品基本信息。(3)以分类码和单价为条件查找并显示满足条件的商品基本信息。(4)客户名称和销售日期为条件查找并显示满足条件的所有商品销售信息。(5)以商品名称为条件查找并显示满足条件的商品销售信息。上述查询结果中,如果有多条信息被查中,查询结果应生成表格并逐条显示。1.3数据统计功能在以上三种基础信息的基础上,提供多方面的
5、数据统计功能,并生成表格输出,具体包括:(1)按类别统计各类商品某年(如肉类、鱼类等)销售总重量、销售总额、按销售总额降序排序后、输出分类名称、销售总重量、销售总额。 (2)以所输入的年份为条件、按商品名称(如猪肉、大豆等)统计该年度内所售各种商品销售总重量、销售金额、按售总重量降序排序后、输出商品名称、分类名称、售出总重量、销售金 额。(3)按客户名称统计所购某类商品(如肉类、鱼类等)的总重量、消费总金额、输出客户名称、所购各类商品总重量、消费总金额。(4)按客户名称统计所购某种商品(如猪肉、豆角等)的总重量、消费总金额、输出客户名称、所购各种商品总重量、消费总金额。(5)按商品类别统计某客
6、户购买情况、输出分类名称、购买总重量、消费总金额。(6)按商品品种统计某客户购买情况、输出分类名称、商品名称、购买总重量、消费总金额。1.4数据存取功能以上三种信息在程序运行时,以链表结构形式存在于内存中,并且数据的存储采用动态存储的分配方式。同时,在外存上以数据文件形式对数据进行存储,且保证数据在内存和外存两种存储介质上内容的一致性。1.5辅助功能帮助功能,主要是对系统的操作方式进行介绍,以及一些方便操作,提供良好人机交互界面的辅助功能。二、总体设计菜市场商品销售管理系统由五大功能模块组成:文件模块,数据维护,数据查询,数据统计,帮助系统。功能结构如图2.0。下面为这五个模块及其子模块的功能
7、的介绍。2.1文件模块文件模块的功能包括一系列与系统启动和系统既然的话运行相关的环境维护和数据保障操作,它包括六个子模块:界面初始化、数据保存、数据备份、数据恢复、退出系统。功能结构如图2.1。(1)界面初始化子模块:用于设置控制台窗口显示模式,将屏幕窗口设置为80列和25行文本字符界面,设置窗口标题栏,清屏并显示系统菜单栏和系统状态栏。(2)数据加载子模块:用于将分别放在多个数据文件中的基础数据读入内存,并构造数据链表,同时输出数据加载相关提示信息。(3)数据保存模块:用于将链表数据按缺省路径分别保存到各个数据文件。(4)数据备份子模块:用于将存放在多个数据文件中的基础数据按缺省路径转储到一
8、个数据文件中,供用户在系统数据被破坏或丢失后用来恢复系统。(5)数据恢复子模块:与数据备份子模块在功能上相对应,能从一个备份数据文件恢复得到备份时间点的系统数据,并将恢复出来的数据加载到内存中,用于提高系统的安全性和可靠性。(6)退出系统子模块:释放程序运行过程中申请的动态存储区,关闭控制台标准输入和输出设备句柄。清除屏幕窗口信息,结束系统运行。2.2数据维护模块 数据维护模块完成对三种基础数据信息的录入、修改和删除功能,保证数据的准确性,完整性华为有效性。该模块按信息种类划分为分类信息维护、基本信息维护、销售信息维护三个子模块。如图2.2。分类信息维护、基本信息维护、销售信息维护三个子模块分
9、别用于录入、删除和修改分类信息、基本信息和销售信息。同时,系统将这三种数据存入数据链表,并在子模块结束运行时分别保存到分类信息数据文件,商品基本信息数据文件和商品销售信息数据文件,以保持在内存和外存上两种存储介质上数据内容的一致性。2.3数据查询模块数据查询模块提供对系统三类基础数据信息按多种条件查询的功能,按信息种类分为分类信息查询,基础信息查询和销售信息查询三个子模块。如图2.3。(1)分类信息查询:可分为两个子模块,提供按分类编码查询分类信息的功能和输出全部分类信息的功能。(2)基础信息查询:可分为三个子模块,提供按商品名称中的关键字模糊查询商品基本信息的功能,按分类码与单价查询基本信息
10、的功能和输出全部基本信息的功能。(3)销售信息查询:可分为三个子模块,提供按客户名称和销售日期查询销售信息的功能,按商品名称精确查询销售信息的功能和输出全部销售信息的功能。其中,输出全部分类信息,基本信息和销售信息的功能主要用于测试系统运行是否正确。2.4数据统计模块数据统计模块提供对三种基础数据进行多方面统计的功能。按照统计条件,该模块按类别统计,按品种统计和按客户姓名统计三个模块。每个模块根据统计的范围又各自分为2个子模块,共计6种不同的统计方式。如图2.4。(1)统计各类商品销售情况:年度各分类销售情况:按类别统计某年销售总重量、销售总额,按销售总额降序排序后,以表格形式输出分类名称、销
11、售总重量、销售总额。某客户各分类购买情况:统计用户给出的客户的各类商品消费情况,输出类别名称、客户所购各种商品总重量、消费总金额。(2)按品种统计:年度各品种消费情况:统计用户给出的年份的各种商品的销售总重量、销售金额,按售总重量降序排序后,以表格形式输出商品名称、分类名称、售出总重量、销售金额。某客户各品种购买情况:统计用户给出的客户的各种商品消费情况,输出类别名称、商品名称、客户所购各种商品总重量、消费总金额。(3)按客户姓名统计:按查询内容分为三个子模块,查分类名称,查商品名称和查客户姓名。 某分类销售情况:按客户名称统计用户给出的分类的购买总重量、消费总金额。输出客户名称、所购各类商品
12、总重量、消费总金额。 某商品销售情况:按客户名称统计用户给出的商品的购买总重量、消费总金额。输出客户名称、所购各种商品总重量、消费总金额。2.5帮助帮助模块为用户使用系统提供帮助信息,同时提供系统版本和版权信息。分为帮助主题子模块和关于市场两个子模块。三、数据结构设计菜市场销售管理系统用于对菜市场商品销售信息进行管理,主要包括商品分类信息、商品基本信息和商品销售信息这三类基础信息数据。此外,系统在运行统计模块时还会结果形成三种生成数据,分别表示按品种统计的销售信息,按类别统计的销售信息和按客户名称统计的销售信息。下面为对本系统所涉及的基础数据和生成数据的数据结构,以及数据在内存和外存中的存储结
13、构的介绍。1. 菜市场商品分类信息表: typedef struct type_node char type_id; /*< 分类编码*/ char name10; /*< 分类名称*/ struct item_node *inext; /*< 指向商品基本信息支链的指针*/ struct type_node *next; /*< 指向下一结点的指针*/ TYPE_NODE;菜市场商品分类信息表如下:数据结构名称:菜市场商品分类信息表 数据结构标识:TYPE_NODE中文字段名数据项标识类型及长度举例分类编码type_idchar'1''5
14、9;分类名称namechar105 个分类名称:肉类、鱼类、蔬菜、海鲜、杂粮内存中的存储结构:存放在十字交叉链表的主链节点上。每个主链节点除了保存下一个结点的地址外,还保存该分类对应的菜市场商品基本信息链表的头结点地址。如图3.1所示。数据文件中的存储结构:每条信息作为一条记录放到二进制文件。2. 菜市场商品基本信息表:typedef struct item_node int item_id; /*< 商品编号*/ char name20; /*< 商品名称*/ char type_id; /*< 分类码*/ char producer20; /*< 产地(可以简单用文
15、字描述)*/ float price; /*< 单价(单位:元/斤)*/ float sale; /*< 销售总重量“斤”*/ struct sale_node *snext; /*< 指向商品销售信息支链的指针*/ struct item_node *next; /*< 指向下一结点的指针*/ ITEM_NODE;菜市场商品基本信息表如下:数据结构名称:菜市场商品基本信息表 数据结构标识:ITEM_NODE中文字段名数据项标识类型及长度举例商品编号item_idint自增长(顺序增加)商品名称namechar20“猪肉”分类码type_idchar'1'
16、; /表示肉类商品产地producerchar20可以简单用文字描述单价pricefloat18.50 /单位:元/斤售出数量salefloat指销售总重量“斤”。应自动从销售信息表中计算而得,初始值为 0内存中的存储结构:存放在相应分类节点的商品基本信息链结点上。每个结点除了保存下一个结点的地址外,还保存该商品对应的菜市场商品销售信息链表的头结点地址。如图3.1所示。数据文件中的存储结构:每条信息作为一条记录放到二进制文件。3. 菜市场商品销售信息表typedef struct sale_node int sale_id; /*< 销售编号*/ int item_id; /*<
17、商品编号*/ float weight; /*< 销售重量*/ float sales_amount; /*< 销售金额*/ char date10; /*< 销售日期*/ char client_name20; /*< 客户名称*/ struct sale_node *next; /*< 指向下一结点的指针*/ SALE_NODE;菜市场商品销售信息表如下:数据结构名称:菜市场商品销售信息表 数据结构标识:SALE_NODE中文字段名数据项标识类型及长度举例销售编号sale_idInt自增长商品编号item_idInt同商品基本信息表中的商品编号销售重量weig
18、htfloat销售金额sales_amountfloat销售金额=斤数*单价,应是自动计算销售日期datechar10“20150222” 年(4)+月(2)+日(2)客户名称client_namechar20“张三”内存中的存储结构:存放在相应基本信息节点的商品销售信息链结点上。每个结点保存下一个销售信息结点的地址。如图3.1所示。数据文件中的存储结构:每条信息作为一条记录放到二进制文件。该系统基础数据部分在内存中以后进先出的方式创建三方向的十字交叉链表。十字交叉链表模型如图3.1。4各类商品消费情况表typedef struct type_stat char type10; /*<
19、分类名称*/ float weight; /*< 总重量*/ float sale; /*< 消费金额*/ struct type_stat *next; /*< 指向下一结点的指针*/ TYPE_STAT;各类商品消费情况表如下:数据结构名称:各类商品消费情况表 数据结构标识:TYPE_STAT中文字段名数据项标识类型及长度举例分类名称typechar 10“肉类”总重量weightfloat消费金额salefloat销售金额=斤数*单价,应是自动计算内存中的存储结构:存放在各类商品消费情况单向链表的结点上。每个结点保存下一个销售信息结点的地址。数据文件中的存储结构:不介入
20、外存。4. 各种商品消费情况表typedef struct item_stat char type10; /*< 分类名称*/ char item20; /*< 商品名称*/ float weight; /*< 总重量*/ float sale; /*< 销售金额*/ struct item_stat *next; /*< 指向下一结点的指针*/ ITEM_STAT;各类商品消费情况表如下:数据结构名称:各类商品消费情况表 数据结构标识:ITEM_STAT中文字段名数据项标识类型及长度举例商品名称typechar20“猪肉”分类名称itemchar 10“肉类”总
21、重量weightfloat消费金额salefloat销售金额=斤数*单价,应是自动计算内存中的存储结构:存放在各种商品消费情况单向链表的结点上。每个结点保存下一个销售信息结点的地址。数据文件中的存储结构:不介入外存。5. 按客户名称统计的消费情况表typedef struct client_stat char client20; /*< 客户姓名*/ float weight; /*< 总重量*/ float sale; /*< 销售金额*/ struct client_stat *next; /*< 指向下一结点的指针*/ CLIENT_STAT;按客户名称统计的消费
22、情况表如下:数据结构名称:按客户名称统计的消费情况表 数据结构标识:CLIENT_STAT中文字段名数据项标识类型及长度举例客户姓名clientchar20“张三”总重量weightfloat消费金额salefloat销售金额=斤数*单价,应是自动计算内存中的存储结构:存放在各种商品消费情况单向链表的结点上。每个结点保存下一个销售信息结点的地址。数据文件中的存储结构:不介入外存。四、详细设计与系统实现4.0主程序数据加载,界面初始化,选择及运行系统功能模块,退出系统。如流程图4.0。4.1数据维护函数原型:BOOL MaintainTypeInfo(void) /*维护商品分类信息*/BOOL
23、 MaintainItemInfo(void) /*维护商品基本信息*/BOOL MaintainSaleInfo(void) /*维护商品销售信息*/函数功能:进入三类信息维护的子菜单,选择要执行的操作。详细设计:选择要进行维护的信息后,进入信息维护子菜单选项,选择要执行的操作。选择插入/修改/删除后返回信息维护子菜单,选择退出则提示保存信息到外存后返回主菜单。(分类信息维护,基本信息维护,销售信息维护流程相同)如图4.1。4.1.1分类信息维护(1)录入分类信息:函数原型:void InsertTypeNode(TYPE_NODE* hd)函数功能:在十字链表中插入一个分类信息结点。详细设
24、计:新建分类信息结点p,输入分类编码和分类名称。若名称长度超过10字节,提示字数过多后返回分类信息维护菜单。否则遍历商品分类信息链表,检查分类编码和分类名称是否已被使用。若能够查找到与新建结点的分类编码或分类名称相同的结点,提示信息重复并返回分类信息维护菜单。若p 的分类编码,分类名称都没有与已存在的分类信息结点重复,且分类名称不超过10字节,则将p作为商品分类信息链表的头结点,提示插入成功后返回分类信息维护菜单。如流程图4.1.1所示。(2) 修改分类信息:函数原型:void ModifTypeNode(TYPE_NODE *hd)函数功能:从十字链表中修改指定的分类信息结点.详细设计:输入
25、要修改的分类的名称后遍历商品分类信息链表,查找名称符合的结点pt。若没有查找到,提示分类不存在并返回分类信息维护子菜单。否则输出当前分类信息,然后选择要修改的内容。若选择修改分类编号,输入新编号后遍历链表,查找分类编号相同的结点,若查找到,提示编号已被使用,否则修改编号。然后继续选择要修改的内容。若选择修改名称,输入新分类名称后先判断新名称长度是否大于10字节。若大于10字节,提示字数过多后继续选择要修改的内容。若不超过10字节,遍历分类信息链表,若能查找到分类名称与新名称相同的分类信息结点,提示名称重复后继续选择要修改的内容。否则将pt的分类名称改为新名称。若选择退出,则返回分类信息维护菜单
26、。如流程图4.1.2所示。(3) 删除分类信息:函数原型:void DelTypeNode(TYPE_NODE *hd)函数功能:从十字链表中删除指定的分类信息结点.详细设计:输入要删除的结点的分类名称。遍历商品分类信息链表,查找分类名称相符的结点pt以及pt的前驱p。若查找到,判断pt是否为头结点。若pt为头结点,令pt->next为新的头结点,若不是,使p->next=pt->next。然后释放pt及对应的基本信息和销售信息链表的存储空间,提示删除成功并返回分类信息维护菜单。否则没有查找到符合条件的pt,提示删除失败后返回分类信息维护菜单。如流程图4.1.3所示。4.1.
27、2基本信息维护(1)插入基本信息:函数原型:void InsertItemNode(TYPE_NODE* hd)函数功能:在十字链表中插入一个基本信息结点.详细设计:输入商品所在分类的名称。遍历分类信息链表,查找分类名称与输入的相同的分类信息结点pt。若pt为NULL,提示商品分类不存在并返回基本信息维护子菜单。否则新建基本信息结点p。输入商品名称,判断商品名称长度是否大于20字节。若名称大于20字节,提示字数过多后返回基本信息维护菜单。若没有超过20字节,遍历商品基本信息链表,查找商品名称与输入的商品名称相同的基本信息结点pi,同时查找最大的商品编号ITEM_ID。若pi不为NULL,提示名
28、称已被使用,返回基本信息维护菜单。否则继续输入商品产地和单价,若产地长度超过20字节,提示字数过多后返回基本信息维护菜单。否则将p作为pt对应的基本信息支链的新的头结点,并令p的商品编码为ITEM_ID+1,然后返回基本信息维护子菜单。如图4.1.4所示。(2)修改基本信息:函数原型:void ModifItemNode(TYPE_NODE *hd)函数功能:从十字链表中修改指定的基本信息结点详细设计:输入商品名称,遍历基本信息链表,查找商品名称与输入的相同的结点pi,pi所在基本信息支链对应的分类信息结点pt和pi的前驱。若pi为NULL,提示商品不存在并返回基本信息维护子菜单。若pi存在,
29、选择修改内容。若选择改名称,则输入新名称,若新名称长度大于20字节,提示字数过多修改失败,并继续选择要修改的内容。否则提示遍历基本信息链表,查找与商品名称与新名称相同的基本信息结点pi2,若pi2存在则提示修改失败,否则修改结点的商品名称,并继续选择要修改的内容。若选择改产地,则输入新产地,若新产地长度不超过20字节,修改产地并提示修改成功,然后继续选择要修改的内容;否则提示字数过多后继续选择要修改的内容。若选择修改单价,输入并修改基本信息结点pi中的单价后,遍历pi对应的销售信息链表,修改销售信息结点中的销售金额。若选择分类编码,则遍历分类信息链表,查找新编码所在结点pt2,pt2不存在则提
30、示失败并继续选择修改内容。否则如果pi为原基本信息支链的头结点,则令pt->next指向pi->next,否则令pi的前驱指向pi->next。然后将pi插入pt2对应的基本信息支链,并作为支链头结点。最后令pt = pt2并继续选择修改内容。若选择退出,则返回基本信息维护子菜单。如流程图4.1.5所示。(4) 删除基本信息:函数原型:void DelItemNode(TYPE_NODE *hd)函数功能:从十字链表中删除指定的基本信息结点.详细设计:输入要删除的基本信息结点的商品名称,遍历基本信息链表,查找结点pi, pi的前驱pi2,pi所在基本信息支链对应的分类信息结点
31、pt。若pi为NULL,提示商品不存在并返回基本信息维护菜单;否则判断pi是否为基本信息链表头结点,若是头结点,则令pi->next为pt对应的基本信息支链的新的头结点,否则pi2->next=pi->next。最后释放pi对应的销售信息链表和pi的存储空间,提示删除成功后返回基本信息维护子菜单。如图4.1.6所示。4.1.3销售信息维护(1)录入销售信息函数原型:void InsertSaleNode(TYPE_NODE* hd)函数功能:在十字链表中插入一个销售信息结点详细设计:输入商品名称,遍历基本信息链表,查找商品名称与输入的名称相同的基本信集结点pi,若pi不存在,
32、提示商品不存在并返回销售信息维护菜单。否则新建销售信息结点p,输入销售重量,日期。日期是否为8个字节,若不是,提示格式错误后返回销售信息维护菜单。否则计算销售金额,并修改pi中的销售总重量和总金额,然后遍历销售信息链表查找最大的销售编号SALE_ID,令p->sale_id为SALE_ID+1。最后将p设置为pi对应销售信息支链的新的头结点。如图示4.1.7所示。(2)修改销售信息:函数原型:void ModifSaleNode(TYPE_NODE *hd)函数功能:从十字链表中修改指定的基本信息结点详细设计:输入销售编号,遍历销售信息链表,查找对应的结点ps,ps的前驱psale,以及
33、ps所在销售信息支链对应的基本信息结点pi。若ps不存在,提示修改失败,返回销售信息维护子菜单。否则输出当前销售信息的内容,选择修改的内容。若选择商品编号,则输入新编号后,遍历基本信息链表,查找新编号对应的基本信息结点pi2,若没找到,提示修改失败,若找到,令ps的前驱指向ps的后继。将ps作为pi2对应销售信息支链的新的头结点,并修改ps的销售金额,pi2和原对应基本信息节点pi的销售重量。最后令pi=pi2后继续选择要修改的内容。若选择销售重量,输入新重量后修改销售金额和对应结点pi的总重量。若选择日期,则输入新日期。若日期超过8字节,提示格式错误,否则修改日期。然后继续选择修改的内容。若
34、选择客户姓名,则输入新客户姓名。若客户姓名超过20字节,提示字数过多,否则修改客户姓名。然后继续选择修改的内容。若选择退出,返回销售信息维护子菜单。如流程图4.1.8所示。(3)删除销售信息:函数原型:void DelSaleNode(TYPE_NODE *hd)函数功能:从十字链表中删除指定的基本信息结点详细设计:输入销售编号,遍历销售信息链表,查找对应的结点ps,ps的前驱psale,以及ps所在销售信息支链对应的基本信息结点pi。若ps不存在,提示删除失败,返回销售信息维护子菜单。否则判断ps是否为支链头结点。若不是头结点,令psale->next=ps->next,否则令p
35、i->snext=ps->next,随后修改pi的销售总重量并释放ps的存储空间。如流程图4.1.9所示。4.2数据查询4.2.1分类信息查询(1)按分类编码查询:函数原型:void SeekType_id(TYPE_NODE *head)函数功能:根据输入的分类编码查找分类信息选择分类编码查询,输入分类编码,遍历分类信息链表,查找对应分类信息结点,若找到则输出结点中的分类信息,否则提示编码不存在,然后返回子菜单,若选择退出,返回主菜单,否则继续查询。如流程图4.2.1所示。(2)输出全部:函数原型: void SeekType_All(TYPE_NODE *head)函数功能:输
36、出所有分类信息详细设计:遍历分类信息链表,输出每个结点的信息。该功能主要用于测试信息维护功能是否正确。4.2.2基本信息查询:(1)按商品名称关键词查询:函数原型:void SeekName(TYPE_NODE *head)函数功能:按商品名称中的关键词模糊查找并输出商品基本信息详细设计:输入商品名称中的关键词后,令find=0,遍历链表,查找商品名称中含关键词子串的基本信息结点。输出查找到的结点的信息并使find=1。若循环完毕find=0,则提示信息不存在。如图4.2.2所示。(2)按分类码和单价查询函数原型:void SeekId_Price(TYPE_NODE *head)函数功能:按
37、分类码和单价区间查找商品基本信息详细设计:输入分类码和价格区间后,遍历分类信息链表,查找对应分类结点,若不存在,提示信息不存在。否则令find = 0,然后遍历此分类结点对应的基本信息支链,查找并输出单价满足条件的基本信息结点的信息。若查找到,令find = 1。若循环完毕find等于0,提示信息不存在。如图4.2.3所示。(3)输出全部:函数原型:void SeekItem_All(TYPE_NODE *head)函数功能:输出所有基本信息详细设计:遍历每个分类信息结点对应的基本信息链表,输出每个结点中的信息。该功能主要用于测试基本信息维护功能是否运行正确。4.2.3销售信息查询(1)按客户
38、名称和销售日期查询:函数原型:void SeekClient_Date(TYPE_NODE *head)函数功能:按客户名称和销售日期查找商品销售信息详细设计:输入客户名称和日期date,若date长度大于8字节,提示日期格式错误,返回销售信息查询菜单。否则令find=0,遍历销售信息链表,若查找到客户名称和日期都符合条件的销售信息结点,输出结点信息,令find=1。若循环结束时find=0,提示信息不存在。如流程图4.2.4所示。 (2)按商品名称查询函数原型:void SeekSaleName(TYPE_NODE *head)函数功能:按商品名称查找商品销售信息详细设计:输入商品名称,令f
39、ind = 0,findsale = 0。遍历基本信息链表,查找商品名称符合条件的基本信息结点pi,若pi存在,令find = 1并遍历该结点对应的销售信息链表后退出循环。若销售信息链表不为空,使findsale = 1,并输出销售信息支链中每个结点中存储的销售信息。若循环结束后,find等于0,提示商品不存在;若findsale等于0,提示该商品无销售记录。如流程图4.2.5所示。(3)输出全部:函数原型:void SeekSale_All(TYPE_NODE *head)函数功能:输出所有商品销售信息详细设计:遍历每个基本信息结点对应的销售信息链表,输出每个销售信息结点中的信息。该功能主要
40、用于测试销售信息维护功能是否运行正确。4.3数据统计4.3.1按类别统计:(1)年度各类别销售情况统计:函数原型:void StatTypeSale(void)函数功能:按类别统计并输出所有类别总体的年度销售情况调用了的函数:函数原型:TYPE_STAT * StatTypeInfo(TYPE_NODE *head,char year5)函数功能:按类别统计所有分类的年度销售情况,创建统计结果链表函数原型:void StatTypeSort(TYPE_STAT *head, int len)函数功能:将按分类名称统计的链表按销售总额排序详细设计:输入年份Date,先判断Date的长度是否为4字
41、节,若不是,提示格式错误后结束。否则新建年度各类别销售情况情况链表,令p1和phead指向头结点。遍历分类信息链表,每指向一个分类信息结点,新建统计结果结点,将结点插入统计结果链表表尾,并令p1指向该结点。对p1初始化,令p1->weight=0,p1->sale=0。遍历分类信息结点对应的销售信息支链,统计销售时间前四位与Date相同的销售信息结点的销售总重量和销售总金额,并修改p1->weight(年度销售重量)和p1->sale(年度销售金额)。分类信息链表遍历完毕后,令phead指向phead->next。对统计结果链表按照销售金额进行冒泡排序并输出各类商
42、品销售情况链表中的信息。如流程图4.3.0和4.3.1。(2)某客户购买各类别情况统计:函数原型:void StatTypeSale(void)函数功能:按类别统计并输出所有类别总体的年度销售情况调用了的函数:函数原型:TYPE_STAT *StatT_ClientInfo(TYPE_NODE *head, char client20)函数功能:按分类名称统计指定客户消费情况并创建统计结果链表函数原型:void StatTypeSort(TYPE_STAT *head, int len)函数功能:将按分类名称统计的链表按销售总额排序详细设计:输入客户姓名,新建某客户各类别购买情况情况链表,令p
43、1和phead指向头结点。遍历分类信息链表,每指向一个分类信息结点,令weight=0(销售重量),sale=0(销售金额),遍历分类信息结点对应的销售信息支链,统计客户姓名与输入的客户姓名相同的销售信息结点的销售总重量和销售总金额,记录于weight和sale。若销售信息支链遍历完毕,sale不为0,新建统计结果结点,将结点插入统计结果链表表尾,并令p1指向该结点。分类信息链表遍历完毕后,令phead指向phead->next。对统计结果链表按照销售金额进行冒泡排序并输出各类商品销售情况链表中的信息。如流程图4.3.2,冒泡排序流程图同4.3.0。4.3.2按品种统计(2)年度各种商品
44、销售情况统计:函数原型:void StatItemYear(void)函数功能:按商品名称统计年度销售情况调用了的函数:函数原型:ITEM_STAT *StatYearInfo(TYPE_NODE *head, char year5)函数功能:按年统计指定各品种销售情况并创建统计结果链表函数原型:void StatItemSort(ITEM_STAT *head, int len)函数功能:将按商品名称统计的链表按销售重量排序详细设计:输入年份Date,先判断Date的长度是否为4字节,若不是,提示格式错误后结束。否则新建年度各类别销售情况情况链表,令p1和phead指向头结点。遍历基本信息链
45、表,每指向一个基本信息结点,新建统计结果结点,将结点插入统计结果链表表尾,并令p1指向该结点。对p1初始化,令p1->weight=0(年度销售重量),p1->sale=0(年度销售金额)。遍历基本信息结点对应的销售信息支链,统计销售时间前四位与Date相同的销售信息结点的销售总重量和销售总金额,并修改p1->weight和p1->sale。分类信息链表遍历完毕后,令phead指向phead->next。对统计结果链表按照销售重量进行冒泡排序并输出各类商品销售情况链表中的信息。如流程图4.3.3.0和4.3.3。(2)某客户购买各品种情况统计:函数原型:void
46、StatItemClient(void)函数功能:按商品名称统计指定客户的消费情况调用了的函数:函数原型:ITEM_STAT *StatI_ClientInfo(TYPE_NODE *head, char client20)函数功能:按商品名称统计指定客户消费情况,创建统计结果链表,并按照销售金额排序。输入客户姓名,新建某客户各品种购买情况情况链表,令p1和phead指向头结点。遍历基本信息链表,每指向一个分类信息结点,令weight=0(销售重量),遍历基本信息结点对应的销售信息支链,统计客户姓名与输入的客户姓名相同的销售信息结点的销售总重量,记录于weight。若销售信息支链遍历完毕,we
47、ight不为0,新建统计结果结点,将结点插入统计结果链表表尾,并令p1指向该结点,然后对p1中的weight,sale,type(分类名称),item(商品名称)等赋值。分类信息链表遍历完毕后,令phead指向phead->next。对统计结果链表按照销售金额进行冒泡排序并输出各类商品销售情况链表中的信息。如流程图4.3.4,冒泡排序流程图同4.3.0。4.3.3按客户名称统计(1)某分类销售情况:函数原型:void StatCType(void)函数功能:按客户姓名统计指定类别商品消费情况调用了的函数:函数原型:CLIENT_STAT *StatCTypeInfo(TYPE_NODE
48、*pt)函数功能:按客户姓名统计指定各类别销售情况并创建统计结果链表函数原型:void StatClientSort(CLIENT_STAT *head, int len)函数功能:将按客户姓名统计的链表按销售总重排序详细设计:输入类别名称,查找分类结点pt,若pt不存在,提示分类不存在。否则新建按客户统计的某分类商品消费情况表。令phead指向统计结果链表的头结点。遍历pt对应的销售信息链表,每指向一个销售信息结点ps,遍历统计结果链表,查找客户名称与销售信息结点中客户名称相同的结点p2。若p2存在,令 p2->weight += ps->weight, p2->sale
49、+= ps->sales_amount。若p2不存在,新建结点p1,令p1为phead的后继,并对p1的sale(销售金额),weight(销售重量),client(客户姓名)赋值。销售信息链表遍历完毕后,对统计结果链表进行冒泡排序,最后遍历统计结果链表,输出每个结点中存储的客户消费信息。如流程图4.3.5,冒泡排序流程图同4.3.3.0。(2)某商品销售情况:函数原型:void StatCItem(void)函数功能:按客户姓名统计指定品种的商品消费情况调用了的函数:函数原型:CLIENT_STAT *StatCItemInfo(ITEM_NODE *pi)函数功能:按客户姓名统计指定
50、各品种销售情况并创建统计结果链表函数原型:void StatClientSort(CLIENT_STAT *head, int len)函数功能:将按客户姓名统计的链表按销售总重排序输入商品名称,查找基本信息结点pi,若pi不存在,提示商品不存在。否则新建按客户统计的某商品消费情况表。令phead指向统计结果链表的头结点。与某分类销售情况统计类似,遍历pi对应的销售信息链表,每指向一个销售信息结点ps,遍历统计结果链表,查找客户名称与销售信息结点中客户名称相同的结点p2。若p2存在,令p2->weight += ps->weight, p2->sale += ps->s
51、ales_amount。若p2不存在,新建结点p1,令p1为phead的后继,并对p1的sale(销售金额),weight(销售重量),client(客户姓名)赋值。销售信息链表遍历完毕后,对统计结果链表进行冒泡排序,最后遍历统计结果链表,输出每个结点中存储的客户消费信息。如流程图4.3.6,冒泡排序流程图同4.3.3.0。五、运行测试与结果分析5.1输入数据商品分类信息:分类编码12345分类名称肉类鱼类蔬菜海鲜杂粮商品基本信息:分类编码1111222商品名称猪肉牛肉羊肉火鸡肉鲫鱼黄骨鱼鳝鱼产地湖南衡阳衡南县相市乡湖南省怀化市鹤城区甘肃白银市靖远县江苏盐城市建湖县A市企鹅码头广州5678号外
52、婆家池塘仙桃市张沟镇先锋村单价(元/斤)21.9849.7852.435.215.8522.5635.5分类编码2333334商品名称鳊鱼茄子西红柿黄瓜豆角冬瓜南美对白虾产地三府湾码头山东省聊城市莘县山东聊城市东昌府区山东临沂市苍山县山东临沂市沂水县江苏省盐城市东台市广西壮族自治区钦州市单价(元/斤)36.31.61.923.724.80.5234.76分类编码444555商品名称螃蟹扇贝鱿鱼大豆玉米小麦产地辽宁省丹东市东港市北京市朝阳门外街道海南儋州市光村镇山东泰安市东平县湖北省襄阳市南漳县安徽阜阳市临泉县单价(元/斤)48.676.5240.86.81.151.21商品销售信息:商品名称大豆冬瓜黄骨鱼黄骨鱼黄瓜火鸡肉茄子鳝鱼销售重量1.12.13.42.33.53.21.43.9销售日期20150
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业示范温室大棚安装协议
- 儿童玩具设计总监聘任合同
- 厂房水电施工合同:印刷业篇
- 演出器材租赁合同
- 生态农业园绿化施工合同
- 建筑公司项目经理聘请协议
- 知识产权保护合同规范
- 图书馆资料储存分类方法
- 煤矿安全监查员工作规范
- 旅游景点设施管理
- 《装配基础知识培训》
- 出口退税的具体计算方法及出口报价技巧
- 五年级英语上册Unit1Getupontime!教案陕旅版
- PCB镀层与SMT焊接
- Unit 1 This is my new friend. Lesson 5 课件
- 2019年青年英才培养计划项目申报表
- 剪纸教学课件53489.ppt
- 芳香油的提取
- 劳动法讲解PPT-定稿..完整版
- 企业人才测评发展中心建设方案
- 假如你爱我的正谱
评论
0/150
提交评论