数据结构课程设计--个人账簿管理系统_第1页
数据结构课程设计--个人账簿管理系统_第2页
数据结构课程设计--个人账簿管理系统_第3页
数据结构课程设计--个人账簿管理系统_第4页
数据结构课程设计--个人账簿管理系统_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、16数据结构课程设计报告设计题目: 个人帐簿管理系统专业班级 12计科三 学 生 陈畅灿 王飞 芦泽奇 董帅 学 号 20122308902 20122308905 20122308912 20122308917 组 长 王飞 指导教师 孙菁 起止时间 2014.11-2014,12 目 录1、任务描述。32、问题分析。3 2.1 设计基础。3 2.2 分析设计课题的要求。33、 课程设计目的。34、功能设计。3 4.1 算法思想描述。3 4.2程序流程图。4 4.3程序模块数据结构。4 4.3.1菜单函数。5 4.3.2录入数据。6 4.3.3查询数据。7 4.3.4修改并查询数据。9 4.

2、3.5删除并查询数据。115、程序调试及简要分析。126、心得体会及领悟。17参考文献。181、任务描述 个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以根据输入的月份查询每月的收支情况。2、问题分析: 2.1 设计基础: 掌握对文件的插入、删除、修改、排序等操作,建立一个文件,包括某人几月内的收支情况,能对文件中的信息进行扩充(追加),修改和删除,完成系统查询功能. 2.2分析设计课题的要求 个人帐务数据由每月的收入及各项开支构成,包括食品消费,房租,子女教育费用,水电 费,医疗费,储

3、蓄等; 可以输入和修改某月的收支情况; 可以根据输入的月份查询每月的收支情况。3、课程设计目的 这个课题具体包含对文件的插入、删除、修改、排序等操作,以及对数据元素的定义、调用等操作,在不断地尝试过程中,能够熟练地进行函数的编写和调用。这一系列的操作,让我们熟悉对文件的操作,以及对学过的知识的掌握与运用。4、功能设计 4.1算法思想描述:第一步列出菜单 函数功能划分好,将对文件可进行的操作列成菜单,便于用户进行选择,让界面更友好。第二步输入数据 向文件内写入内容,让各元素都有初值。第三步根据要实现的功能,调用相应的函数 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;相应的功能可

4、调用相应的函数来实现。第四步建好主函数 建立一个好的主函数,将各功能都实现好。4.2 程序流程图是是否继续否I=0开始输入数据I=2I<=4|I>=0直接退出不符条件符合I=1I=2I=3I=4 结束 图1 流程图4.3程序数据结构模块结构: 由功能块可将程序划分为几个模块(即实现程序功能所需的函数): 菜单函数 录入数据函数(录入数据主要通过链式2维数组直接录入数据) 修改数据函数(修改数据主要通过链式2维数组直接录入数据) 查询数据函数 删除数据函数 4.3.1 菜单函数 菜单函数通过menu()通过一个do-while语句,过滤掉错误的数字输入,即,当输入的数字大于4或者小于

5、0的时候显示输入错误;再由一个swich语句,使菜单内选项可被输入的数字操控,即,可由输入的数字的不同而进行不同的操作。 menu函数 : void menu(void) int item; int mon; Infor *a; a=(Infor *)malloc(sizeof(Infor); do printf("n个人帐簿管理系统设计nn"); printf("1.录 入 数 据。n"); printf("2.修 改 数 据。n"); printf("3.查 询 数 据。n"); printf("4.

6、删 除 数 据。n"); printf("0.退 出 系 统。n"); printf("请输入要进行的操作: " ); scanf("%d",&item); while(item>4 | item<0); swich() 菜单界面显示如图2所示: 图2 菜单界面 4.3.2 录入数据 录入数据模块由两个函数input和writeinfor实现,input函数实现通过键盘输入需要记录的月份的具体花费和收入等信息的功能,writeinfor函数将从键盘上输入的信息存储在文件中,以便数据的查询、修改、删除等操作

7、的进行。 input函数:录入数据void input(Infor *newI) printf("食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用n"); scanf("%d%d%d%d%d%d%d%d",&newI->month,&newI->spxf,&newI->fzfy,&newI->znjy,&newI->sdfy,&newI->ylfy,&newI->cxfy,&newI->srfy); fflush(stdin

8、); writeinfor函数中包含文件的打开、关闭以及文件的创建和文件的读写。通过一个if语句判断是否满足创建文件的条件,若无法创建文件,则跳出writeinfor函数,若创建成功,则将上一步input函数中输入的信息储存在创建好的文件中,并在显示屏上显示“数据录入成功”;fwrite(newI,sizeof(Infor),1,fp)函数阻止同一个月份的信息输入两次,若录入两次,则查询时打开的文件信息为第一次录入的信息,即,只有进行修改操作时才能更改录入的月份中的信息,用户不能妄想以重新输入的方式改变已经录入的数据信息。 writeinfor函数 void writeinfor(Infor

9、*newI) FILE *fp; fp=fopen(FilePath1,"ab+"); if(fp=NULL) printf("无法创建物件n",FilePath1); exit(0); fwrite(newI,sizeof(Infor),1,fp);fclose(fp); printf("录入数据成功n");所用的数据结构:fwrite()函数,new1相当于一个指针而存储的方式就如一个二维数组链式的存放数据。 数据录入成功界面如图3所示: 图3 数据录入成功 4.3.3 查询数据查询数据模块中包含一个search函数,通过sear

10、ch函数查询已经录入成功的月份包含的数据信息,若输入的月份未经录入,则输出提示语句-“无法找到文件”,反之,则输出已经录入好的数据信息。SStatus search(Infor *a) FILE *fp1; int mon; int isfound=0; printf("请输入正确查询的月份n"); scanf("%d",&mon); fflush(stdin); fp1=fopen(FilePath1,"rb+"); if(fp1=NULL) printf("无法找到文件n",FilePath1); re

11、turn Error; rewind(fp1); fread(a,sizeof(Infor),1,fp1); while(!feof(fp1) if(a->month=mon) isfound=1; break; else isfound=0; fread(a,sizeof(Infor),1,fp1); fclose(fp1); if(isfound) return OK; else return NotFound;查询数据界面如图4所示: 图4 查询数据所用的数据结构:fread()函数,a相当于一个指针而存储的方式就如一个二维数组链式的存放或读取数据。作用和fwrite()函数一样

12、4.3.4 修改并查询数据修改并查询数据模块中其主要作用的modify函数,它的作用是先打开文件,将文件内的与输入月份相对应的数据信息先显示出来,然后再将其修改并重新存入文件中。修改之后再执行查询操作,显示在显示屏上的信息将变成修改后的信息。void modify(Infor *a,int mon) FILE *fp1,*fp2; Infor *b; b=(Infor *)malloc(sizeof(Infor); fp1=fopen(FilePath1,"rt"); fp2=fopen("temp.dat","wt+");rewin

13、d(fp1); fread(b,sizeof(Infor),1,fp1); while (!feof(fp1) if(b->month=mon) fwrite(a,sizeof(Infor),1,fp2); else fwrite(b,sizeof(Infor),1,fp2); fread(b,sizeof(Infor),1,fp1); fclose(fp1); fclose(fp2);remove(FilePath1); rename("temp.dat",FilePath1); printf("修改成功n" ); changeFormat();

14、 修改数据界面如图5所示: 图5 修改后数据 4.3.4 删除并查询数据 删除数据模块通过 delRecord函数将录入至文件中的信息删除,删除后若再查询已删除月份的数据信息,显示屏上将显示“没有符合条件的记录!”。 void delRecord(int mon) FILE *fp1,*fp2; Infor *b; b=(Infor *)malloc(sizeof(Infor); fp1=fopen(FilePath1,"rt"); fp2=fopen("temp.dat","wt+");rewind(fp1); fread(b,si

15、zeof(Infor),1,fp1); while (!feof(fp1) if(b->month!=mon) fwrite(b,sizeof(Infor),1,fp2); fread(b,sizeof(Infor),1,fp1); fclose(fp1); fclose(fp2);remove(FilePath1); rename("temp.dat",FilePath1); printf("删除成功" ); changeFormat(); 删除数据后查询界面如图8所示: 图8 删除后查询数据5、 排序冒泡通过二维数组来存入数据并排序,运用冒泡排

16、序算法进行操作void paixu(Infor *a) int i=0,j=0,flag=0,t; pType px8=0,0; char str812="记录月份","食品消费","房租费用?","子女费用","水电费用","医疗费用","储蓄费用","本月收入" for(;i<8;i+) pxi.no=i; px0.data=a->month; px1.data=a->spxf; px2.data=a->fz

17、fy; px3.data=a->znjy; px4.data=a->sdfy; px5.data=a->ylfy; px6.data=a->cxfy; px7.data=a->srfy; for(i=1;i<8;i+)/冒泡排序 flag=0; for(j=0;j<8-i;j+) if(pxj.data>pxj+1.data) t=pxj.data; pxj.data=pxj+1.data; pxj+1.data=t; t=pxj.no; pxj.no=pxj+1.no; pxj+1.no=t; flag=1; 所用的数据结构:定义一个链式的二维

18、数字组来存储数据,在通过for()语句来进行排序。6、 程序调试及简要分析 程序调试主要针对input函数 程序原始input函数: void input(Infor *newI) printf("食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用n"); scanf("%d%d%d%d%d%d%d%d",&newI->month,&newI->spxf,&newI->fzfy,&newI->znjy,&newI->sdfy,&newI->ylfy,&a

19、mp;newI->cxfy,&newI->srfy); fflush(stdin); 调试1.经过长时间的程序分析,我和同组组员发现程序内无判断月份输入是否合法的语句,所以我们进行了第一次调试,在input函数中添加了一个while语句以判断输入月份的合法性。 经第一次调试后的input函数:void input(Infor *newI) printf("n请依次输入数据:n( 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)n"); scanf("%d%d%d%d%d%d%d%d",&newI->

20、month,&newI->spxf,&newI->fzfy,&newI->znjy,&newI->sdfy,&newI->ylfy,&newI->cxfy,&newI->srfy); fflush(stdin); 运行结果如图10所示: 图10 第一次调试后的结果 调试2:由图我们可知,这次调试后的结果虽然避免的输入不合法的月份信息,但是,却带来了新的问题,while语句进入了死循环,用户将无法进行其他的操作。通过对程序的进一步研究,我们发现,while语句运行的条件是当满足while后面括号内的信息时就进入循环,而我们输入月份的语句在while语句之外,即,整个函数只可能执行一次input函数,即此次调试后,我们只能输入一次月份值,而当这个月份值满足while语句的条件时,我们将无限循环while语句内的操作,即,进入了死循环。所以,我们进行了第二次调试,将while语句替换成if语句。 经第二次调试后的input函数: void

温馨提示

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

评论

0/150

提交评论