java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件

家庭收支记账软件

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账户金额\t\t说明";

//记录所有的收入和支出情况

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%.2f\t\t%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%.2f\t\t%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%.2f\t\t%.2f\t\t%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%.2f\t\t%.2f\t\t%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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值