当前位置:文档之家› C语言课程设计——家庭财务管理系统

C语言课程设计——家庭财务管理系统

课程设计报告课程设计题目:家庭财务管理系统学生姓名:专业:信息工程班级:2018年1月8日指导教师:1•需求分析根据家庭账务管理的需要,建立一个“家庭账务管理系统”,以方便对家庭日常收入及支出进行记录和管理。

该系统要求:①家庭月收入管理②家庭月支出管理③统计家庭总收入/总支出④系统提供收入/支出的添加、删除和修改功能。

2.总体设计根据以上分析,本家庭账务管理系统主要包括:①从键盘键入家庭月收入、月支出数据;②查询月收入、月支出明细;③删除收入、支出数据;④修改收入、支出数据;⑤统计总收入/总支出;⑥退出系统。

除main()函数之外,系统还定义了以下函数来实现各部分内容:①add_income():添加收入数据函数。

②add_payout ():添加支出数据函数。

③search_data ():查找数据函数。

④ini tialize():初始化函数,读取文本数据。

⑤show_info ():显示数据函数。

⑥count_total ():统计函数,统计总收入、总支出。

⑦update_data ():修改信息函数。

⑧delete_data ():删除数据函数。

⑨quit():退出函数。

程序结构功能图如下:家庭财务管理系统收入管理支111管理退n iw计系七统3.详细设计3.1收入管理3.2支出管理4.测试结果4.1程序运行主菜单室庭财务管理系统明细统 退A >S文人明细 攵人 迁行的操作佃 月CY¥¥¥/h)2013/l展成貝姓宕〔最大长SS10>:lyy;黠人裁器大长財网皿ic!HM :M :J<IHKM ::MJ<:MJ<:M ・::W!M :]M XU KJ!. JC 31X11JC J4JCJ<J<J< )C XX KKJtW 耳・ UK X 收人 »^=i-mo3-19W 支 ±ta=sM ESMa < jf ai EJgmrxit s MjtK j CHKXKx a o t Nmcx a o t计汚•统计总忘支出i tSM i CK I f J ta CJ if KJ if iCXKM a O t NJC i ClfNinCirSMlCSMKK a cmCH t KKlO f iO t XUKH冢庭财务管淫系统回4.2添加收入测试 C 牝IN i nd OWE 11 system z 2\D ebug\Fyyl. e<e 4.3查询收入明细测试统计汁•统计总收人二总支出 退 岀词•退岀系统'请选择要进行的換作<0-9>:2 沁青输入要查询的穿月好匹肮”7请按任意键畛心其也数据? <y 叶n>4.4删除收入测试4 hA*#. N*L * WUA AA貝V L AA, RH U W.MAAjAjfKj*冢庭财务管理系统24HX It JOOCJCKK JffKHKltK UK KK KJClf UlflffKlt XKXKJtlt MKlTMlflKltiMKJC6.轉K 科稱補稻耳港KiH P t ■耳轉齋■黑禅齋■清KiHKiM 贰清料牺if 清清秫齋啊轉M 统 计汁•统计忌收入儿鼠支出退 岀汨•退岀系统 》请选择雯迸行的操作個“竹 》诘切八耍查询的年月<¥¥Wzf1>201-4/lII 4》删除成功P I ^RSS an^ key to cnnt-imie溝漱明细收入管理豊翻细明 支支 沓-修■■68出出 支支 加除i■-«57年月1!20t3/09咲型 ;收入1008.00::备汪工资•nrrHnrwMnmmmMVirwvwnmrnimjrwHmmww耳XJO E X i MICMXX 3<风*<耳XM I>EKKKN 掛耳 XX 3<Wr>E :MiMKl iE XXXX斃入明细iMO.i^> 月 :类型:备汪1!2014Z01168.23 :lyy岀羽细4.5修改收入测试:MJ M )CJ<:M K]il ! XHJCXIOCW JtXJHXKKTHTH ieT CJtXltJCJt J< JtKKJC收A 管理m 添加收入 趴查育3 •删除收入屛・其 N■)« B O f MJt H Bt i M 豪算 K :W 址耳英* 號豪 KJC M iMt i MlC i M K3f 號耳贰 J t NJ f 3< X「查询支出明细 8 •修改支出统 计也统计创"辺吏出退 出:肌退出系纟充输入年月(¥¥¥V/ri>2013/2输入奈庭成员姓名(最大长度为丄少 输人眷注(最大长度为饷':工资.4.6添加支出测试■M -支出管理出NO.1:2013/02UC- (_■作月 操年iJ2•- 3:金额!#a;收入30001400.08:请®> > > KZ:lyy0 ¥ 2冢庭财务管理糸统收入管理』逍3-剃a ” ■■&■»■ 1-1梵耳菟耳址耳K MEJ] 「,资细支岀吩勰針诵面细 」..........................................................退岀:肌退出系统>wwga 行的操作<0-9>=& >'S 殉入年月 <VVV¥/M)2 013/1»誌入家庭成負妊电(最大长度为丄4SWAWi=2M籍输黄審注嚎大长度加哄购物4.7查询支出明细测试■u d v i B i i m i a u f M a w m w v w i v i i B i w i u r i V i a ^-w a u f v a w M i i w家庭财务管理系统n r r w m v w w w M w v w n r n m w m w w K i r w w r u Y u w v■wwsmwvrwnriffwwvnFiwrHnrhHwurwwrurunjw收初狒歓X NJf孫 X N w 2-0 4-W4翹:K 轨耳NJieKH 曲耳><嵐耳昶x *入明细^41HLMLJ^LJR支岀管瑋汚•探加支出 巴删除支出 般护细绕i+=?.^^fcA/.aSS e m e r退S :0-iai 系绕i ■奮按任意键继续.'•4.8删除支出测试I 屜月I I12O13Z01S 作個海^<¥V¥V/M>20i3/1:类型I 支岀■姓亡I 金额2BB.00 I倚汪购謝泉庭财务管理系统M E 界貝其貝耳疑耳冥艮K 耳KM E 界]< 界箕梵JO C 3KH M :耳NW 算見其買梵就艮植耳拉算址舅覽如其支出管理汚一添加豆串「査询支出阳细7-側除支田驭焉改支出:K“a< :WFj a NtfK Itf NJ*;K“M ; *M* :K h E 倚甘 1* 材 UIfrJtf N Jtfim ;:M H H X 倨;M HU“a< :M;:M :fcff甘ik计=9 •统计包收入/总支出退 出詬•退出系统》请选择要进行的操作<0-”汐》请辅入要査询的年月<Y¥Y¥ZH>2013Z1;N0. ;年声月;类型 :姓名I I;1i2U13z(»l;支岀 ilyy' ;删除成功Fr«ss an</ key to continueKH :M :M :MT&MHK:MHM KXXKHXJCXH >H f *K T tM->E收入管理【LMJ4M XKJWJC JCXlMT e TW 钿TH t收入明纟田 :攵入;金额;#£购物2_4.9修改支出测试支岀管理汗h l W I H■冒!w K ■!< w K ■弭七轉・屛衬!M Kt il KW WW 弭屛轉岸屛耐忖岸弭昇K 屛利K ■ 统计汐•统计总收入"总支岀 退出=0.退出系统<¥¥¥¥/H>2313/9缺辭晋廠农服4.10统计总收入/支出测试家庭财务管理系绩niiMHivmMiFWW-rwwwiMHrwawui'WHiiaviivwiw%'>谙选«婪进行的操作<0-9> = ?合计收入d734-634.11退出系统测试家庭财务管理系统攵入明细 攵入年帛类倒 姓名 金额备注12013/09300.00衣耶年/月裘型 姓名 金埶#?-2013/09支出200.00衣服嘴余420d.G35.软件操作使用说明书本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示)然后按照主界面菜单指引操作即可。

6.总结编写程序之前要有一个整体的思路,不能写到哪里算哪里。

这样很容易遗漏,连续性也不好。

通过本次的课程设计让我对于数组、文件的存放、循环结构等知识有了更加透彻的理解。

希望在以后的课程设计中对于知识的运用能够更加的熟练。

代码:#in elude <stdio.h>#inelude <stdlib.h>#in elude <stri ng.h>#in elude vconi o.h>#defi ne MAXNAME 11 // 家庭成员姓名的最大长度#define MAXDETAIL 21 // 注最大长度//自定义枚举类型fi_type,用来表示收入与支出typedef enum _fi_type{in come=1,〃收入payout =-1 // 支出} fi_type;// 家庭财务信息结构体typedef struct _fi_info{int year;int mon th;fi_type type;char n ame[9];float mon ey;char detail[11];}fi」nfo;// 存储财务数据结构的结构体typedef struct _fi_data{fi_info info;struct _fi_data* n ext;} fi_data;fi_data *head;// 财务数据的头结点void menu ();// 菜单函数void add_ in come();void search_ in come();void delete_ in come();void update_ in come();void add_payout();void search_payout();void delete_payout();void update_payout();void coun t_total();void quit();//void search_data(fi_type type); void delete_data(fi_type type); void update_data(fi_type type); //void in itialize();void save_to_file();void clear_data();fi_data *get_last();fi_data *get_previous(fi_data *p); void in put_ in fo(fi_ info *in fo); void show_i nfo(fi_data *p);void menu(){prin tf("\n"); prin tf("\t\t prin tf("\t\t prin tf("\t\t\t prin tf("\t\t prin tf("\t\t prin tf("\t\t*****************************************prin tf("\t\t prin tf("1. printf(" 2. prin tf("\t\t\t 3. printf(" 4. tf("\t\t*******************************************\n")・prin prin tf("\t\t prin tf("5. printf(" 6. prin tf("\t\t\t 7. printf(" 8. prin tf("\t\t*******************************************\n")・prin tf("\t\t 统计:");printf("9. 统计总收入/总支出\n"); prin tf("\t\t*******************************************\n")・ printf("\t\t退 出:0.退出系统 \n");prin tf("\t\t* ******************************************\n\n\n"); }void mai n() {int selected=O; in itialize();while(selected>=0&&selected<=9) {system("cls"); menu();printf("\t\t> 请选择要进行的操作(0-9):");if(sca nf("%d", &selected)!=1||selected<0||selected>9) {家庭财务管理系统\n");^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~^~\n"); **\n");收入管理:”); 添加收入"); 查询收入明细\n");删除收入");修改收入\n");支出管理:"); 添加支出"); 查询支出明细\n");删除支出"); 修改支出\n");printf("\t\t> 输入有误!请选择(0-9)之间的数字!按任意键重试");getchar();}else{switch(selected){case O:exit(O);clear_data();break;case 1:add_ in come();save_to_file();break;case 2:search_ in come();break;case 3:delete_ in come();save_to_file();break;case 4:update_ in come();save_to_file();break;case 5:add_payout();save_to_file();break;case 6:search_payout();break;case 7:delete_payout();save_to_file();break;case 8:update_payout();save_to_file();break;case 9:co un t_total();break;}}}}void add_ in come()〃添加收入{fi_data *p=(fi_data *)malloc(sizeof(fi_data));p-> next=NULL;in put_i nfo(&(p->i nfo));p->in fo.type=in come;if(head==NULL) head=p;elseget_last()->n ext=p;}void add_payout()〃添加支出{fi_data *p=(fi_data *)malloc(sizeof(fi_data)); p-> next=NULL;in put_i nfo(&(p->i nfo));p->in fo.type=payout;if(head==NULL) head=p;elseget_last()->n ext=p;}//输入函数void in put_i nfo(fi_i nfo *info){printf("\t\t> 请输入年月(YYYY/M)");sca nf("%d/%d",&(in fo->year),&(in fo->mo nth));prin tf("\t\t> 请输入家庭成员姓名(最大长度为%d):",MAXNAME-1); sea nf("%s",i nfo-> name);printf("\t\t> 输入金额:");sca nf("%f",&(i nfo->mo ney));printf("\t\t> 请输入备注(最大长度为%d):",20);sca nf("%s",i nfo->detail);}//查找数据函数void search_data(fi_type type){int year=0;int mon th=0;fi_data *p=NULL;int coun t=0;char in put=':while⑴{prin tf("\t\t> 请输入要查询的年月(YYYY/M)");if(sca nf("%d/%d", &year,&mon th)!=2){printf("\t\t> 输入有误\n");}else{p=head;coun t=0;while(p!=NULL){if((p->in fo.year==year)&&(p->info.mon th==month)&&(p->in fo.type==type)) {show_ in fo(p);system("PAUSE");coun t++;}p=p->n ext;}if(co un t==0){printf("\t\t> 没有找到数据\n");}prin tf("\t\t> 继续查找其他数据?(y or n)");in put=getchar();if(i nput=='y'||i nput=='Y')con ti nue;elsebreak;}}}//初始化函数,读取文本数据void in itialize(){FILE * fp=NULL;fi_data *p=NULL;fi_data *last=NULL;int coun t=0;fp=fope n( "data.txt","rb");if(fp==NULL){fp=fope n( "data.txt","w");fclose(fp);retur n;}p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data));p-> next=NULL;while(fread(&(p->in fo),sizeof(fi_ in fo),1,fp)==1) {if(head==NULL)head=p;else{last=get_last();last- >n ext=p;}coun t++;fseek(fp,cou nt*sizeof(fi_i nfo),SEEK_SET); p=(fi_data *)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data));p-> next=NULL;}free(p);p=NULL;fclose(fp);}//显示信息函数void show」nfo(fi_data *p){int i=0;prin tf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");printf("|NO.\t | 年/ 月\t\t| 类型\t\t| 姓名\t\t| 金额\t\t| 备注\t\t|\n");prin tf("|%5d\t|%4d/%02d\t|%4s\t|%10s\t|%10.2f|%20s|\n",i+1,p->info.year,p->info.month,p->info.type==income?" 收入":"支出",p->info.n ame,p->info.mon ey,p->in fo.detail);prin tf("|\t\t|\t\t|\t\t|\t\t|\t\t|\t\t|\n");}//统计总收入、总支出void coun t_total(){float total_ in come=0.0;float total_payout=0.0;fi_data *p=head;while(p!=NULL){if(p->in fo.type==in come){total_ in come+=p->info.mon ey;}else{total_payout+=p->info.mon ey;}p=p->n ext;}prin tf("\t\t+\t\t+\t\t+\n");printf("\t\t| 合计收入\t|合计支出\t|结余\t|\n");prin tf("\t\t%12.2f|%12.2f|%12.2f|\n",total_i ncome,total_payout,total_i ncome -total_payout);prin tf("\t\t+\t\t+\t\t+\n");printf("\t\t> 按任意键返回主菜单");getchar();getchar();}//保存到文件void save_to_file(){FILE *fp=fopen("data.txt","wb");fi_data *p=head;while(p!=NULL){fwrite(&(p->i nfo),sizeof(fi_i nfo),1,fp);fseek(fp,O,SEEK_END);p=p->n ext;}fclose(fp);}//修改信息函数void update_data(fi_type type){ int year=0;int mon th=0;fi_data *p=NULL;fi_data *pre=NULL;char in put;int coun t=0;int i=0;while(1){ prin tf("\t\t> 请输入要查询的年月(YYYY/M)");if(sca nf("%d/%d", &year,&mon th)!=2){printf("\t\t> 输入有误\n");}else{p=head;coun t=0;while(p!=NULL){if((p->in fo.year==year)&&(p->info.mon th==month)&&(p->in fo.type==type)) {coun t++;show_ in fo(p);in put_i nfo(&(p->i nfo));printf("\t\t 修改成功\n");P=get_previous(p);}p=p->n ext;}if(co un t==0)printf("\t\t> 没有找到数据\n");prin tf("\t\t> 继续查找其他数据?(y or n)");in put=getchar();if(i nput=='y'||i nput=='Y')con ti nue;elsebreak;}}}void delete_data(fi_type type)// 删除数据函数{int year=0;int mon th=0;fi_data *p=NULL;fi_data *pre=NULL;int coun t=0;char in put=':int i=0;while(1){ prin tf("\t\t> 请输入要查询的年月(YYYY/M)");if(sca nf("%d/%d",&year,&mo nth)!=2){printf("\t\t> 输入有误\n");}else{p=head;coun t=0;while(p!=NULL){if((p->in fo.year==year)&&(p->info.mon th==month)&&(p->in fo.type==type)) { coun t++;show_ in fo(p);pre=get_previous(p);if(pre==NULL)head=head->n ext;elsepre->n ext=p->n ext;free(p);printf("\t\t> 删除成功\n");p=p->n ext;}if(co un t==0)printf("\t\t> 没有找到数据\n");(y or n)"); prin tf("\t\t> 继续查找其他数据?in put=getchar();if(i nput=='y'||i nput=='Y')con ti nue;elsebreak;}}}void clear_data()〃清空链表数据{fi_data *p=NULL;while(head!=NULL){if(head-> next!=NULL){p=head;head=head->n ext;free(p);p=NULL;}else{free(head);head=NULL;}}}fi_data *get_last(){fi_data * p=head;if(p==NULL)return p;while((p!=NULL)&&(p-> next!=NULL)) p=p->n ext; return p;fi_data *get_previous(fi_data *p) {fi_data *previous=head;while(previous!=NULL){if(previous->n ext==p) break;previous=previous->n ext;}retur n previous;}void search_payout(){search_data(payout);}void delete_payout(){delete_data(payout);}void update_payout(){update_data(payout);}void search_ in come(){search_data(i ncome);}void delete_ in come(){delete_data(i ncome);}void update_ in come(){update_data(i ncome);}。

相关主题