工学系课程设计报告.doc

上传人:laozhun 文档编号:4194052 上传时间:2023-04-09 格式:DOC 页数:45 大小:415KB
返回 下载 相关 举报
工学系课程设计报告.doc_第1页
第1页 / 共45页
工学系课程设计报告.doc_第2页
第2页 / 共45页
工学系课程设计报告.doc_第3页
第3页 / 共45页
工学系课程设计报告.doc_第4页
第4页 / 共45页
工学系课程设计报告.doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《工学系课程设计报告.doc》由会员分享,可在线阅读,更多相关《工学系课程设计报告.doc(45页珍藏版)》请在三一办公上搜索。

1、目录一、系统开发的背景1二、系统分析与设计1(一)系统功能要求1(二)系统模块结构设计1三、系统的设计与实现3(一)学生收支录入:enter()3(二)学生收支查询:search()6(三)学生收支修改:revise ()9(四)学生收支总览:all()12(六)数据重置resetting()17(七)数据保存save()18(八)自动打开数据open()18四、系统测试19(一)测试main()函数19(二)测试enter()函数19(三)测试收支查询函数search()21(四)测试收支总览all()23(五)测试支出排名ranking()23(六)测试数据保存save()24(七)测试数

2、据重置resetting()24五、总结25六、附件(代码、部分图表)25学生综合测评系统一、系统开发的背景为了能让学生更好的了解自己的收支情况,更好的控制开销。因此用C语言编写了这个学生个人开支系统。二、系统分析与设计(一) 系统功能要求可以录入学生某月的收入和支出情况,用户可以修改和查询某月收支情况,当录入结束,用户可以选择保存。1、 当月总收入为:当月收入加上月结余。2、 当月支出为包括伙食费、日常用品费、娱乐费、水电费、通讯费及车费和其他费用。3、 录入、查询、修改、总览、排名、重置、保存和退出8样功能。4、 本程序开始时能自动读取存档。修改后可以选择保存。(二) 系统模块结构设计通过

3、对系统功能的分析,学生个人收支系统功能如图X所示。学生个人收支系统收支录入收支查询收支总览数据重置数据保存退出收支修改收支排名图1 学生个人收支功能图通过上图的功能分析,把整个系统划分为8个模块:1、 学生当月收支录入,借助函数enter()开始先。在函数enter()中,收入(收入外加上月结余)录入借助income(),支出(伙食费、娱乐费、生活用品费、水电费、通讯费及车费和其他费用)的录入借助pay()函数。2、 学生收支查询,借助函数search(),该模块主要实现,某月收支查询,用户输入月份即可查询出当月的收入、支出和结余明细。收入直接输出,而支出则调用函数search0(),结余则直

4、接输出3、 学生收支修改,可以修改学生某月的收入和支出。借助函数revise()实现。在revise()函数中又借助inrevise()修改收入,payrevise()修改支出。4、 学生收支总览,借助函数all(),输出全年所有月份的收入、支出和结余。5、 学生收支排名,借助函数ranking(),该模块主要实现对月和年支出项目大小的排序。月支出排名借助ranking_0()函数,年排名借助ranking_1函数。6、 数据的重置借助函数resetting()来实现,将所有数据清零。该函数会在运行时提示用户输入“RESETTING”,如果输入正确则执行重置功能。如果错误则返回主函数。7、 保

5、存功能借助函数save(),该模块实现了对当前用户数据的保存。8、 在程序开始时,借助函数open()自动读取数据。三、系统的设计与实现(一) 学生收支录入:enter()分析:首先提示用户输入月份,然后收入录入借助函数income(),支出录入借助函数pay()。最后自动计算结余。每录入一项询问用户是否正确。流程图如图2所示。yn输出上月结余输入本月收入输入本月支出开始month=0&month12|monthn);goto error_0;income(month);pay(month);void income(int month_0)char c;printf(nn *n);printf

6、( %-2d月收入录入n,month_0);printf( *n);for(;)if(month_0!=1)printf( 上月结余:%5.1fn,IPmonth_0-2.e);printf( 本月收入:);scanf(%f,&IPmonth_0-1.alimoney);if(month_0=1)IPmonth_0-1.suma=IPmonth_0-1.alimoney;printf( %2d月全部收入为:%5.1f¥n,month_0,IPmonth_0-1.suma);if(month_0!=1)IPmonth_0-1.suma=IPmonth_0-2.e+IPmonth_0-1.alim

7、oney;printf( %2d月全部收入为:%5.1f+%5.1f=%5.1f¥n,month_0,IPmonth_0-2.e,IPmonth_0-1.alimoney,IPmonth_0-1.suma);IPmonth_0-1.e=IPmonth_0-1.suma-IPmonth_0-1.sum;c=getchar();error:printf( 是否正确?(y/n) );scanf(%c,&c);if(c=y)printf(n 录入成功!nn);break;elseif(c=n)printf(n 重新输入!n 返回n);continue;elseprintf(n 输入有误n 返回nn);

8、goto error;void pay(int month_0)char c;printf(nn *n);printf( %2d月支出录入n,month_0);printf( *n);for(;)printf( 伙食费:);scanf(%f,&IPmonth_0-1.board);printf( 日常用品费:);scanf(%f,&IPmonth_0-1.supplies);printf( 娱乐费:);scanf(%f,&IPmonth_0-1.amuserment);printf( 水电费:);scanf(%f,&IPmonth_0-1.elec);printf( 通讯费及车费:);scan

9、f(%f,&IPmonth_0-m);printf( 其他费用:);scanf(%f,&IPmonth_0-1.other);IPmonth_0-1.sum=IPmonth_0-1.board+IPmonth_0-1.supplies+IPmonth_0-1.amuserment+IPmonth_0-1.elec+IPmonth_0-m+IPmonth_0-1.other;IPmonth_0-1.e=IPmonth_0-1.suma-IPmonth_0-1.sum;printf( %2d月全部支出为:%5.1f¥n,month_0,IPmonth_0-1.sum);c=getchar();er

10、ror:printf( 是否正确?(y/n) );scanf(%c,&c);if(c=y)printf(n 录入成功!nn);break;elseif(c=n)printf(n 重新输入!n 返回nn);continue;elseprintf(n 输入有误n 返回nn);goto error;(二) 学生收支查询:search()分析:首先提示用户输入要查询的月份,然后用户选择查询内容(收入,支出和结余3项)输出当月收支明细流。流程图如图3所示。01或2或3n输出本月收入输入本月支出输入本月结余开始month=0&monthnn);goto error;break;c=getchar();er

11、ror_0:printf( 是否继续查询?(y/n) );scanf(%c,&c);if(c=y)goto yes;elseif(c=n)printf(n 返回nn);break;elseprintf(n 输入有误nn 返回nn);goto error_0;void search0(int month)printf( n);printf( %2d月支出情况 n,month);printf( n);printf( 伙食费 %-5.1f ¥n,IPmonth-1.board);printf( n);printf( 日常用品费 %-5.1f ¥n,IPmonth-1.supplies);printf

12、( n);printf( 娱乐费 %-5.1f ¥n,IPmonth-1.amuserment);printf( n);printf( 水电费 %-5.1f ¥n,IPmonth-1.elec);printf( n);printf( 通讯费和车费%-5.1f ¥n,IPmonth-m);printf( n);printf( 其他费用 %-5.1f ¥n,IPmonth-1.other);printf( n);printf( 全部支出 %-5.1f ¥n,IPmonth-1.sum);printf( n);(三) 学生收支修改:revise ()分析:首先提示用户输入要修改的月份,然后用户选择要

13、修改的内容(收入和支出)。每次修改后询问用户是否正确。流程图如图4所示。n输出上月结余输入修改收入输入修改的支出开始month=0&month12|monthnn);goto error_0;for(;)error:printf( 请选择:n);printf( 1收入n);printf( 2支出n);printf( 0返回主菜单n);scanf(%d,&x);switch(x)case 1:inrevise(month);break;case 2:payrevise(month);break;case 0:return;break;default:printf( 输入有误!nn 返回nn);g

14、oto error;break;void inrevise(int month_0)char c;printf(nn *n);printf( %-2d月收入修改n,month_0);printf( *n);for(;)if(month_0!=1)printf( 上月结余:%5.1fn,IPmonth_0-2.e);printf( 本月收入:);scanf(%f,&IPmonth_0-1.alimoney);if(month_0=1)IPmonth_0-1.suma=IPmonth_0-1.alimoney;printf( %2d月全部收入为:%5.1f¥n,month_0,IPmonth_0-

15、1.suma);if(month_0!=1)IPmonth_0-1.suma=IPmonth_0-2.e+IPmonth_0-1.alimoney;printf( %2d月全部收入为:%5.1f+%5.1f=%5.1f¥n,month_0,IPmonth_0-2.e,IPmonth_0-1.alimoney,IPmonth_0-1.suma);IPmonth_0-1.e=IPmonth_0-1.suma-IPmonth_0-1.sum;c=getchar();error:printf( 是否正确?(y/n) );scanf(%c,&c);if(c=y)printf(n 录入成功!nn);bre

16、ak;elseif(c=n)printf(n 重新输入!nn 返回nn);continue;elseprintf(n 输入有误nn 返回nn);goto error;void payrevise(int month_0)char c;printf(nn *n);printf( %2d月支出修改n,month_0);printf( *n);for(;)printf( 伙食费:);scanf(%f,&IPmonth_0-1.board);printf( 日常用品费:);scanf(%f,&IPmonth_0-1.supplies);printf( 娱乐费:);scanf(%f,&IPmonth_0

17、-1.amuserment);printf( 水电费:);scanf(%f,&IPmonth_0-1.elec);printf( 通讯费及车费:);scanf(%f,&IPmonth_0-m);printf( 其他费用:);scanf(%f,&IPmonth_0-1.other);IPmonth_0-1.sum=IPmonth_0-1.board+IPmonth_0-1.supplies+IPmonth_0-1.amuserment+IPmonth_0-1.elec+IPmonth_0-m+IPmonth_0-1.other;IPmonth_0-1.e=IPmonth_0-1.suma-IPm

18、onth_0-1.sum;printf( %2d月全部支出为:%5.1f¥n,month_0,IPmonth_0-1.sum);c=getchar();error:printf( 是否正确?(y/n) );scanf(%c,&c);if(c=y)printf(n 录入成功!nn);break;elseif(c=n)printf(n 重新输入!n 返回nn);continue;elseprintf(n 输入有误n 返回nn);goto error;(四) 学生收支总览:all()分析:直接输出全年每个月的收入、支出和结余。用制表符制表。流程图如图5所示。开始输出全年总览结束图5:all()流程图

19、该模块的具体代码如下所示:void all()printf(n);printf( 全年收支情况总览 n);printf(n);printf( 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 n);printf(n);printf(收入 %-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1fn,IP0.suma,IP1.suma,IP2.suma,IP3.suma,IP4.suma,IP5.suma,IP6.suma,IP7.suma,IP8.suma,IP9.suma,IP1

20、0.suma,IP11.suma);printf(n);printf(全部支出%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1fn,IP0.sum,IP1.sum,IP2.sum,IP3.sum,IP4.sum,IP5.sum,IP6.sum,IP7.sum,IP8.sum,IP9.sum,IP10.sum,IP11.sum);printf(n);printf(结余 %-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-

21、6.1fn,IP0.e,IP1.e,IP2.e,IP3.e,IP4.e,IP5.e,IP6.e,IP7.e,IP8.e,IP9.e,IP10.e,IP11.e);printf(n);(五) 支出排名ranking()分析:支出排名需要在ranking()函数中再调用两个函数,一个ranking_0(),一个是ranking_1()。ranking_0()为月支出排名,ranking_1()为年支出排名。排名用两个for循环的起泡法来实现。流程图如图6所示。0输出年排名开始结束输入排名选项判断用户选择输出月排名12图6:ranking()流程图该模块的具体代码如下所示:void ranking(

22、)int x;void ranking_0();void ranking_1();printf(nn *n);printf( 支出排名n);printf( *n);for(;)printf( 请选择:n);printf( 1.月支出排名n);printf( 2.年支出排名n);printf( 0.退出n);scanf(%d,&x);switch(x)case 1:ranking_0();break;case 2:ranking_1();break;case 0:return;break;void ranking_0()int i,j,t_0,month,b6;float a6,t;for(i=0;i6;i+)bi=i+1;printf( 请输入月份:);scanf(%d,&month);a0=IPmonth-1.board;a1=IPmonth-1.supplies;a2=IPmonth-1.amuserment;a3=IPmonth-1.elec;a4=IPmonth-m;a5=IPmonth-1.other;for(i=0;i5;i+)for(j=0;j5-i;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;t_0=bj;bj=bj+1;bj+1=t_0;printf(nn *n); printf( %2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号