第12周 多文件组织 2

源代码:

01.//使用函数的版本  
02.  
03.#include <stdio.h>  
04.#include <stdlib.h>  
05.int pass();  //验证密码  
06.void work();  //业务驱动  
07.double getBalance();  //获得余额  
08.void showMenu();    //显示菜单  
09.void updatePassword();   //更改密码  
10.double withdraw(double d);   //取款  
11.double save(double d);   //存款  
12.void saveBalance(double d);   //退出系统时保存数据  
13.  
14./*主函数:*/  
15.int main()  
16.{  
17.    printf("欢迎您光临CSDN银行\n");  
18.    if (pass())  
19.    {  
20.        work();  
21.    }  
22.    return 0;  
23.}  
24./* 
25.功能:验证用户密码 
26.返回值:密码正确,返回1; 
27.        不能通过密码验证,返回0 
28.*/  
29.int pass()  
30.{  
31.    int iPass;  //用户验证时输入的密码  
32.    int iPassInFile;  //记录正确的密码  
33.    int iTry=3;   //进入系统时尝试的次数  
34.    FILE *fp;  //用于文件操作  
35.    //密码保存在文件中,先取出  
36.    if ((fp=fopen("password.txt", "r"))==NULL)  
37.    {  
38.        printf("password file cannot open!");  
39.        exit(0);  
40.    }  
41.    fscanf(fp, "%d", &iPassInFile);  
42.    fclose(fp);  
43.  
44.    //进入系统,密码三次不对将退出  
45.    do  
46.    {  
47.        iTry--;  
48.        printf("请输入密码:");  
49.        scanf("%d", &iPass);  
50.        if(iPass==iPassInFile)  
51.            break;  
52.        else  
53.        {  
54.            if(iTry>0)  
55.                printf("超过3次将退出,你已经尝试%d次!\n", iTry);  
56.            else  
57.            {  
58.                printf("对不起,你不能进入系统\n");  
59.            }  
60.        }  
61.    }  
62.    while(iTry);  
63.    return iTry;  
64.}  
65.  
66./* 
67.功能:办理业务 
68.*/  
69.void work()  
70.{  
71.    int iChoice;   //用于选择系统功能  
72.    double dBalance;  //账户余额  
73.    dBalance = getBalance();  
74.    //办理业务  
75.    do  
76.    {  
77.        showMenu();  
78.        printf("请输入(0-4):");  
79.        scanf("%d", &iChoice);  
80.        switch(iChoice)  
81.        {  
82.        case 1:  
83.            printf("您的余额有%.2lf元. \n",dBalance);  
84.            break;  
85.        case 2:  
86.            dBalance = withdraw(dBalance);  
87.            break;  
88.        case 3:  
89.            dBalance = save(dBalance);  
90.            break;  
91.        case 4:  
92.            updatePassword();  
93.            break;  
94.        case 0:  
95.            printf("欢迎您再来. \n");  
96.        }  
97.    }  
98.    while(iChoice);  
99.    saveBalance(dBalance);  
100.}  
101.  
102.  
103./* 
104.功能:获得账户余额 
105.返回值:账户余额 
106.*/  
107.double getBalance()  
108.{  
109.    double dBalance;  //账户余额  
110.    FILE *fp;  //用于文件操作  
111.    //从文件中取出余额  
112.    if ((fp=fopen("balance.dat", "r"))==NULL)  
113.    {  
114.        printf("data file cannot open!");  
115.        exit(0);  
116.    }  
117.    fscanf(fp, "%lf", &dBalance);  
118.    fclose(fp);  
119.    return dBalance;  
120.}  
121.  
122./*功能:显示菜单*/  
123.void showMenu()  
124.{  
125.    printf("\n您可以办理下面的业务:\n");  
126.    printf("  1.查询\n");  
127.    printf("  2.取款\n");  
128.    printf("  3.存款\n");  
129.    printf("  4.改密码\n");  
130.    printf("  0.退出\n");  
131.}  
132.  
133./*功能:更改密码*/  
134.void updatePassword()  
135.{  
136.    FILE *fp;  //用于文件操作  
137.    int iPassInFile;  
138.    int iNewPass1, iNewPass2;   //用于修改密码  
139.    printf("请输入新密码:");  
140.    scanf("%d", &iNewPass1);  
141.    printf("再输入新密码:");  
142.    scanf("%d", &iNewPass2);  
143.    if(iNewPass1==iNewPass2)  
144.    {  
145.        iPassInFile = iNewPass1;  
146.        printf("密码修改成功,请注意保密.\n");  
147.        //保存密码(可能修改过)  
148.        if ((fp=fopen("password.txt", "w"))==NULL)  
149.        {  
150.            printf("password file cannot open!");  
151.            exit(0);  
152.        }  
153.        fprintf(fp, "%d", iPassInFile);  
154.        fclose(fp);  
155.    }  
156.    else  
157.        printf("两次输入不一致,密码修改失败.\n");  
158.}  
159.  
160./* 
161.功能:取款 
162.参数:取款前的余额 
163.返回值:取款后的余额 
164.*/  
165.double withdraw(double d)  
166.{  
167.    double dMoney;  //取款金额  
168.    printf("输入取款额: ");  
169.    scanf("%lf", &dMoney);  
170.    if(d>dMoney)  
171.    {  
172.        d-=dMoney;  
173.        printf("取款后,您还有%.2lf元. \n",d);  
174.    }  
175.    else  
176.        printf("余额不足,取款失败. \n");  
177.    return d;  
178.}  
179.  
180./* 
181.功能:存款 
182.参数:存款前的余额 
183.返回值:存款后的余额 
184.*/  
185.double save(double d)  
186.{  
187.    double dMoney;  //存款金额  
188.    printf("输入存款额: ");  
189.    scanf("%lf", &dMoney);  
190.    d+=dMoney;  
191.    printf("存款后,您有%.2f元. \n",d);  
192.    return d;  
193.}  
194.  
195./* 
196.功能:将余额保存到文件中 
197.参数值:账户余额 
198.*/  
199.void saveBalance(double d)  
200.{  
201.    FILE *fp;  //用于文件操作  
202.    //保存余额  
203.    if ((fp=fopen("balance.dat", "w"))==NULL)  
204.    {  
205.        printf("data file cannot open!");  
206.        exit(0);  
207.    }  
208.    fprintf(fp, "%f", d);  
209.    fclose(fp);  
210.}  


 

多文件后代码

main.c:

#include "main.h"

/*主函数:*/
int main()
{
    printf("欢迎您光临CSDN银行\n");
    if (pass())
    {
        work();
    }
    return 0;
}
/*
25.功能:验证用户密码
26.返回值:密码正确,返回1;
27.        不能通过密码验证,返回0
28.*/

main.h:

#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED

#include <stdio.h>
#include <stdlib.h>
int pass();  //验证密码
void work();  //业务驱动
double getBalance();  //获得余额
void showMenu();    //显示菜单
void updatePassword();   //更改密码
double withdraw(double d);   //取款
double save(double d);   //存款
void saveBalance(double d);   //退出系统时保存数据

#endif // MAIN_H_INCLUDED


pass.c:

#include"main.h"
int pass()
{
    int iPass;  //用户验证时输入的密码
    int iPassInFile;  //记录正确的密码
    int iTry=3;   //进入系统时尝试的次数
    FILE *fp;  //用于文件操作
    //密码保存在文件中,先取出
    if ((fp=fopen("password.txt", "r"))==NULL)
    {
        printf("password file cannot open!");
        exit(0);
    }
    fscanf(fp, "%d", &iPassInFile);
    fclose(fp);

    //进入系统,密码三次不对将退出
    do
    {
        iTry--;
        printf("请输入密码:");
        scanf("%d", &iPass);
        if(iPass==iPassInFile)
            break;
        else
        {
            if(iTry>0)
                printf("超过3次将退出,你已经尝试%d次!\n", iTry);
            else
            {
                printf("对不起,你不能进入系统\n");
            }
        }
    }
    while(iTry);
    return iTry;
}


work.c:

#include"main.h"
void work()
{
    int iChoice;   //用于选择系统功能
    double dBalance;  //账户余额
    dBalance = getBalance();
    //办理业务
    do
    {
        showMenu();
        printf("请输入(0-4):");
        scanf("%d", &iChoice);
        switch(iChoice)
        {
        case 1:
            printf("您的余额有%.2lf元. \n",dBalance);
            break;
        case 2:
            dBalance = withdraw(dBalance);
            break;
        case 3:
            dBalance = save(dBalance);
            break;
        case 4:
            updatePassword();
            break;
        case 0:
            printf("欢迎您再来. \n");
        }
    }
    while(iChoice);
    saveBalance(dBalance);
}


/*
104.功能:获得账户余额
105.返回值:账户余额
106.*/
double getBalance()
{
    double dBalance;  //账户余额
    FILE *fp;  //用于文件操作
    //从文件中取出余额
    if ((fp=fopen("balance.dat", "r"))==NULL)
    {
        printf("data file cannot open!");
        exit(0);
    }
    fscanf(fp, "%lf", &dBalance);
    fclose(fp);
    return dBalance;
}

/*功能:显示菜单*/
void showMenu()
{
    printf("\n您可以办理下面的业务:\n");
    printf("  1.查询\n");
    printf("  2.取款\n");
    printf("  3.存款\n");
    printf("  4.改密码\n");
    printf("  0.退出\n");
}

/*功能:更改密码*/
void updatePassword()
{
    FILE *fp;  //用于文件操作
    int iPassInFile;
    int iNewPass1, iNewPass2;   //用于修改密码
    printf("请输入新密码:");
    scanf("%d", &iNewPass1);
    printf("再输入新密码:");
    scanf("%d", &iNewPass2);
    if(iNewPass1==iNewPass2)
    {
        iPassInFile = iNewPass1;
        printf("密码修改成功,请注意保密.\n");
        //保存密码(可能修改过)
        if ((fp=fopen("password.txt", "w"))==NULL)
        {
            printf("password file cannot open!");
            exit(0);
        }
        fprintf(fp, "%d", iPassInFile);
     fclose(fp);
    }
    else
        printf("两次输入不一致,密码修改失败.\n");
}

/*
161.功能:取款
162.参数:取款前的余额
163.返回值:取款后的余额
164.*/
double withdraw(double d)
{
    double dMoney;  //取款金额
    printf("输入取款额: ");
    scanf("%lf", &dMoney);
    if(d>dMoney)
    {
        d-=dMoney;
       printf("取款后,您还有%.2lf元. \n",d);
    }
    else
        printf("余额不足,取款失败. \n");
    return d;
}

/*
181.功能:存款
182.参数:存款前的余额
183.返回值:存款后的余额
184.*/
double save(double d)
{
    double dMoney;  //存款金额
    printf("输入存款额: ");
    scanf("%lf", &dMoney);
    d+=dMoney;
    printf("存款后,您有%.2f元. \n",d);
    return d;
}

/*
功能:将余额保存到文件中
参数值:账户余额
*/
void saveBalance(double d)
{
    FILE *fp;  //用于文件操作
    //保存余额
    if ((fp=fopen("balance.dat", "w"))==NULL)
    {
        printf("data file cannot open!");
        exit(0);
    }
    fprintf(fp, "%f", d);
    fclose(fp);
}


运行结果:

知识点总结:

通过学习,进一步巩固了多文件组织,复习了文件的创立。

学习心得,这次绊倒我的不是多文件,而是文件的创立,破电脑居然默认隐藏文件拓展名微笑,不过最后算是解决了。ps:存了一个亿,完成了一个小目标吐舌头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值