C语言课设家庭财务小管家(大作业)

一、设计目的

(1)巩固和加深对C语言课程基本知识的理解和掌握;
(2)掌握C语言编程和调试的基本技能;
(3)掌握利用C语言进行软件设计的方法

二、任务概述

(1)本课程设计用C语言创建的系统实现对家庭成员收入、支出进行添加、查询、删除、修改功能。
(2)本系统以菜单方式工作,通过家庭成员姓名登录系统。
(3)支持录入,删除,修改成员收支记录的功能。

三、功能展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、思维导图

在这里插入图片描述

五、程序源码

#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>

int Recordcount;//定义全局变量 

struct F_Data
{
	int year;        //年
	int month;      //月 
	int data;        //日期
	float amout;     //金额
    char name[20];   //姓名
    int type;         //收入或支出类型
	char comment[100];    //备注 
	struct F_Data*next;    //定义一个指针
}e[1000];
 struct F_Data*head=NULL;
  void add();
  void search();
  void delete_rec();
  void show();
  void menu();
  void start();
  
  
  void start()//开始界面 
{
     system("cls");
     printf("\n\n\n\n\n");
     printf("\t*********************************************************\n");
     printf("\t*****************欢迎使用家庭财务管家系统****************\n");
     printf("\t**********************************************************\n");
     printf("         \n\n\n\n\n\n\n                ");
     system("pause");
     
     
}
void menu()//菜单界面 
{
     
     system("cls");
     printf("\n\n\n\n\n");
     printf("       ********************* 菜单************************");
     printf("                          \n\n");
     printf("                       1,输入\n");
     printf("                       2,显示\n");
     printf("                       3,查询\n");
     printf("                       4,删除\n");
         
}
 
void add()//添加模块代码
{
	system("cls"); 	             /*清屏*/ 
	struct F_Data *p=NULL;     /*定义pNode为struct F_Data类型指针*/
	p=(struct F_Data*)malloc(sizeof(struct F_Data));   /*运行时动态调整所占内存                    的大小*/
    printf("请输入年份:");
	scanf("%d",&p->year);
    printf("请输入月份:");
	scanf("%d",&p->month);
if((p->month>0)&&(p->month<13))     /*限定月份为1~12 */
{  
    printf("请输入日期:");
	scanf("%d",&p->data);
    printf("请输入金额:");
	scanf("%f",&p->amout);
	printf("请输入姓名:"); 
    scanf("%s",p->name);
	printf("收入按1,支出按0:");
	scanf("%d",&p->type);
	printf("请输入类型:");
    scanf("%s",p->comment);
	p->next=head;           /*插入一个结点 */
	    head=p;	
	Recordcount++;          /*结点数加一 */
}
    void save(int m);
    system("PAUSE");            /*停顿*/ 
}// 在菜单界面选择"添加"选项,界面会依次显示年份,月份,且限定月份为1~12,再显示日期,金额,姓名,type,类型逐个填写,然后返回到菜单界面。




void save(int m)                 //保存函数
{
	FILE *fp;
    int i;                   //文件行指针
	if((fp=fopen("d:家庭财务管理.dat","wb"))==NULL)  //打开文件、为输出打开一个二进制文件
	{
		printf("文件打开错误!\n");
		exit(0);
	}
	for(i=0;i<m;i++)
	 if(fwrite(&e[i],sizeof(struct F_Data),1,fp)!=1)
	 {printf("没有文件!");
	   getchar();
	   return;
      }
      fclose(fp);
}






void search()//查询模块代码
{
	system("cls");                          /*清屏*/
char name[20];
int type; 
int choice; 
struct F_Data*p=NULL;                      /*定义pNode为struct F_Data类型指针*/
   printf("1按姓名查找\n2按类型查找\n ");
	printf("请输入你的选择:");
	scanf("%d",&choice);
	if(choice==1)
	{
		printf("请输入姓名:");
		scanf("%s",name);
		for(p=head;p!=NULL;p=p->next)  /*从链表的第一个结点到尾结点 */
		if(strcmp(p->name,name)==0)     /*如果输入的name和结点中的name一样 */
		{   
		    printf("%d\t",p->year);     
		    printf("%d\t",p->month);
		    printf("%d\t",p->data);
			printf("%.2f\t",p->amout);
			printf("%s\t",p->name);
			printf("%d\t",p->type);
			printf("%s\n",p->comment);
		}
	}
	if(choice==2)
	{
	    printf("请输入类型:1收入 0支出\n ");
		scanf("%d",&type);
		for(p=head;p!=NULL;p=p->next)
		if(p->type==type)            /*如果输入的type和结点中的type一样 */
		{
			printf("%d\t",p->year);
		    printf("%d\t",p->month);
		    printf("%d\t",p->data);
			printf("%.2f\t",p->amout);
			printf("%s\t",p->name);
			printf("%d\t",p->type);
			printf("%s\n",p->comment);
		}
	}
	system("PAUSE");                  /*停顿*/ 
}// 在菜单界面选择"查询"选项,界面会让你选择查找的方式 :1按姓名查找2按类型查找,用户可以根据自己的需要进行选择,按1就输入联系人的姓名,按2就输入类型,系统会进行查询,如果有就显示该条记录。




		
void delete_rec()
{
system("cls");                           /*清屏*/
char name[20];
float amout; 
int choice;
struct F_Data *p=NULL,*q=NULL;   /*定义p和q都为struct F_Data类型指针*/
p=head;      /*p指向第一个结点 */
q=head;      /*q指向第一个结点 */
printf("请输入要删除者的姓名:");
scanf("%s",name);	
printf("请输入金额:");
scanf("%f",&amout);
for(;q!=NULL;q=q->next)   /*q指针从链表的第一个结点到尾结点 */
{
if((head->amout==amout)&&(strcmp(head->name,name)==0)) /*如果头结点符合要求 */
  {
        	printf("%d\t",q->year);
		    printf("%d\t",q->month);
		    printf("%d\t",q->data);
			printf("%.2f\t",q->amout);
			printf("%s\t",q->name);
			printf("%d\t",q->type);
			printf("%s\n",q->comment);
			printf("确认删除?\n 1是\n 2否\n");
			scanf("%d",&choice);
			if(choice==1)
			{
				head=q->next;    /*删除头结点 */
                Recordcount--;   /*结点数减一*/ 
			}
			else break;
   }
else
   { 
      if((q->amout==amout)&&(strcmp(q->name,name)==0))  /*如果结点符合要求 */
     {
	       {
	       	printf("%d\t",q->year);
		    printf("%d\t",q->month);
		    printf("%d\t",q->data);
			printf("%.2f\t",q->amout);
			printf("%s\t",q->name);
			printf("%d\t",q->type);
			printf("%s\n",q->comment);
	        }
	        printf("确认删除?\n 1是\n 2否\n");
			scanf("%d",&choice);
			if(choice==1)
			{
             p->next=q->next;  /*删除一个结点*/ 
        	Recordcount--;       /*结点数减一*/ 
			}
			else break;
      }
     else    
	 {
	 p=q;   /*p后移一 个位子*/
	 }
             		
   }
}

system("PAUSE");				 /*停顿*/ 
}//选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录。 



void show()//显示模块
{
system("cls");                        /*清屏*/
struct F_Data*p=NULL;              /*定义p和q都为struct F_Data类型指针*/
float j=0.0,i=0.0,w=0.0;
for(p=head;p!=NULL;p=p->next)    /*从链表的第一个结点到尾结点 */
{   
    printf("%d\t",p->year);
    printf("%d\t",p->month);
    printf("%d\t",p->data);
	printf("%.2f\t",p->amout);
	printf("%s\t",p->name);
	printf("%d\t",p->type);
	printf("%s\n",p->comment);
 if(p->type==1)	    
    j+=p->amout;  /*把type=1记录中的金额全部加给j*/ 
 else
   i+=p->amout;
}
    printf("一共收入:%.2f\n",j);  
printf("一共支出:%.2f\n",i); 
w=j-i;
printf("当前余额:%.2f\n",w); 
	system("PAUSE");               /*停顿*/ 
}
//在界面选择显示选项后,屏幕上会把每条记录依次显示出来,并把总收入和总支出及目前余额也统计并显示出来。








int main()
{
    
    int n,button;
    system("color 5A");
    start();
    menu();
//    getchar();
    
    do
    {
              printf("                 请选择您想要的功能(1--4):\n");
              scanf("%d",&n);
              if(n>0&&n<5)
              {
                          button=1;break;
                          
                          }
              else
              {  button=0;
                 printf("输入有误,重新输入");
                  
              }
    }while(button==0);
    
    while(button==1)
    {  
             switch(n)
             {

                case 1: add();break;
                case 2: show();break;
                case 3: search();break;
                case 4: delete_rec();break;
                default :break; 
                   
             }
             getchar();
	printf("\n");
	printf("按任意键继续\n");
	getch();
    system("cls");  /*清屏*/
    menu(); /*调用菜单函数*/
    printf("功能选择(1--4):\n");
    scanf("%d",&n);
    printf("\n");    
    }
}
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kui954

感谢各位的支持o(* ̄3 ̄)o

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值