家庭财务管理系统(9页).doc
-家庭财务管理系统-第 9 页目录1. 课程设计目的及要求22. 相关知识23. 设计方案.22234. 程序代码实现.55. 测试数据及运行结果.136. 课程设计总结157. 参考文献.151 课程设计目的及要求通过课程设计,进一步巩固和复习C语言程序设计的基础知识,了解软件的编制过程及各环节的具体内容,掌握结构化程序、模块化程序设计方法,提高学生分析问题,解决问题以及书籍运用能力。2 相关知识 本课程设“家庭财务管理系统”就是通过学习C程序设计采用Visual C+作为编译环境。本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、删、改、查等典型的管理功能。家庭成员可以对其成员编号,姓名以及收入,支出构成进行增加,删除,修改等管理操作。家庭成员分为管理员和普通用户两类,权限不同。管理员还要在本系统外事先创建家庭成员信息文件,在文件中保存用户的序号,姓名,密码,权限。用户必须正确输入姓名和密码才能登录使用本系统。管理员界面有12个选项可供管理员挑选:1. 创建家庭成员财务信息文件(该文件内容为序号,姓名,收入,支出,合计。)并初始化2. 添加财务收支信息记录;3. 删除财务收支信息记录; 4. 按姓名查询家庭成员财务收支信息记录;5. 按家庭成员序号查询家庭成员财务信息;6. 修改家庭成员收支信息记录;7. 按财务合计项排序浏览;8. 增加家庭成员信息;9. 删除家庭成员信息;10. 按用户序号修改家庭成员信息;11. 按家庭成员序号排序浏览用户信息12.退出本系统。管理员界面,创建家庭成员财务信息文件并初始化,修改家庭成员收支信息记录。 (1)家庭管理选择界面 (2) 创建家庭成员财务信息文件:1. 2创建家庭成员财务信息文件 (3)修改家庭成员收支信息记录:4. 程序代码实现(1)/*admin.c:家长管理功能选择界面,根据用户选项调用相应函数实现系统功能*/#include "shead.h" /*家庭成员财务信息头文件*/#include "creat.c" /*创建家庭成员财务信息文件*/#include "add.c" /*增加家庭成员财务信息记录*/#include "delete.c" /*删除家庭成员财务信息记录*/#include "modnum.c" /*按家庭成员序号修改家庭成员财务信息*/#include "qname.c" /*按家庭成员姓名查询家庭成员财务信息*/#include "qseatnum.c" /*按家庭成员序号查询家庭成员财务信息*/#include "ssum.c" /*按财务合计项排序浏览家庭成员财务信息*/void Admin() int choice = 0; /*存放用户选项的变量*/ /*=功能及操作的界面提示=*/ while(1) printf("-n"); printf("| |n"); printf("| Welcome to Family Financial Management System |n"); printf("| |n"); printf("|-|n"); printf("| 1. Creat Financial File |n"); printf("| 2. AddRecord() |n"); printf("| 3. DelRecord() |n"); printf("| 4. QueryByName() |n"); printf("| 5. QueryBySeatNum() |n"); printf("| 6. ModifyByNumber() |n"); printf("| 7. SortBySum() |n"); printf("+n"); printf("| System User Management |n"); printf("| 11.CreatNewUserFile() |n"); printf("| 12.AddUser() |n"); printf("| 13.DelUser() |n"); printf("| 14.ModifyUser() |n"); printf("| 15.SortByUserNum() |n"); printf("+n"); printf("| 0. End Program |n"); printf("-n"); printf("# Please Input Your Choose #n"); printf("# number 17 to Manage the Family's Finance #n"); printf("# number 11,12,13,14,15 to Manage the System User #n"); printf("# number 0 to Exit the System #n"); printf("-n"); scanf("%d",&choice); getchar(); /*根据用户选项调用相应函数*/ switch(choice) case 1: CreatFile(); /*创建初始财务信息文件*/ break; case 2: AddRecord(); /*增加财务信息记录*/ break; case 3: DelRecord(); /*修改财务信息记录*/ break; case 4: QueryByName(); /*按家庭成员姓名查询财务信息*/ break; case 5: QueryBySeatNum(); /*按家庭成员序号查询财务信息*/ break; case 6: ModifyByNumber(); /*按家庭成员序号修改财务信息*/ break; case 7: SortBySum(); /*按财务合计项排序浏览财务信息*/ break; case 11: CreatUser(); /*创建初始家庭成员信息文件*/ break; case 12: AddUser(); /*增加家庭成员*/ break; case 13: DelUser(); /*删除家庭成员*/ break; case 14: ModifyByUserNumber(); /*按家庭成员序号修改家庭成员*/ break; case 15: SortByUserNum(); /*按家庭成员序号排序浏览*/ break; case 0: exit(0); /*退出系统*/ default: break;(2)/*creat.c:用于创建家庭成员财务信息文件并初始化*/#include "stdio.h"/*函数CreatFile*/void CreatFile() FILE *fp = NULL; /*定义指向文件的指针*/ money TmpS; /*定义进行操作时存放结构体变量的*/ char DataFile40 = ""/*存储员财务收支信息的文件名*/ int count = 1; /*计算可输入数据的最大范围*/ /*输入存放财务收支信息的文件名*/ printf("n please input new file name to store data,end with enter."); printf("n Notice:Name of file can't exceed 8 characters.suffix can't exceed 3 characters,part of exceed will be discarded.n"); gets(DataFile); /*如家长没有输入,则循环提示家长输入*/ while(*DataFile = ('0') printf("n please input new file name to store data,end with enter."); printf("n Notice:Name of file can't exceed 8 characters,suffix can't exceed 3 characters.part of exceed will be discarded.n"); gets(DataFile); /*用二进制写的方式打开文件,即创建文件*/ fp = fopen(DataFile,"wb+"); /*如果当前文件不存在,提示打开文件失败*/ if (fp = NULL) printf("n Open file %s fail!End with any key.n",DataFile); perror("Open file fail"); getch(); exit(1); /*如果成功打开或创建文件,则提示输入家庭成员序号、姓名、财务收支构成等相关信息*/ printf("input number,name and the income and outcome.number is 0 means input is end.n"); printf("Number is not exceed 9 figures,Name is not exceed 20 characters,range of grade:0.001000.00n"); /*循环从键盘上读取家长输入的序号、姓名、收入、支出等相关信息*/ while(count <= SIZE) /*输入序号,如为0则停止输入*/ printf("n input 'number =0' means end input.n"); printf("number="); scanf("%ld",&TmpS.Number); if (TmpS.Number = 0 ) break; /*提示输入姓名*/ printf("name="); scanf("%s",TmpS.Name); /*提示输入收入*/ printf("in="); scanf("%f",&TmpS.in); /*提示输入支出*/ printf("out="); scanf("%f",&TmpS.out); /*用公式自动计算家庭成员财务合计*/ TmpS.sum=TmpS.in-TmpS.out; printf("n"); /*如遇无法写入文件的异常,则加以提示*/ if(fwrite(&TmpS,sizeof(money),1,fp)!=1) printf("nwrite file %s fail!End with any keyn",DataFile); perror("Write file fail "); getch(); exit(1); count+; /*如果输入的数据量超过最大允许的范围,则提示数据不能录入*/ if (count>SIZE) printf("nsorry,number of data can not exceed%dn",SIZE); fclose(fp); /*在屏幕上显示初始化后的文件内容*/ /* clrscr();*/ printf("The data you input is store successful %s in file.n",DataFile); printf("Content as follow:n"); /*打开财务信息文件,如无法打开,则提示*/ fp=fopen(DataFile,"rb"); if (fp = NULL) printf("nOpen file%sfail!End with any key n",DataFile); perror("Open file fail"); getch(); exit(1); printf("nNumbertNametintouttsumn"); while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL) printf("n%ldt%st%4.2ft%4.2ft%4.2fn",TmpS.Number,TmpS.Name,TmpS.in,TmpS.out,TmpS.sum); fclose(fp);(3)/* modnum.c :修改家庭成员收支信息记录 */#include "stdio.h"void ModifyByNumber() int i,j,k; long modnum;/*存储家长输入的要修改的家庭成员序号*/ /*输入各项修改后信息*/ long Number; char Name20; float in; float out; float sum; money TmpS; /*定义进行操作时的临时结构体变量*/ money sSIZE;/*SIZE,在shead.h头文件中定义的常量,值为100 */ int recNumber; char DataFile40 = "",next; /*DataFile存储家庭成员收支信息信息的文件名,next为是否进行下一次删除操作的选项*/ FILE *fp;/*=fp指针指向存储数据的文件名=*/ /*提示家长输入要进行修改记录的文件名*/ printf("nplease input the name of file where data is stored,end with enter key.n"); gets(DataFile); /*提示家长输入要进行修改记录的文件名*/ while(*DataFile = ('0') printf("nplease input the name of file where data is stored,end with enter key.n"); gets(DataFile);begin: /*以读的方式打开文件,如文件不存在,提示错误*/ fp=fopen(DataFile,"rb"); if (fp = NULL) printf("nOpen file %s fail!End with any keyn",DataFile); perror("Open file fail"); getch(); exit(1); printf("please input the Employee'seatnum which you will modify:"); scanf("%ld",&modnum); printf("the money you will delete is:%ldn",modnum); /*输入要修改记录的各项内容值*/ Number=modnum; printf("name="); scanf("%s",Name); printf("in="); scanf("%f",&in); printf("out="); scanf("%f",&out); /*用公式自动计算家庭成员财务合计*/ sum=in-out; /*将文件中要修改的信息存入结构体数组*/ recNumber=0; /*循环将文件数据读入结构体数组, 如文件中的数据家庭成员号和要修改的家庭成员号不符,则原样写入数组, 如文件中数据的家庭成员号和要修改家庭成员号匹配, 则根据家长输入的各项修改内容重新赋值,即修改,并写入数组*/ while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL) if(TmpS.Number!=modnum) srecNumber.Number = TmpS.Number; strcpy(srecNumber.Name, TmpS.Name); srecNumber.in = TmpS.in; srecNumber.out = TmpS.out; srecNumber.sum = TmpS.sum; recNumber+; else srecNumber.Number = Number; strcpy(srecNumber.Name, Name); srecNumber.in = in; srecNumber.out = out; srecNumber.sum = sum; recNumber+; fclose(fp); /*将修改后的结构体数组记录写入文件*/ fp=fopen(DataFile,"wb+"); if (fp = NULL) printf("nSet up file %sfail !end with anykey.n",DataFile); perror("Set up fail"); getch(); exit(1); for(i=0; i<recNumber; i+) if(fwrite(&si,sizeof(money),1,fp)!=1) printf("nWrite file %s fail!end with anykey.n",DataFile); perror("Write file fail!"); getch(); exit(1); fclose(fp); /*显示修改后的文件*/ fp=fopen(DataFile,"rb"); if (fp = NULL) printf("nOpen file%sfail!End with any key n",DataFile); perror("Open file fail"); getch(); exit(1); printf("the file after modify is:n"); printf("nNumber tNametintouttsumn"); while(fread(&TmpS,sizeof(money),1,fp) != (int)NULL) if(TmpS.Number!=0) printf("n%ldt%st%4.1ft%4.1ft%4.1fn",TmpS.Number,TmpS.Name,TmpS.in,TmpS.out,TmpS.sum); fclose(fp);/*提示是否进行下一次修改*/ printf("nGo on ?(y/n)"); next=getche(); putchar('n'); if ( next ='y' | next ='Y') goto begin;5. 测试数据及运行结果51管理员界面52创建家庭成员财务信息文件并初始化53修改家庭成员收支信息记录6.课程设计总结一周的时间既短暂又漫长,但我学会了很多东西。我深切的体会到在目前一个高速发展的社会,学好计算机对于一个大学生的重要性。就C语言来说,每个题目都是以前没有练习过的,所以我们必须用自己平时所学的和发挥自己的创造性的思维去完成一个程序。对于我个人来说,这的确是个一个很大的挑战,但却培养了我们做事的耐性和严谨行。因为只要有一个地方出错就会导致整个程序不运行。记得刚开始的时候,我经常因为一些英文字母而失去耐心,但现在想想我能一个人编一个完整的程序了,这是多大的进步啊!对我有多大的鼓励!以上便是我这一周来课设的总结。7. 参考文献1马秀丽、刘志妩、虞闯.C语言实践训练.北京:清华大学出版社,20102马秀丽、刘志妩、虞闯.C语言程序设计.北京:清华大学出版社,2008