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

C语言课设家庭财务小管家(大作业)一 设计目的 1 巩固和加深对 C 语言课程基本知识的理解和掌握 2 掌握 C 语言编程和调试的基本技能 3 掌握利用 C 语言进行软件设计的方法 二 任务概述 1 本课程设计用 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"); } } 

讯享网
小讯
上一篇 2025-03-06 09:17
下一篇 2025-04-04 10:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44836.html