注册登录学生管理系统小项目

头文件

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

相关推荐
QT 小鲜肉4 分钟前
【数据结构与算法基础】05. 栈详解(C++ 实战)
开发语言·数据结构·c++·笔记·学习·算法·学习方法
lingran__7 分钟前
算法沉淀第七天(AtCoder Beginner Contest 428 和 小训练赛)
c++·算法
前端小刘哥10 分钟前
新版视频直播点播平台EasyDSS,打通远程教研与教师培训新通路
算法
2401_8401052010 分钟前
P1049 装箱问题 题解(四种方法)附DP和DFS的对比
c++·算法·深度优先·动态规划
kobe_t21 分钟前
数据安全系列7:常用的非对称算法浅析
算法
靠近彗星22 分钟前
3.4特殊矩阵的压缩存储
数据结构·人工智能·算法
清辞8531 小时前
C++入门(底层知识C与C++的不同)
开发语言·c++·算法
~kiss~1 小时前
图像处理~多尺度边缘检测算法
图像处理·算法·计算机视觉
Mr.看海2 小时前
机器学习鼻祖级算法——使用SVM实现多分类及Python实现
算法·机器学习·支持向量机
.格子衫.2 小时前
018数据结构之队列——算法备赛
数据结构·算法