《个人账单管理系统_数据结构课程设计沈阳航空航天大学》由会员分享,可在线阅读,更多相关《个人账单管理系统_数据结构课程设计沈阳航空航天大学(22页珍藏版)》请在金锄头文库上搜索。
1、沈阳航空航天大学课课 程程 设设 计计 报报 告告课程设计名称:数据结构课程设计数据结构课程设计课程设计题目:个人账簿管理系统个人账簿管理系统沈阳航空航天大学课程设计报告 I 目目 录录沈阳航空航天大学沈阳航空航天大学.I1 1 课程设计介绍课程设计介绍.11.1 课程设计内容.1 1.2 课程设计要求.12 2 课程设计原理课程设计原理.22.1 课设题目粗略分析.2 2.2 原理图介绍.2 2.2.1 功能模块图.2 2.2.2 流程图分析.33 数据结构分析数据结构分析.73.1 存储结构.7 3.2 算法描述.7 4.1 调试过程.16 4.2 程序执行过程.16参考文献参考文献.19
2、沈阳航空航天大学课程设计报告 1 1 1 课程设计介绍课程设计介绍1.11.1 课程设计内容课程设计内容个人账簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。1.21.2 课程设计要求课程设计要求1. 采用链表结构管理收支情况,并能够保存到文件中;2. 完成对每月的开支排序,以及完成系统查询功能;3. 独立完成系统的设计,编码和调试;4.系统利用 C 语言实现;5.按照课程设计规范书写课程设计报告。沈阳航空航天大学课程设计报告
3、2 2 2 课程设计原理课程设计原理2.12.1 课设题目粗略分析课设题目粗略分析根据课设题目要求,拟将整体程序分为五大模块。以下是五个模块的大体分析:1. 账簿信息输入:该模块中,以带头结点的链表为账单信息的存储结构,输入各项开支的数据。2. 账簿信息排序:该模块中,将针对每月的消费总额进行从小到大的顺序进行排序。3. 账簿信息查询:该模块中,将输入或已排序账单进行按所输入的日期进行查询并将查询结果打印至屏幕,供人阅读。4. 账单信息更改:进入该模块,进行信息的更改或添加。5. 账单信息保存:该模块将账单信息以文本文档保存到磁盘中。2.2 原理图介绍原理图介绍2.2.12.2.1 功能模块图
4、功能模块图个人账簿管理系统账 簿 信 息 查 询账 簿 信 息 排 序账 簿 信 息 更 改账 簿 信 息 输 入账 簿 信 息 保 存图图 2.1 功能模块图功能模块图沈阳航空航天大学课程设计报告 3 2.2.2 流程图分析流程图分析1. 账单建立时调用 jianli()函数,而在在 jianli()中调用 tianjia()函数;账单的头结点的申请工作已在主函数中完成,所以在整个建立账单的过程中核心内容是:将新的账单信息链接到已存在的账单后面;tianjia()函数流程图如图 2.2所示。开始并传入头指针p-next!=NULLp=headp=p-next是是输入账单日期否否日期符合要求开
5、辟新的结点空间是是输入账单的信息p-next=tail p=p-next返回否否图图 2.2 账单信息添加函数流程图账单信息添加函数流程图2. 在对账单信息进行排序的过程中,采用的方法是:首先将账单中支出最大和最小的两个结点寻找出来并按从小到大的顺序连接到一个新申请的头结点上;再将原函数的各结点插入到新的链表中,最终新的链表就成为了排序后的新账单。paixu()函数流程图如图 2.3 所示。沈阳航空航天大学课程设计报告 4 开始并传入头指针q=head-next指针q不为空用指针p标记支出最少的结点将p结点截取,链接到新申请的头结点用指针p标记原链表支出最多的结点将p结点截取,连接到新生成链表
6、尾q=head-next指针q不为空q=q-next将head-next 截取,与新链 表比较,插入 到新链表是是否否是是否否提示用户返回返回新的头指针输出账单信息图图 2.3 排序函数流程图排序函数流程图3. 进入账单信息查询部分,程序根据输入的日期进行逐一比较,若存在该日期的账单信息,程序输出相应的账单信息,若不存在该日期的账单信息,系统提示用户还未录入该日期的账单信息。账单查询函数流程图如图 2.4 所示。沈阳航空航天大学课程设计报告 5 开始并传入头指针p=head-nextp不为空查询日期符合要求提示用户还未录入账单返回输出账单信息p=p-next日期匹配是是否否是是否否是否否图图
7、2.4 查询函数流程图查询函数流程图4. 进入账单更改部分,程序将用户输入的需更改的账单日期与已存在的账单日期进行逐步比对,对日期完全相同的账单信息进行更改,若不存在该日期的账单信息,程序提示用户是否马上进行添加。流程图如图 2.5 所示。 开始并传入头指针要更改的日期符合要求结点p不空该结点与要更改结点匹配将p结点信息用新 输入的信息替换是否p指向p下一结点结束是调用tianjia() 进行添加否图图 2.5 账单信息更改流程图账单信息更改流程图沈阳航空航天大学课程设计报告 6 5. 进入账单保存部分,用户对建立的账单以文本文档的形式保存到磁盘中,账单信息保存函数流程图如图 2.6 所示。
8、开始并传入头指针指针p是否为空将指针p指向头 结点的下一结点提示用户账单未 建立,无法保存结束是输入保存文件名否指针p是否为空是使用fprintf语句 将信息写入文件p指向p的下一结点否图图 2.6 保存账单信息函数流程图保存账单信息函数流程图沈阳航空航天大学课程设计报告 7 3 数据结构分析数据结构分析3.13.1 存储结构存储结构主要存储结构:带头结点的单向链表存储结构。typedef struct MYBILL /链表结点结构long date; /日期信息long food; /食品消费long fangzu; /房租费用 long jiaoyu; /子女教育费long shuidia
9、n; /水电费 long yiliao; /医疗费 long chuxu; /储蓄long pay; /总支出long income; /总收入struct MYBILL*next; /指向下一结点的指针MYBILL,bill;3.23.2 算法描述算法描述1. 建立单向链表,用来存储账单信息:首先分别输入将要建立账单的年份及月份,年份的合理范围定为所有正整数,当年份输入为非合理数字时结束对账单的录入;月份的合理范围为 1 至 12,当输入不属于该范围的月份数据时,程序会重新进行年份和月份的录入;录入日期数据后,进行其余信息的录入。void *tianjia(MYBILL *head) /向原链表添加新的链表结点int i,j; /定义年份和月份变量MYBILL *p,*tail; /定义结构体类型指针p=head; /将指针 p 初始化为 headwhile(p-next!=NULL) /判断账单链表是否为仅含空头结点的链表沈阳航空航天大学课程设计报告 8 p=p-next; /将指针 p 向后移动一个单位printf(“nt 输入您要建立账单的年份,当输入非正数时结束输入!nt“);sc