基于文件的程序设计

读写文件

任务要求 设计程序,实现创建文件/data/workspace/myshixun/19-1/pwd.txt,将用户名和密码存储至该文件中。要求: (1)包含3个及以上用户信息; (2)用户信息的结构体类型如下:

 
  1. struct User
  2. {
  3. char name[20];
  4. char password[20];
  5. };
  6. typedef struct User stUser;

请根据提示信息在右侧编辑器的Begin-End区域内补充代码,,并调试完成相应功能。

输入要求 第一行输入一个正整数n(1<=n<=100),表示用户的数量。 第二行至第n+1行,每行依次输入用户姓名name(1<=len(name)<=20)以及用户密码password(1<=len(password)<=20)

输出要求 将输入的用户信息存储至文件pwd.txt中,并将信息读取出来按照用户名字典序从小到大的要求显示在屏幕上。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct User 
{
    char name[20];
    char password[20];
};
typedef struct User stUser;

void saveToFile(int n,char *filename);                              //将数据保存至文件中
void loadUserInfor(stUser userInfor[], char *filename);             //读取文件
void sort(stUser userInfor[], int len);
void print(stUser userInfor[], int len);

int main() 
{
    int n;
    char *filename = "/data/workspace/myshixun/19-1/pwd.txt";
    printf("输入用户个数:\n");
    scanf("%d", &n);
    saveToFile(n,filename);
    stUser userInfor[100];
    loadUserInfor(userInfor, filename);
    sort(userInfor, n);
    print(userInfor, n);
    return 0;
}

void saveToFile(int n,char *filename)                               //定义保存文件函数
{
    FILE *fp = fopen(filename, "wb");
    if (fp == NULL) {
        printf("打开文件失败!");
        exit(1);
    }
    printf("执行写文件操作!\n");
    /************Begin**********/
    for (int i = 0; i < n; i++) {
        stUser user;
        scanf("%s %s", user.name, user.password);
        fwrite(&user, sizeof(stUser), 1, fp);
    }

    fclose(fp);



    /**********  End  **********/
}

void loadUserInfor(stUser userInfor[], char *filename)            //定义读文件函数
{
    FILE *fp = fopen(filename, "rb");
    if (fp == NULL) {
        printf("打开文件失败!");
        exit(1);
    }
    /************Begin**********/
    for (int i = 0; i < 100; i++) {
        if (fread(&userInfor[i], sizeof(stUser), 1, fp) != 1) {
            break;
        }
    }

    fclose(fp);



    /**********  End  **********/
}

void sort(stUser userInfor[], int len) 
{
    /************Begin**********/
    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (strcmp(userInfor[j].name, userInfor[j + 1].name) > 0) {
                stUser temp = userInfor[j];
                userInfor[j] = userInfor[j + 1];
                userInfor[j + 1] = temp;
            }
        }
    }



    /**********  End  **********/
}

void print(stUser userInfor[], int len) 
{
    for (int i = 0; i < len; i++) {
        printf("UserName=%s,UserPassword=%s\n", userInfor[i].name, userInfor[i].password);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值