1、 6.1 调试中遇到的问题及对问题的解决方法 创建结构体对该程序至关重要,通过查阅参考书籍,创建了合适的结构体。由于初期未考虑到排序功能,后期做排序的时候,对整个程序做了一些修改,主要是结构体方面。本程序的排序系统的采用的是“快速排序”,代码主要来自数据结构(c语言版),由于书上代码为伪代码,所以调试时遇到一些问题,由于习惯使用c+中的引用传递,导致在c文件中编译错误,经过查找资料才发现问题所在,于是将c文件改为cpp文件,解决了做排序功能时遇到的一些问题 6.2 算法的时间复杂度和空间复杂度空间复杂度: O(f(n)时间复杂度:O(n)7.输出典型数据,获得测试结果;8.源程序(带注释)#i
2、nclude stdlib.hmemory.hwindows.h/文件保存路径#define FilePath1 Myinfor.dat#define FilePath2 Myinfor.txt/查询用声明#define Status int#define OK 1#define Error 0#define NotFound 2typedef struct void menu(void); /菜单void input(Infor *newI); /接收键盘输入void writeinfor(Infor *newI);/向文件写入容void changeFormat(void );/将dat格
3、式文件转换为txt文件Status search(Infor *a);/查询函数返回查询的结果及查询的状态void paixu(Infor *a);/对查询据结果排序void modify(Infor *a,int mon);/修改数据void delRecord(int mon);/删除数据int main() while(1) menu(); void menu(void) int item; int mon; Infor *a; a=(Infor *)malloc(sizeof(Infor); do printf(n个人帐簿管理系统设计nn);tt1.录 入 数 据。ntt2.查 看 数
4、 据。tt3.修 改 数 据。tt4.查 询 数 据。tt5.排 序 数 据。tt6.删 除 数 据。tt0.退 出 系 统。nn请输入要进行的操作: ); scanf(%d,&item); while(item6 | itemmonth; if (item!=OK) printf(n没有符合条件的记录! elsen记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n- n%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); modif
5、y(a,mon); /查询数据 case 4: else /排序数据 case 5:n没有找到符合排序条件的记录! paixu(a); /删除数据 case 6: delRecord(mon); free(a);/释放存空间void input(Infor *newI)/接收从键盘输入的数据n请依次输入数据说明:中间以空格符隔开:n(本月月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)n%d%d%d%d%d%d%d%dnewI-month,&spxf,&fzfy,&znjy,&sdfy,&ylfy,&cxfy,& fflush(stdin);void writein
6、for(Infor *newI)/向文件写入容 FILE *fp; fp=fopen(FilePath1,ab+ if(fp=NULL)无法创建文件:%s,FilePath1); exit(0); fwrite(newI,sizeof(Infor),1,fp);/这里可以做特别处理可防止存在同一月份有2条以上的记录问题。这里就不写了。 fclose(fp);数据录入成功!void changeFormat(void) /暂时只能操作一行文件有待改进 FILE *fp1,*fp2; fp1=fopen(FilePath1,rb+ if(fp1=NULL)无法找到文件:%sn return ; /
7、返回主函数 fp2=fopen(FilePath2,wt+ if(fp2=NULL),FilePath2); fputs( n个人帐簿管理系统nn,fp2);记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n rewind(fp1); fread(a,sizeof(Infor),1,fp1); while(!feof(fp1)/从原文件.dat中读数据写入显示文件.txt中 fprintf(fp2,关闭本程序继续原程序! fclose(fp1); fclose(fp2); system(FilePath2); /调用打开转换的文本文件 remove(FilePa
8、th2);/删除文本文件文件Status search(Infor *a) FILE *fp1; int isfound=0;请正确输入要查询的月份:mon); /清除缓冲区 return Error;feof(fp1)/查询操作 if(a-month=mon) isfound=1; isfound=0; if(isfound) return OK; return NotFound;void paixu(Infor *a) int i=0,j=0,flag=0,t; pType px8=0,0; char str810=记录月份,食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入; fo
9、r(;i px1.data=a-spxf; px2.data=a-fzfy; px3.data=a-znjy; px4.data=a-sdfy; px5.data=a-ylfy; px6.data=a-cxfy; px7.data=a-srfy; for(i=1;i+)/冒泡排序 flag=0; for(j=0;jpxj+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; /输出结果 if(flag=0) break; for(i=0; %s,
10、strpxi.no);n- n%8d ,pxi.data);void modify(Infor *a,int mon)/修改数据 Infor *b; b=(Infor *)malloc(sizeof(Infor);rt fp2=fopen(temp.datrewind(fp1); fread(b,sizeof(Infor),1,fp1); while (!feof(fp1)/重写数据 if(b- fwrite(a,sizeof(Infor),1,fp2); fwrite(b,sizeof(Infor),1,fp2);remove(FilePath1); /删除源文件 rename(/重命名中间
11、文件修改数据成功! /显示数据void delRecord(int mon) /删除数据feof(fp1) /重写数据month!=mon) 删除数据成功!9.总结 经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法,例如,马踏棋盘问题就可以采用广度优先搜索或深度优先搜索来解决。因此此时就应该综合考虑这样的
12、数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机存储,数据的存储结构是数据结构的实现形式,是其在计算机的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实
13、现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。10.致 感课设期间永老师和睿老师给予我们的悉心帮助。11.参考文献1 严蔚敏,吴伟民.数据结构(C语言版)M.:清华大学.20032 严蔚敏,吴伟民.数据结构题集(C语言版)m. :3 William Ford,William Topp.DATA STRUCTURE WITH C+ .:清华大学(影印版). 20054 谭浩强.c语言程序设计M.:清华大学. 2005.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1