算法与数据结构课程设计.doc_第1页
算法与数据结构课程设计.doc_第2页
算法与数据结构课程设计.doc_第3页
算法与数据结构课程设计.doc_第4页
算法与数据结构课程设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

桂林电子科技大学综合设计说明书用纸 编号 数据结构与算法课程设计 说明书 题 目 进销存货物管理系统 学 院 计算机科学与工程学院 专 业 计算机科学与技术 学生姓名 潘飞达 学 号 1100310120 指导教师 唐麟 2013 年 9 月 26 日 桂林电子科技大学综合设计说明书用纸 摘 要 本课程设计报告系统地阐述了我使用 C 编写的进销存货物管理系统 首 先 我对系统进行一个简要的概述 然后 我就系统的需求进行了详细的分析 这是设计工作中不被人们重视但却非常重要的一步 接下来 我把系统中所有 的设计简明清晰地展现出来 并把我在设计中遇到的问题和分析解决问题的办 法一一做了分析 当然 我还讲到系统中的关键技术和让人眼前一亮的特色 最后 在结论中 我对自己的课程设计做了总体的评价同时简述了我在这次课 程设计中的收获和经验 关键词 数据结构与算法课程设计 进销存货物管理系统 C 桂林电子科技大学综合设计说明书用纸 目 录 引言引言 1 1 1 1 系统概述系统概述 1 1 2 2 需求分析需求分析 1 1 2 1 系统需求 1 2 2 开发环境 1 3 3 详细设计详细设计 1 1 4 4 所遇到的问题和分析解决所遇到的问题和分析解决 2 2 5 5 系统特色及关键技术系统特色及关键技术 2 2 6 6 结论结论 2 2 参考文献参考文献 2 2 桂林电子科技大学综合设计说明书用纸 引言 随着科学技术的不断提高 计算机科学日渐成熟 其强大的功能已为人们深刻认识 它 已进入人类社会的各个领域并发挥着越来越重要的作用 计算机的发明应用 被视为 人类的第三次重大的科学技术革命 是一次飞跃 过去的革命最高成就就是 用机器制 造机器 是手的延长 而计算机的出现却能做到 用机器控制机器 是脑的延伸 计 算机是提高生产效率的主要工具及途径 在信息化快速发展的今天 企业与顾客 企业与供方的关系变得更加密切和复杂 强化管理 规范业务流程 提高透明度 加快商品资金周转 为流通领域信息管理全 面网络化打下基础 是商品销售公司乃至众多商业企业梦寐以求的愿望 随着技术发展 计算机操作及管理日趋简化 计算机知识日趋普及 同时市场经 济快速多变 竞争激烈 企业采用计算机管理进货 库存 销售等诸多环节也已成为 趋势及必然 进销存管理系统依靠现代化的计算机信息处理技术来管理进货 从而节 省了大量的人力 物力 改善了员工的工作条件 减轻了劳动强度 并且能够快速反 映出商品的进 销 存等状况和各种反馈信息分析 使管理人员快速对市场的变化做 出相应的决策 从而掌握市场先机 二十一世纪是信息时代 计算机的应用已普及经济和社会生活的各个领域 越来 越多的公司 企业 学校等单位都不同程度的利用电脑来进行资源管理 随着电脑应 用的普及 单纯人工操作管理方式也即将被淘汰 所以计算机化管理已经成为一种必 然的趋势 本系统运用 C 进行开发 它能够呈现出简明清晰的界面 并被人们能够很好地理 解和使用 并能在一些方面给人们更好的服务 相信它能够被大多数用户所接受 在 通过运用数据结构与算法相结合的课程设计 来完成进销存货物管理系统时 一方面 是为了检查我们的学习成果 另一方面是为了更进一步对数据结构与算法的掌握和运 用 同时也让我们清楚的知道自己的掌握水平和不足之处 桂林电子科技大学综合设计说明书用纸 1 系统概述 在这次课程设计中 我经过近两个星期的努力 克服了种种困难并向同学和老师 请教过不少问题 终于完成了进销存货物管理系统 为了做好这次课程设计 我认真 做好了需求分析和系统的详细设计 本进销存货物管理系统使用 C 编写 能够完成 货物入库 货物删除 货物信息修改 货物信息统计 货物信息查询 货物信息排序 建立货物管理表和文件读写等功能 其中 我使用的数据结构有 链表类 时间类 货物类 使用的算法有求和 直接选择排序等 进销存货物管理系统界面简洁 清楚 功能齐全 使用方便 交互界面良好 让 没用过这个系统的人一看就知道如何操作 2 需求分析 2 1 系统需求 该系统能进行简单的货物管理 进货 销售货物 退货等管理 并建立货物管理表 货物管理表中至少包括如下信息 货物标号 货物名称 货物产地 入库价格 入库时间 现存货物数量 已经销售数 量 销售平均单价 每次销售后 都需要对现存货物数量进行更新 对已销售数量进行更新 也需要对销 售平均单价进行更新 功能要求 1 具有建立数据文件 货物管理表 的功能 2 具有数据输入功能 3 具有数据修改功能 4 具有数据删除功能 当一些已经过时陈旧的商品被特价处理后 将其删除 不再进 货 5 能查询 查找 一些基本信息 如能查询剩余件数小于某个特定值的商品 以便于 及时进货 6 具有多种统计功能 如统计每种货物是否有盈利 将销售平均单价跟入库价格进行 比较 所有货物的盈利或亏损等等 7 具有排序功能 比如对货物盈利水平进行排序比较等等 2 2 开发环境 开发语言 C 开发环境 win7 64 位操作系统 开发软件 Microsoft Visual C 6 0 桂林电子科技大学综合设计说明书用纸 2 3 界面需求 系统界面要具有广泛的实用性 便于移植 界面友好 操作简便 根据软件的使 用环境 用户的要求 系统界面应该简单 友好 易于使用 方便查看 简洁明快 而且系统是在 Windows 环境下的应用软件 软件产品的界面应该与操作系统的界面相 切合 产品的主界面应该功能齐全 分类明确 让用户一眼看去就能明白大致的功能 2 4 输入输出格式 本系统是一个进销存货物管理系统 采用 VC 6 0 编译器作为开发环境 输入数 据类型主要是 string int float double 等数据类型 输入内容包括 货物名称 编号 入库价格 入库时间等数据 用户在输入学生数据时不需要保证输入数据格式 的正确性 系统会自动检测输入的数据是否正确 输出形式与输入形式类似 根据需 要可以选择显示输入的各项内容 还可以选择显示计算好盈利后并排序后的记录 显 示内容包括 货物名称 货物编号 入库价格 货物数量 总利润等数据 3 详细设计 3 1 货物管理表 编号名称地址入库价 格 入库时 间 库存数 量 已销售 数量 平均单 价 1 牙膏1 号 12002 1 1 351 2 电刀2 号 22005 2 2 202 3 山楂9 号 32006 3 3 333 4 红茶5 号 51998 5 5 345 桂林电子科技大学综合设计说明书用纸 3 2 系统功能结构图 3 3 各功能模块详细设计 1 主函数模块 用主函数 main 来实现 主要是通过设计一个 test 函数并让主函数调用它来显 示主菜单 让用户选择操作 在 test 函数中 我应用了 while 循环和 switch case 语句来进行选择 是个比较简单实现的模块 最后若选择 Y 则继续循环 若选择 N 则退出循环 退出此系统之前如若未进行更新数据之后的保存操作 则会提示用 户是否进行更新数据后的保存 然后才退出系统 主要代码如下 int main 进销存货物管理系统 货物入库 货物删除 货物信息查询 货物信息修改 货物信息统计 货物信息排序 退出 桂林电子科技大学综合设计说明书用纸 test return 0 void test LIST list goods g goods result goods gg 50 int i 0 h char j Y int choice number double revise int length inlength i length 1 for int k 1 k choice while j Y switch choice case 1 system cls cout 您将进行货物信息添加 endl cout 请输入货物的编号 g number in length gg for h 0 h length h if gg h number g number 桂林电子科技大学综合设计说明书用纸 cout 货物的编号不能重复 请重新输入 g number cout 请输入货物的名称 g name list insert data g i list show data i i 1 break Continue cin j if j Y system cls menu cin choice system cls char save Save cin save if save Y list out data outlength list cout 已保存 按任意键键退出程序 endl exit 0 2 货物入库模块 桂林电子科技大学综合设计说明书用纸 用函数 bool insert data goods data int i 来实现 主要功能用来对货物的信息进行收集 和输入 函数首先进行的是对读取的数据文件的数据收集工作 如若在指定路径找不 到数据文件 系统则会创建新的数据文件 如果找到数据文件 系统则根据指定的文 件读取方式度数据文件中的数据进行读取 之后会有个提示 您将进行货物信息添加 这样就可以按照系统的提示输入货物的信息了 货物入库模块可以录入货物的所有信 息 比如编号 入库价格 入库时间等 在本操作中 不允许有重复的货物编号出现 录入数据完毕后按 Y 即可返回主菜单 主要代码如下 bool LIST insert data goods data int i goods current previous newnode int j 1 newnode new goods if newnode NULL cout number data number newnode next NULL previous head current head next while current NULL j newnode next current previous next newnode return true 3 货物删除模块 桂林电子科技大学综合设计说明书用纸 用函数 bool delete data double i 来实现 主要功能是用来删除货物信息 首先有个链表 判空的操作 如果链表不为空则显示删除前的货物信息记录 之后会有输入货物编号 的判断 对链表中货物编号相匹配的结点进行删除操作 并释放其空间 删除成功后 打印删除后的全体学生信息记录 主要代码如下 bool LIST delete data double i goods current previous int j 0 if isempty cout next while current NULL current current next j if j length cout 没有该信息 不能删除 next current next delete current return true 桂林电子科技大学综合设计说明书用纸 4 货物信息修改模块 用函数 bool revise data double i 来实现 主要功能是用来修改货物信息记录 首先 是判断用户需要修改的货物编号是否存在 因为货物编号是不会有重复的 如果货物 编号存在 则系统会提示修改货物记录 最后将修改过后的记录打印出来 并提示修 改成功 主要代码如下 bool LIST revise data double i int j 0 goods current head current head next while current NULL current current next if j length cout 没有找到该货物的信息 endl return false cout 输入您要修改的货物管理信息 1 编号 2 名称 3 地址 4 入库价格 5 入库时间 6 库 存数量 7 已销售数量 8 平均单价 endl switch revise case 1 cout 您将修改编号 请输入新的编号 number current number number 桂林电子科技大学综合设计说明书用纸 return true 5 货物信息统计模块 用函数 void count data 来实现 主要功能是统计货物数量 亏损货物数量 总利润 库存货物总数 已销售货物总数 其中主要是求和算法 代码比较容易实现 主要代码如下 void LIST count data int sum 0 kssum 0 temp1 0 lrsum 0 temp2 0 kcsum 0 temp3 0 yxssum 0 int choice goods current cin choice switch choice case 1 current head next while current NULL sum sum 1 current current next cout 货物总数为 sum endl break 6 货物信息排序模块 用 void sort data 函数来实现 这里主要使用了直接选择排序算法来对链表进行排序 为 了降低算法的复杂度 在对链表节点进行交换时 直接对节点中的货物信息进行交换 主要代码如下 桂林电子科技大学综合设计说明书用纸 void LIST sort data cout 请输入您需要排序的项目 1 货物编号 2 货物库存数量 3 货物盈利 choice goods p q small temp temp new goods switch choice case 1 for p head next p next NULL p p next small p for q p next q NULL q q next if q numbernumber small q if small p temp number p number p number small number small number temp number 7 货物信息查询模块 用函数 void find data goods 来实现 这里的函数参数使用了一个货物类的引用变 量 使得查找到的货物信息赋给这个引用变量 然后能够进行输出 查找的信息包括 桂林电子科技大学综合设计说明书用纸 货物编号 亏损货物信息 库存数量小于某数信息 已销售数量小于某数信息 主要代码 void LIST find data goods current head next int choice x i 0 j 0 k 0 cin choice int Number switch choice case 1 cout 请输入货物编号 Number while current NULL if current number Number current current next else result number current number cout 查找结果如下 endl cout 编号 t 名称 t 地址 t 入库价格 入库时间 库存数量 已销售数量 平均单价 endl cout result number t endl break if current NULL cout 无此货物编号 next ofstream out goods if iout cout 文件打开失败 endl return while current out number t name t GoodsAddress t IncomingPrice t time year time month time day t StockNumber t SoldNumber t AveragePrice next out close cout endl 3 4 数据结构 桂林电子科技大学综合设计说明书用纸 为了对数据进行封装 我使用了链表类 货物类 时间类 为了能够方便的使用类中 的数据 我把所有的数据成员都设为公有 其中 链表类的数据成员有 头结点 货物类的数据成员有 编号 名称 地址 入库价格 入库时间 库存数量 已销售 数量 平均单价 时间类的数据成员有 年 月 日 3 5 算法 主要是求和以及直接选择排序算法 同时使用到下面的技术 文件访问与操作 合理的常量与全局变量及函数接口变量定 义 数据输入与数据格式检查 数据类型转换 错误处理 工程设计技术 3 6 测试 系统测试是系统质量保证的主要活动之一 在系统开发的过程中 在各个阶段都 有可能存在错误和缺陷 通过测试是可以发现系统设计中存在的种种问题 并可以及 时改正 避免在系统投入使用时才出现不必要的错误 导致其他损失 测试是质量保 证一个临界和决定惩罚 它提供对系统规格说明 设计和编码的最终评审 是发现系 统缺陷和错误的有力手段 本系统测试的内容主要有 1 软件的正常运行 关闭及退出时保存记录的提示 默认为是 2 用户登录界面友好 可操作性及安全性能较好 能对不同管理级别者进行限 制 以保证数据库的安全 3 可维护性好 数据的录入 删除及更改均能顺利完成 并能实现动态更新 4 数据查询便捷 能对各种不同的查询条件进行搜索 以找到最合适的答案 5 数据溢出 越界均能进行非法提示 以警告用户正确使用 对用户的非正常 操作方式也提出警告 6 数据类型填写错误时 系统能够报错 7 软件对操作系统的兼容性良好 可移植性完好 桂林电子科技大学综合设计说明书用纸 主界面 货物删除模块界面 桂林电子科技大学综合设计说明书用纸 货物统计模块界面 货物排序模块界面 桂林电子科技大学综合设计说明书用纸 4 所遇到的问题和分析解决 1 问题 需求分析的不明确 解决 在课程设计指导书的帮助下 自己在做课设的过程中不断明确和修正自己的需 求分析 不断添加新功能 2 问题 数据结构的选择 解决 经常尝试和修改 考虑到链表在动态修改中的快捷方便性 我建立了一个链表 类 并把我建立的货物类的数据储存在链表上 在链表上 我的数据能够方便地进行 添加 删除 修改等操作 3 问题 如何能在下次登录时使用上次登录时存储在文件里的数据 解决 经过同学的帮助和自己的努力 我掌握了如何对存储在文件里的数据进行使用 的办法 只要在每次程序运行结束时把货物管理表的长度写入到文件当中 当下次登 桂林电子科技大学综合设计说明书用纸 录时再读取出货物管理表的长度 然后根据这个长度把存储在文件中的货物管理表的 记录一个个添加到链表去 之后你就可以任意使用这些数据了 4 问题 我曾经遇到无论我往文件里面写入多少条记录 但文件中只显示一条的记录的 问题 解决 对于这样的逻辑问题 我调试了很多次也找不到问题的原因所在 遇到这样纠 结的问题 我只好去请教老师 只见老师使用了断点跟踪调试法 很快就发现了问题 的原因所在 原来是我的 out close 语句竟然写在循环里面 导致我只写入了一次 便无法再写入了 从中 我不仅了解到写程序时当局者迷 旁观者清 应该多向他人 虚心请教的道理 更懂知道了调试程序的方法 我相信经过我的努力 我调试程序的 水平一定会越来越好 5 问题 异常错误如何考虑 如何处理 解决 一个系统在运行中可能会遇到许多异常 如果不对这些异常进行处理 就会让 使用系统的用户在系统出现异常时不知所措 程序也无法正常地运行和终止 那么我 应该如何考虑异常处理呢 首先 我应该保证程序中尽可能少的出错 以避免异常的 出现 所以我应该先做到一下几点 1 只引用属于自己的存贮空间 2 防止引用已经释放的内存空间 3 函数中分配的内存 在函数退出之前要释放 4 函数中申请的 为打开文件而使用的 文件句柄 在函数退出前要关闭 5 防止内存操作越界 6 时刻注意表达式是否会上溢 下溢 7 认真处理程序所能遇到的各种出错情况 8 系统运行之初 要初始化有关变量及运行环境 防止未经初始化的变量被引用 9 系统运行之初 要对加载到系统中的数据进行一致性检查 10 不能随意改变与其它模块的接口 11 充分了解系统的接口之后 再使用系统提供的功能 12 时刻注意易混淆的操作符 当编完程序后 从头至尾检查一遍这些操作符 然后 我开始对各个功能模块进行异常处理检查 对于功能模块中的每次输入输出 函数分配的内存空间 文件的打开关闭我都进行了异常的处理 比如在进行文件读写 时 如果文件无法打开 则对用户做出提醒 文件无法打开 当函数结束时也及时 关闭文件 比如当用户要删除货物记录时 如果用户删除的是不存在的货物编号 程 桂林电子科技大学综合设计说明书用纸 序会显示提醒 货物不存在 无法删除 在每次数据输入我都会进行数据格式检查 防止用户输入不能使用的数据 比如当用户输入入库时间时 如果入库时间的月份小 于 0 或者大于 12 天数小于 0 或者大于 31 程序都会做出提醒 输入的时间格式不对 需要重新输入 6 问题 当我给链表设计排序算法时 发现排序算法无法对链表进行排序 解决 我选择的排序算法是直接选择排序 但是当我使用这个排序算法给链表进行排 序时发现链表中的节点并没有进行排序 经过对排序函数进行测试 发现排序中的交 换只执行了一次 但是我还是不明白为什么只交换了一次 当我问了老师之后 我才 恍然大悟 原来是排序时我交换节点时改变了节点的指针域 使得链表发生了断裂 无法再继续交换 为了解决这个问题 同时为了降低算法的复杂度 我选择将链表节 点中所有的数据进行交换 这样就不会是链表发生断裂了 最终 我成功完成了排序 算法 5 系统特色及关键技术 关键技术 我认为系统中最关键的技术有 1 建立了一个链表类 并在类中定义了一个货物类的头结点 这样就能在使用链表存 储货物数据时很方便地使用头结点 2 使用通过链表和货物类以及链表的插入函数建立一个货物信息管理表 3 把货物管理表的长度写入文件中 然后下次就可以从文件中在读取长度 然后根据这 个长度把存储在文件中的货物管理表的记录一个个添加到链表去 系统特色 1 合理的输入输出提示以及良好的用户交互界面 2 类的接口和实现方法的分离 类的声明放在一个头文件中 类成员函数的定义放在另 一个源文件中 3 合理的异常处理机制 允许用户在排除错误后继续运行程序或者给出适当错误提示 桂林电子科技大学综合设计说明书用纸 6 结论 1 系统完成情况 在两周的时间里 虽然历经重重困难和挫折 但是在我自己的努力和老师的帮助下终 于完成了进销存货物管理系统的设计 尽管系统在功能和性能上可能还有一些缺陷 但是我已经完成了系统设计的任务和目标 达到了需求分析的基本要求 成功完成了 算法与数据结构课程设计 2 未能完成的和有待改进之处 未完成的 在对货物进行销售时 对现存货物数量进行更新 对已销售数量进行更新 也需要 对销售平均单价进行更新 设计快速排序算法对链表进行排序 使用函数模板和类模板实 现代码简化和程序复用 有待改进 能够直接交换链表节点 实现对链表的真正排序 实现用户自定义多条件 查询 3 课程设计期间的收获 在完成此次的课程设计的过程中 我跨越了传统方式下的教与学的体制束缚 通 过自己的思考和设计 培养了自学能力和动手能力 并且由原先的被动的接受知识转 换为主动的寻求知识 这可以说是学习方法上的一个很大的突破 在以往的传统的学 习模式下 我们可能会记住很多的书本知识 但是通过课程设计 我们学会了如何将 学到的知识转化为自己的东西 学会了怎么更好的处理知识和实践相结合的问题 通过这次课程设计 我认识到数据结构与算法是计算机科学的基础课程 是我们 学习的核心课程 我对数据结构和算法又有了新的认识 数据结构的研究不仅涉及到 计算机软件 而且和计算机硬件的研究也有着密切的关系 无论是编译程序还是操作 系统 都涉及到数据元素在存储器中的分配问题 在研究信息检索时也必须考虑如何 组织数据 以便使查找和存取数据元素更为方便 可以认为数据结构是介于数学 计 算机硬件和计算机软件三者之间的一个核心内容 是从事计算机科学研究及其应用的 人必须掌握的重要内容 这次的课程设计有效的培养了我们独立思考的能力 提高了我们的动手操作水平 在具体设计中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论