课程设计报告
课程设计题目:家庭财务管理系统
学生姓名:
专业: 信息工程
班级:
指导教师:
2018年1月8 日
1.需求分析
根据家庭账务管理的需要,建立一个“家庭账务管理系统” 收入
,以方便对家庭日常及支出进行记录和管理。该系统要求:①家庭月收入管理②家
庭月支出管理③统计家庭总收入/ 总支出④系统提供收入/ 支出的添加、删除和修改功能。
2.总体设计
根据以上分析,本家庭账务管理系统主要包括:
①从键盘键入家庭月收入、月支出数据;
②查询月收入、月支出明细;
③删除收入、支出数据;
④修改收入、支出数据;
⑤统计总收入/总支出;
⑥退出系统。
除main()函数之外,系统还定义了以下函数来实现各部分内容:
①add_income():添加收入数据函数。
②add_payout():添加支出数据函数。
③search_data():查找数据函数。
④initialize():初始化函数,读取文本数据。
⑤show_info ():显示数据函数。
⑥count_total ():统计函数,统计总收入、总支出。
⑦update_data():修改信息函数。
⑧delete_data():删除数据函数。
⑨quit()退出函
数。
程序结构功能图如下:
家庭财务管理系统
3.详细设
计
3.1收入管理
3.2支出管理
4 .测试结果
4.1程序运行主菜单
室庭财务管理系统
4.2添加收入测试
明細
8
统 退
>1 麗卿加」
人冢雇成貝姓宕〔最大长芨为i0>=iyy
耀絨黠離大长度技邮:jdic
w E i M i ta iE KW i o t KJ t ao ta cM a o t NW 3
<図梵:11:梵]|[
梵:《
梵
]<屛冠屛耳耳
9
<耳3<耳
1
<>
63<梵
1
<耳
计詔?统计总收人/忌支出
S HMXJCKKBOCKJtJt WK W)C :H.J<:JI.)C :IIJ
X W M : X X X I CH X W >CW ;3t 3<:H :
弭:H 3
冢庭财务管理系统
回
F
C 逼Vk i nd OWE 11 sy=rtem z 2\D
ebug\Fyyl. G 4.3查询收入明细测试 统计汁?统计总收人二总支出 退 岀词?退岀系统 '请选择要进行的換作<0-9>:2 沁青输入要查询的穿月好匹肮”7 请按任意键畛心其也数据? 4.4删除收入测试 4 hAi>A N*L * WM B . i^ulA WUAWUK J * 冢庭财务管理系统 rrwwwrMrHrrwYvruruwruwnmmrirurhmmmww 耳XJO E X i MICMXX 址风址耳XM I>EKK KN 掛 耳 XX 3 入明细 M=建建茉豪事,i Wi atfH W*?ME ?=MX K WlFafr M i 幕荒豪務整豪豪亲=M i MH Sfr M i *H W , c. 轉 弼 算 闿曲 若耳豪科,^■■轉 if ■苗]< 満■科■■■>< ■齋 if 轉 苗曲 満耳酬耳■贰科贰轉 曹 统 计汁?统计忌收入儿鼠支出 退 岀汨?退岀系统 》请选择雯迸行的操作個“竹 >请初1/厘查询的年月<¥¥¥¥zH>201-4/l I I 4 》删除成功 P I ^RSS an^ key to cnnt-imie 溝漱明细 收入管理豊翻 细 明 支支 沓-修 ■ ■ 6 8 出出 支支 加除 i ■- ?5 年月 1 !20t3/09 咲型 ;收入 1008.00: :备汪 工资 支出吨勰雜. iMO- 月 :类型 :备汪 1 !2014/01 168.23 : lyy 岀羽细 4.5修改收入测试 JCJ H JCJOtKJt ■* XU JOCWJtKJW M ><:?■: ■! JCJ! MUM BL JCJt MH JCKJCJtK 菱理 KJIM 收 A 管理m 添加收入 趴查育 3-删除收入 弭XJ ta<>E M X a O t MJC H K i M 羸 算 KW 址耳 KJ t 址豪 KJC M SX i MIC i M K3t 址耳贰疋 XJ f a t X 支出管理出 7 统计叽统计总收人血支岀 退 出汕*退出系纟充 >iMA^ 〉诗输入擁成员姓名〔最大长度为诃》 ”書输人眷注t 最大长度为饷庆工资. 4.6添加支出测试 NO. 1 !2013/fR U ? UC (_ ■ 作月 操年: 咲型 ;金额 叫夂入 3000 1400.00: 「查询支出明细 8 ?修改支出 4.7查询支出明细测试 ■ Ud'WmmflUrMgumW -FMiWihiriiMIUriVia^WUirMiWMiiW 家庭财务管理系统 X >E X i M~:MiKK>ti O f HX a<]<>E :W >E X>E 冥 耳 N X 其 M M i K 弭 K 瓮 XXXX N M N NX H M ; ]?S M 收入管鵲:勰怒m 林明细 X KU >[]<■: K JOCK WJCJfXlHf i l H l fJOt Jot KU it MnOiJCKX 支岀管瑋汚?探加支出 "查询支出明细 巴删除支出孔修改支出 统 计伙统计总收人/負支岀 K KM 普材■ K4 m W M i K 唇?科恒■ 退 出:0-退出系统 I ■ ;青按任意键継续.-亠 4.8删除支出测试 I 屜月 I I S 作個-9,海 ^<¥V¥V/M>20i3/1 :类型 I 支岀 ■姓亡 3* ;金埶 1备注 200.00 1 购物 M E 界貝其貝耳疑耳冥艮K 耳KM E 界]< 界箕梵JO C 3KH M : 耳NW 算見其買梵就艮植耳拉算址舅覽如其 支出管理參報鑒:義鏗细 :K“a< :WFj a Ntf K Itf NJ* ;K“M ; *M* :K h E 倚 甘 1* 材 UIfrJtf N Jtfim ;:M H H X l il : K W ;M H U“a< :M ;:M :fcff 甘 ik 计=9 ?统计包收入/总支出 退 出詬?退出系统 KKM^M?tK>CHHX^KKMM^K>£KMtKMK4CX^KM^KM^K?tK4tK?tX^MdKX^KHK>tK >请选择要进行的操隹 <0-9>=7 ■ 1 A 请输入要査询的年月 H ■ ¥ 1 1 ■ 1 1 1 1 :NO. 1 ;年声月" 咲型 1 ;姓名 ;金额 !#i£ ; 1 1 1 1 iZUlJZOl :支岀 i iyy J 1 1 购物 1 1 i 1 1 i 》删除成功 1 1 [Press any key to continue 4.9修改支出测试 ?:?■ 泉庭财务管理系统 收入管理沁 3 務賑旳细 4.10统计总收入/支出测试 家庭财务管理系绒 iSWWMYWM¥WWWWAANiHWWVSAHM¥W%hnAiSWfW 芽I* it 員ji ?iKifcK ??!J R PtK ?貝 ?■*■*“* 応* 收 '管理d 添加收入上一査询収入明细 *删除收入4-*SK 入 请尹 统 计=9 ■统计总收入严总支出 X X J t XXXXXK aC X K K XMtK !M XS f K S C H'XXXXX I M ! X m e K X**K St X!KK XK'XW 阻 出汕”通出系统 K 梵廉拉艮梵耳疋艮3CM8. ■ :JC i M ■>!梵 滩X 農梵X X M E 4C 旌舅Jt i MK 耳■:梵英]< 梵耳X 葺 朋觀呈婪进行的操作汚 ;合计支岀 :结余 : 500,901 423^.631 :按任焉缶月 家庭财务管理系统 ru 41WEH U f HEiM *M"U d *M**UI *M * EJ ■ *19! I 、MX W5 &FU *、『 WT 梵ME it WE 梵K XW iM KE M iMr 梵琏 梵覺 梵K 梵 W 港味疋址 梵曲 梵琏 梵:M 3< H 收入管理1席加収入霊查询收入明细 4圖除收入4 W t f If U ?=Mtl i f If ■????????i f If ???i f ? 筑查询支岀明细 緘修改支出 h l 屛 轉I H ■冒!w K ■!< w K ■弭昇轉?屛 衬!M 筑岸捕曲 KF 弭屛 W!岸屛 耐忖 岸K 屛利 K ■ 统 计汐?统计总收入"总支岀 退 支岀管理惰 出通■退岀系统 攵入 <0-9>:8 ■M - 12013/09 年月 咲型 I 备注 lyy 300.00: 》请输人年月 >请嫡△寡庭喩员妃名〔最工长厦为讪:丄妁 、输人金额:左腼 冰蕃注塢 俵服 i2013/09 ;裘型 :支出 I 金额 200.00: 衣朋 衣服 [合计L 反入 4734-63I 一湛返回主苹 吉出背理汗 4.11退出系统测试 5 .软件操作使用说明书 本系统采用命令行对话方式进行操作,运行后出现主界面(如下图所示) 然后按照主界面菜单指引操作即可 6.总结 编写程序之前要有一个整体的思路,不能写到哪里算哪里。这样很容易遗漏,连续性也不好。通过本次的课程设计让我对于数组、文件的存放、循环结构等知识有了更加透彻的理解。希望在以后的课程设计中对于知识的运用能够更加的熟练。 代码: #in elude #in elude #in elude #include //自定义枚举类型fi_type,用来表示收入与支出 typedef enum _fi_type { income=1,// 收入 payout =-1 // 支出 } fi_type; // 家庭财务信息结构体 typedef struct _fi_info { int year; int month; fi_type type; char name[9]; float money; char detail[11]; }fi_info; // 存储财务数据结构的结构体 typedef struct _fi_data 可编辑范本 fi_info info; struct _fi_data* next; } fi_data; fi_data *head;// 财务数据的头结点void menu();// 菜单函数 void add_income(); void search_income(); void delete_income(); void update_income(); void add_payout(); void search_payout(); void delete_payout(); void update_payout(); void count_total(); void quit(); // void search_data(fi_type type); void delete_data(fi_type type); void update_data(fi_type type); // void initialize(); void save_to_file(); void clear_data(); fi_data *get_last(); fi_data *get_previous(fi_data *p); void input_info(fi_info *info); void show_info(fi_data *p); void menu() { printf("\n"); printf("\t\t 收入管理 :"); printf("1. 添加收入 "); printf(" 2.查询收入明细 \n"); printf("\t\t\t 3. 删除收入 "); printf(" 4.修改收入 \n"); printf("\t\t ~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t ~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t\t 家庭财务管理系统 \n"); printf("\t\t ~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t ~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t \t* **************************************** **\n") ; \t* **************************************** ; printf("\t\t 支出管理:"); printf("5. 添加支出 "); printf(" 6.查询支出明细 \n"); printf("\t\t\t 7. 删除支出 "); printf(" 8.修改支出 \n"); printf("\t\t 统 计:"); printf("9. 统计总收入 / 总支出 \n"); printf("\t\t 退 出 :0.退出系统 \n"); } void main() { int selected=0; initialize(); while(selected>=0&&selected<=9) { system("cls"); menu(); printf("\t\t> 请选择要进行的操作 (0-9):"); if(scanf("%d",&selected)!=1||selected<0||selected>9) { printf("\t\t* **************************************** **\n"); printf("\t\t* **************************************** **\n"); printf("\t\t* **************************************** **\n\n\n"); printf("\t\t> 输入有误!请选择(0-9)之间的数 字!按任意键重试"); getchar(); } else { switch(selected) { case 0:exit(0);clear_data();break; case 1:add_income();save_to_file();break; case 2:search_income();break; case 3:delete_income();save_to_file();break; case 4:update_income();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:count_total();break; } } } } void add_income()// 添加收入 { fi_data *p=(fi_data *)malloc(sizeof(fi_data)); p->next=NULL; input_info(&(p->info)); p->info.type=income; if(head==NULL) head=p; else get_last()->next=p; } void add_payout()// 添加支出 { fi_data *p=(fi_data *)malloc(sizeof(fi_data)); p->next=NULL; input_info(&(p->info)); p->info.type=payout; if(head==NULL) head=p; else get_last()->next=p; } // 输入函数