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

头文件

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

相关推荐
1 9 J17 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
passer__jw7672 小时前
【LeetCode】【算法】3. 无重复字符的最长子串
算法·leetcode
passer__jw7672 小时前
【LeetCode】【算法】21. 合并两个有序链表
算法·leetcode·链表
sweetheart7-72 小时前
LeetCode22. 括号生成(2024冬季每日一题 2)
算法·深度优先·力扣·dfs·左右括号匹配
景鹤5 小时前
【算法】递归+回溯+剪枝:78.子集
算法·机器学习·剪枝
_OLi_5 小时前
力扣 LeetCode 704. 二分查找(Day1:数组)
算法·leetcode·职场和发展
丶Darling.5 小时前
Day40 | 动态规划 :完全背包应用 组合总和IV(类比爬楼梯)
c++·算法·动态规划·记忆化搜索·回溯
风影小子5 小时前
IO作业5
算法
奶味少女酱~5 小时前
常用的c++特性-->day02
开发语言·c++·算法
passer__jw7676 小时前
【LeetCode】【算法】11. 盛最多水的容器
算法·leetcode