个人财务管理系统设计报告.doc_第1页
个人财务管理系统设计报告.doc_第2页
个人财务管理系统设计报告.doc_第3页
个人财务管理系统设计报告.doc_第4页
个人财务管理系统设计报告.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

西安郵電大學软件设计报告 题 目: 个人财务管理系统 院系名称:通信与信息工程学院专业名称:通信工程班 级:班内序号:学生姓名 :指导教师:时间: 一、课程设计目的p 通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固C语言程序设计课程学习的内容,掌握工程软件设计的基本方法;p 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力;p 为后续各门计算机课程的学习打下坚实基础; 为毕业设计和以后工作打下必要基础。二、课程设计内容独立完成一个小型的个人财务管理系统,各方面的功能要有一个初步的完善。1.了解课题,进行分析,设计内容,编写代码,完成编译修改和程序测试。2.该管理系统有一个登陆界面,界面有几个小版块,包括信息的输入输出,修改删除等功能,它们分别由一个主菜单控制,用户可进行选择。当然用户需要正确的密码才能进入系统。整个程序需要编程者运用所学知识自行独立完成。序号阶段名称具体内容要求1数据录入录入系统所需的数据用链表或结构体数组组织数据 2数据存储数据读写将录入的数据存储,对数据进行读写操作用文件的形式将录入的数据存储,并进行读写操作3数据修改对数据进行更新操作可以进行新数据的插入,旧数据的修改操作4数据删除对数据进行删除操作根据具体题目将对应记录删除5数据查询按要求对数据进行查询含简单查询及组合查询6数据统计按要求对数据进行统计含简单统计及综合统计7数据排序按要求对数据进行排序含升序排序及降序排序8数据报表按要求对数据打印报表依规定的报表格式对数据打印报表9界面设计总体菜单界面简单菜单、下拉式或弹出式三、需求分析程序实现的功能:系统有一个登陆界面:用户 1输入正确的密码,方可进入系统。2完成个人财务基本信息的录入和显示。 3可按编号对财务信息进行查询。 4 用户可以看到所有财务信息5用户可添加、删除财务信息。6用户可对财务信息进行排序和统计。7利用文件指针对信息进行保存和读取。程序的目的:可供用户及时全面的了解自己的财务状况并合理理财。四、概要设计1系统结构图(功能模块图)登陆界面添加信息显示信息查询信息修改信息删除信息信息排序统计信息保存信息退出系统菜单界面2功能模块说明(1)用户进入登录界面,输入密码(最多可错三次),确认用户身份。(2)主函数模块:包括登陆界面,主菜单界面。(3)输入模块:输入个人基本财务信息。(4)输出模块:显示个人财务信息(编号、名称、单位、电话、价格等)。(5)添加模块:添加新的财务信息。(6)查找模块:按编号查找财务信息。(7)修改模块:按编号查找到要修改的财务信息,并对信息有选择的进行修改。(8)删除模块:按编号删除已存在的财务信息。(9)排序模块:按库存量对已存在的财务信息进行排序。(10)统计模块:统计已存在的财务信息的总库存量并输出。(11)保存信息模块:以文本文件的形式保存财务信息。(12)读取信息模块:从保存的文本文件中读取财务信息。五、详细设计及运行结果各模块流程图主函数模块:判断密码cnt4录入信息判断选择添加信息显示信息查找信息修改信息删除信息信息排序统计信息保存信息退出系统开始输入密码是否cnt=4输入选择12.3456780输入模块结 束 void main() int choice,i,n,cnt=1,flag=1; char code6; ADDRESS adrM; /*定义结构体数组*/ while(cnt4) printf(*welcome*n); printf(*n); printf(-please input your code:-n); for(i=0;i4;i+) codei=getch();printf(*); code4=0; if(strcmp(code,1990)=0) getch(); system(cls); n=read_file(adr) ; /调用读取函数 if(n=0) printf(input the basic record!*n); getch(); n=input(adr); /调用输入函数 printf(press any key enter menu.n); /*提示压任意键继续*/ getch(); /*读入任意字符*/ do system(cls);/*清屏*/ printf(*MENU*nn); printf( * 1. Add record * n); printf( * 2. List the file * n); printf( * 3. Search record * n); printf( * 4. modify fecord * n); printf( * 5. delete record * n); printf( * 6. sort record * n); printf( * 7. count kucun * n); printf( * 8. save record * n); printf( * 0. Quit * n); printf(*n); printf(n Enter you choice(08):); scanf(%d,&choice); switch(choice) case 1:n=append(adr,n); break; /*调用添加函数*/ case 2:output(adr,n); break; /*调用输出函数*/ case 3:inquire(adr,n); break; /*调用查找函数*/ case 4:modify(adr,n); break; /*调用修改函数*/ case 5:n=del(adr,n); break; /*调用删除函数*/ case 6:sort(adr,n); break; /*调用排行函数*/ case 7:count(adr,n); break; /*调用统计函数*/ case 8:save_file(adr,n); break; /*调用保存函数*/ case 0: break; /*退出系统*/ while(choice!=0); cnt=4; else printf(n your code is wrong!nnn); /密码输入有三次机会,若仍有错,跳出程序 cnt+; 添加模块int append(ADDRESS adr,int n) /调用全局变量n int flag,i=0,j,t; system(cls);/*清屏*/ printf(n input the account of adding record:); scanf(%d,&t); do flag=1; while(flag) flag=0; printf(num:n); scanf(%d,&adrn+i.num); for(j=0;jn;j+) if(adrn+i.num=adrj.num) printf( n rhe record is exit!n); flag=1; break; printf(name:n); scanf(%s,adrn+); printf(unit:n); scanf(%s,adrn+i.units); printf(telephone:n); scanf(%s,adrn+i.tele); printf(designer:n); scanf(%s,adrn+i.designer); printf(price:n); scanf(%d,&adrn+i.price); printf(kucun:n); scanf(%d,&adrn+i.kucun); printf(produce year:n); scanf(%d,&adrn+i.year); printf(produce month:n); scanf(%d,&adrn+i.month); printf(produce day:n); scanf(%d,&adrn+i.day); if(flag=0) i+; while(n+it+n); n+=t; printf(Succeed!The record has been added!n); system(cls);/*清屏*/ getch(); return n; /返回全局变量n 开始输入添加信息的个数输入要添加的信息编号是否存在输入要添加的信息输出添加成功结束是否添加模块信息查询模块void inquire(ADDRESS adr,int n) /调用全局变量n int a,i,cnt=1; system(cls); printf(n please input the search num:n); scanf(%d,&a); for(i=0;in;i+) if(adri.num=a) system(cls);/*清屏*/ printf(*the record*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-dayn); printf(%2d%8s%8s%8s%8s%8d%8d%8d%8d%8dn,adri.num,,adri.units,adri.tele,adri.designer,adri.price,adri.kucun,adri.year,adri.month,adri.day); cnt=1; if(cnt=0) printf(not found!n); getch(); getch(); 开始查询模块输入信息编号是否有此信息输出该信息结束是否删除模块int del(ADDRESS adr,int n) /调用全局变量n int t; int i,j; system(cls); /*清屏*/ printf(Enter the number of the record which you want to delete:n); scanf(%d,&t); for(i=0;in;i+) if(adri.num=t) for(j=i;jn-1;j+) adrj=adrj+1; n-;break; printf(Succeed!The record has been deleted!n); getch(); return n;开始输入要删除的信息编号是否存在删除该信息否是结束删除模块修改模块void modify(ADDRESS adr,int n) /调用全局变量n int i,choice,modify_num,flag,cnt=1; do system(cls);/*清屏*/ printf( input the number which you want to modify.n); scanf(%d,&modify_num); for(i=0;in;i+) if(adri.num=modify_num) system(cls);/*清屏*/ printf( the record n);printf(*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-daynn);printf(%2d%8s%8s%8s%8s%8d%8d%8d%8d%8dn,adri.num,,adri.units,adri.tele,adri.designer,adri.price,adri.kucun,adri.year,adri.month,adri.day); printf(which do you want to modify?n); printf(1.name:n); printf(2.unit:n); printf(3.telephone:n); printf(4.designer:n); printf(5.price:n); printf(6.kucun:n); printf(7.produce year:n); printf(8.produce month:n); printf(9.produce day:n); printf(*n); printf(n Enter you choice(19):); scanf(%d,&choice); switch(choice) case 1: printf(n input the new name:); scanf(%s,); break; case 2: printf(n input the new units:); scanf(%s,adri.units); break; case 3 :printf(n input the new telephone:); scanf(%s,adri.tele); break; case 4: printf(n input the new designer:); scanf(%s,adri.designer); break; case 5: printf(n input the new price:); scanf(%d,&adri.price); break; case 6: printf(n input the new kucun:); scanf(%d,&adri.kucun); break; case 7: printf(n input the new produce year:); scanf(%d,&adri.year); break; case 8: printf(n input the new produce month:); scanf(%d,&adri.month); break; case 9: printf(n input the new produce day:); scanf(%d,&adri.day); break; default:printf(n wrong!n); break; system(cls);/*清屏*/ printf( the record n);printf(*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-daynn);printf(%2d%8s%8s%8s%8s%8d%8d%8d%8d%8dn,adri.num,,adri.units,adri.tele,adri.designer,adri.price,adri.kucun,adri.year,adri.month,adri.day); break; cnt=1; printf(n Do you want to continue modifying(Y/N)?n); choice=getch(); if(choice=y|choice=Y) flag=1; printf(n continue!n); else flag=0; if(cnt=0) printf(n The number is not exist !n); getch(); while(flag=1); getch();987654321开始输入要修改的信息编号是否存在输入选择判断选择名称单位电话设计者价格库存年月日否是是否继续修改Y结束N修改模块登录密码1990进入菜单界面输入个人基本财务信息:num name unit tele desinger price kucun year month day1 kdt xiyou 123 jin 100 45 1990 2 42 ying xiyou 456 jin 455 35 1889 4 73 yang xiyou 345 jin 344 23 1880 3 6排序:(按库存量排序)num name unit tele desinger price kucun year month day3 yang xiyou 345 jin 344 23 1880 3 62 ying xiyou 456 jin 455 35 1889 4 71 kdt xiyou 123 jin 100 45 1990 2 4统计:(总库存量)The kucun is 103删除:(删除编号为3的信息)1 kdt xiyou 123 jin 100 45 1990 2 42 ying xiyou 456 jin 455 35 1889 4 7添加:(添加编号为4的信息)1 kdt xiyou 123 jin 100 45 1990 2 42 ying xiyou 456 jin 455 35 1889 4 73 yang xiyou 345 jin 344 23 1880 3 64 tian xiyou 234 jin 434 34 1992 5 7查询:(查询编号为1的信息)1 kdt xiyou 123 jin 100 45 1990 2 4修改:(修改编号为1的信息)原信息:1 kdt xiyou 123 jin 100 45 1990 2 4改后的信息:(修改名称)1 mhy xiyou 123 jin 100 45 1990 2 4打印报表:num name unit tele desinger price kucun year month day1 kdt xiyou 123 jin 100 45 1990 2 42 ying xiyou 456 jin 455 35 1889 4 73 yang xiyou 345 jin 344 23 1880 3 6六、调试情况,设计技巧及体会1、我是用数组完成的整个程序设计,其中运用了全局变量,但没有运用链表简洁。整个功能完成时,添加了密码功能,但不能修改密码。程序功能基本完善,用户可根据需求自主选择,有简单界面,系统有添加模块,但只能添加到已存信息的末尾,无法实现插入式添加。文件可以进行信息存储,但输出时常存在乱码,以至于影响了删除、排序等模块。改进方案:1对添加模块进行修改,明确添加位置,从最后一个信息开始将它的信息复制给前一个信息,一直到添加的那条信息为止,这样便可实现插入式添加。 2对读取信息模块进行修改,改变读取文件的循环方式,将while(feof(fp)!=1)变为while(!feof(fp),并改变返回值,将返回值i变为i-1,这样既可实现正常输出。3在登陆界面添加密码修改菜单,并在程序中设计一个函数,让它能对密码进行修改,完善系统的密码功能。2、设计初期,我先确定自己的设计课题,然后围绕该课题进行初步构思,写出主函数,接下来对主函数所涉及的各个模块进行编程,利用全局变量将各个模块联系起来。在环境中进行调试,一边编译一边调试,并且要一个模块一个模块进行调试,知道该模块完全没有错误时,在进行下一个模块的调试。若直接调试全部代码,这样错误会很多,而且不容易找出和修改。在完成程序的编译链接后,要用多组数据进行审查,确保程序无误。设计过程中,要注意环境的提示警告,又是程序运行不正确与警告也有很大的关系,这次设计中遇到许多问题都是提示类型不匹配,这时就要仔细检查前面的代码,及时纠错。此外,在信息的保存和读取中用到了文件指针,这是要特别注意判断文件是否收尾,经常发生越界情,是保存和读取发生错误,如产生乱码,影响正常的数据。我就遇到了此类情况。在这次程序设计中我碰到了许多错误,但也从中学到了很多,对C语言有了进一步的了解,能更加熟练的运用选择、循环等结构,同时养成了良好的编程习惯,为以后更进一步学习C语言打下了基础。七、参考文献C语言程序设计 王曙燕 曹锰 科学出版社 2005年2月C语言程序设计教程 张毅坤 曹锰 张亚玲 西安交通大学出版社C语言程序设计教程、实验与练习 杨开成 人民邮电出版社八、附录:源代码(略,详见电子版实验报告)/*头文件(.h)*/ #include /*I/O函数*/ #include /*标准库函数*/ #include /*字符串函数*/ #include /*控制台输入输出函数*/#include /*字符操作函数*/#define M 3/*定义数据结构*/ struct adr_info int num; char name10; char units30; char tele10; char designer30; int price; int kucun; int year; int month; int day; ;typedef struct adr_info ADDRESS;int read_file(ADDRESS adr) FILE *fp; /*fp是一个指向FILE类型结构体的指针变量*/ int i=0; fp=fopen(D:record.txt,rt); if(fp=NULL) /* 打开文件*/ printf(can not open file,please create!n); return 0; i=0; fp=fopen(D:record.txt,rt); while(!feof(fp) fread(&adri,sizeof(ADDRESS),1,fp); i+; fclose(fp); return i-1;/*存储模块*/void save_file(ADDRESS adr,int n) int i; FILE *fp; /*指向文件的指针*/ system(cls); /*清屏*/ fp=fopen(D:record.txt,wt); if(fp=NULL) /*打开文件,并判断打开是否正常*/ printf(can not open filen); return; for(i=0;in;i+) fwrite(&adri,sizeof(ADDRESS),1,fp); fclose(fp); printf(n succeed!n); getch(); system(cls);/*输入模块*/int input(ADDRESS adr) int i=0; system(cls); /*清屏*/ do system(cls); /*清屏*/ printf(please input record! n); printf(n num:); scanf(%d,&adri.num); if(adri.num=0) break; printf(n name:); scanf(%s,); printf(n unit:); scanf(%s,adri.units); printf(n telephone:); scanf(%s,adri.tele); printf(n designer:); scanf(%s,adri.designer); printf(n price:); scanf(%d,&adri.price); printf(n kucun:); scanf(%d,&adri.kucun); printf(n produce year:); scanf(%d,&adri.year); printf(n produce month:); scanf(%d,&adri.month); printf(n produce day:); scanf(%d,&adri.day); printf(-Ok!this record have been recorded!-n); i+; while(iM); printf(*the all have been recorded!*n); getch(); return i; /*输出模块*/void output(ADDRESS adr,int n) int i; system(cls); printf(n*ADDRESS*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-dayn); printf(-n); for(i=0;in;i+) if(adri.num!=0) printf(%2d%8s%8s%8s%8s%8d%8d%8d%8d%8dn,adri.num,,adri.units,adri.tele,adri.designer,adri.price,adri.kucun,adri.year,adri.month,adri.day); printf(*n); getch();/*信息查询模块*/void inquire(ADDRESS adr,int n) int a,i,cnt=1; system(cls); printf(n please input the search num:n); scanf(%d,&a); for(i=0;in;i+) if(adri.num=a) system(cls);/*清屏*/ printf(*the record*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-dayn); printf(%2d%8s%8s%8s%8s%8d%8d%8d%8d%8dn,adri.num,,adri.units,adri.tele,adri.designer,adri.price,adri.kucun,adri.year,adri.month,adri.day); cnt=1; if(cnt=0) printf(not found!n); getch(); getch(); /*修改模块*/void modify(ADDRESS adr,int n) int i,choice,modify_num,flag,cnt=1; do system(cls);/*清屏*/ printf( input the number which you want to modify.n); scanf(%d,&modify_num); for(i=0;in;i+) if(adri.num=modify_num) system(cls);/*清屏*/ printf( the record n); printf(*n); printf(num-name-unit-telephone-designer-price-kucun-year-month-daynn); printf(%2d%8s%8s%8s%8s%

温馨提示

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

评论

0/150

提交评论