#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;
}
刚学没多久小白,仅供参考