用C语言写个人财务管理系统

用C语言写个人财务管理系统,第1张

//之前写的,命名不标准,勿学此命名格式;

#include
#include
#include
//本系统使用了大量的system("cls");清屏; system("pause");暂停;
//本系统用到了大量的goto语句,且以k开头。



void Interface();//主界面
int Scanf_();//录入界面
void Printf_();//查看财务表界面
int Query();//查询界面
void Summary();//汇总统计

struct str {
    char event[40];//事件
    float money;//日期
    int igid[3];//金额
} str[100], uct[100];//str[100]代表收入,uct[100]代表支出


//本系统用到了大量的全局变量
int option, option_1 = 0, option_2 = 0, option_3 = 0, option_4 = 0, option_5, option_6; //储存用户输入的选项数据
int frequency = 0, frequency_1 = 0; //次数 frequency:收入的用户输入次数,frequency_1:支出的用户输入次数
int i = 0, j = 0, x = 0, igid_scanf_1, igid_scanf_2, igid_scanf_3, x1 = 0, x2 = 0;//x,x1,x2:判断条件;igid_scanf_1 ,igid_scanf_2, igid_scanf_3:用于以日期进行查询;
char event_scanf[40];//用于以事件进行查询
float money_scanf, money_m = 0, money_n = 0, money_a, money_b, money_c; //money_scanf:用于以金额进行查询;money_m=0:存储月总收入/支出金额,money_n:存储日平均金额;money_a:存储所有总收入,money_b:存储所有总支出,money_c:存储剩余金额;

int main() {
    while (1) {
        char name[30] = {"guanliyuan123"}, name_1[30];//用户名
        int password = 123456, password_1;//密码
        system("cls");
        printf("****************************************登录界面********************************\n");
        printf("请输入用户名:");
        scanf("%s", name_1);
        fflush(stdin);
        printf("请输入密码:");
        scanf("%d", &password_1);
        fflush(stdin);
        //判断用户输入的账户密码是否正确
        if (strcmp(name, name_1) == 0 && password == password_1) {
            while (1) {
                system("cls");
                Interface();
                //利用switch语句进行调用自定义函数
                switch (option) {
                    //退出
                    case 0:
                        printf("退出成功!\n");
                        exit(0);
                    //录入
                    case 1:
                        Scanf_();
                        break;
                    //查看
                    case 2:
                        Printf_();
                        break;
                    //查询
                    case 3:
                        Query();
                        break;
                    //汇总统计
                    case 4:
                        Summary();
                        break;
                    //帮助
                    case 5:
                        system("cls");
                        printf("系统简单且见名知意,无需帮助!\n");
                        system("pause");
                        break;
                    //输入错误提示
                    default:
                        printf("输入错误!\n");
                        system("pause");
                        break;
                }
            }

        } else {
            //输入错误提示(登录)
            system("cls");
            printf("用户名或密码错误!请重新输入!\n");
            system("pause");
        }
    }
    return 0;
}
void Interface() { //主界面/选择界面
    printf("*******************************************************************************\n");
    printf("                                  主界面                                        \n");
    printf("0.退出\t1.录入(收入/支出)\t2.查看财务表\t3.查询(收入/支出)\t4.汇总统计\t5.帮助\n");
    printf("请输入选项:");
    scanf("%d", &option);
}
//录入函数
int Scanf_() {

    printf("1.录入收入\t2.录入支出\n");
k2:
    printf("请输入选项:");
    scanf("%d", &option_1);
    //判断选项是否输入错误
    if (option_1 > 2 || option_1 < 1) {
        printf("输入错误,请重新输入!\n");
        goto k2;
    }
    //录入收入
    if (option_1 == 1) {
        while (1) {
            system("cls");
            printf("*************************************************录入界面*******************************************\n");
            printf("请输入收入来源(事件):");
            scanf("%s", str[frequency].event);//让用户输入收入事件
k:
            fflush(stdin);

            printf("请输入收入日期(****/**/**):");
            scanf("%d/%d/%d", &str[frequency].igid[0], &str[frequency].igid[1], &str[frequency].igid[2]);//让用户输入收入日期
            //判断用户输入日期格式是否正确
            if (str[frequency].igid[1] > 12 || str[frequency].igid[1] < 1) {
                x2 = 1;
            }
            if (str[frequency].igid[2] > 31 || str[frequency].igid[2] < 1) {
                x2 = 1;

            }
            if (x2 == 1) {

                printf("输入格式错误,请重新输入!\n");
                x2 = 0;
                goto k;//goto语句 k
            }
            fflush(stdin);
            printf("请输入收入金额(元):");
            scanf("%f", &str[frequency].money);//让用户输入收入金额
            fflush(stdin);
            money_a += str[frequency].money; //算总金额
            frequency += 1;//    frequency+1

k1:
            //让用户选择是否继续录入
            printf("是否继续录入(1.继续/2.退出):");
            scanf("%d", &option_2);
            fflush(stdin);
            //直接退出scanf_函数
            if (option_2 == 2) {
                return 0;
            }
            //提示用户输入选项错误
            if (option_2 > 2 || option_2 < 1) {
                printf("输入错误,请重新输入!\n");
                goto k1;//goto语句 k1
                system("pause");
            }
        }

    }
    //支出录入
    if (option_1 == 2) {
        while (1) {
            system("cls");
            printf("*************************************************录入界面*******************************************\n");
            printf("请输入支出去向(事件):");
            scanf("%s", uct[frequency_1].event);//让用户输入支出事件
k3:
            fflush(stdin);

            printf("请输入支出日期(****/**/**):");
            scanf("%d/%d/%d", &uct[frequency_1].igid[0], &uct[frequency_1].igid[1], &uct[frequency_1].igid[2]);//让用户输入支出日期
            //判断用户输入的日期格式是否正确
            if (uct[frequency_1].igid[1] > 12 || uct[frequency_1].igid[1] < 1) {
                x2 = 1;
            }
            if (uct[frequency_1].igid[2] > 31 || uct[frequency_1].igid[2] < 1) {
                x2 = 1;
            }
            if (x2 == 1) {
                printf("输入格式错误,请重新输入!\n");
                x2 = 0;
                goto k3;//goto语句 k3

            }
            fflush(stdin);
            printf("请输入支出金额(元):");
            scanf("%f", &uct[frequency_1].money);//让用户输入支出金额
            fflush(stdin);
            money_b += uct[frequency_1].money;
            frequency_1 += 1;
            //让用户选择是否继续录入
k8:
            printf("是否继续录入(1.继续/2.退出):");
            scanf("%d", &option_2);
            fflush(stdin);
            //直接退出scanf_自定义函数
            if (option_2 == 2) {
                return 0;
            }
            //提示用户错误
            if (option_2 > 2 || option_2 < 1) {
                printf("输入错误,请重新输入!\n");
                goto k8;//goto语句 k8
                system("pause");
            }
        }
        system("pause");
    }
    return 0;
}
//查看财务表
void Printf_() {
    system("cls");
    money_c = money_a - money_b; //算出剩余金额
    printf("***************************************查看财务表界面********************************************\n\n\n");
    printf("*********************收入**********************\n");
    printf("事件\t 日期\t 金额(元)\n");
    //判断用户是否输入收入信息
    if (frequency == 0) {
        printf("无收入记录\n");
    } else {
        for (i = 0; i < frequency; i++) {

            printf("%s\t%d/%d/%d\t%.2f\n", str[i].event, str[i].igid[0], str[i].igid[1], str[i].igid[2], str[i].money);//输出收入信息
        }
    }

    printf("\n\n\n*********************支出**********************\n");
    printf("事件\t 日期\t 金额(元)\n");
    //判断用户是否输入支出信息
    if (frequency_1 == 0) {
        printf("无支出记录\n");
    } else {
        for (i = 0; i < frequency_1; i++) {

            printf("%s\t%d/%d/%d\t%.2f\n", uct[i].event, uct[i].igid[0], uct[i].igid[1], uct[i].igid[2], uct[i].money);//输出支出信息
        }
    }
    printf("\n\n总收入:%.2f(元)\n总支出:%.2f(元)\n剩余金额:%.2f(元)\n", money_a, money_b, money_c); //输出总金额,总支出,剩余金额
    system("pause");

}
//查询
int Query() {
    system("cls");
    printf("************************************查询界面**********************************\n");
    printf("1.收入查询\t2.支出查询\n");
k5:
    printf("请选择选项:");
    scanf("%d", &option_3);//进行选择
    //收入查询
    if (option_3 == 1) {
        system("cls");
        printf("1.事件查询\t2.日期查询\t3.收入金额(元)查询\n");
k4:
        printf("请选择选项:");
        scanf("%d", &option_4);//进行选择
        //事件查询
        if (option_4 == 1) {
            system("cls");
            printf("请输入要查询的事件:");
            scanf("%s", event_scanf);
            for (i = 0; i < frequency; i++) {
                //遍历数据集寻找与用户想要查询的事件的相同数据
                if (strcmp(str[i].event, event_scanf) == 0) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("*****************收入信息*******************\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", str[i].event, str[i].igid[0], str[i].igid[1], str[i].igid[2], str[i].money);//输出对应的信息
                x = 0;
                system("pause");
                return 0;
            }
            //提示错误
            if (x == 0) {
                system("cls");
                printf("查无此事件!");
            }
        }
        //日期查询
        if (option_4 == 2) {
            system("cls");

            printf("请输入要查询的日期(****/**/**):");
            scanf("%d/%d/%d", &igid_scanf_1, &igid_scanf_2, &igid_scanf_3);
            for (i = 0; i < frequency; i++) {
                //遍历数据集寻找与用户想要查询的日期的相同数据
                if (str[i].igid[0] == igid_scanf_1 && str[i].igid[1] == igid_scanf_2 && str[i].igid[2] == igid_scanf_3) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("********收入信息**********\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", str[i].event, str[i].igid[0], str[i].igid[1], str[i].igid[2], str[i].money);//输出对应的信息
                x = 0;
                system("pause");
                return 0;
            }
            //提示错误
            if (x == 0) {
                system("cls");
                printf("查无此日期!");
            }
        }
        //金额查询
        if (option_4 == 3) {
            system("cls");

            printf("请输入要查询的收入金额(元):");
            scanf("%f", &money_scanf);
            for (i = 0; i < frequency; i++) {
                //遍历数据集寻找与用户想要查询的金额的相同数据
                if (str[i].money == money_scanf) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("********收入信息**********\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", str[i].event, str[i].igid[0], str[i].igid[1], str[i].igid[2], str[i].money);//输出对应的信息
                x = 0;
                system("pause");
                return 0;
            }
            //提示错误
            if (x == 0) {
                system("cls");
                printf("查无此收入金额(元)!");
            }
        }
        //提示错误
        if (option_4 > 3 || option_4 < 1) {
            printf("输入错误,请重新输入!\n");
            goto k4;//goto语句 k4

        }
    }

//支出查询
    if (option_3 == 2) {
        system("cls");
        printf("1.事件查询\t2.日期查询\t3.收入金额(元)查询\n");
k7:
        printf("请选择选项:");
        scanf("%d", &option_4);
        //事件查询
        if (option_4 == 1) {
            system("cls");
            printf("请输入要查询的事件:");
            scanf("%s", event_scanf);
            for (i = 0; i < frequency_1; i++) {
                //遍历数据集寻找与用户想要查询的事件的相同数据
                if (strcmp(uct[i].event, event_scanf) == 0) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("*****************支出信息*******************\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", uct[i].event, uct[i].igid[0], uct[i].igid[1], uct[i].igid[2], uct[i].money);//输出对应的信息
                x = 0;
                system("pause");
                return 0;
            }
            if (x == 0) {
                system("cls");
                printf("查无此事件!");
            }
        }
        //日期查询
        if (option_4 == 2) {
            system("cls");

            printf("请输入要查询的日期:");
            scanf("%d/%d/%d", &igid_scanf_1, &igid_scanf_2, &igid_scanf_3);
            for (i = 0; i < frequency_1; i++) {
                //遍历数据集寻找与用户想要查询的日期的相同数据
                if (uct[i].igid[0] == igid_scanf_1 && uct[i].igid[1] == igid_scanf_2 && uct[i].igid[2] == igid_scanf_3) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("********支出信息**********\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", uct[i].event, uct[i].igid[0], uct[i].igid[1], uct[i].igid[2], uct[i].money);//输出对应的信息
                x = 0;
                system("pause");
                return 0;
            }
            //提示错误
            if (x == 0) {
                system("cls");
                printf("查无此日期!");
            }
        }
        //金额查询
        if (option_4 == 3) {
            system("cls");

            printf("请输入要查询的收入金额(元):");
            scanf("%f", &money_scanf);
            for (i = 0; i < frequency_1; i++) {
                //遍历数据集寻找与用户想要查询的金额的相同数据
                if (uct[i].money == money_scanf) {
                    x = 1;
                    break;
                }
            }
            if (x == 1) {
                system("cls");
                printf("********支出信息**********\n");
                printf("事件\t\t日期\t\t金额(元)\n");
                printf("%s\t%d/%d/%d\t%.2f\n", uct[i].event, uct[i].igid[0], uct[i].igid[1], uct[i].igid[2], uct[i].money);//输出对应信息
                x = 0;
                system("pause");
                return 0;
            }
            //提示未找到
            if (x == 0) {
                system("cls");
                printf("查无此收入金额(元)!");
            }
        }
        //提示错误
        if (option_4 > 3 || option_4 < 1) {
            printf("输入错误,请重新输入!\n");
            goto k7;//goto语句 k7

        }
    }
    //提示错误
    if (option_3 > 2 || option_3 < 1) {
        printf("输入错误,请重新输入!\n");
        goto k5;//goto语句 k5
    }
    printf("\n");
    system("pause");
    return 0;
}

void Summary() {
    struct str t;//struct类型 t

    system("cls");
    printf("1.收入信息\t2.支出信息\n");
k9:
    printf("\n请输入选项:");
    scanf("%d", &option_5);//进行选择
    //提示错误
    if (option_5 > 2 || option_5 < 1) {
        printf("输入错误,请重新输入!");
        goto k9;//goto语句 k9

    }
    //收入信息
    if (option_5 == 1) {

k6:
        printf("请输入查看几月收入账物信息:");
        scanf("%d", &option_6);
        //提示错误
        if (option_6 > 12 || option_6 < 1) {
            printf("无此月份,请重新输入\n");
            goto k6;//goto语句 k6
        } else {
            //利用冒泡排序法,排str[i].igid[2]大小
            for (i = 0; i < frequency - 1 ; i++) {
                for (j = 0; j < frequency - 1 - i ; j++) {
                    if (str[j].igid[2] > str[j + 1].igid[2]) {
                        t = str[j];
                        str[j] = str[j + 1];
                        str[j + 1] = t;
                    }

                }

            }
            system("cls");
            printf("事件\t日期\t金额(元)\n");
            for (i = 0; i < frequency; i++) {
                if (str[i].igid[1] == option_6) {
                    printf("%s\t%d/%d/%d\t%.2f\n", str[i].event, str[i].igid[0], str[i].igid[1], str[i].igid[2], str[i].money);//输出对应信息
                    money_m += str[i].money; //计算月总金额
                    x1 = 1;
                }
                //判断用户是否输入信息
            }
            if (frequency == 0) {
                x1 = 0;
            }
            if (money_m > 0) {
                money_n = money_m / 30.00;
                printf("\n\n\n%d月总支出:%.2f(元)\n%d月每天平均支出%.2f(元)\n", option_6, money_m, option_6, money_n); //输出对应信息
                money_m = 0;
                money_n = 0;
            }
        }

    }
    //支出统计
    if (option_5 == 2) {
k10:
        printf("请输入查看几月支出账物信息:");
        scanf("%d", &option_6);
        {
            //判断用户输入月份范围是否在1~12范围内
            if (option_6 > 12 || option_6 < 1) {
                printf("无此月份,请重新输入!\n");
                goto k10;
            } else {
                //利用冒泡排序法,排uct[i].igid[2]大小
                for (i = 0; i < frequency_1 - 1; i++) {
                    for (j = 0; j < frequency_1 - 1 - i; j++) {
                        if (uct[j].igid[2] > uct[j + 1].igid[2]) {
                            t = uct[j];
                            uct[j] = uct[j + 1];
                            uct[j + 1] = t;
                        }

                    }

                }
                printf("事件\t日期\t金额(元)\n");

                for (i = 0; i < frequency_1; i++) {
                    if (uct[i].igid[1] == option_6) {
                        printf("%s\t%d/%d/%d\t%.2f\n", uct[i].event, uct[i].igid[0], uct[i].igid[1], uct[i].igid[2], uct[i].money);//输出对应信息
                        money_m += uct[i].money;
                        x = 1;
                    }

                }
                if (money_m > 0) {
                    money_n = money_m / 30.00;
                    printf("\n\n\n%d月总支出:%.2f(元)\n%d月每天平均支出%.2f(元)\n", option_6, money_m, option_6, money_n); //输出对应信息
                    money_m = 0;
                    money_n = 0;
                    x1=1;
                }

            }
            if (frequency_1 == 0) {
            x1=0;
            }
        }
    }
    //提示错误
    if (x1 == 0) {
        printf("无此月份信息!");
        
        
    }
    printf("\n");
    system("pause");
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/563043.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存