顺序表制作的简单用户管理系统

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

/**
date:2022.12.11
author:xiao ding
version:0.0.1
struct:sequence table

*/

//顺序表
typedef struct node{
    
    int ID;//id
    char pwd[20];//密码
    char name[20];//姓名
}node,*node_list;

//大小
int nums;

//显示数据
void show_info(int pot,node_list mynode)
{
    node_list p = (mynode+pot-1);
    
    if(p == NULL)
    {
        printf("没有数据");
        return;
    }
    if(p->ID==20191171)//管理员权限
    {
        for(int i =0;i<nums;i++)
        {
            printf("id = %d,pwd = %s,name = %s\n",p[i].ID,p[i].pwd,p[i].name);
        }
    }else{//普通用户
        printf("id = %d,pwd = %s,name = %s\n",p->ID,p->pwd,p->name);
    }

//判断密码是否正确1/0
int judge_pwd(char *in_pwd,node_list mynode)
{
    if(mynode==NULL)
        return -1;
    if(!strcmp(in_pwd,mynode->pwd)){
        return 1;
    }
    return 0;
}
//判断用户位置,根据用户的id判断用户的位置
int pot_ID(int id,node_list mynode)
{
    
    int pot = 1;
    node_list p =mynode;
    //不超过总长度
    while(p->ID != id&&pot <= nums)
    {
        pot++;
        p++;
        
    }
    if(pot >nums)
    {
        return -1;
    }
    return pot;
}

//添加数据,创建新用户
void add_info(node_list mynode)
{
    
    node_list new = mynode+nums;
    printf("请输入id:\n");
    scanf("%d",&(new->ID));
    printf("请输入密码:\n");
    scanf("%s",(new->pwd));while(getchar() !='\n'){}
    printf("请输入姓名:\n");
    scanf("%s",new ->name);while(getchar() !='\n'){}
    nums++;
    printf("添加成功\n");
}

//删除用户
void del_user(int pot,node_list mynode)
{
    
    //管理员权限
    if((mynode+pot-1)->ID == 20191171){
        show_info(pot,mynode);
        printf("请输入你要删除的id");
        int id;
        scanf("%d",&id);
        //找到位置
        int pot1 = pot_ID(id,mynode);
        //覆盖位置,往后覆盖
        for(int i = pot1-1;i<nums-1;i++)
        {
            *(mynode+i) = *(mynode+i+1);
        }
        printf("该用户已删除\n");
        nums--;
    }else{
        //覆盖位置,往后覆盖
        for(int i = pot-1;i<nums-1;i++)
        {
            *(mynode+i) = *(mynode+i+1);;
        }
        printf("该用户已删除\n");
        nums--;
    }
    
    
}
//修改密码
void set_new_pwd(int pot,node_list mynode)
{
    
    while(1){
        node_list p = (mynode + pot-1);
        printf("请输入密码");
        char pwd1[20];
        scanf("%s",pwd1);while(getchar() != '\n');
        if(!strcmp(p->pwd,pwd1)){
            printf("请输入新密码");
            scanf("%s",pwd1);while(getchar() != '\n');
            char *str = strncpy(p->pwd,pwd1,strlen(pwd1));
            if(!strcmp(str,pwd1))
            {
                printf("修改成功\n");
                break;
            }else{
                printf("修改失败\n");
            }
        }
    }
}
//登录成功,用户功能
void fun_true(int pot,node_list mynode)
{
    while(1)
    {
        printf("=========用户功能===========\n");
        printf("1.查看信息\n");
        printf("2.删除信息\n");
        printf("3.修改密码\n");
        printf("4.退出\n");
    
        int n;
        scanf("%d",&n);
        switch(n){
            case 1:
                show_info(pot,mynode);
                break;
            case 2:
                del_user(pot,mynode);
                if((mynode+pot-1)->ID == 20191171)
                {
                    show_info(pot,mynode);
                    break;
                }else{
                    return;
                }
            case 3:
                set_new_pwd(pot,mynode);
                break;
            case 4:
                return;
            default:
                break;
        }
    }        
    
}
//用户登录
void sing_in(node_list mynode)
{
    while(1)
    {
        printf("=========用户登录===========\n");
        printf("1.登录\n");
        printf("2.创建新用户\n");
        int n;
        scanf("%d",&n);
        if(n==1){
            int id,pot;
            char c[20];
            printf("请输入id:\n");
            scanf("%d",&id);while(getchar() !='\n'){}
            printf("请输入密码:\n");
            scanf("%s",c);while(getchar() !='\n'){}
        //找到用户位置
            pot = pot_ID(id,mynode);
            printf("%d\n",pot);
            if(pot ==-1)
            {
                printf("id错误\n");
                break;
            }
            if(judge_pwd(c,(mynode+pot-1))){//判断当前用户密码是否真确
                printf("登陆成功\n");
                fun_true(pot,mynode);
            }else if(judge_pwd(c,(mynode+pot-1)) == -1){
                printf("null\n");
            }else{
                printf("密码错误\n\n");
                break;
            }
        }
        if(n==2)
        {
            add_info(mynode);//添加新用户
        }
    }
    
}
int main(int argc,char *argv[])
{
    node stus[20] = {
        {.ID=20191171,.pwd="123456a",.name="管理员"},
        {.ID=20191172,.pwd="123456b",.name="小李"},
        {.ID=20191173,.pwd="123456p",.name="小派蒙"}
    };
    nums = 3;//初始化长度
    
    // show_info(&stus[2]);
    sing_in(&stus[0]);

    
    return 0;
}

刚学没多久小白,仅供参考

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值