已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程名称:数据结构 湖南涉外经济学院专科学生课程设计(论文) 题 目 个人账簿管理系统设计 姓 名 江 志 华 学 号 430223112400 学 部 计算机科学与技术学部 专业、年级 计软0901 指 导 教 师 刘树锟 2010 年 12 月 28日目 录第一章 需求分析21.1开发背景21.2功能要求3第二章 详细设计32.1 属性解释32.2 功能定义及流程图42.2.1功能定义42.2.2流程图42.3 具体功能的实现52.3.1界面菜单的实现52.3.2 输入和写入数据的实现82.3.3 转换输出的实现82.3.4 查询的实现92.3.5 排序的实现102.3.6 修改和删除的实现112.4 界面的设计13第三章 系统的实现143.1 系统主界面143.2 相应窗口15第四种 解决的关键问题164.1 各函数的连接164.2 对数据的保存输出16第五章 结论175.1 课程小结17参考文献18第一章 需求分析1.1开发背景随着经济和科学技术的发展,计算机技术也在用更快的速度在发展。其中软件技术更是发展到这个社会的每个行业。不过软件行业也是在接受不断的考验,随着越来越多的人加入到这个行业竞争也就随着开始了,并且在不久的将来可能会恶化。至于这个行业到底会发展到一个什么样的高度还不知道,但以目前的形势来看还是较为乐观的因为这个市场还在不断的吸收这方面的人才。但目前市场对这个行业里面的人也是要求越来越高了,虽然这个市场还没有接近饱和,但我们只有让自己变的更强才能从这个竞争较为激烈的市场获得自己想要的。我从高中来到这里学习,我们知道了很多但也遇到过很多的困难,但我觉得我自己选择了这个就不应该后悔,因为没有困难的存在我们是不会有更多提升自己的机会,所以我坚持了下来。我这次选的题目是我喜欢的一个,题目是“个人账簿管理系统设计”,并且自从老师把那个任务书给我们就一直没有改变过。在我看来我们要较好的完成一件事是必须有耐心的,并且我觉得耐心是建立在对某个东西有浓厚的兴趣或是有着独特的见解。我选这个题目是我对这个题目有我自己的体会,因为我自从读高中开始我所有的费用都是我妈妈按一个学期或是一年给我的,至于这些钱我怎么去用我妈妈是不管并且产生什么样的后果也是由我自己承担。所有我对这个题目算还是有我自己的体会吧。不过这个题目对我来说还是有点难度的,对这个功能的实现我是不能说我一定能全部完成,但我会进尽力的,并且我觉得这个过程对我来说是更重要的,因为我努力过。1.2功能要求个人账簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。1、 首先是能够运行2、 能够写入数据3、 能够查询数据4、 能够修改数据5、 能够排序数据6、 能够删除数据第二章 详细设计2.1 属性解释在这个程序中我用了7个变量分别来代表程序中的食物、房租、教育、水电、医疗、储蓄、收入,例如:save代表的是储蓄。由于这个程序对功能要求是较为全面的所以我在这里用MENU(void)函数来表示开始的菜单,即:程序的主界面。用SHURU(JZH *ZHI)函数来接收来自键盘输入的数据,WRITERJZH(JZH *ZHI)函数用来向文件内写入数据内容,ZHUANHUAN(void )该函数是用来转换文件格式的。还有几个是主要的功能函数,如:Status CHAZHAO(JZH *a)这个函数是对你输入的数据进行查询的,PAIXU(JZH *a)这个函数是进行排序的,即:当我们输入数据时想看这个月整个消费在哪方面用的是最多的,XIUGAI(JZH *a,int mon)这个是用于修改程序在输入数据时输入错误或是我们对于某个月的数据要进行修改用的,最后一个是我们要对一些数据进行删除用的,SHANCHU(int mon) ,这些函数组成了该程序的基本功能。 至于这个程序其他的如:运行界面的设计、颜色、等相关的,那些是容易的,只有在界面的颜色(背景、字体等)是在程运行的对话框进行更改的。2.2功能定义及流程图2.2.1功能定义在上面我对程序做过基本的介绍,这里利用结构定义相关变量,并且这些是这个程序最主要的组成部分。 typedef struct int month;/月份 int food;/食品消费 int rent;/房租 int teach;/子女教育 int water;/水电费 int medt;/医疗费 int save;/储蓄 int earn;/收入 JZH;typedef struct / 查询用自定义数据类型 int TE; int SHUJU; pType;void MENU(void); /界面主菜单void SHURU(JZH *ZHI); / 输入数据函数void WRITEJZH(JZH * ZHI);/ 写入内容函数void ZHUANHUAN(void );/ 文件格式转换 Status CHAZHAO(JZH *a);/查询函数 void PAIXU(JZH *a);/ 排序函数void XIUGAI(JZH *a,int mon);/数据修改函数void DELETE(int mon);/数据删除函数2.2.2流程图1=写入数据、2=查看数据、3=修改数据、4=查询数据、5=排序数据、6=删除数据、0=退出系统开始输入数据I=2不符条件I=0符合I=1I=2I=3I=4I=5I=6I=0 直接退出是否继续是否结束 图2-1流程图这个流程图虽不是很好,但我觉得应该能表达我的意思。2.3具体功能的实现2.3.1界面菜单的实现void main() while(1) MENU(); void MENU(void) int item; int mon; JZH *a; a=(JZH *)malloc(sizeof(JZH);/ 首先看大概会占到多少,然后动态的分配存储空间 doprintf(ntt-nn); printf(ntt个人帐簿管理系统设计nn); printf(tt 1.写 入 数 据。n); printf(tt 2.查 看 数 据。n); printf(tt 3.修 改 数 据。n); printf(tt 4.查 询 数 据。n); printf(tt 5.排 序 数 据。n); printf(tt 6.删 除 数 据。n); printf(tt 0.退 出 系 统。n);printf(ttnn); printf(请输入要进行的操作: ); scanf(%d,&item); while(item6 | itemmonth; if (item!=OK) printf(n没有找到要符合修改条件的记录!n); else printf(n记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入 n); printf(- n); printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-food,a- rent,a-teach,a-water,a-medt,a-save,a-earn); SHURU(a); XIUGAI(a,mon); break; /查询数据 case 4: item=CHAZHAO(a); if (item!=OK) printf(n没有找到符合查询条件的记录!n); else printf(n 记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入 n); printf(- n); printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-food,a- rent,a-teach,a-water,a-medt,a-save,a-earn); break; /排序数据 case 5: item=CHAZHAO(a); if (item!=OK) printf(n没有找到符合排序条件的记录!n); else PAIXU(a); break; /删除数据 case 6: item=CHAZHAO(a); mon=a-month; if (item!=OK) printf(n没有找到符合删除条件的记录!n); else printf(n记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入 n); printf(- n); printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-food,a- rent,a-teach,a-water,a-medt,a-save,a-earn); DELETE(mon); break; free(a);/释放定义A在内存占的空间 这些的代码是实现主界面菜单和其他主要功能在数据输入错误时做出的相应回应。如:你要删除某个月份时而这个月份是你没有输入的这时上面的代码是会提示说:“没有符合条件的记录。“这种原理是当选择主界面中的某个具体的功能时并且有错误是,在代码的后部分有一个switch()函数语句跟上面界面中步骤是一样的,所以他会对应输出什么样的错误。对上面功能的选择只要用电脑上面的数字键即可选到我们需要选择的功能,然后按提示进行相关的操作就可以了。2.3.2输入和写入数据的实现 void SHURU(JZH *ZHI)/接收从键盘输入的数据 printf(n请依次写入数据注意:请在中间以空格符隔开:n(记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入)n); scanf(%d%d%d%d%d%d%d%d,&ZHI-month,&ZHI-food,&ZHI- rent,&ZHI-teach,&ZHI-water,&ZHI-medt,&ZHI-save,&ZHI-earn); fflush(stdin);void WRITEJZH(JZH *ZHI)/向文件内写入内容 FILE *fp; fp=fopen(Shanhuhai,ab+); if(fp=NULL) printf(无法创建文件:%s,Shanhuhai); exit(0); fwrite(ZHI,sizeof(JZH),1,fp); printf(数据写入成功 n);在这的两个函数是实现数据输入和写入的两个关键函数,没有这两个函数这个程序是不能够运行的,还有这两个函数功能的完善与否关系到整个函数后面的处理。我写的这个写入函数在输入时只能一次输入一个月的,而不能实现几个月的连续输入,但还是可以实现题目的要求,只是要繁琐点多输入几次,有机会我会再改进的。2.3.3 转换输出的实现 void ZHUANHUAN(void) FILE *shan,*hu; JZH *a; a=(JZH *)malloc(sizeof(JZH); shan=fopen(Shanhuhai,rb+); if( shan=NULL) printf(无法找到文件:%sn,Shanhuhai); return ; /出错时返回主函数 hu=fopen(Shanhuai,wt+); if(hu=NULL) printf(无法创建文件:%sn,Shanhuai); return ; /出错时返回主函数 fputs( n个人帐簿管理系统nn,hu); fputs(n记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入 n,hu); fputs(- n,hu); printf(n记录月份 食品消费 房租 子女教育 水电费 医疗费 储蓄 月收入 n); printf(- n); rewind(shan); fread(a,sizeof(JZH),1,shan); while(!feof(shan)/从原文件.dat中读数据写入显示文件.txt printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-food,a- rent,a-teach,a-water,a-medt,a-save,a-earn); fprintf(hu,%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-food,a- rent,a-teach,a-water,a-medt,a-save,a-earn); fread(a,sizeof(JZH),1,shan); fputs(- n,hu); fputs(关闭该界面继续主程序! n,hu); fclose(shan); fclose(hu); system(Shanhuai); /显示转换的文本文件 remove(Shanhuai);/删除显示的文本文件 在实现数据的输入后经过处理,要在程序中显示是可以的,但那样是不好看并且不能较好的表现出所处理的结果来,而在把其格式转换下在外面显示我们是能较好的保存结果的,是一个不错的选择,并且不会影响程序的运行。2.3.4查询的实现Status CHAZHAO(JZH *a)/查询函数 FILE *shan; int mon; int isfound=0; printf(请输入月份:); scanf(%d,&mon); fflush(stdin); shan=fopen(Shanhuhai,rb+); if(shan=NULL) printf(无法找到文件:%sn,Shanhuhai); return Error; /出错时返回主函数 rewind(shan); fread(a,sizeof(JZH),1,shan); while(!feof(shan)/查询操作 if(a-month=mon) isfound=1; break; else isfound=0; fread(a,sizeof(JZH),1,shan); fclose(shan); if(isfound) return OK; else return Anything;这个程序对数据的输入是进行存储的,即在你管在什么情况下是会存储前面所输入的数据而不会消失的。但因为程序存储数据是在后台,所以当不记得或是要看前面所输入的数据时,这个函数是可以实现你想要的。2.3.5排序的实现void PAIXU(JZH *a)/ 排序函数 int i=0,j=0,flag=0,t; pType px8=0,0; char str810=记录月份 , 食品消费, 房租, 子女教育, 水电费, 医疗费, 储蓄, 月收入; for(;imonth; px1.SHUJU=a-food; px2.SHUJU=a- rent; px3.SHUJU=a-teach; px4.SHUJU=a-water; px5.SHUJU=a-medt; px6.SHUJU=a-save; px7.SHUJU=a-earn; for(i=1;i8;i+)/利用冒泡法排序 flag=0; for(j=0;jpxj+1.SHUJU) t=pxj.SHUJU; pxj.SHUJU=pxj+1.SHUJU; pxj+1.SHUJU=t; t=pxj.TE; pxj.TE=pxj+1.TE; pxj+1.TE=t; flag=1; /输出结果 if(flag=0) break; printf(n); for(i=0;i8;i+) printf( %s,strpxi.TE); printf(n- n); for(i=0;imonth=mon) fwrite(a,sizeof(JZH),1,hu);/修改数据 else fwrite(b,sizeof(JZH),1,hu); fread(b,sizeof(JZH),1,shan); fclose(shan); fclose(hu);remove(Shanhuhai); /删除源文件 rename(temp.dat,Shanhuhai);/重命名中间文件 printf(修改数据成功!n ); ZHUANHUAN(); /转换后显示数据void DELETE(int mon) /删除数据 FILE *shan,*hu; JZH *b; b=(JZH *)malloc(sizeof(JZH); shan=fopen(Shanhuhai,rt); hu=fopen(temp.dat,wt+);rewind(shan); fread(b,sizeof(JZH),1,shan); while (!feof(shan) /重新写入数据 if(b-month!=mon) fwrite(b,sizeof(JZH),1,hu); fread(b,sizeof(JZH),1,shan); fclose(shan); fclose(hu);remove(Shanhuhai); /删除源数据文件 rename(temp.dat,Shanhuhai);/重命名中间文件 printf(删除数据成功!n ); ZHUANHUAN(); /转换显示数据这个功能是在我们觉得数据有些问题所编写的,因为我们不能保证我们每一次输入的数据都是正确的,所以当我们输入的数据是有误的时候我们就可以利用这两个功能函数来进行更改或删除,其运行的原理是在当我们要删除数据时,我们选择我们要删除的月份程序就会运行void DELETE(int mon)函数来进行相关的处理。2.4界面的设计数据结构的这个设计要求不高,所以我在界面的设计是没用多少时间的,做了一个我觉得我们见的比较多并且那种格式要比较容易想到。在界面的设计我觉得只要简洁、易懂,就可以了。我在充分满足课程设计的要求时,还做了一点自己喜欢的那就是在颜色上面,通过对弹出界面属性的设置,具体的是对那个RGL颜色的调整。我觉得界面的设计是很重要的,但那个也不是很简单就能设计出那种很吸引人的界面出来,如果时间比较紧我们一般都是那种较为常见的,这次我也不例外。第三章 系统的实现3.1 系统主界面图3-1 主界面图3-2 输入数据3.2 相应窗口图3-3 数据查看 图3-4 删除数据程序在输入数据的地方还是有点问题,但那些小问题是不影响程序的运行的,所以这个程序还是成功的。第四种 解决的关键问题4.1 各函数的连接 我对于一个程序有自己相应的看法,这个程序我在做时候,我就发现应该把这个程序给分解掉。变成对一个一个功能函数的编写,当把所以的功能函数写完时我再把功能写到一个程序中去,但在我为完成功能函数的编写而高兴时。问题开始接踵而来搞的我很是很烦恼,经过我的查找,这个程序的问题是出在有很多不同的变量在这个程序中。后来想这个原因是可以理解的,因为我在编写的时候对于变量的命名,我是在我当时的兴趣下或是在当时想到了什么我就会用什么,所以才会变得这样。 在以后的编写中我感觉应还是注意点,这个程序较小所以还好解决,但在以后写那种较大程序时还是应该注意,那个时候不是像现在这样有充足的时间让你去改正。4.2 对数据的保存输出每个程序对于这个问题都是要面对的,但每个程序都有其不同的地方。就如同这个程序我对这个程序存储数据是觉得有点难的,因为这个程序在对存储数据是不同的,平常我们接触最多的是数据所占有的空间是固定的,虽然有关于空间动态分配的但都跟这个是不同的。这个在储存数据的时候是根据数据的增加要自己增加的,并且要能够及时的释放一些不必要占用的空间。这个问题确实对我来说是有点难度的,后来我在我朋友的帮助下完成了这个难点。有些问题自己在努力后还是没有解决是一点都不要觉得自己不行,你要知道你只是这一次不知道以后是不会出现这种情况的。我在写这个程序的时候我就开始想一个问题,就是程序处理完成后的结果是在程序中显示还是用另一种方式来显示。如果是实现在程序里面的话还是较为简单点,但用其他的方法我好像是不知道的。后来我问我的朋友他们以前在做这方面设计的时候是怎么处理的,他们说这个其实是看你自己是怎么想的,因为一般老师是不会怎么要求的。所以你自己可以考虑下,但他们也说了用第一种是我们用的最多的也是相对来说是较为容易的。但用其他的方法的话是更好点的,如果你的程序处理的结果是不较重要的,还是选一个能较好的让你保存结果的显示方式。这个程序就用了。弹出的方式、。第五章 结论5.1 课程小结如果我们要写出好的程序,需要我们有扎实的基础,这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030建筑机械行业技术发展趋势投资评估市场需求战略规划咨询报告
- 2025年张家港市中医医院自主招聘定额待遇卫技人员备考题库及一套答案详解
- 2026年中国外运长航集团有限公司招聘备考题库及参考答案详解一套
- 2026年天津市北方人力资源管理顾问有限公司派遣制员工招聘需求备考题库及一套答案详解
- 2026年关于龙江县第一人民医院公开招聘编外医生的备考题库及完整答案详解1套
- 2026年中建新疆建工集团第三建设工程有限公司招聘备考题库及完整答案详解一套
- 2026年东莞十二中招聘教师备考题库及1套完整答案详解
- 线下主播培训课件制作
- 2026年中国建筑材料工业建设西安工程有限公司招聘50人备考题库及参考答案详解一套
- 2026年中钞实业有限公司招聘备考题库完整答案详解
- 2026年大连职业技术学院单招职业技能笔试参考题库带答案解析
- 河南省开封市2026届高三年级第一次质量检测历史试题卷+答案
- 员工通勤安全培训课件
- (自2026年1月1日起施行)《增值税法实施条例》的重要变化解读
- 2025年游戏陪玩分成协议
- 全国秸秆综合利用重点县秸秆还田监测工作方案
- 2026年内蒙古化工职业学院单招职业适应性考试参考题库及答案解析
- 国家事业单位招聘2024国家水利部小浪底水利枢纽管理中心招聘事业单位人员拟聘用人员笔试历年参考题库典型考点附带答案详解(3卷合一)
- 核生化应急救援中心火灾预案
- 25数五上数学人教版期末押题卷5套
- 2026年辽宁金融职业学院单招职业适应性测试题库及参考答案详解
评论
0/150
提交评论