首页 > 其他分享 >简易的学生信息管理系统制作——C语言实现

简易的学生信息管理系统制作——C语言实现

时间:2024-11-12 09:19:54浏览次数:3  
标签:Plink int void pos C语言 简易 printf 信息管理系统 next

菜单代码

#include "head.h"
int main(int argc, const char *argv[])
{
	int ch,k;
	//登录注册
	while(1)
	{
		printf("\t1、注册\n");
		printf("\t2、登录\n");
		printf("\t0、退出\n");
		
		printf("请输入你的选择:");
		scanf("%d",&ch);
		getchar();
		switch(ch)
		{
			case 1:
				{
					regist();//注册函数
				}
				break;
			case 2:
				{
					k = login();//登录函数
				}
				break;
			case 0:
				{
					exit(EXIT_SUCCESS);//退出函数
				}
				break;
		}
		if(k == 1)
		{
			break;
		}
	}
	while(1)
	{
		printf("\t------学生管理系统首页------\n");
		printf("\t1、录入学生信息\n");
		printf("\t2、输出学生信息\n");
		printf("\t3、任意位置删除学生信息\n");
		printf("\t4、任意位置插入学生信息\n");
		printf("\t5、任意位置修改学生信息\n");
		printf("\t6、任意位置查找学生信息\n");
		printf("\t7、表头插入一个学生信息\n");
		printf("\t8、表尾插入一个学生信息\n");
		printf("\t9、按照姓名查找学生信息并删除\n");
		printf("\t10、按年龄查找学生并修改学号为10086\n");
		printf("\t0、退出\n");

		printf("请输入你的选择:");
		scanf("%d",&ch);
		
		Plink L;
		switch(ch)
		{
		case 1:
			{
				L = create();
				input_link(L);
			}
			break;
		case 2:
			{
				output_link(L);
			}
			break;
		case 3:
			{
				int pos;
				printf("请输入需要删除的学生位置:");
				scanf("%d",&pos);
				del_pos(L,pos);
			}
			break;
		case 4:
			{
				insert_pos(L);
			}
			break;
		case 5:
			{
				int pos;
				printf("请输入需要修改的学生位置:");
				scanf("%d",&pos);
				edit_pos(L,pos);
			}
			break;
		case 6:
			{
				int pos;
				printf("请输入需要查找的学生位置:");
				scanf("%d",&pos);
				find_pos(L,pos);
			}
			break;
		case 7:
			{
				stu e;
				printf("表头插入一个学生信息\n");
				printf("请输入需要插入学生的信息:");
				scanf("%d%s%d",&e.id,e.name,&e.age);
				insert_front(L,e);
			}
			break;
		case 8:
			{
				stu e;
				printf("表尾插入一个学生信息\n");
				printf("请输入需要插入学生的信息:");
				scanf("%d%s%d",&e.id,e.name,&e.age);
				insert_rear(L,e);
			}
			break;
		case 9:
			{
				int fage;
				printf("请输入需要查找的年龄:");
				scanf("%d",&fage);
				find_age(L,fage);
			}
			break;
		case 10:
			{
				int fage;
				printf("请输入需要查找的年龄:");
				scanf("%d",&fage);
				find_age_id(L,fage);
			}
			break;
		case 0:
			{
				exit(EXIT_SUCCESS);
			}
			break;
		}
	}
	return 0;
}

功能函数代码

#include "head.h"
//登录注册部分函数
int regist()
{
	char regist_name[20];//注册登录用户名
	char regist_code[20];//注册密码
	
	printf("请输入注册用户名和密码:");
	fgets(regist_name,sizeof(regist_name),stdin);
	//scanf("%s",regist_name);
	fgets(regist_code,sizeof(regist_code),stdin);
	//scanf("%s",regist_code);
	
	regist_name[strlen(regist_name)-1] = '\0';
	regist_code[strlen(regist_code)-1] = '\0';
 	//将数据写入用户数据文件
	FILE *fp1;
	fp1 = fopen("./user_data.txt","a");
	if(fp1 == NULL)
	{
		perror("fp1");
		return -1;
	}
	fprintf(fp1,"%s %s ",regist_name,regist_code);
	printf("注册成功!\n");
	fclose(fp1);
	return 0;
}

int login()
{
	char regist_name[20];
	char regist_code[20];
	char login_name[20];
	char login_code[20];
	int login_max = 5;
	for(int i=0;i<login_max;i++)
	{
		printf("这是你第%d次输入,你还有%d次输入机会\n",i+1,login_max-i);
		printf("请输入用户名和密码:");
		fgets(login_name,sizeof(login_name),stdin);
		fgets(login_code,sizeof(login_code),stdin);


		login_name[strlen(login_name)-1] = '\0';
		login_code[strlen(login_code)-1] = '\0';

		FILE *fp2;
		fp2 = fopen("./user_data.txt","r");
		if(fp2 == NULL)
		{
			perror("fp2");
			return -1;
		}
		int flag = 0;
		while(1)
		{
			//从用户数据文件夹提取数据
			int ret = fscanf(fp2,"%s %s",regist_name,regist_code);
			//读取到文件末尾
			if(ret < 0)
			{
				break;
			}
			if(strcmp(regist_name,login_name)==0&&strcmp(regist_code,login_code)==0)
			{
				flag = 1;
				printf("登录成功!\n");
				return 1;
			}
		}
		if(flag == 0)
		{
			printf("登录失败!\n");
		}
		fclose(fp2);
	}
	printf("输入次数已用尽,系统锁定\n");
	while(1);
return 0;
}


//管理学生信息部分函数

//空间申请函数
Plink apply()
{
	Plink p = malloc(sizeof(Link));
	if(p == NULL)
	{
		printf("申请失败\n");
		return NULL;
	}
	return p;
}
//创建链表函数
Plink create()
{
	Plink p = apply();
	if(p == NULL)
	{
		printf("创建失败!\n");
		return NULL;
	}
	p->len = 0;
	p->next = NULL;
	return p;
}

//头插法创建
void insert_front(Plink L,stu e)
{
	if(L == NULL)
	{
		printf("插入失败!\n");
		return;
	}
	Plink p = apply();
	if(NULL == p)
	{
		printf("申请正常节点失败!\n");
	}
	p->data = e;
	p->next = L->next;
	L->next = p;
	L->len++;
	
}

//信息输入函数
void input_link(Plink L)
{
	stu e;
	int n,i;
	printf("请输入学生数量:");
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		printf("请输入学生信息:");
		scanf("%d%s%d",&e.id,e.name,&e.age);
		insert_front(L,e);
	}
}

//信息输出函数
void output_link(Plink L)
{
	if(L == NULL)
	{
		printf("输出失败!\n");
		return;
	}
	Plink t = L->next;
	while(t != NULL)
	{
		printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,t->data.name,t->data.age);
		t = t->next;
	}
}

//任意位置删除学生信息

void del_pos(Plink L,int pos)
{
	
	if(pos<1||pos>L->len||L == NULL||L->len ==0)
	{
		printf("删除失败!\n");
		return;
	}
	Plink t = L;
	int i;
	for(i=0;i<pos-1;i++)
	{
		t = t->next;
	}
	Plink Q = t->next;
	t->next = Q->next;
	free(Q);
	Q = NULL;
	L->len--;;
	
}


//任意位置插入学生信息
void insert_pos(Plink L)
{
	int pos,i;
	stu e;
	printf("请输入需要插入信息的位置:");
	scanf("%d",&pos);

	if(pos<1||pos>L->len+1)
	{
		printf("插入失败!\n");
		return;
	}
	
	Plink t = L;
	for(i=0;i<pos-1;i++)
	{
		t = t->next;
	}

	Plink p = apply();

	printf("请输入需要插入的学生信息:");
	scanf("%d%s%d",&e.id,e.name,&e.age);
	p->data = e;

	p->next = t->next;
	t->next = p;
	L->len++;
}

//任意位置查找学生信息
void find_pos(Plink L,int pos)
{
	Plink t = L;
	if(pos<1||pos>L->len||L->len == 0||L == NULL)
	{
		printf("查找失败!\n");
		return;
	}
	for(int i=0;i<pos;i++)
	{
		t = t->next;
	}
	printf("第%d位学生的信息:学号:%d姓名:%s年龄:%d\n",pos,t->data.id,t->data.name,t->data.age);
}

//任意位置修改学生信息
void edit_pos(Plink L,int pos)
{
	Plink t = L;
	if(pos<1||pos>L->len||L == NULL||L->len == 0)
	{
		printf("修改失败!\n");
		return;
	}
	for(int i=0;i<pos;i++)
	{
		t=t->next;
	}
	stu e;
	printf("请输入需要修改的学生信息:");
	scanf("%d%s%d",&e.id,e.name,&e.age);
	t->data = e;
}

//表头插入一个学生(头插法插入一个学生)直接调用头插法


//表尾插入一个学生信息
void insert_rear(Plink L,stu e)
{
	Plink t = L;
	if(L == NULL)
	{
		printf("插入失败\n");
		return;
	}
	for(int i=0;i<L->len;i++)
	{
		t= t->next;
	}
	Plink p = apply();
	p->data = e;
	p->next = NULL;
	t->next = p;
	L->len++;
}

//按年龄查找学生信息
void find_age(Plink L,int fage)
{
	int pos=1;
	Plink t = L->next;
	while(t != NULL)
	{
		if(t->data.age == fage)
		{
			printf("%d年龄的学生有:学号:%d姓名:%s年龄:%d\n",fage,t->data.id,t->data.name,t->data.age);
			printf("该年龄的学生位置为:%d\n",pos);
			Plink Q = t->next;
			del_pos(L,pos);
			t = Q;
			printf("删除成功!\n");
		}
		else
		{
			pos = pos+1;
			t = t->next;
		}
	}

}

//按年龄查找学生信息,修改学号为10086
void find_age_id(Plink L,int fage)
{
	Plink t = L->next;
	while(t != NULL)
	{
		if(t->data.age == fage)
		{
			printf("将%d年龄的学生学号修改为10086\n",fage);
			t->data.id = 10086;
			t=t->next;
		}
		else
		{
			t= t->next;
		}
	}
}

头文件代码

#ifndef _HEAD_H_
#define _HEAD_H_
#include <myhead.h>
#define MAX 30


typedef struct students
{
	int id;
	char name[20];
	int age;
}stu;

typedef struct node
{
	union
	{
		int len;
		stu data;
	};
	struct node *next; 
}Link,*Plink;

int regist();

int login();

Plink apply();

Plink create();

void insert_front(Plink,stu);

void input_link(Plink);

void output_link(Plink);

void del_pos(Plink,int);

void insert_pos(Plink);

void find_pos(Plink,int);

void edit_pos(Plink,int);

void insert_rear(Plink,stu);

void find_age(Plink,int);

void find_age_id(Plink,int);
#endif

标签:Plink,int,void,pos,C语言,简易,printf,信息管理系统,next
From: https://blog.csdn.net/JOUzb/article/details/143694698

相关文章

  • 基于nodejs+vue智慧医院信息管理系统[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于医院信息管理系统的研究,现有研究主要以传统的医院管理信息化为主,侧重于单一功能模块的优化,如单独的挂号系统或者病历管理系统等。专门针对整合多种......
  • C语言中“type”的含义
    在C语言中,“type”是指数据类型,它定义了变量可以存储的数据种类以及可以对这些数据执行的操作。C语言提供了一系列基本的数据类型,它们包括但不限于:整型(IntegerTypes):int:用于存储整数。short和long:分别用于存储较短或较长的整数。signed和unsigned:前者可以存储正数和......
  • c语言入门第六天输入函数
    一:字符输入函数a:字符输入函数格式为getchar();b:功能:从键盘输入一字符c:返回值:正常,返回从键盘输入的代码值,出错或结束返回-1d:代码展示输出单一字符2:格式输入函数a:格式:scanf("格式控制符",地址表)b:功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回......
  • 在C语言中用函数求fibonacci(斐波那契)数列前n项的和
    1.功能用函数求fibonacci数列前n项的和。2.说明fibonacci数列为数列的第一项值为1,第二项值也为1,从第三项开始,每一项均为其前面相邻两项的和。3.题目例如:当n=28时,运行结果:832039。请编写sum函数。#include<stdio.h>//函数sum用于计算斐波那契数列前n项的和longsum......
  • 重温c语言之,7天开整,就是随便的写写,第十天
    一:操作符&:按位与----2进制|:按位或----2进制^:按位异或----2进制~:按位取反---2进制&:先上代码,然后解释1#define_CRT_SECURE_NO_WARNINGS23#include<stdio.h>4intmain()5{6inta=3;7intb=-5;8intc=a&......
  • springboot毕设 就业信息管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业市场的日益竞争激烈,就业信息管理成为了高校、企业及学生共同关注的焦点。传统的就业信息管理模式往往依赖于纸质材料、邮件......
  • C语言中的数组
    数组在C语言中的应用场景非常非常多,例如:(作者用C语言写过一个三字棋小游戏详情可见链接)https://blog.csdn.net/2401_87984738/article/details/143487668?sharetype=blog&shareId=143487668&sharerefer=APP&sharesource=2401_87984738&sharefrom=link相信你们在学完今天这节数......
  • 2024年全国高校计算机能力挑战赛C语言计算机能力挑战赛赛前模拟
    2024年全国高校计算机能力挑战赛C语言计算机能力挑战赛赛前模拟18拉手游戏某个班级共n(2<n<100)人玩报数游戏,同学们最初手拉手围成一圈。小明最开始站在第m(0<m<n)个位置,现在从圈内第一个位置开始报数,但凡报到3就退出圈子,问小明是第几个退出圈子的人?输入格式:一行输入两个......
  • C语言网题目 1004: [递归]母牛的故事
    题目描述有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入格式输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输入数据的结束,不做......
  • ag——ack 的升级版,C语言编写,更快更人性化
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述agack的升级版,C语言编写,更快更人性化补充说明摘自https://github.com/ggreer/the_silver_searcher项目的Readme.md它比ack快一个数量级。它忽略了你的.gitignore和.hgignore中的文件模式。如果你的......