美文网首页C语言
2021-04-16(小程序 读入给定二进制文件)

2021-04-16(小程序 读入给定二进制文件)

作者: 张轻舟 | 来源:发表于2021-04-16 16:33 被阅读0次
#include<stdio.h>
#include<windows.h>

struct stds
{
    int id;
    char name[20];
    char sex;
    int ach;
    struct stds *next;
};

struct stds *head;
struct stds *std;
struct stds *jl;

//读取文件
int read()
{
    int n;
    FILE *rp;
    struct stds *rd;

    rp=fopen("./StudentInfo.dat","a+");
    
    while(!feof(rp))
    {
        rd=(struct stds *)malloc(sizeof(struct stds));
        n=fscanf(rp,"%d%s%d%s\n",&rd->id,&rd->sex,&rd->ach,rd->name);

        if(n==-1)
        {
            printf("数据库内无数据\n");
            return 0;
        }
        rd->next=NULL;
        std->next=rd;
        std=std->next;
    }
    fclose(rp);
    printf("数据加载完成\n");
    jl=std;
    return 0;
}

//写入文件
int write()
{
    FILE *wp;

    std=head->next;     //从头遍历
    wp=fopen("./cundang.txt","w");

    if(std==NULL)
    {
        printf("数据库已重置\n");
        fclose(wp);
        return 0;
    }
    
    while(std!=NULL)
    {
        fprintf(wp,"%d %c %d %s\n",std->id,std->sex,std->ach,std->name);
        std=std->next;
    }
    fclose(wp);
    
    printf("保存成功\n");
    
    return 0;
}

//输入内容实现
int input()
{
    char n;
    struct stds *ed;
    std=jl;
    while(n=getchar())
    {
        if(n=='n')
        {
            break;
        }
        ed=(struct stds *)malloc(sizeof(struct stds));

        printf("请输入学号,性别,成绩,姓名:\n");
        scanf("%d%c%d%s",&ed->id,&ed->sex,&ed->ach,ed->name);
        getchar();  //吸收回车符
        
        ed->next=NULL;
        std->next=ed;
        std=std->next;
        
        printf("n退出,回车继续输入...\n");
    }
    jl=std;
    return 0;
}

//显示内容实现
int output()
{
    int a=0;            //判断数据是否有输入
    std=head->next;     //从头遍历
    printf("内容如下:\n");
    
    while(std!=NULL)
    {
        if(std->next==NULL)
        {
            jl=std;
        }
        printf("%d\t%c\t%d\t%s\n",std->id,std->sex,std->ach,std->name);
        std=std->next;
        a=1;
    }
    
    if(a==0)    //未输入数据情况
        printf("内容为空\n");
    return 0;
}

//查找内容实现
int find(int n)
{
    std=head->next;
    while(std!=NULL)
    {
        if(std->id==n)
        {
            printf("%d\t%c\t%d\t%s\n",std->id,std->sex,std->ach,std->name);
            std=std->next;  
        }
        else
        {
            std=std->next;  
        }
        
    }
    return 0;
    
}

//修改内容实现
int gai(int n)
{
    find(n);
    std=head->next;
    while(std!=NULL)
    {
        if(std->id==n)
        {
            printf("输入新信息:\n");
            scanf("%d%c%d%s\n",&std->id,&std->sex,&std->ach,std->name);
            printf("修改完成");
            break;  
        }
        else
        {
            std=std->next;
        }
        
    }
    output();
    return 0;
}

//删除内容实现
int del(int num)
{
    struct stds *dp;

    dp=head;
    std=head->next;
    
    if(std==NULL)
    {
        printf("数据为空\n");
        return 0;
    }

    while(std!=NULL)
    {
        
        if(std->id==num)
        {
            dp->next=std->next;
            free(std);
            printf("删除后");
            output();
            return 0;
        }
        dp=std;
        std=std->next;
    }
    
    printf("没找着呀\n");
    return 0;
}

//登录实现
int login()
{
    int i,j;
    char username[20],password[20];
    char lun[20]="123";
    char lpw[20]="123";
    
    for(i=0;i<3;i++)
    {
        printf("用户名(123):");
        scanf("%s",username);
        printf("密 码(123):");
        scanf("%s",password);
        
        if((j=strcmp(lun,username))==0)
        {
            if((j=strcmp(lpw,password))==0)
            {
                system("cls");
                printf("登陆成功...\n\n");
                return 1;
            }
            else
            {
                printf("用户名或密码错误...\n\n");
            }
        }
        else
        {
            printf("用户名不存在...\n\n");
        }
    }
    printf("已输入错误三次,系统自动退出...\n\n");
    return 0;
}



int main()
{
    int lg,i,n,gb;
    char menu;

    head=(struct stds *)malloc(sizeof(struct stds));
    std=(struct stds *)malloc(sizeof(struct stds));

    gb=0;   

    head->next=NULL;
    jl=std=head;

    lg=login();
        
    if(lg)
    {
        getchar();
        read();
        printf("欢迎使用\n");
        printf("输入内容按1,显示内容按2,查找内容按3,修改内容按4,删除内容按5,6保存,其他退出\n");
        while(menu=getchar())
        {
            printf("继续输入按1,显示内容按2,查找内容按3,修改内容按4,删除内容按5,6保存,其他退出\n");
            switch(menu)
            {
            case '1':system("cls");input();break;
            case '2':system("cls");output();break;
            case '3':system("cls");printf("输入要查找的ID:\n");scanf("%d",&n);find(n);break;
            case '4':system("cls");output();printf("输入要修改的ID:\n");scanf("%d",&n);gai(n);break;
            case '5':system("cls");output();printf("输入要删除的ID:\n");scanf("%d",&n);del(n);break;
            case '6':write();getchar();break;
            case '\n':gb=2;break;
            default:system("cls");gb=1;break;
            }
            if(gb==1)
            {
                write();
                printf("退出成功\n");
                break;
            }
            else if(gb==2)
            {
                continue;
            }
        }
    }
    else
    {
        printf("欢迎下次使用,再见...\n");
    }
    printf("感谢使用\n");
    system("pause");
    return 0;
}
image.png
image.png

相关文章

网友评论

    本文标题:2021-04-16(小程序 读入给定二进制文件)

    本文链接:https://www.haomeiwen.com/subject/bgnslltx.html