概述
家庭收支记账软件
1. 实现基本功能
编写文件myAccount.c完成功能
2.菜单显示
项目采用分级菜单方式。主菜单如下:
--------------------------家庭收支记账软件--------------------------------
1 收支明细
2 登记收入
3 登记支出
4 退出
请选择(1-4):—
3. 登记收入
--------------------------家庭收支记账软件--------------------------------
1 收支明细
2 登记收入
3 登记支出
4 退出
请选择(1-4):2
本次收入金额:1000
本次收入说明:劳务费
4. 登记支出
--------------------------家庭收支记账软件--------------------------------
1 收支明细
2 登记收入
3 登记支出
4 退出
请选择(1-4):3
本次支出金额:800
本次支出说明:物业费
5. 显示明细
收支明细的界面及操作过程如下所示:
--------------------------家庭收支记账软件--------------------------------
1 收支明细
2 登记收入
3 登记支出
4 退出
请选择(1-4):1
----------------------------当前收支明细记录---------------------------------
收支 收支金额 账户金额 说明
收入 1000 11000 劳务费
支出 800 10200 物业费
6.退出系统
--------------------------家庭收支记账软件--------------------------------
1 收支明细
2 登记收入
3 登记支出
4 退出
请选择(1-4):4
确认是否退出(Y/N):
7. 项目代码实现改进
用户输入4退出时,给出提示“你确定要退出吗?y/n",必须输入正确的y/n,否则循环输入指令,直到输入y或者n
当没有任何收支明细时,提示”当前没有收支明细...来一笔吧!’‘
在支出时,判断余额是否够,并给出相应的提示
改成使用结构体完成=>并且使用函数来提高项目的模块话编程,利用今后项目的维护和扩展
8.实现代码版本1-没有使用结构体和函数封装
#include
#include
void main(){
//完成1:显示菜单
//分析
//1.使用do-while来显示菜单,如果用户输入4表示退出程序
//完成2:登记收入
//分析
//1.需要一个字符串来记录收入情况
//完成3:登记支出
//分析
//需要一个字符串来记录收入情况
//完成4
//完成5
//定义相关的变量
char key='';//表示用户输入了哪个菜单
int loop=1;//控制是否退出菜单
char details[3000]="--------------当前收支明细记录--------------n收支t收支金额t账户金额tt说明";
//记录所有的收入和支出情况
char note[20]="";//对收入或者支出的说明
char temp[100]="";//是用于格式化每次的收入或者支出,然乎拼接到details
double money=0.0;
double balance=1000.0;//账户余额,初始化为1000.0
char choice='';//表示用户的选择是y/n
int flag=0;//表示是否有至少一笔收入或者支出
do{
printf("------------家庭收支记账软件--------------");
printf("1 收支明细");
printf("2 登记收入");
printf("3 登记支出");
printf("4 退出");
printf("请选择(1-4):");
scanf("%c",&key);
getchar();//过滤回车
switch(key){
case '1':
if(flag){
printf("%s",details);
}else{
printf("当前没有收支明细,来一笔吧");
}
break;
case '2':
printf("本次收入金额:");
scanf("%lf",&money);
getchar();
balance+=money;
printf("本次收入说明:");
scanf("%s",note);
getchar();
sprintf(temp,"收入t%.2ftt%s",money,balance,note);
//将而本次信息写入到temp字符数组
//将信息拼接到details
strcat(details,temp);
flag=1;
break;
case '3':
printf("本次支出金额:");
scanf("%lf",&money);
getchar();
//判断是否够支出
if(money>balance){
printf("余额不足");
break;
}
printf("本次支出说明:");
scanf("%s",note);
getchar();
balance-=money;
sprintf(temp,"支出t%.2ftt%s",money,balance,note);
//将本次信息,写入到temp字符数组
strcat(details,temp);
flag=1;
break;
case '4':
printf("你确定要退出吗?");
do{
scanf("%c",&choice);
getchar();
if(choice=='y'||choice=='n'){
break;
}
printf("你的输入有误,请重新输入");
}while(1);
if(choice=='y'){
loop=0;
}
}
}while(loop);
printf("你退出了家庭财务软件~~");
getchar();
9 实现代码版本2-使用结构体函数封装
提供软件模块化编程,便于维护
#include
#include
//定义一个结构体
struct MyFamilyAccount{
int flag;
char details[3000];
double balance;
};
//定义相关的变量,全局变量
char key='';
int loop=1;
char note[20]="";
char temp[100]="";
double money=0.0;
char choice='';
//使用函数,完成退出
void myExit(){
printf("你确定要退出吗");
do{
scanf("%c",&choice);
getchar();
if(choice=='y'||choice=='n'){
break;
}
printf("你的输入有误,请重新输入");
}while(1);
if(choice=='y'){
loop=0;
}
}
//使用函数,显示明细
void shouDetails(struct MyFamilyAccount *myFamilyAccount){
if((*myFamilyAccount).flag){
printf("%s",(myFamilyAccount).details);
}else{
printf("当前没有收支明细,来一笔吧");
}
}
//使用函数,完成登记收入,封装
void income(struct MyFamilyAccount *myFamilyAccount){
printf("本次收入金额:");
scanf("%lf",&money);
getchar();
(*myFamilyAccount).balance+=money;
printf("本次收入说明");
scanf("%s",note);
getchar();
sprintf(temp,"收入t%.2ftt%.2ftt%s",money,(*myFamilyAccount).balance,note);
strcat((*myFamliyAccount).details,temp);
(*myFamilyAccount).flag=1;
}
//完成一个登记支出
void pay(struct MyFamilyAccount *myFamilyAccount){
printf("本次支出金额:");
scanf("%lf",&money);
getchar();
if(money>(*myFamilyAccount).balance){
printf("余额不足");
return;
}
printf("本次支出说明");
scanf("%s",note);
getchar();
(*myFamilyAccount).balance-=money;
sprintf(temp,"支出t%.2ftt%.2ftt%s",money,(*myFamilyAccount).balance,note);
strcat((*myFamilyAccount).details,temp);
(*myFamilyAccount).falg=1;
}
//函数专门显示菜单
void mainMenu(struct MyFamilyAccount *myFamilyAccount){
do{
printf("-------家庭收支记账软件----------");
printf("1 收支明细");
printf("2 登记收入");
printf("3 登记支出");
printf("4 退出");
printf("请选择(1-4)");
scanf("%c",&key);
getchar();
switch(key){
case '1':
shouDetails(myFamilyAccount);
break;
case '2':
income(myFamilyAccount);
break;
case '3':
pay(myFamilyAccount);
break;
case '4':
myExit();
}
}while(loop);
printf("你退出了家庭财务软件");
getchar();
}
void main(){
//创建一个结构体变量
struct MyFamilyAccount myFamilyAccount;
//初始化
myFamilyAccount.flag=0;
myFamilyAccount.balance=1000.0;
//使用拷贝的方式赋值
memset(myFamilyAccount.details,3000,0);
strcpy(myFamilyAccount.details,"----------当前收支明细记录---------收支t收支金额t账户金额t说明");
//调用mainMenu显示菜单
mainMenu("&myFamilyAccount");
getchar();
}
最后
以上就是可耐火车为你收集整理的java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件的全部内容,希望文章能够帮你解决java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复