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();
}
java面向对象数组实现家庭收支记账软件_C项目-家庭收支记账软件相关推荐
- java面向对象数组_Java面向对象的构造器与数组对象
Java开发离不开面相对象,那么面向对象如何来的?什么又是数组对象?今天小编就来与大家共同学习一下Java的面向对象的构造器与数组对象. 构造器:用于创建对象时执行初始化.当创建一个对象时eg:new ...
- Java面向对象编程+jdbc连接MySQL+日志Log4j 《项目搜搜移动大厅》
数据库连接类:DBHelp package DBHelp;import java.sql.Connection; import java.sql.DriverManager; import java. ...
- 软件科技项目验收有哪些注意事项?第三方软件验收测试的好处在哪?
软件科技项目的验收是软件生产周期中非常重要的一个环节.它主要目的是验证软件产品是否满足用户需求,达到预期的质量和性能要求.因此,在进行软件科技项目验收时,有一些注意事项需要遵循. 一.软件科技项目验收 ...
- golang项目----家庭收支记账软件
家庭收支记账软件 实现基本功能(先使用面向过程,后面改成面向对象) 项目代码实现改进 面向过程源码 面向对象源码 utils包中 main包中 实现基本功能(先使用面向过程,后面改成面向对象) 编写文 ...
- GO学习项目---家庭收支记账软件
主菜单功能实现: func (f *FamilyAccount) MainMenu() {for {fmt.Println("-----------家庭收支记账软件-----------&q ...
- java小项目家庭记账程序
文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...
- Java小项目——家庭记账项目
学习Java已经过了半个月左右了,所学的知识已经能够写一些小程序或者小项目,虽然它可能没有那么高级,但是也能检验你之前所学的全部内容.所以今天就与大家分享一下我的小项目经验. 一.需求说明 该软件能够 ...
- 家庭记账软件(项目一)
目 标 • 模拟实现一个基于文本界面的<家庭记账软件> • 掌握初步的编程技巧和调试技巧 • 主要涉及以下知识点: 变量的定义 基本数据类型的使用 循环语句 ...
- java实现简单的订餐系统(面向对象+数组)
本文章做的是一个简易版的订餐系统,主要使用了java面向对象的思想和数组来实现的,非常适合刚入门儿的小伙伴拿来练手,快来一起看看吧! 这里首先先看一下实现效果是啥样的,然后在一步步的去实现. 1.订餐 ...
- 小项目——家庭收支软件(1)
简单冗杂代码篇: #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){char k ...
最新文章
- zookeeper在window下的搭建
- 稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。
- 微软拥抱开源,Win10为啥要引入真Linux4.X内核?
- 【OpenCV 例程200篇】90. 频率域陷波滤波器
- docker 守护进程
- PHP--金额数字转换成英文
- VHD容量调整的方法(保存原有vhd)
- 腾讯前端面试题:一言不合就写个五子棋
- 爬虫实例6 爬取联英人才网147页招聘信息,并导入数据库
- mysql 错误的字符串值_这次被坑惨了,MySQL的隐式转换导致了一个线上BUG
- 深度神经网络与卷积神经网络的区别
- 有料科普 | 有一说一,BIM和CIM的这层关系,你了解吗?
- android防丢器设计,基于单片机的防丢器设计
- SpringCloud全家桶主要组件及通信协议剖析
- 用于商用微处理器的快速位收集、位分散和位置换指令(一)
- 怎么Collections.sort()方法进行List排序
- uniapp获取手机App权限
- 阿里云服务器如何设置IPV6通过appstore的审核
- MySql数据库——登录和常用命令
- 基于matlab的SOM自组织网络仿真