IOday1作业

1> 使用fgets统计给定文件的行数

2> 使用fputs和fgets完成两个文件的拷贝

3> 完成注册登录功能

做个小菜单,功能1是注册功能,输入注册账户和注册密码,将账户和密码写入文件中

功能2是登录功能,提示并输入登录账户和登录密码,并用其遍历文件中的每一组账户和密码,如果匹配成功,则登录成功,如果全部不匹配则提示登录失败

#include<myhead.h>

//定义注册函数
int do_register()
{
    //定义注册账号和密码
    char register_name[20] ="";
    char register_pwd[20] = "";

    printf("请输入注册账号:");
    fgets(register_name, sizeof(register_name), stdin);
    register_name[strlen(register_name)-1] = '\0';    //将换行换成'\0'
    printf("请输入注册密码:");
    fgets(register_pwd, sizeof(register_pwd), stdin);
    register_pwd[strlen(register_pwd)-1] = '\0';    //将换行换成'\0'

    //以追加的形式打开文件
    FILE *fp = NULL;
    if((fp = fopen("./usr.txt", "a")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //将当前的账号和密码写入文件
    fprintf(fp, "%s %s\n", register_name, register_pwd);

    //关闭文件
    fclose(fp);

    printf("注册成功\n");
    return 0;
}


//定义登录函数
int do_login()
{
    char login_name[20] = "";
    char login_pwd[20] = "";

    printf("请输入登录账号:");
    fgets(login_name, sizeof(login_name), stdin);
    login_name[strlen(login_name)-1] = '\0';    //将换行换成'\0'
    printf("请输入登录密码:");
    fgets(login_pwd, sizeof(login_pwd), stdin);
    login_pwd[strlen(login_pwd)-1] = '\0';    //将换行换成'\0'

    //打开文件,遍历所有的账号和密码
    FILE *fp = NULL;
    if((fp = fopen("./usr.txt", "r")) == NULL)
    {
        perror("fopen error");
        return -1;
    }

    //循环读取账号和密码
    char name[20] = "";
    char pwd[20] = "";
    while(1)
    {
        int res = fscanf(fp, "%s %s", name, pwd);     //从文件中读取一组数据
        if(res == EOF)
        {
            //关闭文件
            fclose(fp);
            return -1;
        }

        //判断账号和密码是否匹配
        if(strcmp(name,login_name)==0 && strcmp(pwd, login_pwd)==0)
        {
            //关闭文件
            fclose(fp);
            return 0;
        }
    }

}



/************************主程序**********************/
int main(int argc, const char *argv[])
{
    int menu = 0;

    while(1)
    {
        system("clear");        //执行终端指令

        printf("\t\t======XXX登录界面============\n");
        printf("\t\t======1、注册============\n");
        printf("\t\t======2、登录============\n");
        printf("\t\t======0、退出============\n");
        printf("请输入选项:");
        scanf("%d", &menu);
        getchar();

        //对菜单多分支选择
        switch(menu)
        {
        case 1:
            {
                //注册功能
                do_register();
            }
            break;

        case 2:
            {
                //登录功能
                int res = do_login();
                if(res == 0)
                {
                    printf("登录成功\n");



                }else
                {
                    printf("登录失败\n");
                }
            }
            break;

        case 0:goto END;
        
        default:printf("您输入的功能有误,请重新输入\n");
        }

        //提示输入任意键按回车结束
        printf("请输入任意键按回车结束!!!\n");
        while(getchar() != '\n');

    }


END:
    return 0;
}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值