qq_45017455 2019-06-06 16:41 采纳率: 0%
浏览 352

这是职工管理系统的源代码,问题主要是无法以正确格式输出文件内容和修改函数不起作用,希望得到指导。

#include //标准输入输出函数库
#include //strcmp函数使用的头文件
#include //标准库头文件system(cls)函数需用到
#include //Sleep函数使用的头文件
#include //getch函数使用的头文件

//宏定义
#define LEN_EMPLOYEE sizeof(struct employee)//employee结构体的长度
#define LEN_ADM sizeof(struct adm)//adm结构体的长度
#define EMPLOYEE_NUM 500//职工的数组大小
#define ADM_NUM 10//管理员的数组大小
#define EMPLOYEE_DATA employeer[i].num,employeer[i].name,employeer[i].sex,employeer[i].age,employeer[i].xueli,employeer[i].wage,employeer[i].addr,employeer[i].tel
#define ADM_DATA admer[i].account,admer[i].password

//结构体的定义
struct employee
{
int num; //职工号

char name[20]; //姓名
char sex[10]; //性别
int age; //年龄
char xueli[30]; //学历
int wage; //工资
char addr[30]; //家庭住址
char tel[20]; //联系电话
};

struct adm
{
int num; //管理员的编号
char account[20]; //管理员的账户
char password[20]; //管理员的密码
};

//全局变量
struct employee employeer[EMPLOYEE_NUM];
struct adm admer[ADM_NUM];

//函数声明部分
void showmainmenu();//显示主菜单
void manager_in();//主管登录
void adm_in();//管理员登录
void employee_in();//职工登录
void managermenu();//主管菜单
void employee_display();//浏览职工信息
int employee_search();//查找职工信息
void employee_del();//删除职工信息
void employee_add();//添加职工信息
void employee_xiugai();//修改职工信息
void adm_add();//添加管理员信息
void adm_display();//浏览管理员信息
void adm_del();//删去管理员信息
void adm_xiugai();//修改管理员信息
int employeefile(char * pcMode);//职工文件函数
void saveemployeefile(int employeeid);//保存职工信息文件函数
void showemployee_xiugaimenu();//显示职工修改菜单
int admfile(char * pcMode);//管理员文件
int adm_search();//管理员查找
void showadm_xiugaimenu();//显示管理员修改菜单
void saveadmfile(int admid);//管理员保存文件函数
void admmenu();//管理员菜单

//主函数
int main()
{
int n;
showmainmenu();/*调用showmainmenu函数绘制界面*/
scanf("%d",&n);/*提示用户输入数字*/
getchar();

while(n)/*当n为0时直接退出程序*/
{
    switch(n)
    {
    case 1:
        manager_in();
        break;
    case 2:
        adm_in();
        break;
    case 3:
        employee_in();
        break;
    default:
        printf("\t\t请输入正确的数字!\n\t\t程序将于3秒后跳转到主菜单");
        Sleep(3000);
    }
    showmainmenu();
    scanf("%d",&n);
    getchar();
}
return 0;

}

void showmainmenu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t|------------------欢迎进入-----------------------|\n");
printf("\t| 职工管理系统 |\n");
printf("\t| 主菜单 |\n");
printf("\t| 身份选择 |\n");
printf("\t| 1.manager |\n");
printf("\t| 2.administrator |\n");
printf("\t| 3.employee |\n");
printf("\t| 0.退出系统 |\n");
printf("\t|-------------------------------------------------|\n");
printf("\n");
printf("\t\t请选择(0-3):");

}

void manager_in()
{
int n,i,j=0;
char managername[10];
char managerpassword[20];
printf("将于3秒后转至manager登录界面");
Sleep(3000);
system("cls");
for(i=0;i<3;i++)
{
printf("\n\t\t\t请输入你的用户名:");
scanf("%s",managername);
printf("\n\t\t\t请输入你的密码:");
scanf("%s",managerpassword);
if(strcmp(managername,"limengqi")==0&&strcmp(managerpassword,"123456")==0)
{
printf("\n\t\t\t登录成功!");
Sleep(1000);
j=1;
managermenu();
break;
}
else
printf("\t\t\t输入用户名或者密码错误!");
continue;
}
scanf("%d",&n);
getchar();

while(n)
{
    switch(n)
    {
    case 1:
        employee_display();
        break;
    case 2:
        employee_search();
        break;
    case 3:
        employee_del();
        break;
    case 4:
        employee_add();
        break;
    case 5:
        employee_xiugai();
        break;
    case 6:
        adm_add();
        break;
    case 7:
        adm_display();
        break;
    case 8:
        adm_del();
        break;
    case 9:
        adm_xiugai();
        break;
    default:
        printf("\t\t请输入正确的数字!");
    }
    printf("|按任意键返回子菜单|");
    getch();

    managermenu();
    scanf("%d",&n);
    getchar();
}

}

void managermenu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t|------------------欢迎进入-----------------------|\n");
printf("\t| 职工管理系统 |\n");
printf("\t| 子菜单 |\n");
printf("\t| 1.浏览职工信息 |\n");
printf("\t| 2.查询职工信息 |\n");
printf("\t| 3.删除职工信息 |\n");
printf("\t| 4.添加职工信息 |\n");
printf("\t| 5.修改职工信息 |\n");
printf("\t| 6.添加管理员信息 |\n");
printf("\t| 7.浏览管理员信息 |\n");
printf("\t| 8.删除管理员信息 |\n");
printf("\t| 9.修改管理员信息 |\n");
printf("\t| 0.返回主菜单 |\n");
printf("\t|-------------------------------------------------|\n");
printf("\n");
printf("\t\t请选择(0-9):");
}

void employee_display()
{
int i,employee_record;
system("cls");
employee_record=employeefile("rb");
if(employee_record==-1)
printf("文件打开失败,请先添加职工信息!\n");
else if(employee_record==0)
printf("文件中没有职工信息!\n");
else
{
printf("\t|----------------------------------------------------------|\n");
printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话");
for(i=0;i<employee_record;i++)
printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n",EMPLOYEE_DATA);
printf("\t|----------------------------------------------------------|\n");
}
}

void employee_add()
{
FILE *pfemployee;//文件指针
int employee_record,iflagexist,i;
char cFlag;

system("cls");
employee_record=employeefile("ab+");//ab+追加方式打开或重建二进制文件
if(employee_record==-1)
{
    printf("文件打开失败!\n");
    return;
}
else if(employee_record==0)
    printf("文件中没有职工信息!\n");
else
    employee_display();//如果职工信息不为0则显示所有职工信息

/*以下代码为循环录入职工信息*/
printf("请选择是否要输入职工信息(y/n):");
cFlag=getchar();
getchar();
if(cFlag=='n')
    return;
pfemployee=fopen("employee.txt","ab+");
if( pfemployee==NULL)
{
    printf("文件打开失败!\n");
    return;
}

while(cFlag=='y')
{
    if(employee_record>=EMPLOYEE_NUM)//超过容量范围不能继续写入
    {
        printf("记录已满!");
        fclose(pfemployee);
        return;
    }

    printf("请输入职工编号:");
    do{
        iflagexist=0;
        scanf("%d",&employeer[employee_record].num);
        getchar();
        for(i=0;i<employee_record;i++)
        {
            if(employeer[i].num==employeer[employee_record].num)
            {
                iflagexist=1;
                printf("该职工编号已存在,请重新输入:");
                break;
            }
        }
    }while( iflagexist==1);

        //新增的职工基本信息
        printf("请输入职工号:");
        scanf("%-6d",&employeer[employee_record].num);
        getchar();
        printf("请输入姓名:");
        gets(employeer[employee_record].name);
        printf("请输入性别:");
        scanf("%-10s",&employeer[employee_record].sex);
        getchar();
        printf("请输入年龄:");
        scanf("%-6d",&employeer[employee_record].age);
        getchar();
        printf("请输入学历:");
        gets(employeer[employee_record].xueli);
        printf("请输入工资:");
        scanf("%-16d",&employeer[employee_record].wage);
        getchar();
        printf("请输入住址:");
        gets(employeer[employee_record].addr);
        printf("请输入电话:");
        gets(employeer[employee_record].tel);

        /*将新增的职工信息写入文件中*/
        if(fwrite(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee)!=1)
        {
            printf("无法保存该信息!\n");
            return;
        }
        else
        {
            printf("%d号职工信息已保存!\n",employeer[employee_record].num);
            employee_record++;
        }
        printf("继续输入信息吗(y/n)");
        cFlag=getchar();
        getchar();
    }
    fclose(pfemployee);
    printf("添加职工信息执行完毕\n");

}

int employee_search()
{
int employeenum,employee_record,employeeid,i;
system("cls");

employee_record=employeefile("rb");//以"rb"形式打开文件,如果失败则返回
if(employee_record==-1)
{
    printf("文件打开失败!\n");
    printf("|按任意键返回子菜单|");
    getch();
    return -2;//文件打开失败,返回-2
}
else if(employee_record==0)
{
    printf("文件中没有职工信息!\n");
    printf("|按任意键返回子菜单|");
    getch();
    return -3;//文件打开失败,返回-3
}

//以下进入查找程序
printf("请输入职工号:");
scanf("%d",&employeenum);
getchar();
for(i=0;i<employee_record;i++)
{
    if(employeenum==employeer[i].num )
    {
        employeeid=i;//找到职工记录,返回记录号
        printf("\t   %-6s   %-10s   %-10s    %-6s    %-10s   %-16s   %-16s   %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话");
        printf("\t   %-6d   %-10s   %-10c    %-6d    %-10s   %-16d   %-16s   %-20s\n",EMPLOYEE_DATA);
        printf("\t|----------------------------------------------------------|\n");
        break;
    }
}


if(i==employee_record)//遍历循环,没有找到记录,提示用户
{
    printf("找不到%d号职工信息!\n",employeenum);
    employeeid=-1;
}
return employeeid;

}

void employee_del()
{
FILE *pfemployee;
int employeeid,employee_record,i;
char cFlag;//字符型变量用于选择

system("cls");
employeeid=employee_search();//调用查找函数获得职工记录号
if(employeeid==-1)
    return;

employee_record=employeefile("rb");
printf("已找到该职工,是否删除?(y/n)");
cFlag=getchar();
getchar();
if(cFlag=='n')
    return;
else if(cFlag=='y')
{
    for(i=employeeid;i<employee_record-1;i++)
        employeer[i]=employeer[i+1];//数组依次前移
    employee_record--;
}

pfemployee=fopen("employee.txt","wb");
if(pfemployee!=NULL)
{
    for(i=0;i<employee_record;i++)
    {
        if(fwrite(&employeer[i],LEN_EMPLOYEE,1,pfemployee)!=1)
        {
            printf("无法保存该信息!\n");
            return;
        }
    }
    fclose(pfemployee);
    printf("该职工信息已删除!\n");
}

}

void employee_xiugai()
{
int employeeid,employee_record,iflagexist,n,num,i;

system("cls");
employeeid=employee_search();//调用查找函数获得职工记录号
if(employeeid==-1)//未找到该序号的职工,直接返回
  return;

//找到该序号的职工,可以进行修改操作
employee_record=employeefile("rb");
showemployee_xiugaimenu();//显示修改选项的菜单
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
    printf("请输入职工编号:");
    do
    {
        iflagexist=0;
        scanf("%d",&n);
        getchar();
        for(i=0;i<employee_record;i++)
        {
            if(num==employeer[i].num&&i!=employeeid)
            {
                iflagexist=1;
                printf("错误,该职工编号已存在,请重新输入:");
                break;
            }
        }
    }while(iflagexist==1);
    employeer[employeeid].num=num;
    break;
case 2:
    printf("请输入职工姓名:");
    gets(employeer[employee_record].name);
    break;
case 3:
    printf("请输入性别:");
    scanf("%-10s",employeer[employee_record].sex);
    getchar();
    break;
case 4:
    printf("请输入年龄:");
    scanf("%-10d",&employeer[employee_record].age);
    getchar();
    break;
case 5:
    printf("请输入学历:");
    gets(employeer[employee_record].xueli);
    break;
case 6:
    printf("请输入工资:");
    scanf("%-16d",&employeer[employee_record].wage);
    getchar();
    break;
case 7:
    printf("请输入住址:");
    gets(employeer[employee_record].addr);
    break;
case 8:
    printf("请输入电话:");
    gets(employeer[employee_record].tel);
    break;
}

//调用saveemployeefile函数将修改记录存入文件
saveemployeefile(employeeid);
printf("职工信息修改成功!\n");

}

void showemployee_xiugaimenu()
{
printf("\n");
printf("\t| 1.职工号 |\n");
printf("\t| 2.姓名 |\n");
printf("\t| 3.性别 |\n");
printf("\t| 4.年龄 |\n");
printf("\t| 5.学历 |\n");
printf("\t| 6.工资 |\n");
printf("\t| 7.住址 |\n");
printf("\t| 8.电话 |\n");
printf("\n");
printf("请输入所要修改的信息(输入相应的数字:1-5):");
}

int employeefile(char * pcMode)//该函数负责从文件中读取所有的职工信息,并记录employee_record的值
{
int employee_record=0;
FILE *pfemployee;
pfemployee=fopen("employee.txt",pcMode);
if(pfemployee==NULL)
return -1;
while(!feof(pfemployee))
{
if(fread(&employeer[employee_record],LEN_EMPLOYEE,1,pfemployee))
employee_record++;
}
fclose(pfemployee);
return employee_record;
}

void saveemployeefile(int employeeid)//该函数专门负责将职工记录号为employeeid的职工信息写入到文件中
{
FILE *pfemployee;

pfemployee=fopen("employee.txt","a+");
if(pfemployee!=NULL)
{
    fseek(pfemployee,LEN_EMPLOYEE * employeeid,SEEK_SET);
    if(fwrite(&employeer[employeeid],LEN_EMPLOYEE,1,pfemployee)!=1)
        printf("无法保存该信息!\n");
}
fclose(pfemployee);

}

void adm_add()
{
FILE *pfadm;//文件指针
int adm_record,iflagexist,i;
char cFlag;

system("cls");
adm_record=admfile("ab+");//ab+追加方式打开或重建二进制文件
if(adm_record==-1)
{
    printf("文件打开失败!\n");
    return;
}
else if(adm_record==0)
    printf("文件中没有职工信息!\n");
else
    adm_display();//如果职工信息不为0则显示所有职工信息

/*以下代码为循环录入职工信息*/
printf("请选择是否要输入职工信息(y/n):");
cFlag=getchar();
getchar();
if(cFlag=='n')
    return;
pfadm=fopen("adm.txt","ab+");
if( pfadm==NULL)
{
    printf("文件打开失败!\n");
    return;
}

while(cFlag=='y')
{
    if(adm_record>=ADM_NUM)//超过容量范围不能继续写入
    {
        printf("记录已满!");
        fclose(pfadm);
        return;
    }

    printf("请输入管理员编号:");
    do{
        iflagexist=0;
        scanf("%d",&admer[adm_record].num);
        getchar();
        for(i=0;i<adm_record;i++)
        {
            if(admer[i].num==admer[adm_record].num)
            {
                iflagexist=1;
                printf("该管理员编号已存在,请重新输入:");
                break;
            }
        }
    }while( iflagexist==1);

        //新增的管理员的账户和密码
        printf("请输入管理员号:");
        scanf("%-6d",&admer[adm_record].num);
        getchar();
        printf("请输入账户:");
        gets(admer[adm_record].account);
        printf("请输入密码:");
        gets(admer[adm_record].password);


        /*将新增的管理员的账户和密码写入文件中*/
        if(fwrite(&admer[adm_record],LEN_ADM,1,pfadm)!=1)
        {
            printf("无法保存该信息!\n");
            return;
        }
        else
        {
            printf("%d号职工信息已保存!\n",admer[adm_record].num);
            adm_record++;
        }
        printf("继续输入信息吗(y/n)");
        cFlag=getchar();
        getchar();
    }
    fclose(pfadm);
    printf("添加管理员账户和密码执行完毕\n");

}

void adm_display()
{
int i,adm_record;
system("cls");
adm_record=admfile("rb");
if(adm_record==-1)
printf("文件打开失败,请先添加管理员信息!\n");
else if(adm_record==0)
printf("文件中没有管理员信息!\n");
else
{
printf("\t|----------------------------------------------------------|\n");
printf("\t %-6s %-20s %-20s\n","管理员编号","账户","密码");
for(i=0;i<adm_record;i++)
printf("\t %-6d %-20s %-20s\n",ADM_DATA);
printf("\t|----------------------------------------------------------|\n");
}
}

void adm_del()
{
FILE *pfadm;
int admid,adm_record,i;
char cFlag;//字符型变量用于选择

system("cls");
admid=adm_search();//调用查找函数获得管理员记录号
if(admid==-1)
    return;

adm_record=admfile("rb");
printf("已找到该管理员,是否删除?(y/n)");
cFlag=getchar();
getchar();
if(cFlag=='n')
    return;
else if(cFlag=='y')
{
    for(i=admid;i<adm_record-1;i++)
        admer[i]=admer[i+1];//数组依次前移
    adm_record--;
}

pfadm=fopen("adm.txt","wb");
if(pfadm!=NULL)
{
    for(i=0;i<adm_record;i++)
    {
        if(fwrite(&admer[i],LEN_ADM,1,pfadm)!=1)
        {
            printf("无法保存该信息!\n");
            return;
        }
    }
    fclose(pfadm);
    printf("%d号管理员信息已删除!\n",admer[i].num);
}

}

void adm_xiugai()
{
int admid,adm_record,iflagexist,n,num,i;

system("cls");
admid=adm_search();//调用查找函数获得管理员记录号
if(admid==-1)//未找到该序号的管理员,直接返回
  return;

//找到该序号的管理员,可以进行修改操作
adm_record=admfile("rb");
showadm_xiugaimenu();//显示修改选项的菜单
scanf("%d",&n);
getchar();
switch(n)
{
case 1:
    printf("请输入管理员编号:");
    do
    {
        iflagexist=0;
        scanf("%d",&n);
        getchar();
        for(i=0;i<adm_record;i++)
        {
            if(num==admer[i].num&&i!=admid)
            {
                iflagexist=1;
                printf("错误,该管理员编号已存在,请重新输入:");
                break;
            }
        }
    }while(iflagexist==1);
    admer[admid].num=num;
    break;
case 2:
    printf("请输入管理员账户:");
    gets(admer[adm_record].account);
    break;
case 3:
    printf("请输入管理员密码:");
    gets(admer[adm_record].password);
    break;
}

//调用saveadmfile函数将修改记录存入文件
saveadmfile(admid);
printf("管理员信息修改成功!\n");

}

void showadm_xiugaimenu()
{
printf("\n");
printf("\t| 1.管理员编号 |\n");
printf("\t| 2.账户 |\n");
printf("\t| 3.密码 |\n");

printf("\n");
printf("请输入所要修改的信息(输入相应的数字:1-3):");

}

int admfile(char * pcMode)//该函数负责从文件中读取所有的管理员信息,并记录adm_record的值
{
int adm_record=0;
FILE * pfadm;
pfadm=fopen("adm.txt",pcMode);
if(pfadm==NULL)
return -1;
while(!feof(pfadm))
{
if(fread(&admer[adm_record],LEN_ADM,1,pfadm))
adm_record++;
}
fclose(pfadm);
return adm_record;
}

void saveadmfile(int admid)//该函数专门负责将管理员记录号为admid的管理员信息写入到文件中
{
FILE *pfadm;

pfadm=fopen("adm.txt","r+");
if(pfadm!=NULL)
{
    fseek(pfadm,LEN_ADM * admid,SEEK_SET);
    if(fwrite(&admer[admid],LEN_ADM,1,pfadm)!=1)
            printf("无法保存该信息!\n");
}
fclose(pfadm);

}

int adm_search()
{
int admnum,adm_record,admid,i;
system("cls");

adm_record=admfile("rb");//以"rb"形式打开文件,如果失败则返回
if(adm_record==-1)
{
    printf("文件打开失败!\n");
    printf("|按任意键返回子菜单|");
    getch();
    return -2;//文件打开失败,返回-2
}
else if(adm_record==0)
{
    printf("文件中没有职工信息!\n");
    printf("|按任意键返回子菜单|");
    getch();
    return -3;//文件打开失败,返回-3
}

//以下进入查找程序
printf("请输入职工号:");
scanf("%d",&admnum);
getchar();
for(i=0;i<adm_record;i++)
{
    if(admnum==admer[i].num )
    {
        admid=i;//找到职工记录,返回记录号
        printf("\t   %-6d   %-20s   %-20s\n","管理员编号","账户","密码");
        printf("\t   %-6d   %-20s   %-20s\n",ADM_DATA);
        printf("\t|----------------------------------------------------------|\n");
        break;
    }
}


if(i==adm_record)//遍历循环,没有找到记录,提示用户
{
    printf("找不到%d号职工信息!\n",admnum);
admid=-1;
}
return admid;

}

void adm_in()
{

int i,n,k,j=-1,adm_record;
char admaccount[20];
char admpassword[20];
FILE *fpadm;
adm_record=admfile("rb");

printf("将于3秒后转至administrator登录界面");
Sleep(3000);
system("cls");

 for(k=0;k<3;k++)
 {
     printf("\n\t\t\t请输入你的账户名:");
     scanf("%s",admaccount);
     printf("\n\t\t\t请输入你的登入密码:");
     scanf("%s",admpassword);
     for(i=0;i<adm_record;i++)
     {
          if(strcmp(admer[i].account,admaccount)==0&&strcmp(admer[i].password,admpassword)==0)
          {
              printf("\n\t\t\t登入成功!");
              j=1;
              admmenu();
              goto loop;


          }
            else

              printf("\t\t\t用户名或者密码错误,请重新输入:");
            break;
     }
 }

     if(j==-1)
     {
         printf("\t连续输入错误3次,即将退出程序\n");

        Sleep(1000);

        exit(0);
     }

loop: scanf("%d",&n);
getchar();

 while(n)
 {
     switch(n)
    {
    case 1:
        employee_display();
        break;
    case 2:
        employee_search();
        break;
    case 3:
        employee_del();
        break;
    case 4:
        employee_add();
        break;
    case 5:
        employee_xiugai();
        break;
    default:
        printf("\t\t请输入正确的数字!");
    }
    printf("|按任意键返回子菜单|");
    getch();

    admmenu();
    scanf("%d",&n);
    getchar();
}

}

void admmenu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t|------------------欢迎进入-----------------------|\n");
printf("\t| 职工管理系统 |\n");
printf("\t| 子菜单 |\n");
printf("\t| 1.浏览职工信息 |\n");
printf("\t| 2.查询职工信息 |\n");
printf("\t| 3.删除职工信息 |\n");
printf("\t| 4.添加职工信息 |\n");
printf("\t| 5.修改职工信息 |\n");
printf("\t| 0.返回主菜单 |\n");
printf("\t|-------------------------------------------------|\n");
printf("\n");
printf("\t\t请选择(0-5):");
}

void employee_in()
{
int n,employee_record;
system("cls");
printf("\n\n\n\n\n");
employee_record=employeefile("rb");
if(employee_record==-1)
printf("文件打开失败,你的信息还没有被添加!\n");
else if(employee_record==0)
printf("文件中没有你的信息!\n");
else
{
printf("\t|----------------------------------------------------------|\n");
printf("\t %-6s %-10s %-10s %-6s %-10s %-16s %-16s %-20s\n","职工号","姓名","性别","年龄","学历","工资","住址","电话");

    printf("请输入你的职工号:\n");
    scanf("%d",&n);
    printf("\t   %-6d   %-10s   %-10c    %-6d    %-10s   %-16d   %-16s   %-20s\n",employeer[n-1].num,employeer[n-1].name,employeer[n-1].sex,employeer[n-1].age,employeer[n-1].xueli,employeer[n-1].wage,employeer[n-1].addr,employeer[n-1].tel);
    printf("\t|----------------------------------------------------------|\n");
}

}

  • 写回答

1条回答 默认 最新

  • 夜殇_少飞8023 2019-06-06 16:52
    关注

    你是基于什么软件开发的?C语言啊,打开失败端口~!

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题