C语言

2021-04-13(小程序)

2021-04-13  本文已影响0人  张轻舟
image.png

需求设计:
1、登录功能 密码错误三次机会 全错提示退出 自定义函数
2、登录成功后 学生信息录入(姓名 学号 性别 成绩) 用户可以选择是否继续录入
3、学生录入完成后可以查询遍历及其增删改查
4、实现存储功能 保存至文件中
退出

#include<stdio.h>
#include<windows.h>

struct stds
{
    int id;
    char name[20];
    char sex[10];
    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("./cundang.txt","a+");
    
    rd=(struct stds *)malloc(sizeof(struct stds));
    n=fscanf(rp,"%d%s%s%d",&rd->id,rd->name,rd->sex,&rd->ach);
    
    
    if(n==-1)
    {
        printf("数据库内无数据\n");
        return 0;
    }
    
    while(1)
    {
        if(!feof(rp))
        {
            rd->next=NULL;
            std->next=rd;
            std=std->next;
        }
        else
        {
            break;
        }
        rd=(struct stds *)malloc(sizeof(struct stds));
        fscanf(rp,"%d%s%s%d",&rd->id,rd->name,rd->sex,&rd->ach);
    }
    fclose(rp);
    printf("数据库加载完成\n");
    jl=std;
    return 0;
}

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

    std=head->next;     //从头遍历
    if(std==NULL)
    {
        printf("内容为空,无法保存\n");  
        return 0;
    }
    
    wp=fopen("./cundang.txt","w");

    while(std!=NULL)
    {
        fprintf(wp,"%d %s %s %d\n",std->id,std->name,std->sex,std->ach);
        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%s%s%d",&ed->id,ed->name,ed->sex,&ed->ach);
        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%s\t%s\t%d\n",std->id,std->name,std->sex,std->ach);
        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%s\t%s\t%d\n",std->id,std->name,std->sex,std->ach);
            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%s%s%d",&std->id,std->name,std->sex,&std->ach);
            printf("修改完成");
            break;  
        }
        else
        {
            std=std->next;
        }
        
    }
    output();
    return 0;
}

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

    dp=head;
    std=head->next;

    n=0;
    
    while(std!=NULL)
    {
        
        if(std->id==num)
        {
            dp->next=std->next;
            free(std);
            printf("删除后");
            n=1;
            output();
            break;
        }
        n=2;
        dp=std;
        std=std->next;
    }
    if(n==0)
    {
        printf("数据为空\n");
    }
    else if(n==2)
    {
        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("用户名(20字符以内):");
        scanf("%s",username);
        printf("密 码(20字符以内):");
        scanf("%s",password);
        
        if((j=strcmp(lun,username))==0)
        {
            if((j=strcmp(lpw,password))==0)
            {
                system("cls");
                printf("登陆成功...\n");
                return 1;
            }
            else
            {
                printf("用户名或密码错误...\n");
            }
        }
        else
        {
            printf("用户名不存在...\n");
        }
    }
    printf("已输入错误三次,系统自动退出...\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;
}
上一篇 下一篇

猜你喜欢

热点阅读