头文件
cpp
#ifndef _LOGINLINK_H_
#define _LOGINLINK_H_
#include<myhead.h>
typedef struct
{
int id;
char name[20];
int age;
}stu,*Pstu;
typedef struct node
{
union
{
int len;
stu data;
};
struct node *next;
}node,*Pnode;
int regist();
int login();
Pnode create();
void input_link(Pnode);
void output_link(Pnode);
void anypos_delete(Pnode,int);
void anypos_insert(Pnode,int);
void anypos_search(Pnode,int);
void anypos_change(Pnode,int);
void head_insert(Pnode);
void rear_insert(Pnode);
void name_delete(Pnode,char*);
void age_change(Pnode,int);
#endif
函数文件
cpp
#include "loginlink.h"
int regist()
{
char name[20];
char code[20];
int fp=open("./user.txt",O_CREAT|O_WRONLY|O_APPEND,0664);
if(fp==-1)
{
perror("open fp");
return -1;
}
printf("请输入注册账号:");
fp=open("./user.txt",O_CREAT|O_WRONLY|O_APPEND,0664);
if(fp==-1)
{
perror("open fp");
return -1;
}
scanf("%s",name);
printf("请输入注册密码:");
scanf("%s",code);
char a=' ';
char b='\n';
write(fp,name,strlen(name));
write(fp,&a,sizeof(a));
write(fp,code,strlen(code));
write(fp,&b,sizeof(b));
close(fp);
printf("注册成功\n");
}
int login()
{ int flag=0;
char name[20],code[20],dname[20],dcode[20];
FILE *fp=fopen("./user.txt","r");
if(fp==NULL)
{
perror("open fp");
return -1;
}
printf("请输入登录账号:");
scanf("%s",dname);
printf("请输入登录密码:");
scanf("%s",dcode);
while(1)
{
int res= fscanf(fp,"%s %s\n",name,code);
if(res<0)
{
break;
}
if(strcmp(name,dname)==0&&strcmp(code,dcode)==0)
{
flag=1;
printf("登录成功\n");
return 1;
}
}
if(flag==0)
{
printf("登录失败\n");
}
}
Pnode create()
{
Pnode L=malloc(sizeof(node));
if(L==NULL)
{
printf("申请头节点失败\n");
return NULL;
}
L->len=0;
L->next=NULL;
printf("初始化成功\n");
return L;
}
void input_link(Pnode L)
{
stu e;
printf("请输入学号:");
scanf("%d",&e.id);
printf("请输入姓名:");
scanf("%s",e.name);
printf("请输入年龄:");
scanf("%d",&e.age);
Pnode p=malloc(sizeof(node));
if(p==NULL)
{
printf("申请正常节点失败\n");
return;
}
Pnode t=L;
for(int i=0;i<L->len;i++)
{
t=t->next;
}
p->data=e;
p->next=NULL;
t->next=p;
L->len++;
printf("输入成功\n");
}
void output_link(Pnode L)
{
Pnode t=L;
printf("学生信息如下\n");
for(int i=0;i<L->len;i++)
{
t=t->next;
printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,\
t->data.name,t->data.age);
}
}
void anypos_delete(Pnode L,int pos)
{
if(pos<1||pos>L->len||L==NULL||L->len==0)
{
printf("删除失败\n");
return;
}
Pnode t=L;
for(int i=0;i<pos-1;i++)
{
t=t->next;
}
Pnode Q=t->next;
t->next=Q->next;
free(Q);
Q=NULL;
L->len--;
printf("删除成功\n");
}
void anypos_insert(Pnode L,int pos)
{
if(pos<1||pos>L->len+1||L==NULL)
{
printf("插入失败\n");
return;
}
Pnode t=L;
for(int i=0;i<pos-1;i++)
{
t=t->next;
}
Pnode p=malloc(sizeof(node));
printf("请输入插入学生的学号:");
scanf("%d",&p->data.id);
printf("请输入插入学生的姓名:");
scanf("%s",p->data.name);
printf("请输入插入学生的年龄:");
scanf("%d",&p->data.age);
p->next=t->next;
t->next=p;
L->len++;
printf("插入成功\n");
}
void anypos_search(Pnode L,int pos)
{
if(pos<1||pos>L->len||L==NULL||L->len==0)
{
printf("查找失败\n");
return;
}
Pnode t=L;
for(int i=0;i<pos;i++)
{
t=t->next;
}
printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,\
t->data.name,t->data.age);
}
void anypos_change(Pnode L,int pos)
{
if(pos<1||pos>L->len||L==NULL||L->len==0)
{
printf("修改失败\n");
return;
}
Pnode t=L;
for(int i=0;i<pos;i++)
{
t=t->next;
}
printf("请输入你要修改的学生学号:");
scanf("%d",&t->data.id);
printf("请输入你要修改的学生姓名:");
scanf("%s",t->data.name);
printf("请输入你要修改的学生年龄:");
scanf("%d",&t->data.age);
printf("修改成功\n");
}
void head_insert(Pnode L)
{
if(L==NULL)
{
printf("插入失败\n");
return;
}
Pnode p=malloc(sizeof(node));
printf("请输入你要插入的学生学号:");
scanf("%d",&p->data.id);
printf("请输入你要插入的学生姓名:");
scanf("%s",p->data.name);
printf("请输入你要插入的学生年龄:");
scanf("%d",&p->data.age);
p->next=L->next;
L->next=p;
L->len++;
printf("插入成功\n");
}
void rear_insert(Pnode L)
{
if(L==NULL)
{
printf("插入失败\n");
return;
}
Pnode p=malloc(sizeof(node));
printf("请输入你要插入的学生学号:");
scanf("%d",&p->data.id);
printf("请输入你要插入的学生姓名:");
scanf("%s",p->data.name);
printf("请输入你要插入的学生年龄:");
scanf("%d",&p->data.age);
Pnode t=L;
for(int i=0;i<L->len;i++)
{
t=t->next;
}
p->next=NULL;
t->next=p;
L->len++;
printf("插入成功\n");
}
void name_delete(Pnode L,char*name)
{
int flag=0;
int i;
Pnode t=L->next;
Pnode Q=L;
for(i=0;i<L->len-1;i++)
{
if(strcmp(t->data.name,name)==0)
{
flag=1;
break;
}
t=t->next;
Q=Q->next;
}
if(flag==0)
{
printf("删除失败\n");
return;
}
Q->next=t->next;
free(t);
t=NULL;
L->len--;
printf("删除成功\n");
}
void age_change(Pnode L,int age)
{
int flag=0;
int i;
Pnode t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
if(t->data.age==age)
{
flag=1;
break;
}
}
if(flag==0)
{
printf("修改失败\n");
return;
}
t->data.id=10086;
printf("修改成功\n");
}
菜单文件
cpp
#include "loginlink.h"
int main(int argc, const char *argv[])
{
int ch,a,n;
Pnode L=create();
char name[20];
int pos;
int age;
while(1)
{
printf("\t\t\t1、注册\n");
printf("\t\t\t2、登录\n");
printf("\t\t\t0、退出\n");
printf("请输入你的选择:");
scanf("%d",&ch);
getchar();
switch(ch)
{
case 1:regist();
break;
case 2: a=login();
if(a==1)
{
goto system;
}
break;
case 0: return 0;
break;
default:printf("输入错误\n");
break;
}
}
while(1)
{
system:
printf("\t\t\t学生管理系统\n");
printf("\t\t\t1、输入学生信息\n");
printf("\t\t\t2、输出学生信息\n");
printf("\t\t\t3、任意位置删除学生信息\n");
printf("\t\t\t4、任意位置插入学生信息\n");
printf("\t\t\t5、任意位置查找学生信息\n");
printf("\t\t\t6、任意位置修改学生信息\n");
printf("\t\t\t7、表头插入学生信息\n");
printf("\t\t\t8、表尾插入学生信息\n");
printf("\t\t\t9、按照姓名查找学生并删除\n");
printf("\t\t\t10、按照年龄查找学生并修改学号为10086\n");
printf("\t\t\t0、退出学生系统\n");
printf("请输入你的选择:");
scanf("%d",&ch);
getchar();
switch(ch)
{
case 1:
printf("请输入学生人数:");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
input_link(L);
}
break;
case 2:
output_link(L);
break;
case 3:
printf("请输入删除学生的位置:");
scanf("%d",&pos);
anypos_delete(L,pos);
break;
case 4:
printf("请输入插入学生的位置:");
scanf("%d",&pos);
anypos_insert(L,pos);
break;
case 5:
printf("请输入查找学生的位置:");
scanf("%d",&pos);
anypos_search(L,pos);
break;
case 6:
printf("请输入修改学生的位置:");
scanf("%d",&pos);
anypos_change(L,pos);
break;
case 7:
head_insert(L);
break;
case 8:
rear_insert(L);
break;
case 9:
printf("请输入删除学生的姓名:");
scanf("%s",name);
name_delete(L,name);
break;
case 10:printf("请输入修改学生的年龄:");
scanf("%d",&age);
age_change(L,age);
break;
case 0: return 0;
break;
default:printf("输入错误\n");
break;
}
}
return 0;
}
效果展示
注册功能
登录功能
输入功能
输出功能
删除功能
插入功能
查找功能
修改功能
表头插入
表尾插入
按照姓名查找学生并删除
按照年龄查找学生并修改学号为10086