数据结构课程设计+数据汇总(超市)
数据结构课程设计学校超市选址问题

一、需求分析1)核心问题:求最短路径(选址得要求就就是超市到各单位权值之与最少)2)数据模型(逻辑结构):带权有向图(权值计算:距离*频度)3)存储结构: typedef struct{string vexs[MAX_VERTEX_SIZE];ﻩint arcs[MAX_VERTEX_SIZE][MAX_VERTEX_SIZE];int vexnum;// ,arcnum;}MGraph;核心算法:Floyd算法(弗洛伊德算法—每一对顶点之间得最短路径)输入数据:各单位名称,距离,频度,单位个数.输出数据:所选单位名称。
总体思路:如果超市就是要选在某个单位,那么先用floyd算法得出各顶点间得最短距离/最小权值。
假设顶点个数有n个,那么就得到n*n得一张表格,arcs(i,j)表示i单位到j单位得最短距离/最小权值 , 这张表格中与最小得那一行(假设为第t行),那么超市选在t单位处就就是最优解.2 运行环境Visual Stdio C++6、0ﻩWindows Vista/2003/XP3 概要设计Floyd算法利用动态规划思想,通过把问题分解为子问题来解决任意两点见得最短路径问题。
设G=(V, E,w)就是一个带权有向图,其边V={v1, v2, …,vn}。
对于k≤n,考虑其结点V得一个子集。
对于V中任何两个结点vi、vj,考虑从vi到vj得中间结点都在vk中得所有路径,设该路径就是其中最短得,并设它得路径长度为最短路径长度.如果结点vk不在从vi到vj得最短路径上,则;反之则可以把分为两段,其中一段从vi到vk,另一段从vk到vj,这样便得到表达式.上述讨论可以归纳为如下递归式:原问题转化为对每个i与j求,或者说求矩阵#include 〈stdio、h〉#include <stdlib、h>#include<time、h〉#include "malloc、h"#include <iostream、h>#define TURE 1#define FALSE0#define OK 1#define ERROR 0#defineOVERFLOW -1#define INF 32767const int MAXVEX=100;typedef char V extype;4、2结构体得定义typedef struct{ﻩVextype vexs[MAXVEX][MAXVEX]; //单位名称(顶点信息);int adj[MAXVEX][MAXVEX];ﻩ//单位之间得相通情况(就是否有边);int dis[MAXVEX][MAXVEX];ﻩﻩﻩﻩ//单位间距离(边得长度);ﻩint f[MAXVEX];ﻩﻩﻩﻩﻩﻩ//各单位去超市得频率;int n;ﻩﻩﻩﻩﻩ//顶点数与边数;ﻩint e;}Mgraph;4、3变量得输入voidCreatMgraph(Mgraph *G){int i,j,k;printf(”请输入单位个数:\n");ﻩscanf("%d”,&(G-〉n));printf(”请输入单位间得路径数:\n");scanf(”%d",&(G-〉e));ﻩprintf(”请输入单位名称:\n");for(i=0;i<G->n;i++){ﻩprintf("请输入第%d个单位名称:\n",i);scanf("%s",&G->vexs[i]);}ﻩfor(i=0;i〈G->n;i++)ﻩﻩ //结构体得初始化;ﻩﻩfor(j=0;j〈G-〉n;j++)ﻩﻩ{ﻩﻩG->adj[i][j]=0;ﻩG-〉dis[i][j]=0;ﻩG-〉f[i]=0;ﻩ}for(k=0;k〈G-〉e;k++){ﻩprintf("请输入相通得两单位 (输入格式:i,j):\n”);ﻩﻩscanf("%d,%d",&i,&j);//在距离上体现为无向;ﻩﻩprintf("请输入相同两个单位间得距离(格式:dis):\n");ﻩscanf(”%d",&(G-〉dis[i][j]));ﻩﻩG->adj[i][j]=1;ﻩG-〉adj[j][i]=1;ﻩG->dis[j][i]=G->dis[i][j];ﻩ}ﻩfor(k=0;k<G-〉n;k++)ﻩ{ﻩprintf(”请输入第%d个单位去超市得相对频率:\n”,k);ﻩscanf(”%d”,&(G-〉f[k]));ﻩ}ﻩfor(i=0;i<G—>n;i++)ﻩﻩﻩﻩﻩ //以距离与频率之积作为权值;ﻩfor(j=0;j<G—〉n;j++){G->dis[i][j]*=G-〉f[i];//最终权值非完全无向;if(G—>adj[i][j]==0&&i!=j)ﻩﻩﻩG->dis[i][j]=INF;ﻩﻩ}}4、4带权有向图求最短路径floyd算法void Floyed(Mgraph *G)//带权有向图求最短路径floyd算法{ﻩint A[MAXVEX][MAXVEX],path[MAXVEX][MAXVEX];ﻩint i,j,k,pre;int count[MAXVEX];for(i=0;i〈G->n;i++) //初始化A[][]与path[][]数组for(j=0;j〈G—〉n;j++) //置初值;ﻩﻩ{ﻩﻩA[i][j]=G—>dis[i][j];ﻩﻩﻩpath[i][j]=-1;ﻩﻩﻩcount[i]=0;}ﻩfor(k=0;k<G—>n;k++) //k代表运算步骤{ﻩfor(i=0;i<G->n;i++)for(j=0;j〈G->n;j++)ﻩﻩif(A[i][j]>(A[i][k]+A[k][j])) //从i经j到k得一条路径更短ﻩﻩﻩﻩ{ﻩﻩﻩA[i][j]=A[i][k]+A[k][j];ﻩpath[i][j]=k;ﻩﻩﻩﻩ}ﻩ}cout<〈endl<<"Floyed算法求解如下:"〈<endl;ﻩfor(i=0;i<G—>n;i++)for(j=0;j<G-〉n;j++)ﻩ{ﻩﻩﻩif(i!=j)ﻩ{ﻩﻩcout<〈" "〈<i<〈”—>"〈〈j<<”;";if(A[i][j]==INF)ﻩﻩ{ﻩﻩﻩﻩif(i!=j)ﻩcout〈<"不存在路径”<<”\n"<<endl;ﻩ}ﻩelseﻩﻩﻩ{ﻩﻩﻩcout<〈"路径长度为:"<<A[i][j]〈<"\n";ﻩﻩﻩcout〈<"路径为:"<〈i〈〈”*";ﻩﻩﻩﻩpre=path[i][j];ﻩwhile(pre!=—1)ﻩﻩ{ﻩﻩﻩcout<<pre<<”\n";ﻩﻩﻩﻩpre=path[pre][j];ﻩﻩ}ﻩﻩﻩcout〈〈j〈〈endl;ﻩﻩ}ﻩﻩﻩ}}//以下为选择总体最优过程,然后确址;ﻩfor(i=0;i<G->n;i++)ﻩfor(j=0;j〈G-〉n;j++)ﻩ{ﻩﻩif(A[i][j]==INF)ﻩcount[i]=0;ﻩelseﻩcount[i]=1;}ﻩfor(i=0;i<G-〉n;i++)ﻩif(count[i]){ﻩfor(j=0;j<G-〉n;j++)ﻩif(i!=j)A[i][i]+=A[j][i];}k=0;for(i=0;i〈G—>n;i++)ﻩ{ﻩif(count[i])ﻩﻩif(A[k][k]>A[i][i])ﻩﻩﻩk=i;}ﻩcout<<"超市得最佳地址为:”<<G-〉vexs[k]<<endl;}4、5主函数模块void main(){Mgraph *Gh=NULL;Gh=(Mgraph *)malloc(sizeof(Mgraph));ﻩCreatMgraph(Gh);Floyed(Gh);ﻩsystem("pause");}5 调试分析5、1本题目得关键点之一:有两个权值:各单位到超市得距离及各单位人去超市得频度。
数据库课课程设计超市

数据库课课程设计超市一、教学目标本课程旨在通过学习,使学生掌握数据库的基本概念、原理和方法,培养学生运用数据库技术解决实际问题的能力。
具体目标如下:1.知识目标:(1)理解数据库的基本概念,如数据、数据模型、数据库管理系统等。
(2)掌握数据库的基本操作,如创建、删除、修改和查询数据。
(3)了解数据库的设计原则和方法,能够使用实体-关系模型进行数据库设计。
(4)熟悉数据库的性能优化和安全性管理。
2.技能目标:(1)能够使用数据库管理系统进行基本的数据库操作。
(2)具备数据库设计的能力,能够根据实际需求设计合适的数据库结构。
(3)掌握数据库的性能优化方法,提高数据库的运行效率。
(4)了解数据库的安全性管理,保障数据库的安全运行。
3.情感态度价值观目标:(1)培养学生对数据库技术的兴趣,提高学生运用数据库技术解决实际问题的意识。
(2)培养学生团队协作精神,提高学生与他人共同完成数据库项目的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.数据库基本概念:数据、数据模型、数据库管理系统等。
2.数据库基本操作:创建、删除、修改和查询数据。
3.数据库设计:实体-关系模型、数据库设计原则和方法。
4.数据库性能优化:索引、分区、事务隔离等。
5.数据库安全性管理:用户权限管理、SQL注入防范等。
6.数据库应用案例:结合实际案例,讲解数据库在各个领域的应用。
三、教学方法为了提高教学效果,本课程将采用多种教学方法相结合的方式进行教学,包括:1.讲授法:讲解数据库的基本概念、原理和方法。
2.案例分析法:分析实际案例,使学生更好地理解数据库的应用。
3.实验法:引导学生动手实践,掌握数据库的基本操作和设计方法。
4.讨论法:学生分组讨论,培养学生的团队协作能力和解决问题的能力。
四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《数据库原理与应用》。
2.参考书:提供相关的数据库技术参考书籍,供学生自主学习。
连锁超市管理系统数据库课程设计报告

摘要本次课程设计为“连锁超市管理系统”,其中有以下要求:(1)每个连锁店有一名经理、多名员工。
(2)商品有不同的分类,例如食品、家庭日用品等。
(3)每个供应商可以供应多种商品,每种商品可以由不同的供应商供应。
采购员向不同的供应商采购同一种商品,可能会得到不同的商品单价。
在采购订单上希望能够看到采购总金额,以及采购详单。
(4)系统记录顾客购买信息,即商品销售信息。
如果顾客出示会员卡,可以根据会员级别打折。
分析:本次实习的题目是连锁超市管理系统,主要的目的是如何处理超市中采购销售行为。
根据系统所需功能,决定以windows7为开发平台,采用选择功能强大Microsoft SQL Server2008为开发工具,利用软件工程思想和方法,开发该系统的所需要的功能。
本系统由商品信息管理模块,员工信息管理模块,供应商信息管理模块等的组成,对超市中的各种信息进行分类管理,统筹规划。
功能较为全面。
关键字:超市、采购销售管理、数据库、Microsoft SQL Server 2008。
目录1需求分析 (1)1.1 信息要求 (1)1.2 处理要求 (1)1.3 安全性与完整性 (1)2 概念结构设计 (3)2.1 概念结构设计的方法与步骤 (3)2.2 数据抽象与局部视图设计 (3)2.3 视图的集成 (5)3逻辑结构设计 (6)3.1 E-R图向关系模型的转换 (6)3.2 设计用户子模式 (6)4系统实现 (7)4.1建立基本表 (7)4.2建立视图 (8)4.3数据库截图 (9)5 总结 (12)参考文献 (13)1需求分析1.1 信息要求由于系统的使用对象是超市管理者,因此对系统的信息要求可分为以下几个方面:连锁店信息、员工信息、顾客信息、商品信息、销售信息、供应商信息、采购信息。
1.2 处理要求本系统是为了超市管理者更好的管理超市而设计。
因此,超市管理者在登录此系统后应该能清晰的知道自己超市信息、员工信息、顾客信息、商品信息、销售信息、供应商信息、采购信息、会员折扣信息。
超市销售数据库课程设计

超市销售数据库课程设计一、课程目标知识目标:1. 让学生掌握数据库的基本概念,如数据表、字段、记录等;2. 使学生了解超市销售数据库的结构,包括商品信息、销售记录等;3. 帮助学生学会运用数据库查询语句,如SQL,进行数据检索和分析。
技能目标:1. 培养学生运用数据库软件进行数据录入、修改和删除的能力;2. 提高学生利用数据库查询语句进行数据分析和解决问题的能力;3. 培养学生将数据库知识应用于实际生活中的能力。
情感态度价值观目标:1. 培养学生对数据库学习的兴趣,激发他们主动探索新知识的欲望;2. 培养学生的团队协作意识,使他们学会在小组合作中共同解决问题;3. 增强学生的信息意识,使他们认识到数据库在生活中的重要性,并能够关注数据库技术的发展。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能够独立创建、维护和优化超市销售数据库;2. 学生能够运用SQL语句进行销售数据的查询和分析,为超市运营提供决策依据;3. 学生能够在小组合作中,共同解决数据库在实际应用中遇到的问题,提高团队协作能力。
二、教学内容1. 数据库基本概念:数据表、字段、记录、主键等;2. 超市销售数据库结构:商品信息表、销售记录表、顾客信息表等;3. 数据库软件操作:数据录入、修改、删除和查询;4. SQL语句基础:SELECT、FROM、WHERE、GROUP BY、ORDER BY等;5. 数据库查询应用:销售数据分析、商品库存查询等;6. 数据库维护与优化:索引、视图、存储过程等。
教学大纲安排:第一课时:数据库基本概念及超市销售数据库结构介绍;第二课时:数据库软件操作方法及实践;第三课时:SQL语句基础及实践;第四课时:数据库查询应用及案例分析;第五课时:数据库维护与优化方法。
教材章节关联:教学内容与课本第四章“数据库及其应用”相关,涉及以下小节:1. 数据库基本概念(4.1节);2. 数据库设计(4.2节);3. 数据库操作(4.3节);4. SQL语句(4.4节);5. 数据库查询优化(4.5节);6. 数据库维护与管理(4.6节)。
数据库课程设计小型超市

数据库课程设计小型超市一、教学目标本课程旨在通过设计小型超市的数据库,使学生掌握数据库的基本概念、设计和应用方法。
具体目标如下:1.理解数据库的基本概念,包括数据、数据库、表、关系等。
2.掌握SQL语言的基本操作,如创建、查询、更新和删除数据。
3.了解数据库的设计原则和方法,能够设计合理的数据库结构。
4.熟悉小型超市的业务流程和数据需求。
5.能够使用SQL语言进行数据库的创建、查询、更新和删除操作。
6.能够根据业务需求设计合适的数据库结构。
7.能够编写简单的SQL查询语句,进行数据的统计和分析。
8.能够使用数据库管理工具进行数据库的维护和管理。
情感态度价值观目标:1.培养学生对数据库技术的兴趣和好奇心,提高学生对信息技术的应用能力。
2.培养学生团队合作意识,学会与他人合作完成任务。
3.培养学生解决问题的能力,能够根据实际情况提出解决方案。
二、教学内容本课程的教学内容主要包括以下几个部分:1.数据库的基本概念:介绍数据库的定义、特点和应用场景。
2.数据库的设计:讲解数据库设计的原则和方法,包括实体-关系模型、E-R图等。
3.SQL语言:介绍SQL语言的基本操作,包括创建表、插入数据、查询数据、更新数据和删除数据等。
4.数据库的应用:以小型超市为例,讲解如何设计和应用数据库,包括商品管理、销售管理等。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:讲解数据库的基本概念、设计和应用方法。
2.案例分析法:通过分析小型超市的案例,让学生了解数据库在实际中的应用。
3.实验法:让学生动手实践,操作数据库进行创建、查询、更新和删除操作。
4.讨论法:分组讨论,让学生交流自己的想法和解决方案。
四、教学资源本课程的教学资源包括:1.教材:《数据库原理与应用》。
2.参考书:提供相关的数据库设计和技术资料。
3.多媒体资料:制作PPT课件,进行图文并茂的讲解。
4.实验设备:计算机实验室,让学生进行实践操作。
数据结构课程设计报告-超市商品管理

1。
需求分析在某个大型生活服务区内,有三个超市,每个超市中的商品包括:商品号,商品名称,商品价格,库存数量,每种商品总数,生产日期等基本信息,假设三个超市的商品信息分别是用单链L1,L2, L3取存储的,请写一个程序实现下列任务要求:知识点:线性表操作【任务要求】1.当超市有新的商品购入是能添加到单链表中;2.能查找出三个超市中具有相同商品名称的商品信息;3.在超市商品信息L1中删除那些与其他两个超市都有的商品信息;4.能修改各超市商品基本信息,如价格等。
5.能查找比较超市中相同商品的销售情况,能统计每个超市中每种商品的销售量及销售额.6.能输出每个超市的所有商品信息;【测试数据】自行设定,注意测试将活区删空等特殊情况。
2。
概要设计2。
1必要算法1.当超市有新的商品购入是添加到单链表中算法概要:运用单链表的基本操作—-插入一个新结点,即分配一个新的储存空间,然后依次输入结点所含的数据,再插入到原结点的尾部即可.此算法时间复杂度为O(1)。
2.查找出三个超市中具有相同商品名称的商品信息1算法概要:1。
寻找相同商品名称算法:先比较前两个链表(超市)l1,l2,运用比较字符串的strcmp()方法找出两个链表中含有相同的商品名称,然后将两个链表中具有相同商品名称的商品信息存储到新建链表fs中,再比较链表fs和l3,重复上述步骤,找出链表l1,l2,l3中都具有相同商品名称的商品,将其商品信息存储在链表fs中.此算法时间复杂度为O(n)。
2。
输出相同商品的商品信息:访问fs中每个结点中的商品名称,根据商品名称分别遍历原链表l1,l2,l3的商品信息找出原结点,然后将其信息输出。
此算法时间复杂度为O(n)。
3.在超市商品信息L1中删除那些与其他两个超市都有的商品信息算法概要:首先运用上述的寻找相同商品名称算法,找出l1中那些与其他两个超市都有的商品名称,再根据其名称遍历链表l1,找出其结点删除并释放——单链表的基本操作.此算法时间复杂度为O(n)。
数据库系统原理课程设计报告--超市管理系统

《数据库原理与应用》课程设计报告超市管理系统学院:信息科学与技术学院班级:计教0301学号:031231311姓名:李秋月完成时间:2005.12.30目录一、程设计的任务 (2)二、系统需求分析与设计 (2)1、系统需求分析 (2)2、数据流图 (3)三、数据结构描述 (4)四、软件设计流程图和功能模块图 (5)1、软件设计流程图 (5)2、功能模块图 (6)五、程序模块汇总 (7)六、本软件所能实现的功能综述及分析 (9)1、基本信息管理 (10)2、进货信息管理 (10)3、销售信息管理 (10)4、库存信息管理 (10)5、系统辅助管理 (10)七、课程设计体会和总结 (11)一、课程设计的任务数据库系统原理是计算机及其相关学科的一门重要的软件基础课程,也是计算机软件科学与技术、信息科学与技术的重要学科分支。
本课程设计旨在通过对一个小型数据库管理系统(DBMS)的综合设计过程,强化学生对计算机系统软件的设计能力,提高学生的综合素质,并通过课程设计进一步加强学生对所学知识的理解,以及对数据库的全面、深刻认识。
现代化事业的发展,也使超市的管理手段发生前所未有的革命。
计算机的运用现正在发达国家的各类商店超市中普及。
由于它能够准确记载和查阅有关超市经营活动的大量数据,帮助超市经营者掌握和分析营销情况,及时作出正确决策,并且有利于商店内部的财务、工资、人员、库存、销售情况等管理,因而大大提高了现代超市的管理水平。
国外很多发达资本主义国家的有关人士都在开发超市管理系统,开发出很多大型的软件,由于本人能力有限,开发一个小型超市管理系统,它可以使我们国内新起小型超市可以更好的操作。
此系统的有减少差错,节省人力,减少顾客购物时间,增加客流量,提高顾客满意度等特点。
我通过开发这个简单管理信息系统,巩固了自己所学的知识,提高了应用能力。
二、系统需求分析与设计1、系统需求分析根据需求分析,系统共需7张数据表I,分别是:“职工信息”表、“经理信息”表、“商品信息”表、“厂商信息”表、“库存信息”表、“进货信息”表和“售货信息”表。
超市选址数据结构课程设计

超市选址数据结构课程设计一、课程目标知识目标:1. 学生能理解并掌握超市选址过程中涉及的数据结构,如线性表、树、图等。
2. 学生能够运用所学数据结构,分析超市选址的地理、人口、交通等因素。
3. 学生掌握超市选址数据结构的存储方法,了解其优缺点。
技能目标:1. 学生能够运用计算机辅助工具,如Excel、编程语言等,对超市选址数据进行处理和分析。
2. 学生具备独立设计超市选址数据结构模型的能力,并能够进行优化。
3. 学生能够通过小组合作,进行有效沟通,共同完成超市选址数据结构的课程设计。
情感态度价值观目标:1. 学生通过课程学习,培养对数据结构和实际问题研究的兴趣,提高解决问题的自信心。
2. 学生能够认识到数据结构在解决现实问题中的价值,增强学以致用的意识。
3. 学生在课程设计中,培养团队协作精神,学会尊重和包容他人的观点。
本课程设计旨在帮助学生将所学数据结构知识与实际问题相结合,提高解决实际问题的能力。
考虑到学生已具备一定的数据结构基础,课程将注重培养学生在实际应用场景中分析问题、解决问题的能力。
通过小组合作,培养学生团队协作、沟通表达的能力,使其在课程学习中形成积极的情感态度和正确的价值观。
课程目标分解为具体学习成果,便于后续教学设计和评估。
二、教学内容1. 数据结构基本概念复习:回顾线性表、树、图等数据结构的特点和用途,强调在实际问题中的应用。
2. 超市选址因素分析:讲解地理、人口、交通等因素对超市选址的影响,结合数据结构知识进行深入剖析。
3. 数据结构在超市选址中的应用:- 线性表:介绍线性表在超市选址数据存储和查询中的应用。
- 树结构:讲解树结构在分析超市辐射范围、优化配送路径等方面的应用。
- 图结构:探讨图结构在描述超市选址网络关系、分析竞争对手等方面的应用。
4. 教学大纲:- 第一周:复习数据结构基本概念,导入超市选址问题。
- 第二周:分析超市选址因素,讲解数据结构在选址中的应用。
- 第三周:实践环节,小组合作设计超市选址数据结构模型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信电工程学院课程设计报告数据汇总系统课程:高级语言程序设计班级:12软件1学号:姓名:***指导教师:**2013年7 月1日目录1程序目标及功能--------------------------------------------------------------- 11.1课题背景-----------------------------------------------------------------11.2系统功能---------------------------------------------------------------31.3设计要求---------------------------------------------------------------3 2程序功能模块组成及流程图------------------------------------------------42.2系统功能模块-----------------------------------------------------------42.3各模块流程图-----------------------------------------------------------5 3程序主要数据结构及函数列表---------------------------------------------83.1 程序中使用的数据结构----------------------------------------------83.2 函数列表--------------------------------------------------------------10 4程序代码及运行结果-------------------------------------------------------14 5总结与体会------------------------------------------------------------------32题目:数据汇总题目内容:在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。
假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。
记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。
构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。
本人完成的工作:(1)编写实现将数据记录插入到数据文件的最后的函数;⑵编写以收款机为单位的数据分类处理函数。
构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。
读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表;(3) 编写以商品为单位的数据分类处理函数。
构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。
读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表;(4) 统计每台收款机的销售总额;(5) 以收款机为单位,将所有收款机按销售总额的递增顺序构造一个单链表并输出。
(6) 以商品为单位,统计每种商品的销售总额。
(7)以商品为单位,将所有销售的商品按销售总额的递增顺序构造一个单链表并输出。
- 3 -(8)设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。
所采用的数据结构:单链表销售商品数据记录结构定义:typedef struct Goods{int regNum; // 收款机编号int goodsNum; // 商品编号int salesVol; // 销售数量double salesAmount; // 销售单价}Goods;typedef struct Goods ElemType; // 用于链表里的数据类型单链表结点定义:typedef struct Node{ElemType data; // 链表所存的数据struct Node *next; // 指向下一个结点的指针} *LNode, *LinkList;所设计的函数:[1].将数据记录插入到文件data.dat最后的函数int Addrecord(Goods *goods)算法思想:首先判断参数是否非法,非法则返回FAIL,否则以以二进制的append 方式打开文件data.dat;文件指针为空则打开失败返回FAIL,否则将数据记录写入文件,然后关闭文件,返回SUCCESS。
流程图:[2].以收款机为单位的数据分类处理函数LinkList* SortByReg(int n)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化n个收款机链表,并读相应记录,存到对应的收款机链表中的末尾结点,最后关闭文件,返回链表数组。
流程图:- 5 -[3] 统计每台收款机的销售总额double* SumByReg(int n)算法思想:申请一个数组存储各台收款机的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByReg(n)函数得到分类好的收款机链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount流程图:- 7 -[4].以商品为单位的数据分类处理函数LinkList* SortByGoods(int m)算法思想:判断打开文件是否成功,失败则打印“打开文件失败”并返回FAIL,否则分配链表指针数组;然后判断内存是否充足,不足则打印“内存不足”并返回FAIL,否则初始化m个商品链表,并读相应记录,存到对应的商品链表中的末尾结点,最后关闭文件,返回链表数组。
流程图:[5].以商品为单位,统计每种商品的销售总额double* SumByGoods(int m)算法思想:申请一个数组存储各种商品的销售总额,申请不成功则打印“内存不足”并返回FAIL,否则调用SortByGoods(m)函数得到分类好的各种商品的链表指针数组,判断指针数组是否为空,是则释放之前时申请的内存空间并返回NULL,否则初始化总额数组,并进行累计分析,之后释放收款机的链表内存,释放链表指针的内存,释放总额数组,返回总额amount- 9 -流程图:[6].设计一个菜单,具有插入数据记录、按收款机统计销售总额void RunMenu(void)算法思想:清除以前的无关输入,打印菜单,根据选择的菜单项进行相应的操作。
- 11 -[7].用于输入一条新的记录[8].GOODS的输出函数- 13 -程序运行结果:1:主程序运行,菜单打印2插入数据记录3.按收款机统计销售总额4.按商品统计销售总额- 15 -5.按商品销售记录排序6按收款机收款纪录排序7退出系统源程序:#include <stdio.h>#include <stdlib.h>#include <conio.h>#define SUCCESS 1 // 操作成功#define FAIL 0 // 操作失败#define allRegisters 15#define allGoods 30// 销售的商品数据记录typedef struct Goods{int regNum; // 收款机编号int goodsNum; // 商品编号int salesVol; // 销售数量double salesAmount; // 销售单价}Goods;typedef struct Goods ElemType; // 用于链表里的数据类型typedef struct Node{ElemType data; // 链表所存的数据struct Node *next; // 指向下一个结点的指针} *LNode, *LinkList;//构造一个空的线性表LinkList InitList(void){LNode Head;Head = (LNode)malloc(sizeof(struct Node)); //为链表的头结点分配空间 if(!Head){printf("Out of space!");return NULL;}Head->next = NULL;- 17 -return Head;//返回头结点,第一个结点head是不存任何数据的}//初始条件:线性表L已存在。
操作结果:返回线性表L的最后一个结点(尾结点)。
LNode IsLast(LinkList L){LNode P = L->next;if(P){while(P->next != NULL) //遍历线性表LP = P->next;return P; //返回线性表L的最后一个结点}elsereturn L; // 链表只有头结点,而它不存数据的}//初始条件:线性表L已存在。
操作结果:返回线性表L结点的个数。
int ListLength(LinkList L){LNode P = L->next;int num = 0;while(P) //累积线性表L结点的个数{num++;P = P->next;}return num; //返回线性表L结点的个数}//构造一个数据域为X的新结点LNode NewLNode(ElemType X){LNode S;S = (LNode)malloc(sizeof(struct Node));//为新结点分配空间if(!S){printf("Out of space!");return NULL;}S->data = X;S->next = NULL;return S;//返回新结点}//初始条件:线性表L已存在。
操作结果:销毁线性表L。
void DestroyList(LinkList *L){LNode Head, P;if(*L)//若线性表L已存在{Head = *L;P = Head->next;while(P != NULL) //把链表中除头结点外的所有结点释放{free(Head);Head = P;P = Head->next;}free(Head); //释放头结点}*L = NULL;}//初始条件:线性表L中结点P已找到,新结点S已构造。