个人消费管理系统C语言课程设计.doc
《个人消费管理系统C语言课程设计.doc》由会员分享,可在线阅读,更多相关《个人消费管理系统C语言课程设计.doc(37页珍藏版)》请在沃文网上搜索。
1、 目 录1 需求分析11.1问题描述 1.2 输入数据要求.11.2输出数据要求11.3开发环境和工具21.4成员分工22总体设计.32.1 总体设计思路.32.2模块结构图32.3模块说明43详细设计53.1 数据类型定义5 3.2 算法思想 63.3 具体实现 7 A 读入及保存文件模块 7 B 信息插入、删除模块 7 C 查找及显示信息模块 9 D 排序模块:按时间,类别,金额 11 E 统计模块 154测试结果及分析215总结23参考文献.25附录.261 需求分析1.1 问题描述当代大学生有着旺盛的消费需求,消费观念的超前和消费实力的滞后决定了他们特殊的消费心理和消费行为。大学生科学
2、消费观的建立和合理消费规划不仅关系到大学生健康消费心理的形成,还影响到大学生迈入社会后社会经济生活的适应能力,本系统将提供一个日常消费记录,统计,分析的平台,帮助大学生合理的管理自己的日常消费。1.2 输入数据要求消费表信息:时间,类别,品名,单价,数量,金额消费信息存放在文件中,以编号的先后顺序存放用户从键盘读入消费时间,类别,品名,单价,数量,金额,保存到文件中例如:sum:40.000000index:1 time:2009-8-4 type:1 name:hzw price:0.700000 num:5 sum:3.500000index:0 time:2010-8-9 type:1
3、name:hzw price:0.900000 num:41.3 输出数据要求打开:显示文件中的所有消费记录,提供分页显示保存:将消费表的更新结果存入文件更新:可插入、删除、修改各消费记录查找:按时间,类别、品名查找消费记录排序:按时间,类别,金额统计:求各类别消费品的总金额,求各月的消费总金额,求各年的消费总金额例如:1.4 开发环境和工具开发环境:Windows 2000开发工具:C Free5.01.5 成员分工超 人(郭振兴):系统测试、主调模块、总体设计蜘蛛侠(林莉莎):、查询模块、排序模块、更新模块 2总体设计2.1总体设计思路本设计主要包括数据录入模块,信息删除模块,查询显示模块
4、,数据排序模块, 数据统计模块.2.2模块结构图根据需求将系统划分为五个功能模块如图所示数据录入模块数据统计模块插入删除模块查询显示模块数据排序模块 个人消费管理系统2.3模块说明1.数据录入模块. 本模块的设计主要包括三个函数,struct Time(消费时间),enum TYPE(消费类型)struct ConsumeRecord(完整的消费记录)struct ConsumeRecord 函数主要实现程序的初始建库,把数据添加到文件中,其主要过程是打开文件,调用Time ,TYPE函数,将需要录入的数据从键盘输入,添加到文件中。2.信息删除模块. 本模块通过输入需要查找的条目的索引号,程序
5、循环遍历所有已存的消费条目,如果消费条目的索引号等于要删除的索引号,删除该索引号对应的消费条目,并将其后面的消费条目依次往前移动。3.查询显示模块. 本模块通过输入需要查找的条目的索引号,程序循环遍历所有已存的消费条目,直到查找完或者找到。找到后显示从record指针开始的number个条目,遍历需要查找的条目,依次显示。4.数据排序模块. 本模块交换两个条目的内容,将record数组用选择冒泡法分别以消费时间,类型,价格进行排序。5.数据统计模块. 本模块已存条目指针和已存个数如果已存条目小于等于零,退出统计, 将条目按时间排序,如果只有一条记录直接输出,如果有多条记录,则遍历所有记录并分别
6、打印如果当前记录与下一条记录年份月份相同,则将其归于一个月,并累加该月的总金额. 月份变了,打印统计月份的总金额,/将年份金额赋值为下一月份,开始记录下一月份. 3详细设计3.1数据类型定义 /时间结构体记录消费时间struct Timeint year;int month;int day;类型结构体记录消费类型enum TYPESTUDY,EAT,PLAY;/消费条目结构体,用以记录完整的消费记录struct ConsumeRecordint index;/消费索引Time time;/消费时间TYPE type;/消费类型char name256;/消费名称float price;/单价i
7、nt num;/数目float sum;/总价nt _tmain(int argc, _TCHAR* argvConsumeRecord* recordTmp;/临时条目指针int indexToDelete;/需要删除的条目的索引号int indexToFind;/需要查找的条目的索引号char sortType=0;/排序类型int nCurrent=0;/已存条目的个数int nCurrentDump;/暂存“已存条目的个数”,用以分页显示的时候,还原已存条目个数char next;/分页显示时输入变量,输入n显示下一页(十行)FILE *file;/文件指针,用以从文件读取记录,或写文
8、件ConsumeRecord* pCurrent;/现在所指向的条目的指针ConsumeRecord record100;/现存条目数组char input=o;/记录需要做的操作的变量3.2算法思想分别用时间结构体记录消费时间, 类型结构体记录消费类型, 消费条目结构体记录完整的消费记录.其中查询和删除模块通过扫描已建立的所有数据,索引出符合条件的条目,统计模块先通过以时间,类型,价格进行排序,再统计各类别消费品的总金额,各月的消费总金额,各年的消费总金额.3.3具体实现A.读入及保存文件模块将消费数据以文件的形式储存,定义一个文件指针file使其指向该文件,利用标准输入函数fopen读入文
9、件内数据。具体是用指针指向条目的第一行,判断如果已存文件数小于最大文件数,读取文件。读取一条后,指针指向下一个地方以读取下一条目,同时使读入条目数nCurrent加一。如此循环读完数据后,将文件关闭。以同样的方法打开文件,遍历所有的条目直到结束,将消费一个条目写入文件,消费条目指针指向下一个消费条目,用以将下一个消费条目写入文件,最后关闭文件。B信息插入、删除模块自定义函数DeleteRecord(ConsumeRecord* record,int& nCurrent,int index) 其中record是消费条目指针,nCurrent是已存消费条目的个数,index为索引号,利用循环遍历所
10、有的索引号,如果遇到的索引号与要删除的索引号相同,则实现调用删除函数DeleteRecord(ConsumeRecord* record,int& nCurrent,int index)功能,即:for (int i = 0;iindex=index)for (int j = i;jnumsum=pCurrent-price*pCurrent-num;pCurrent+; nCurrent+;pCurrent=&recordnCurrent;如下:C.查找及显示信息模块Record:指向消费条目记录数组,nCurrent:已存条目数,index:需要查找的条目的索引号利用ConsumeReco
11、rd* FindRecord(ConsumeRecord* record,int& nCurrent,int index)遍历所有已存的消费条目,直到查找完或者找到如果消费条目的索引号为需要查找的索引号才,找到了,返回;遍历完了没有找到,输出“not found!”即:for (int i = 0;iindex=index)return record;printf(not found!);return 0; 查找完后调用ShowRecord输出要显示的条目。ShowRecord函数功能如下:void ShowRecord(ConsumeRecord* record)printf(index:%
12、d %d-%d-%d type:%d name:%s price:%f num:%d sum:%fn,record-index,record-time.year,record-time.month,record-time.day,record-type,record-name,record-price,record-num,record-sum);然后调用显示ShowRecords查找到的从指针开始的总的条目,ShowRecords功能如下:void ShowRecords(ConsumeRecord* record,int number)for (int i=0;inumber;i+)Sho
13、wRecord(record+i);注:number:需要显示的条目数。Record:指向第一个要显示的指针。D排序模块:按时间,类别,金额具体来说是定义了一个函数,实现三种方式的排序,其中运用了switch语句,根据不同的排序类型划分了不同的case,然后选择出相应的功能来实现要求,比较实用而且简洁。函数内部是采用冒泡法排序,首先判断选择的类型然后进入相应的功能区。定义函数void SortRecord(ConsumeRecord* record,int nCurrent,char type)其中 record:排序数组头指针,nCurrent:数组的个数,type:排序类型void Sor
14、tRecord(ConsumeRecord* record,int nCurrent,char type)int i,j;switch(type)case t: /按时间排序for(i=0;inCurrent-1;i+)for(j=0;jrecordj+1.time.year)swap(&recordj,&recordj+1);else if /年份相同,比较月份(recordj.time.year=recordj+1.time.year&recordj.time.monthrecordj+1.time.month)swap(&recordj,&recordj+1);else if/年份月份相
15、同,比较日期 (recordj.time.year=recordj+1.time.year&recordj.time.month=recordj+1.time.month&recordj.time.dayrecordj+1.time.day)swap(&recordj,&recordj+1);break;/按类型排序case l:for(i=0;inCurrent-1;i+)for(j=0;jrecordj+1.type)swap(&recordj,&recordj+1);break;/按价格排序case p:for(i=0;inCurrent-1;i+)for(j=0;jrecordj+1.
16、price)swap(&recordj,&recordj+1);break;如下:E统计模块为了便于统计,现将数据进行排序,根据不同的统计方式进行不同的排序,如为了计算每年的消费总额,需要将数据按时间排序,然后进行统计,按类型排序就利于统计每个项目的消费情况。在程序中就要在统计之前根据需要调用相应的函数实现排序功能。具体如下所示:void Statistic(ConsumeRecord* record,int nCurrent)/如果已存条目小于等于零,退出if (nCurrentsum;/按年统计的总金额,将第一条记录的金额付给他double sumMonth = record-sum;/按
17、月统计的总金额,将第一条记录的金额付给他double sumType = record-sum;/按类型统计的总金额,将第一条记录的金额付给他/如果只有一条记录直接输出if (nCurrent = 1)/输出按年统计的总金额printf(year:%d sum:%fn,record0.time.year,sumYear);/输出按月统计的总金额printf(year:%d-month%d: sum:%fn,record0.time.year,record0.time.month,sumMonth);/输出按类型统计的总金额printf(type:%d sum:%fn,record0.type,
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个人消费 管理 系统 语言 课程设计