您好,欢迎访问三七文档
1程序设计报告(2012/2013学年第一学期)题目:家庭支出管理系统专业自动化学生姓名阚世俊班级学号B12050229指导教师张勤指导单位计算机软件教学中心日期2012年12月20日2评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语教师签名:年月日评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格3家庭支出管理系统一、课题内容和要求1、该系统要求对一个家庭某月的支出情况进行统计和分析。通过此课题,熟练掌握数组、指针的各种操作,以及一些算法思想的应用。2、功能要求:(1)支出信息包括:支出类型(主要可以分为饮食,服饰装扮,礼金,教育培训,电器,健身,通讯,子女培养,旅游,文化娱乐,医疗,交通,聚会,居住等小项),金额,消费地点,消费时间等。(2)需要实现的功能1)用户根据口令进入系统2)输入某一月份,完成该月份的支出管理3)输入并统计该月的支出情况4)显示该月支出信息表,内容应包括日期,金额等5)按支出类型进行分类统计和排序6)进行本月消费分析,即分析每项支出所占总支出的百分比,并显示分析结果7)显示按支出类型排序后的支出信息8)将排序后的内容存为文件。(3)界面友好,输入信息符合逻辑如存款金额不为负数、不可能有非数字的字符等。二、需求分析这个程序利用输入,输出,排序和百分比等功能对家庭的各项支出管理进行操作,以次来方便操作管理。1,菜单函数,此函数是为了让用户根据菜单选择功能并根据提示来进行操作。2,密码函数,因为家庭支出管理系统涉及到私人财务,所以需要利用密码函数对程序进行保密。因此只有在输入正确的口令后才能进入该系统。3,输入函数,为了实现将各个指出项目的烈性,支出的金额以及消费的时间,地点等存入需要的文件里,所以必须先要存在存储器里。4,求和函数,实现简单的求和功能,就是利用求和功能求出每月的各项金额的总和。一次来统计出该月的支出情况。5,输出函数,即通过行列表来直观对应所输入的项目的金额,消费时间及地点。6,分析函数,对本月的消费进行分析,分析出每项支出所占总支出的百分比,通过他们各自的项目金额所占的百分比来直观显示那个指出比较重要。7,类别排序函数,对本月相同的类别进行合并统计,并排序。8,保存函数,就是将输入的信息保存下来并存入文档或者其他形式的文件。4按消费价格排序支出情况计算消费总和主函数退出系统输入消费金额消费分析按消费类别排序保存数据及结果输入月份三、概要设计首先,编写一个现实的菜单函数以方便用户将支出中的内容(钱,时间,地点等)定义成结构体。然后根据需求可以完成需求的函数,输入信息的Put函数,计算总支出的Money函数,显示所有的Display函数。最后,编写主程序,这一步可以调用功能函数,并利用相应的函数将其与菜单联系起来,方便用户使用。1,定义机构体,声明各成员的变量含义。2,定义密码函数,通过对指针的运用,利用getch()函数来获得输入的密码值,再用来与定义的密码值作比较利用ifelse语句,来显示输入密码的正确性。3,显示主菜单,采用switch()和case语句,根据用户的选择则进入相应的模块。4,Menu菜单包括输入函数inputitems(),求和函数Summoney(),输出函数showitems(),类别排序函数paixu(),消费价格排序函数shunxu(),分析函数analyseitems(),保存函数save(),并在最后添加一个退出选项exit。5,设置密码函数voidpassword(),我是采用逐字比较法,用for循环一次进行从前到后的对比,假如完全正确用break跳出循环进入系统,如果错误就要重新输入。6,输入函数intinoutitems(expensesxp[],intn),在第1步中定义了exp[],其中的type,place,money,time都是成员变量,逐项进行输入。输入完毕的话则回到了第3步重新开始。7,求和函数Summoney(expensesxp[],intn),利用循环和自加来求一个总和。相加的只是各项成员的成员变量money。8,输出函数Display(expensesxp[],intn),仍然用循环采用逐项输出。9,分析函数analyseitems(expensesxp[],intn),需要统计百分比,定义一个求和变量,计算所有输出的总和s,再用每类支出除以s再乘以100%,用来求取百分比。10.消费类别排序函数paixu(expensesxp[],intn),用字符串比较法找出相同的类别,把同类别的值加到第一个相同的值上,后面的赋值为0,输出时判断不为0的值才输出。11.保存函数save(expensesxp[],intn),将数据保存到学号命名的文档里。5四、源程序代码#includestdio.h#includestdlib.h#includectype.h#includestring.h#includeconio.h#includemalloc.h#includewindows.htypedefstruct//定义结构体{chartype[20];//消费类型floatGetsum;//消费金额charplace[20];//消费地点inttime;//消费时间}family;familyfam[80];intmenu_select()//显示该系统所具备的功能{charc;do{system(cls);//消屏printf(\t\t**********************\n);printf(\t\t********菜单系统**********\n);printf(\t\t|1.输入消费信息|\n);printf(\t\t|2.计算消费总和|\n);printf(\t\t|3.显示消费信息|\n);printf(\t\t|4.对同种类型消费进行排序并显示|\n);printf(\t\t|5.消费情况分析|\n);printf(\t\t|6.添加消费信息|\n);6printf(\t\t|7.保存数据|\n);printf(\t\t|0.退出系统|\n);printf(\t\t**********************\n);printf(\t\t**********************\n);printf(\t\t\t请对应选择所需选项(0-7));c=getchar();}while(c'0'||c'7');return(c-'0');}voidpassword()//验证密码或密码修改{intm;printf(\t\t***********************\n);printf(\t\t***********************\n);printf(\t\t**\t\t.密码修改**\n);printf(\t\t**\t\t.登陆**\n);printf(\t\t***********************\n);printf(\t\t***********************\n);printf(\t\t\t请输入您所要的选项(1,2):);scanf(%d,&m);getchar();switch(m){case1://密码修改{inti,j;chara[7],b[7],c[7],d[7];FILE*fp1;FILE*fp2;fp1=fopen(D:\\密码.txt,r);if(!fp1){7printf(filecannotbeopened);exit(1);}for(i=0;!feof(fp1);i++){a[i]=fgetc(fp1);}fclose(fp1);printf(\t\t\t请输入原密码:);for(j=0;j7;j++){scanf(%c,b+j);if(b[j]='0'&&b[j]='9'||b[j]='a'&&b[j]='z'||b[j]='A'&&b[j]='Z')putchar('*');}if(a[0]==b[0]&&a[1]==b[1]&&a[2]==b[2]&&a[3]==b[3]&&a[4]==b[4]&&a[5]==b[5]){do{printf(\t\t\t请设置您的新密码:);for(j=0;j7;j++){scanf(%c,c+j);if(c[j]='0'&&c[j]='9'||c[j]='a'&&c[j]='z'||c[j]='A'&&c[j]='Z')putchar('*');}printf(\t\t\t请确认您的新密码:);for(j=0;j7;j++){scanf(%c,d+j);if(d[j]='0'&&d[j]='9'||d[j]='a'&&d[j]='z'||d[j]='A'&&d[j]='Z')putchar('*');}8}while(!(c[0]==d[0]&&c[1]==d[1]&&c[2]==d[2]&&c[3]==d[4]&&c[4]==d[4]&&c[5]==d[5]));fp2=fopen(D:\\密码.txt,w+);if(!fp2){printf(thefilecannotbeopened);exit(1);}i=0;while(i6){fprintf(fp2,%c,c[i]);i++;}fclose(fp2);printf(\t\t\t密码修改成功!\n);}else{printf(\t\t\t密码错误\n);exit(0);}}case2://密码验证{chare[7],f[7];intn=0;inti,j;FILE*fp1;9fp1=fopen(D:\\密码.txt,r);if(!fp1){printf(thefilecannotbeopened!);exit(1);}for(i=0;!feof(fp1);i++){e[i]=fgetc(fp1);}fclose(fp1);do{printf(\t\t\t请输入六位数密码:);for(j=0;j7;j++){scanf(%c,f+j);if(f[j]='0'&&f[j]='9'||f[j]='a'&&f[j]='z'||f[j]='A'&&f[j]='Z')putchar('*');}if(!(e[0]==f[0]&&e[1]==f[1]&&e[2]==f[2]&&e[3]==f[3]&&e[4]==f[4]&&e[5]==f[5])){printf(\n密码错误!请重新输入:\n);n++;}if(n3){printf(error\n);exit(0);}}while(!(e[0]==f[0]&&e[1]==f[1]&&e[2]==f[2]&&e[3]==f[3]&&e[4]==f[4]&&e[5]==f[5]));printf(\n\t\t\t欢迎使用!\n);}10}}intInputitems(familysum[],intn)//输入消费信息{inti=0;charsign='y',x[10];while(sign!='n'&&sign!='N'){printf(\t\t\t种类:);scanf(\t\t\t%s,sum[n+i].type);printf(\t\t\t支出(大于0):);scanf(\t\t\t%f,&sum[n+i].Getsum);printf(\t\t\t地点:);scanf(\t\t\t%s,sum[n+i].place);printf(\t\t\t时间(0-31):);scanf(\t\t\t%d,&sum[n+i].time);if(sum[n+i].time1||sum[n+i].time31)returnfalse;gets(x);printf(\t\t\t需要再次输入吗?(y/n));scanf(\t\t\t%c,&sign);i++;}retu
本文标题:程序上机作业
链接地址:https://www.777doc.com/doc-7168957 .html