首页 > 其他分享 >包含注册登录界面的单链表学生管理系统

包含注册登录界面的单链表学生管理系统

时间:2024-11-09 14:48:03浏览次数:3  
标签:单链 界面 Plink 管理系统 int 学生 link printf data

1、使用fscanf和fprintf实现登录注册界面,登录成功显示学生管理系统菜单界面。

2、学生信息结构体(学号,姓名,年龄)

3、界面功能包含:录入学生信息,输出学生信息,任意位置删除学生信息,任意位置插入学生信息,任意位置修改学生信息,任意位置查找学生信息,表头插入一个学生,表尾插入一个学生信息,按照姓名查找学生并删除,按照年龄查找学生并修改其学号为10086。

4、所有功能都需要人为输入,不能写死参数。

fun.h

#ifndef _STU_
#define _STU_
#include <myhead.h>

typedef struct
{
	int id;
	char name[20];
	int age;
}stu,*Pstu;
typedef struct node
{
	stu data;
	int len;
	struct node *next;
}Link,*Plink;

int regist();

int login();

Plink apply();

Plink create();

void link_input(Plink);

int link_output(Plink);

void link_pos_del(Plink);

void link_pos_insert(Plink);

void link_pos_change(Plink);

void link_pos_find(Plink);

void link_head(Plink);

void link_rear(Plink);

void link_name_del(Plink);

void link_age_id(Plink);
#endif

main.c

#include "fun.h"
int main(int argc, const char *argv[])
{
	int k=-1;
    //账号注册登录界面
	while(1)
	{
		printf("\t\t1.注册\n");
		printf("\t\t2.登录\n");
		printf("\t\t0.退出\n");
		int ch;
		printf("输入选择的功能:");
		scanf("%d",&ch);
		getchar();
		switch(ch)
		{
			case 1:
                //注册函数
				regist();
				break;
			case 2:
				{
                //登录函数,并接受登录是否成功的返回值
				int flag=login();
					if(flag==0)
					{
						k=1;
					}
				}
				break;
			case 0:
			{
				printf("退出登录页面成功\n");
				exit(0);
			}
		}
        //成功登录后,跳出登录界面
		if(k==1)
		{
			break;
		}

	}
	if(k==1)
	{
        //初始化单链表函数
		Plink L = create();

        //学生管理系统界面
		while(1)
		{	
			printf("\t\t1.录入学生信息\n");
			printf("\t\t2.输出学生信息\n");
			printf("\t\t3.任意位置删除学生信息\n");
			printf("\t\t4.任意位置插入学生信息\n");
			printf("\t\t5.任意位置修改学生信息\n");
			printf("\t\t6.任意位置查找学生信息\n");
			printf("\t\t7.表头插入一个学生\n");
			printf("\t\t8.表尾插入一个学生信息\n");
			printf("\t\t9.按照姓名查找学生并删除\n");
			printf("\t\t10.按照年龄查找学生并修改其学号为10086\n");
			printf("\t\t0.退出程序\n");
			int ch;
			printf("输出选择的功能:");
			scanf("%d",&ch);
            //学生管理功能函数调用
			switch(ch)
			{
				case 1:
					link_input(L);//录入学生信息
					break;
				case 2:
					link_output(L);//输出学生信息
					break;
				case 3:
					link_pos_del(L);//任意位置删除学生信息
					break;
				case 4:
					link_pos_insert(L);//任意位置插入学生信息
					break;
				case 5:
					link_pos_change(L);//任意位置修改学生信息
					break;
				case 6:
					link_pos_find(L);//任意位置查找学生信息
					break;
				case 7:
					link_head(L);//表头插入一个学生
					break;
				case 8:
					link_rear(L);//表尾插入一个学生信息
					break;
				case 9:
					link_name_del(L);//按照姓名查找学生并删除
					break;
				case 10:
					link_age_id(L);//按照年龄查找学生并修改其学号为10086
					break;
				case 0:
					{
					printf("成功退出\n");
					exit(0);//结束程序
					}
					break;
			}

		}
	}

	return 0;
}

fun.c

#include "fun.h"
//注册账号
int regist()
{
    //账号
	char name[20];
    //密码
	char code[20];
    //输入账户密码到文件中
	printf("请输入注册账号:");
	fgets(name,sizeof(name),stdin);
	printf("请设置密码:");
	fgets(code,sizeof(code),stdin);

    //将最后的换行转为\0,\0为字符串结束标识
	name[strlen(name)-1]='\0';
	code[strlen(code)-1]='\0';
    
    //创建文件,并把密码保存到可以自动生成且可保存多个账号密码的user文件中
	FILE *fp = fopen("./user","a");
	if(fp==NULL)
	{
		perror("fopen");
		regist -1;
	}

	fprintf(fp,"%s %s ",name,code);
	printf("注册账号成功\n");
	fclose(fp);
	return 0;
}

//登录系统
int login()
{
	char name[20],dname[20];
	char code[20],dcode[20];
	printf("请输入账号:");
	fgets(dname,sizeof(dname),stdin);
	printf("请输入密码:");
	fgets(dcode,sizeof(dcode),stdin);

	dname[strlen(dname)-1]='\0';
	dcode[strlen(dcode)-1]='\0';

	FILE *fp = fopen("./user","r");
	if(fp==NULL)
	{
		perror("fopen");
		return -1;
	}
	int flag=0;
	while(1)
	{
		int res = fscanf(fp,"%s %s",name,code);
		if(res<0)
		{
			break;
		}
		if(strcmp(name,dname)==0 && strcmp(code,dcode)==0)
		{
			printf("登录成功\n");
			flag=1;
		}
	}
	if(flag==0)
	{
		printf("账号或密码错误\n");
		return -1;
	}
	return 0;
}

//申请节点空间
Plink apply()
{
	Plink p=malloc(sizeof(Link));
	if(p==NULL)
	{
		return NULL;
	}
	return p;
}

//创建链表节点
Plink create()
{
	Plink p=apply();
	if(p==NULL)
	{
		printf("链表初始化失败\n");
		return NULL;
	}
	p->len=0;
	p->next=NULL;
	printf("链表初始化成功\n");
	return p;

}
//1.录入学生信息
void link_input(Plink L)
{
	int n;
	printf("请输入输入学生的个数:");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("请输入第%d个学生的信息\n",i+1);

		Plink p = apply();

		printf("\tid:");
		scanf("%d",&p->data.id);

		printf("\tname:");
		scanf("%s",p->data.name);

		printf("\tage:");
		scanf("%d",&p->data.age);

		p->next=L->next;
		L->next=p;
		L->len++;
	}
	printf("信息录入成功\n");
}

//2.输出学生信息
int link_output(Plink L)
{
	if(L->len==0 || L==NULL)
	{
		printf("查询失败,无学生信息\n");
		return 0;
	}
	Plink t = L;
	printf("\tid\tname\tage\n");

	for(int i=0;i<L->len;i++)
	{
		t=t->next;
		printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
	}
	printf("已输出全部学生信息\n");
	return 0;
}

//3.任意位置删除学生信息
void link_pos_del(Plink L)
{
	int pos;
	printf("请输入要删除信息的位置:");
	scanf("%d",&pos);
	if(L==NULL || L->len==0 || pos<1 || pos>L->len)
	{
		printf("删除失败\n");
	}
	else
	{
		Plink t=L;
		for(int i=0;i<pos-1;i++)
		{
			t=t->next;
		}

		Plink Q=t->next;
		t->next=Q->next;
		free(Q);
		Q==NULL;
		L->len--;
		printf("第%d个位置信息删除成功\n",pos);
	}
}

//4.任意位置插入学生信息
void link_pos_insert(Plink L)
{
	int pos;
	printf("请输入要插入信息的位置:");
	scanf("%d",&pos);
	if(L==NULL || pos<1 || pos>L->len+1)
	{
		printf("删除失败\n");
	}
	else
	{
		Plink p = apply();
		Plink t=L;
		for(int i=0;i<pos-1;i++)
		{
			t=t->next;
		}

		printf("\tid:");
		scanf("%d",&p->data.id);

		printf("\tname:");
		scanf("%s",p->data.name);

		printf("\tage:");
		scanf("%d",&p->data.age);

		p->next=t->next;
		t->next=p;
		L->len++;
		printf("第%d个位置信息插入成功\n",pos);	
	}	
}

//5.任意位置修改学生信息
void link_pos_change(Plink L)
{
	int pos;
	printf("请输入要修改信息的位置:");
	scanf("%d",&pos);
	if(L==NULL || L->len==0 || pos<1 || pos>L->len)
	{
		printf("修改失败\n");
	}
	else
	{	
		Plink t=L;
		for(int i=0;i<pos;i++)
		{
			t=t->next;
		}
		printf("该位置信息为:\n");
		printf("\tid\tname\tage\n");
		printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
		printf("请输入修改后的各项数据:\n");

		printf("\tid:");
		scanf("%d",&t->data.id);

		printf("\tname:");
		scanf("%s",t->data.name);

		printf("\tage:");
		scanf("%d",&t->data.age);

	}
	printf("修改成功\n");
}

//6.任意位置查找学生信息
void link_pos_find(Plink L)
{
	int pos;
	printf("请输入要查询信息的位置:");
	scanf("%d",&pos);
	if(L==NULL || L->len==0 || pos<1 || pos>L->len)
	{
		printf("删除失败\n");
	}
	else
	{
		Plink t = L;
		printf("\tid\tname\tage\n");

		for(int i=0;i<pos;i++)
		{
			t=t->next;
		}
			printf("\t%d\t%s\t%d\n",t->data.id,t->data.name,t->data.age);
		printf("已输出第%d个位置的学生信息\n",pos);

	}
	
}
//7.头插一个学生信息
void link_head(Plink L)
{
	if(L==NULL)
	{
		printf("插入信息失败\n");
	}
	else
	{
		printf("请输入插入学生的信息\n");

		Plink p = apply();

		printf("\tid:");
		scanf("%d",&p->data.id);

		printf("\tname:");
		scanf("%s",p->data.name);

		printf("\tage:");
		scanf("%d",&p->data.age);

		p->next=L->next;
		L->next=p;
		L->len++;
		printf("表头插入学生信息成功\n");
	}
}

//8.尾插一个学生信息
void link_rear(Plink L)
{
	if(L==NULL)
	{
		printf("插入学生信息失败\n");
	}
	else
	{
		printf("请输入插入学生的信息\n");

		Plink p = apply();

		printf("\tid:");
		scanf("%d",&p->data.id);

		printf("\tname:");
		scanf("%s",p->data.name);

		printf("\tage:");
		scanf("%d",&p->data.age);

		Plink t=L;

		for(int i=0;i<L->len;i++)
		{
			t = t->next;
		}

		p->next=NULL;
		t->next=p;
		L->len++;
		printf("表尾插入学生信息成功\n");
	}
}

//9.按照姓名查找学生并删除
void link_name_del(Plink L)
{
	if(L==NULL || L->len==0)
	{
		printf("查找失败\n");
	}
	else
	{
		char a[20];
		printf("请输入要删除学生的姓名:");
		scanf("%s",a);
		Plink t = L;
		int count =0;
		for(int i=0;i<L->len;i++)
		{
			t=t->next;
			if(strcmp(a,t->data.name)==0)
			{
				count=i+1;
				break;
			}
		}
		t=L;
		for(int i=0;i<count-1;i++)
		{
			t=t->next;
		}

		Plink Q=t->next;
		t->next=Q->next;
		free(Q);
		Q==NULL;
		L->len--;
		printf("信息删除成功\n");

	}
}

//10.按照年龄查找学生并修改其学号为10086
void link_age_id(Plink L)
{
	if(L==NULL || L->len==0)
	{
		printf("查找失败\n");
	}
	else
	{
		int a;
		printf("请输入要修改学号学生的age:");
		scanf("%d",&a);
		Plink t = L;
		int count =0;
		for(int i=0;i<L->len;i++)
		{
			t=t->next;
			if(a==t->data.age)
			{
				count=i+1;
				break;
			}
		}
		t=L;
		for(int i=0;i<count;i++)
		{
			t=t->next;
		}
		t->data.id=10086;
		printf("修改id成功\n");
	}	
}

标签:单链,界面,Plink,管理系统,int,学生,link,printf,data
From: https://blog.csdn.net/m0_72110718/article/details/143635480

相关文章

  • java ssm 餐厅管理系统 餐馆管理 在线订餐 餐饮管理 源码 jsp
    一、项目简介本项目是一套基于SSM的餐厅管理系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。包含:项目源码、数据库脚本、软件工具等。项目都经过严格调试,确保可以运行!二、技术实现​后端技术:Spring、SpringMVC、MyBatis前端技术:JSP、HTML、CSS、JavaSc......
  • 运用python关于无界面版猜数游戏的设计与实现
    importrandom      这行代码导入了Python的 random 模块defguess_number_game():        number_to_guess=random.randint(1,100)  randint是random模块中的一个函数,用于生成                    ......
  • ssm079基于SSM框架云趣科技客户管理系统+jsp(论文+源码)_kaic
    毕业设计(论文)题目:客户管理系统设计与实现      摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本客户管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完......
  • 基于SpringBoot+Vue的巨会玩剧本杀服务平台管理系统(源码+LW+调试文档+讲解)
    项目简介基于SpringBoot+Vue的巨会玩剧本杀服务平台管理系统是专为剧本杀行业打造的高效管理系统。对于玩家而言,可在平台浏览丰富的剧本信息,包括剧本类型(如悬疑、古风、情感等)、难度级别、人数要求、时长等。玩家能在线预订场次、选择喜欢的DM(主持人),还可查看评价。......
  • 基于SpringBoot+Vue的就医信息管理系统(源码+LW+调试文档+讲解)
    项目简介基于SpringBoot+Vue的就医信息管理系统为就医流程和医院管理带来便利。患者可预约挂号,查看科室与医生信息、排班情况并在线支付挂号费,就医时能查询检查检验结果,病历也能存储和查询。医院工作人员通过该系统管理患者信息、医生排班和科室资源,实现诊疗流程电子......
  • 基于SpringBoot+Vue的旧时光咖啡厅管理系统(源码+LW+调试文档+讲解)
    项目简介基于SpringBoot+Vue的旧时光咖啡厅管理系统是专为咖啡厅运营打造的高效管理工具。对于咖啡厅员工,系统可用于管理桌位信息,实时查看空闲与已占用桌位,方便为顾客安排就座。能处理点餐流程,记录顾客所点饮品、食物信息并传至厨房和吧台。同时,支持收银功能,计算订......
  • java基于SpringBoot的家电销售管理系统(源码+vue+部署文档+前后端分离等)
    收藏关注不迷路!!......
  • 基于springboot+vue的医院人力资源管理系统的设计与实现(源码+lw+部署文档+讲解等)
    课题摘要基于springboot+vue的医院人力资源管理系统是一款针对医院人力资源管理需求而设计的高效、便捷的信息化系统。系统涵盖了员工信息管理功能,全面记录医院员工的基本资料,如姓名、性别、年龄、联系方式、身份证号等。同时详细记录员工的学历背景、专业资质、职称......
  • 新安装pbootcms程序为何网站前端页面出现404错误界面两种解决方法
    遇到PBootCMS新安装后网站前端页面出现404错误,可以尝试以下步骤来排查和解决问题:检查伪静态设置:确认服务器是否支持伪静态功能。检查PBootCMS的伪静态规则是否正确配置。通常在安装目录下的.htaccess文件中可以找到相关设置。检查URL重写模块:对于Apache服务器,确保mod_......
  • 高效共享出行:基于SpringBoot的汽车管理系统
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理共享汽车管理系统的相关信息成为必然。开发合适的共享汽车管理系统,可以方便管理人员对共享......