




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录目录 一、系统开发的背景一、系统开发的背景.1 二、系统分析与设计二、系统分析与设计.1 (一)(一)系统功能要求系统功能要求.1 (二)(二)系统模块结构设计系统模块结构设计.1 三、系统的设计与实现三、系统的设计与实现.3 (一)(一)学生收支录入:学生收支录入:enterenter()().3 (二)(二)学生收支查询:学生收支查询:searchsearch()().6 (三)(三)学生收支修改:学生收支修改:reviserevise ()()9 (四)(四)学生收支总览:学生收支总览:allall()()12 (六)(六)数据重置数据重置resettingresetting()() .17 (七)(七)数据保存数据保存savesave()() .18 (八)(八)自动打开数据自动打开数据openopen()() .18 四、系统测试四、系统测试.19 (一)(一)测试测试mainmain()()函数函数 .19 (二)(二)测试测试enterenter()函数()函数19 (三)(三)测试收支查询函数测试收支查询函数searchsearch()()21 (四)(四)测试收支总览测试收支总览allall()().23 (五)(五)测试支出排名测试支出排名rankingranking()().23 (六)(六)测试数据保存测试数据保存savesave()() .24 (七)(七)测试数据重置测试数据重置resettingresetting()() .24 五、总结五、总结.25 六、附件(代码、部分图表)六、附件(代码、部分图表).25 1 学生综合测评系统学生综合测评系统 一、一、系统开发的系统开发的背景背景 为了能让学生更好的了解自己的收支情况,更好的控制开销。因此用 c 语言编写了这个学生个人开支系统。 二、系统分析与设计二、系统分析与设计 (一)(一) 系统功能要求系统功能要求 可以录入学生某月的收入和支出情况,用户可以修改和查询某月收支 情况,当录入结束,用户可以选择保存。 1、 当月总收入为:当月收入加上月结余。 2、 当月支出为包括伙食费、日常用品费、娱乐费、水电费、通讯费 及车费和其他费用。 3、 录入、查询、修改、总览、排名、重置、保存和退出 8 样功能。 4、 本程序开始时能自动读取存档。修改后可以选择保存。 (二)(二) 系统模块结构设计系统模块结构设计 通过对系统功能的分析,学生个人收支系统功能如图 x 所示。 2 图 1 学生个人收支功能图 通过上图的功能分析,把整个系统划分为 8 个模块: 1、 学生当月收支录入,借助函数 enter()开始先。在函数 enter() 中,收入(收入外加上月结余)录入借助 income(),支出(伙食费、娱乐 费、生活用品费、水电费、通讯费及车费和其他费用)的录入借助 pay() 函数。 2、 学生收支查询,借助函数 search() ,该模块主要实现,某月收 支查询,用户输入月份即可查询出当月的收入、支出和结余明细。收入直 接输出,而支出则调用函数 search0() ,结余则直接输出 3、 学生收支修改,可以修改学生某月的收入和支出。借助函数 revise()实现。在 revise()函数中又借助 inrevise()修改收入, payrevise()修改支出。 4、 学生收支总览,借助函数 all(),输出全年所有月份的收入、支 学生个人收支系统 收 支 录 入 收 支 查 询 收 支 总 览 数 据 重 置 数 据 保 存 退 出 收 支 修 改 收 支 排 名 3 出和结余。 5、 学生收支排名,借助函数 ranking(),该模块主要实现对月和年 支出项目大小的排序。月支出排名借助 ranking_0()函数,年排名借助 ranking_1 函数。 6、 数据的重置借助函数 resetting()来实现,将所有数据清零。 该函数会在运行时提示用户输入“resetting” ,如果输入正确则执行重置 功能。如果错误则返回主函数。 7、 保存功能借助函数 save(),该模块实现了对当前用户数据的保存。 8、 在程序开始时,借助函数 open()自动读取数据。 三、系统的设计三、系统的设计与实现与实现 (一)(一) 学生收支录入:学生收支录入:enterenter()() 分析:首先提示用户输入月份,然后收入录入借助函数 income() , 支出录入借助函数 pay() 。最后自动计算结余。每录入一项询问用户是否 正确。流程图如图 2 所示。 4 5 图 2:enter()流程图 y n 输出上月结余 输入本月收入 输入本月支出 开始 month=0 goto error_0; income(month); pay(month); void income(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“, 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.alimoney; printf(“ %2d 月全部收入为: 7 %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“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!n 返回n“); continue; else printf(“n 输入有误n 返回nn“); goto error; void pay(int month_0) char c; printf(“nn *n“); printf(“ %2d 月支出录入n“,month_0); printf(“ *n“); for(;) printf(“ 伙食费:“); scanf(“%f“, printf(“ 日常用品费:“); scanf(“%f“, printf(“ 娱乐费:“); scanf(“%f“, printf(“ 水电费:“); scanf(“%f“, 8 printf(“ 通讯费及车费:“); scanf(“%f“, printf(“ 其他费用:“); scanf(“%f“, ipmonth_0-1.sum=ipmonth_0-1.board+ipmonth_0-1.supplies+ipmonth_0- 1.amuserment+ipmonth_0-1.elec+ipmonth_0-1.comm+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(); error:printf(“ 是否正确?(y/n) “); scanf(“%c“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!n 返回nn“); continue; else printf(“n 输入有误n 返回nn“); goto error; (二)(二) 学生收支查询:学生收支查询:search()search() 分析:首先提示用户输入要查询的月份,然后用户选择查询内容(收 入,支出和结余 3 项)输出当月收支明细流。流程图如图 3 所示。 9 图 3:search()流程图 该模块的具体代码如下所示: 0 1 或 2 或 3 n 输出本月收入 输入本月支出 输入本月结余 开始 month=0goto error;break; c=getchar(); error_0:printf(“ 是否继续查询?(y/n) “); scanf(“%c“, if(c=y) goto yes; else if(c=n) printf(“n 返回nn“); break; 11 else printf(“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(“ n“); printf(“ 娱乐费 %-5.1f ¥n“,ipmonth-1. amuserment); printf(“ n“); printf(“ 水电费 %-5.1f ¥n“,ipmonth-1. elec); printf(“ n“); printf(“ 通讯费和车费%-5.1f ¥n“,ipmonth-1. comm); printf(“ n“); printf(“ 其他费用 %-5.1f ¥n“,ipmonth-1. other); printf(“ n“); printf(“ 全部支出 %-5.1f ¥n“,ipmonth-1.sum); printf(“ n“); (三)(三) 学生收支修改:学生收支修改:reviserevise ()() 分析:首先提示用户输入要修改的月份,然后用户选择要修改的内容 (收入和支出) 。每次修改后询问用户是否正确。流程图如图 4 所示。 12 n 输出上月结余 输入修改收入 输入修改的支出 开始 month=0 goto error_0; for(;) error:printf(“ 请选择:n“); printf(“ 1收入n“); printf(“ 2支出n“); printf(“ 0返回主菜单n“); scanf(“%d“, switch(x) case 1:inrevise(month);break; case 2:payrevise(month);break; case 0:return;break; default:printf(“ 输入有误!nn 返回nn“);goto error;break; void inrevise(int month_0) char c; printf(“nn *n“); printf(“ %-2d 月收入修改n“,month_0); 14 printf(“ *n“); for(;) if(month_0!=1) printf(“ 上月结余:%5.1fn“,ipmonth_0-2.e); printf(“ 本月收入:“); scanf(“%f“, 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.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“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!nn 返回nn“); continue; else printf(“n 输入有误nn 返回nn“); goto error; 15 void payrevise(int month_0) char c; printf(“nn *n“); printf(“ %2d 月支出修改n“,month_0); printf(“ *n“); for(;) printf(“ 伙食费:“); scanf(“%f“, printf(“ 日常用品费:“); scanf(“%f“, printf(“ 娱乐费:“); scanf(“%f“, printf(“ 水电费:“); scanf(“%f“, printf(“ 通讯费及车费:“); scanf(“%f“, printf(“ 其他费用:“); scanf(“%f“, ipmonth_0-1.sum=ipmonth_0-1.board+ipmonth_0-1.supplies+ipmonth_0- 1.amuserment+ipmonth_0-1.elec+ipmonth_0-1.comm+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(); error:printf(“ 是否正确?(y/n) “); scanf(“%c“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!n 返回nn“); continue; else printf(“n 输入有误n 返回nn“); 16 goto error; (四)(四) 学生收支总览:学生收支总览:allall()() 分析:直接输出全年每个月的收入、支出和结余。用制表符制表。流 程图如图 5 所示。 图 5:all()流程图 该模块的具体代码如下所示: 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%- 开始 输出全年总览 结束 17 6.1fn“,ip0.suma,ip1.suma,ip2.suma,ip3.suma,ip4.suma,ip5.suma,ip6. suma,ip7.suma,ip8.suma,ip9.suma,ip10.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%- 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“); (五)(五) 支出排名支出排名 rankingranking()() 分析:支出排名需要在 ranking()函数中再调用两个函数,一个 ranking_0() ,一个是 ranking_1() 。ranking_0()为月支出排名, ranking_1()为年支出排名。排名用两个 for 循环的起泡法来实现。 流程图如图 6 所示。 18 图 6:ranking()流程图 该模块的具体代码如下所示: void ranking() 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“); 0 输出年排名 开始 结束 输入排名选项 判断用户选择 输出月排名 12 19 scanf(“%d“, 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;i #include #include struct ip /*日期*/ int month; /*收入*/ float alimoney; /*生活费*/ float suma; /*全部进账*/ /*支出*/ float board; /*伙食费*/ float supplies; /*日常用品*/ float amuserment; /*娱乐*/ float elec; /*电*/ float comm; /*通讯*/ float other; /*其他*/ float sum; /*支出合*/ float e; /*结余*/ /*名称*/ ip12; void main() 31 void enter(); /*录入*/ void search(); /*查询*/ void revise(); /*修改*/ void all(); /*总览*/ void ranking(); /*排名*/ void resetting(); /*重置*/ void save(); /*文件*/ void open(); /*打开*/ int x; open(); for(;) printf(“nn *n“); printf(“ 学生收支系统n“); printf(“ *n“); printf(“ 1录入n“); printf(“ 2查询n“); printf(“ 3修改n“); printf(“ 4总览n“); printf(“ 5排名n“); printf(“ 6保存n“); printf(“ 7重置n“); printf(“ 0退出n“); scanf(“%d“, switch(x) case 1:enter();break; case 2:search();break; case 3:revise();break; case 4:all();break; case 5:ranking();break; case 6:save();break; case 7:resetting();break; case 0:exit(0);break; default:printf(“ 输入有误!n 返回n“);break; void enter() 32 void income(int month); void pay(int month_0); int month; printf(“nn *n“); printf(“ 收支录入n“); printf(“ *n“); error_0:printf(“ 请输入月份:“); scanf(“%d“, if(month12|monthn“); goto error_0; income(month); pay(month); void income(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“, 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.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; 33 c=getchar(); error:printf(“ 是否正确?(y/n) “); scanf(“%c“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!n 返回n“); continue; else printf(“n 输入有误n 返回nn“); goto error; void pay(int month_0) char c; printf(“nn *n“); printf(“ %2d 月支出录入n“,month_0); printf(“ *n“); for(;) printf(“ 伙食费:“); scanf(“%f“, printf(“ 日常用品费:“); scanf(“%f“, printf(“ 娱乐费:“); scanf(“%f“, printf(“ 水电费:“); scanf(“%f“, printf(“ 通讯费及车费:“); scanf(“%f“, printf(“ 其他费用:“); scanf(“%f“, 34 ipmonth_0-1.sum=ipmonth_0-1.board+ipmonth_0-1.supplies+ipmonth_0- 1.amuserment+ipmonth_0-1.elec+ipmonth_0-1.comm+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(); error:printf(“ 是否正确?(y/n) “); scanf(“%c“, if(c=y) printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!n 返回nn“); continue; else printf(“n 输入有误n 返回nn“); goto error; void search() void search0(int month); int month,x; char c; for(;) printf(“nn *n“); printf(“ 收支查询n“); printf(“ *n“); yes:printf(“ 请输入月份:“); scanf(“%d“, for(;) error:printf(“ 请选择:n“); printf(“ 1收入n“); 35 printf(“ 2支出n“); printf(“ 3结余n“); printf(“ 0返回主菜单n“); scanf(“%d“, switch(x) case 1:printf(“ %2d 月全部收入: %5.1f¥nn“,month,ipmonth-1.alimoney);goto error;break; case 2:search0(month);goto error;break; case 3:printf(“ 本月结余为:%5.1f¥nn“,ipmonth-1. e);break; case 0:return;break; default:printf(“ 输入有误!nn 返回nn“);goto error;break; c=getchar(); error_0:printf(“ 是否继续查询?(y/n) “); scanf(“%c“, if(c=y) goto yes; else if(c=n) printf(“n 返回nn“); break; else printf(“n 输入有误nn 返回nn“); goto error_0; void search0(int month) printf(“ n“); printf(“ %2d 月支出情况 n“,month); printf(“ n“); printf(“ 伙食费 %-5.1f ¥n“,ipmonth-1. 36 board); printf(“ n“); printf(“ 日常用品费 %-5.1f ¥n“,ipmonth-1. supplies); printf(“ n“); printf(“ 娱乐费 %-5.1f ¥n“,ipmonth-1. amuserment); printf(“ n“); printf(“ 水电费 %-5.1f ¥n“,ipmonth-1. elec); printf(“ n“); printf(“ 通讯费和车费%-5.1f ¥n“,ipmonth-1. comm); printf(“ n“); printf(“ 其他费用 %-5.1f ¥n“,ipmonth-1. other); printf(“ n“); printf(“ 全部支出 %-5.1f ¥n“,ipmonth-1.sum); printf(“ n“); void revise() void inrevise(int month); void payrevise(int month_0); int x,month; printf(“nn *n“); printf(“ 收支修改n“); printf(“ *n“); error_0:printf(“ 请输入月份:“); scanf(“%d“, if(month12|monthnn“); goto error_0; for(;) error:printf(“ 请选择:n“); 37 printf(“ 1收入n“); printf(“ 2支出n“); printf(“ 0返回主菜单n“); scanf(“%d“, switch(x) case 1:inrevise(month);break; case 2:payrevise(month);break; case 0:return;break; default:printf(“ 输入有误!nn 返回nn“);goto 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“, 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.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“, if(c=y) 38 printf(“n 录入成功!nn“); break; else if(c=n) printf(“n 重新输入!nn 返回nn“); continue; else printf(“n 输入有误nn 返回nn“); goto error; void payrevise(int month_0) char c; printf(“nn *n“); printf(“ %2d 月支出
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业综合体物业公司员工劳动纪律与职业素养协议
- 网络主播签约经纪公司服务协议模板
- 离婚协议书中财产分割与子女监护权具体规定
- 节能减排物业公司员工劳务合同及环保指标达成协议
- 玫瑰精油神经酸胶囊产品研发与知识产权保护合同
- 贵州省黔东南州2021-2022学年九年级上学期期末文化水平模拟测试道德与法治试卷
- 《公共关系原理与实务》 第四版 练习与答案 朱崇娴 - 第1-5章
- 网络强国思想课件
- 朗读者比赛课件
- 抗菌技术测试题及答案大全
- 矿业公司股权转让与资源开发合作协议
- 司马懿的课件
- 氟化工艺安全操作课件
- 工程论文写作教学课件
- 2025年人教版高中物理必修3专项复习:电势差与电场强度的关系(解析版)
- 分位数因子增广混频分位数回归模型构建及应用研究
- 惠州市人力资源社会保障局编制的劳动合同10篇
- 酒店餐饮部SOP(标准操作手册)
- 冶金机修安全培训课件
- 物业房屋租赁合同模板
- 2022城市轨道交通列车驾驶员技能及素质要求第1部分:地铁、轻轨和单轨
评论
0/150
提交评论