家庭收支记账软件

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项目-家庭收支记账软件相关推荐

  1. java面向对象数组_Java面向对象的构造器与数组对象

    Java开发离不开面相对象,那么面向对象如何来的?什么又是数组对象?今天小编就来与大家共同学习一下Java的面向对象的构造器与数组对象. 构造器:用于创建对象时执行初始化.当创建一个对象时eg:new ...

  2. Java面向对象编程+jdbc连接MySQL+日志Log4j 《项目搜搜移动大厅》

    数据库连接类:DBHelp package DBHelp;import java.sql.Connection; import java.sql.DriverManager; import java. ...

  3. 软件科技项目验收有哪些注意事项?第三方软件验收测试的好处在哪?

    软件科技项目的验收是软件生产周期中非常重要的一个环节.它主要目的是验证软件产品是否满足用户需求,达到预期的质量和性能要求.因此,在进行软件科技项目验收时,有一些注意事项需要遵循. 一.软件科技项目验收 ...

  4. golang项目----家庭收支记账软件

    家庭收支记账软件 实现基本功能(先使用面向过程,后面改成面向对象) 项目代码实现改进 面向过程源码 面向对象源码 utils包中 main包中 实现基本功能(先使用面向过程,后面改成面向对象) 编写文 ...

  5. GO学习项目---家庭收支记账软件

    主菜单功能实现: func (f *FamilyAccount) MainMenu() {for {fmt.Println("-----------家庭收支记账软件-----------&q ...

  6. java小项目家庭记账程序

    文章目录 java小项目家庭记账程序 **1.项目目标:** 2.项目需求: 3.具体思路: 4.具体代码: 1.页面: 2.Option_1类: 3.Option_2类: 4.Option_3类: ...

  7. Java小项目——家庭记账项目

    学习Java已经过了半个月左右了,所学的知识已经能够写一些小程序或者小项目,虽然它可能没有那么高级,但是也能检验你之前所学的全部内容.所以今天就与大家分享一下我的小项目经验. 一.需求说明 该软件能够 ...

  8. 家庭记账软件(项目一)

    目 标 • 模拟实现一个基于文本界面的<家庭记账软件> • 掌握初步的编程技巧和调试技巧 • 主要涉及以下知识点:    变量的定义    基本数据类型的使用    循环语句    ...

  9. java实现简单的订餐系统(面向对象+数组)

    本文章做的是一个简易版的订餐系统,主要使用了java面向对象的思想和数组来实现的,非常适合刚入门儿的小伙伴拿来练手,快来一起看看吧! 这里首先先看一下实现效果是啥样的,然后在一步步的去实现. 1.订餐 ...

  10. 小项目——家庭收支软件(1)

    简单冗杂代码篇: #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){char k ...

最新文章

  1. zookeeper在window下的搭建
  2. 稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记。
  3. 微软拥抱开源,Win10为啥要引入真Linux4.X内核?
  4. 【OpenCV 例程200篇】90. 频率域陷波滤波器
  5. docker 守护进程
  6. PHP--金额数字转换成英文
  7. VHD容量调整的方法(保存原有vhd)
  8. 腾讯前端面试题:一言不合就写个五子棋
  9. 爬虫实例6 爬取联英人才网147页招聘信息,并导入数据库
  10. mysql 错误的字符串值_这次被坑惨了,MySQL的隐式转换导致了一个线上BUG
  11. 深度神经网络与卷积神经网络的区别
  12. 有料科普 | 有一说一,BIM和CIM的这层关系,你了解吗?
  13. android防丢器设计,基于单片机的防丢器设计
  14. SpringCloud全家桶主要组件及通信协议剖析
  15. 用于商用微处理器的快速位收集、位分散和位置换指令(一)
  16. 怎么Collections.sort()方法进行List排序
  17. uniapp获取手机App权限
  18. 阿里云服务器如何设置IPV6通过appstore的审核
  19. MySql数据库——登录和常用命令
  20. 基于matlab的SOM自组织网络仿真

热门文章

  1. 注册表常用命令DOS
  2. 氨基酸三字母序列转单字母序列
  3. [全网首发]坚果Pro3 root教程 Magisk
  4. Lua - 从指定时区提供的时间戳、时区的 UTC 时差,转换为对应当前本地 UTC 时差后的时间
  5. 学校计算机室如何连接热点,电脑连热点怎么操作
  6. php开发数独,数独解题小程序实现代码
  7. 同步时钟、异步时钟----概念解析
  8. JAVA爬取网站查询网络IP所在地
  9. 计算机3大总线名词解释,计算机名词解释-- 总线.doc
  10. ARP协议的工作流程