1、 课课 程程 设设 计计 报报 告告 课程设计名称:数据结构课程设计数据结构课程设计 课程设计题目:个人账簿管理系统个人账簿管理系统 院(系):计算机学院 专 业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: I 目目 录录 沈阳航空航天大学沈阳航空航天大学 . 错误!未定义书签。 1 1 课程设计介绍课程设计介绍 1 1.1 课程设计内容 . 1 1.2 课程设计要求 . 1 2 2 课程设计原理课程设计原理 2 2.1 课设题目粗略分析 . 2 2.2 原理图介绍 2 2.2.1 功能模块图 . 2 2.2.2 流程图分析 . 3 3 数据结构分析数据结构分析 7 3.1 存
2、储结构 . 7 3.2 算法描述 . 7 4.1 调试过程 . 16 4.2 程序执行过程 16 参考文献参考文献 19 1 1 1 课程设计介绍课程设计介绍 1.1 1.1 课程设计内容课程设计内容 个人账簿管理系统记录某人每月的全部收入及各项开支情况, 包括食品 消费,房租,子女教育费,水电费,医疗费,储蓄等。进入系统后可以输入 和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输 入的月份查询每月的收支情况。 1.2 1.2 课程设计要求课程设计要求 1. 采用链表结构管理收支情况,并能够保存到文件中; 2. 完成对每月的开支排序,以及完成系统查询功能; 3. 独立完成系统
3、的设计,编码和调试; 4. 系统利用 C 语言实现; 5. 按照课程设计规范书写课程设计报告。 2 2 2 课程设计原理课程设计原理 2.1 2.1 课设题目粗略分析课设题目粗略分析 根据课设题目要求,拟将整体程序分为五大模块。以下是五个模块的大体分 析: 1. 账簿信息输入:该模块中,以带头结点的链表为账单信息的存储结构, 输入各项开支的数据。 2. 账簿信息排序:该模块中,将针对每月的消费总额进行从小到大的顺序 进行排序。 3. 账簿信息查询:该模块中,将输入或已排序账单进行按所输入的日期进 行查询并将查询结果打印至屏幕,供人阅读。 4. 账单信息更改:进入该模块,进行信息的更改或添加。
4、5. 账单信息保存:该模块将账单信息以文本文档保存到磁盘中。 2.2 原理图介原理图介绍绍 2.2.1 2.2.1 功能模块图功能模块图 个人账簿管理系统 账 簿 信 息 查 询 账 簿 信 息 排 序 账 簿 信 息 更 改 账 簿 信 息 输 入 账 簿 信 息 保 存 图图 2.1 功能模块图功能模块图 3 2.2.2 流程图分析流程图分析 1. 账单建立时调用 jianli()函数, 而在在 jianli()中调用 tianjia()函数; 账单的头结点的申请工作已在主函数中完成,所以在整个建立账单的过程中核心 内容是:将新的账单信息链接到已存在的账单后面;tianjia()函数流程图
5、如图 2.2 所示。 开始并传入头指针 p-next!=NULL p=head p=p-next 是是 输入账单日期 否否 日期符合要求 开辟新的结点空间 是是 输入账单的信息 p-next=tail p=p-next 返回 否否 图图 2.2 账单信息添加函数流程图账单信息添加函数流程图 2. 在对账单信息进行排序的过程中,采用的方法是:首先将账单中支出最 大和最小的两个结点寻找出来并按从小到大的顺序连接到一个新申请的头结点 上;再将原函数的各结点插入到新的链表中,最终新的链表就成为了排序后的新 账单。paixu()函数流程图如图 2.3 所示。 4 开始并传入头指针 q=head-next
6、 指针q不为空 用指针p标记支出最少的结点 将p结点截取,链接到新申请的头结点 用指针p标记原链表支出最多的结点 将p结点截取,连接到新生成链表尾 q=head-next 指针q不为空 q=q-next 将head-next 截取,与新链 表比较,插入 到新链表 是是 否否 是是 否否 提示用户 返回 返回新的头指针 输出账单信息 图图 2.3 排序函数流程图排序函数流程图 3. 进入账单信息查询部分,程序根据输入的日期进行逐一比较,若存在该日 期的账单信息,程序输出相应的账单信息,若不存在该日期的账单信息,系统提示 用户还未录入该日期的账单信息。账单查询函数流程图如图 2.4 所示。 5 开始并传入头指针 p=head-next p不为空 查询日期符合要求 提示用户还未录入账单 返回 输出账单信息 p=p-next 日期匹配 是是 否否 是是 否否 是 否否 图图 2.4 查询函数流程图查询函数流程图 4. 进入账单更改部分,程序将用户输入的需更改的账单日期与已存在的账 单日期进行逐步比对,对日期完全相同的账单信息进行更改,若不存在该日期