TG(提高篇)第15讲 实践项目 简单银行系统(函数篇)

来源:互联网 发布:svd分解算法步骤 编辑:程序博客网 时间:2024/05/17 23:21

一、任务和代码

/**Copyright (c)2016,CSDN学院 |  C语言及程序设计提高*All rights reserved.*文件名称:TG_p15.c*作    者:管运煌*完成日期:2016年7月20日*简单银行系统,只针对个人的储蓄业务、修改密码、保存数据到文件等*/#include <stdio.h>#include <stdlib.h>int password( );                //验证密码void work();                    //业务驱动void ShowMenu( );               //菜单选择double Save(double d);          //存款double withdraw(double d);      //取款void updatepassword ();         //修改密码double getBalance( );           //获得余额void saveBalance(double d);      //保存数据int main(){    printf ("欢迎使用天地银行系统!\n");    int pass;    pass=password();    if (pass)        work();    return 0;}/*功能:验证密码,输入三次失败后退出系统。*/int password(){    int passtry=3,InPassword,Password;    FILE *fp;    if ((fp=fopen("password.txt","r"))==NULL)    {        printf ("password.txt can not open!");        exit (0);    }    fscanf (fp,"%d",&Password);    fclose(fp);    do    {        passtry--;        printf ("请输入密码:");        scanf ("%d",&InPassword);        if(InPassword==Password)            break;        else        {            if(passtry>0)                printf ("密码错误,请重新输入!您还有%d次机会!\n",passtry);            else                printf ("不好意思,您不能进入系统!\n");        }    }while (passtry);    return (passtry);}/*完成所有业务功能(查询、取款、存款、修改密码、数据保存)*/void work(){    int choice;    double Balance;    Balance=getBalance();    do    {        ShowMenu();        printf ("请输入服务代码(0-4):");        scanf ("%d",&choice);        switch (choice)        {        case 1:            printf ("您帐户余额为:%.2f元!\n",Balance);            break;        case 2:            Balance=Save(Balance);            printf ("存款成功!账户余额为:%.2f元!\n",Balance);            break;        case 3:            Balance=withdraw(Balance);            printf ("取款成功!账户余额为:%.2f元!\n",Balance);            break;        case 4:            updatepassword();            break;        case 0:            printf ("欢迎再次使用!\n");            break;        default:            printf ("输入错误,重新输入!\n");            continue;        }    }while (choice);    saveBalance(Balance);}/*获得Balance.dat文件中余额*/double getBalance(){    double Balance;    FILE *fp;    if ((fp=fopen("Balance.dat","r"))==NULL)    {        printf ("Balance.dat can not open!");        exit(0);    }    fscanf (fp,"%lf",&Balance);    return (Balance);}/*展示菜单,并完成选择*/void ShowMenu(){        printf ("1.查询\n");        printf ("2.存款\n");        printf ("3.取款\n");        printf ("4.修改密码\n");        printf ("0.退出\n");}/*完成存钱功能*/double Save(double d){    double Savemoney;    printf ("请输入存款金额:");    scanf ("%lf",&Savemoney);    d+=Savemoney;    return (d);}/*完成取钱功能*/double withdraw(double d){    double withdrawMoney;    do    {    printf ("请输入取款金额:");    scanf ("%lf",&withdrawMoney);    if (withdrawMoney<=d)    {        d-=withdrawMoney;        break;    }    else    {        printf ("余额不足,请重新输入!\n");        continue;    }    }    while (1);    return (d);}/*完成密码修改功能*/void updatepassword(){    int password,password1,password2;    FILE *fp;    if ((fp=fopen("password.txt","w"))==NULL)    {        printf ("password.dat can not open(w)!");        exit(0);    }    printf ("请输入新密码:");    scanf ("%d",&password1);    printf ("请再一次输入新密码:");    scanf ("%d",&password2);    if (password1==password2)    {        password=password1;        fprintf (fp,"%d",password);    }    else        printf ("两次密码输入不一致,修改失败!\n");    fclose(fp);}/*退出系统时保存数据*/void saveBalance(double d){    FILE *fp;    if ((fp=fopen("Balance.dat","w"))==NULL)    {        printf ("Balance.dat can not open!");        exit(0);    }    fprintf (fp,"%f",d);    fclose (fp);}
二、运行结果

三、知识总结

自定义函数使用

四、心得体会

看完老师的视屏,虽然没说要做这个项目,但还是决定试试,毕竟这个小系统之前已经完成过,这次只是使用自定义函数来写。

开始的时候还是挺自信满满的,在正要动手时突然发现眼瞎了,根本不知道怎么动手,晕了一阵,然后翻开笔记:自顶向下,逐步细化,模块化设计、结构化编码……

那就先看程序需要满足什么功能,再确定需要自定义哪些函数吧!拿了本草稿本结合根据老师讲的,先把觉得需要的自定义函数列了出来:密码验证、查钱、取钱、存钱、修改密码、数据保存还有老师说的业务驱动。因为从文件读取、写入信息用得少一直不熟悉,一开始还想加个读取文件在函数,后来还是放弃了,更麻烦~

定义好函数就进入老师讲的“思路”阶段了,怎么样把函数串起来用,对我来说是空白的,这个时候我觉得main函数好像变成最简单的了,只需要完成 进入密码验证程序 和 业务验动程序就可以了,所以,当密码正确的时候,进入业务验动,一个if 判断语句就可以实现啊~这下竟然有中顿悟的感觉~

接下码代码的过程就顺了些,先写密码验证函数,只要确保三次之内密码输入正确返回 1 给主函数主可以,接着就填业务验动函数。 

密码正确,就可以显示菜单了,然后要显示菜单,一开始我把  选择菜单的代码也写到了显示菜单里,然后将 客户选择的服务代码返回给 业务驱动函数的一个变量,再使用switch语句,但是出错了~不知道是不是因为void 函数返回的值有问题。

然后巴拉巴拉,根据业务驱动使用函数的顺序一个一个把自定义函数填完~

然后满怀信心地点了下Build

然后出了整整几十条的错误提示!!!

晕菜了!脑子又回到刚开始时候的一片空白!!!

眼睛一瞥,原来有个自定义函数声名的时候忘记分号了,加上,Build!错误少了十几行……

心里头才有勇气查下去,就这样,,根据提示,一个一个来,有数据类型问题、有自定义void函数返回值问题(比如double 类型数据  在读取的时候加了"%.2f"就有报错提醒)、有输入了中文符号问题……

不过还好,改了半个小时总算好了……

参考老师代码,第一次实践自定义函数的使用,所以收获还是挺多的!



0 0