个人账簿管理系统_课程设计.docx_第1页
个人账簿管理系统_课程设计.docx_第2页
个人账簿管理系统_课程设计.docx_第3页
个人账簿管理系统_课程设计.docx_第4页
个人账簿管理系统_课程设计.docx_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

兰州理工大学课程设计书课程名称:算法与数据结构设计题目: 个人帐簿管理系统 系 别: 计算机与通信 专 业: 软件工程 学生姓名: 朱晨光 学 号: 1416270236起止日期: 2015年 12月26日2016年 1月10日 指导教师: 张永,李睿 1.摘要: 实现个人帐簿管理,此系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况等。使用链表和顺序表分别存储个人帐簿的相关信息(包括:食品消费,房租,子女教育费用,水电费,医疗费,储蓄等)关键字: C语言,windows7,数据结构2.序言随着社会经济的发展,大学生已经成为这个社会上一个很重要的团体,而他们的消费情况也越来越多的被更多的人关注,大学生自己也应当管理好自己的消费内容,让自己的消费更加合理化,提高自己生活的质量。在这种情况下,就需要一个软件对大学生每月的消费情况作一个较为详细的统计,该系统可以实现由计算机代替人工执行复杂而且较为繁琐的操作,从而使大学生们能够更为便捷地管理自己的消费,也为其他的一些调查研究提供了方便。3. 相关的数据类型 typedef struct int month;/月份 int spxf;/食品消费 int fzfy;/房租费用 int znjy;/子女教育费用 int sdfy;/水电费用 int ylfy;/医疗费用 int cxfy;/储蓄费用 int srfy;/收入费用 Infor;typedef struct / 查询用自定义数据类型 int no; int data; pType;4. 各问题处理的流程图4.1 录入模块 4.2 修改模块4.3 查询模块4.4 排序模块4.5 删除模块5. 描述实现函数的调用关系图 void menu(void); /菜单void input(Infor *newI); /接收键盘输入void writeinfor(Infor *newI);/向文件内写入内容void changeFormat(void );/将dat格式文件转换为txt文件Status search(Infor *a);/查询函数返回查询的结果及查询的状态void paixu(Infor *a);/对查询据结果排序void modify(Infor *a,int mon);/修改数据void delRecord(int mon);/删除数据 6.调试分析 6.1 调试中遇到的问题及对问题的解决方法 创建结构体对该程序至关重要,通过查阅参考书籍,创建了合适的结构体。由于初期未考虑到排序功能,后期做排序的时候,对整个程序做了一些修改,主要是结构体方面。本程序的排序系统的采用的是“快速排序”,代码主要来自数据结构(c语言版),由于书上代码为伪代码,所以调试时遇到一些问题,由于习惯使用c+中的引用传递,导致在c文件中编译错误,经过查找资料才发现问题所在,于是将c文件改为cpp文件,解决了做排序功能时遇到的一些问题 6.2 算法的时间复杂度和空间复杂度空间复杂度: O(f(n)时间复杂度:O(n)7. 输出典型数据,获得测试结果; 8.源程序(带注释)#include #include #include #include /文件保存路径#define FilePath1 Myinfor.dat#define FilePath2 Myinfor.txt/查询用声明#define Status int#define OK 1#define Error 0#define NotFound 2typedef struct int month;/月份 int spxf;/食品消费 int fzfy;/房租费用 int znjy;/子女教育费用 int sdfy;/水电费用 int ylfy;/医疗费用 int cxfy;/储蓄费用 int srfy;/收入费用 Infor;typedef struct / 查询用自定义数据类型 int no; int data; pType;void menu(void); /菜单void input(Infor *newI); /接收键盘输入void writeinfor(Infor *newI);/向文件内写入内容void changeFormat(void );/将dat格式文件转换为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); printf(tt1.录 入 数 据。n); printf(tt2.查 看 数 据。n); printf(tt3.修 改 数 据。n); printf(tt4.查 询 数 据。n); printf(tt5.排 序 数 据。n); printf(tt6.删 除 数 据。n); printf(tt0.退 出 系 统。nn); 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-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); input(a); modify(a,mon); break; /查询数据 case 4: item=search(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-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); break; /排序数据 case 5: item=search(a); if (item!=OK) printf(n没有找到符合排序条件的记录!n); else paixu(a); break; /删除数据 case 6: item=search(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-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); delRecord(mon); break; free(a);/释放内存空间void input(Infor *newI)/接收从键盘输入的数据 printf(n请依次输入数据说明:中间以空格符隔开:n(本月月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 收入费用)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);void writeinfor(Infor *newI)/向文件内写入内容 FILE *fp; fp=fopen(FilePath1,ab+); if(fp=NULL) printf(无法创建文件:%s,FilePath1); exit(0); fwrite(newI,sizeof(Infor),1,fp);/这里可以做特别处理可防止存在同一月份有2条以上的记录问题。这里就不写了。 fclose(fp); printf(数据录入成功!n);void changeFormat(void) /暂时只能操作一行文件有待改进 FILE *fp1,*fp2; Infor *a; a=(Infor *)malloc(sizeof(Infor); fp1=fopen(FilePath1,rb+); if(fp1=NULL) printf(无法找到文件:%sn,FilePath1); return ; /返回主函数 fp2=fopen(FilePath2,wt+); if(fp2=NULL) printf(无法创建文件:%sn,FilePath2); return ; /返回主函数 fputs( n个人帐簿管理系统nn,fp2); fputs(记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n,fp2); fputs(- n,fp2); printf(n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 n); printf(- n); rewind(fp1); fread(a,sizeof(Infor),1,fp1); while(!feof(fp1)/从原文件.dat中读数据写入显示文件.txt中 printf(%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); fprintf(fp2,%7d %8d %8d %8d %8d %8d %8d %8dn,a-month,a-spxf,a-fzfy,a-znjy,a-sdfy,a-ylfy,a-cxfy,a-srfy); fread(a,sizeof(Infor),1,fp1); fputs(- n,fp2); fputs(关闭本程序继续原程序!n,fp2); fclose(fp1); fclose(fp2); system(FilePath2); /调用打开转换的文本文件 remove(FilePath2);/删除文本文件文件Status search(Infor *a) FILE *fp1; int mon; int isfound=0; printf(请正确输入要查询的月份:); scanf(%d,&mon); fflush(stdin); /清除缓冲区 fp1=fopen(FilePath1,rb+); if(fp1=NULL) printf(无法找到文件:%sn,FilePath1); return 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;void paixu(Infor *a) int i=0,j=0,flag=0,t; pType px8=0,0; char str810=记录月份,食品消费,房租费用,子女费用,水电费用,医疗费用,储蓄费用,本月收入; for(;imonth; 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;i8;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; printf(n); for(i=0;i8;i+) printf( %s,strpxi.no); printf(n- n); for(i=0;imonth=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(); /显示数据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,sizeof(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(删除数据成功!n ); changeFormat(); /显示数据9. 总结 经过这次数据结构课程设计,我们不仅及时巩固的了数据结构、算法、以及软件工程的知识,并对数据结构和算法的配合对于程序时间和空间性能的影响以及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法,例如,马踏棋盘问题就可以采用广度优先搜索或深度优先搜索来解决。因此此时就应该综合考虑这样的数据结构、算法以及它们的空间和时

温馨提示

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

评论

0/150

提交评论