Day 15 教务管理系统的功能补全(注册,登录) 指针

昨天写了一个教务管理系统,今天增加两个功能,账号的注册和账号的登录

先设置一个account[10][2]的全局数组,用来存放账号和密码

再设置一个vip表示存入数组的人数

int account[10][2];
int vip = 0;//当前账户个数 

再写一个跟昨天一样的选择页面

int loginOrEnroll()
{
	int option;
	printf("************欢迎进入海峰考务系统****************\n");
	printf("		1.登录\n"); 
	printf("		2.注册\n"); 
	printf("*************************************************\n");
	printf("请选择:"); 
	scanf("%d",&option);
	return option;	
}

选择1或2,并且将值返回,接下来在主函数用一个option来接收返回值,用switch写两个选项,1就调用登录函数,2就调用注册函数

	option = loginOrEnroll();
		switch(option)
		{
		case 1:
		flag = login();
			break;
		case 2:
			enroll();
			break;	
		}

一般我们要先注册,所以先写注册函数,设置一个usrname和password来接收键盘输入的账户和密码,先判断vip(注册的人数)是否大于数组的最大值,没有则将值赋给数组,vip++

void enroll()
{	int usrname, password;
	printf("请输入新的用户名:\n");
	scanf("%d", &usrname);
	printf("请输入密码:\n");
	scanf("%d", &password);
	if(vip >= 10)
	{
		printf("注册已满\n");
	}	
	else
	{
		account[vip][0] = usrname;
		account[vip][1] = password;
		vip++;
		printf("注册成功\n");	
	}
		
} 

再写一个登录函数,我想的是登录只有三次机会,登录成功用1返回,登录失败用0返回,

int login()
{
	int usrname, password;
	int flag = 0;
	for(int j = 3; j > 0; j--)
	{
		printf("请输入用户名:\n");
		scanf("%d", &usrname);
		printf("请输入密码:\n");
		scanf("%d", &password);
		for(int i = 0; i < vip; i++)
		{
			if(account[i][0] == usrname && account[i][1] == password)
			{
				printf("登录成功\n");
				flag = 1;
				break;
			}
			else
			{
				printf("登录失败,你还有%d次机会\n", j - 1);
				flag = 0;
				break;
			}
		}
		if(flag == 1)
		{
			break;
		}
	}
	return flag;
			
}

当登录函数返回值为1时表明登录成功,然后跳出死循环,进入到昨天写的代码,如果没有则不能进入后面的步骤

	while(1)
	{
		option = loginOrEnroll();
		switch(option)
		{
		case 1:
		flag = login();
			break;
		case 2:
			enroll();
			break;	
		}
		if(flag == 1)
		{
			break;
		}
		
	}

指针

1. 概念 

计算机种所有的数据都必须存在内存中,不同数据类型的数据占用的字节数不同,为了能够正确的访问这些数据,C语言就为每个字节都设置了编号,这个编号就叫做地址或者叫指针

在C语言中,将地址形象的称为“指针”,一个变量的的地址称为变量的“指针”,一个专门用来存放另一个变量的地址的变量,则称为指针变量

地址:操作系统的寻址空间编号,也就是操作系统给每个存储单元分配了统一的编号

指针就是地址

指针变量就是保存地址编号的变量

32bit平台下,地址总线32位,所以地址编号32位编号,指针变量就是32位即4字节

2. 指针的定义方法

指针的定义:

        数据类型 *指针变量名;

        数据类型 *指针变量名1,*指针变量名2,*指针变量名3,...;

*号在指针变量定义时不能省略,否则就会变成一般变量的定义

指针的运算符

&:获取一个变量的地址

*:在定义一个指针变量时,起到表示作用,表示定义的是一个指针变量,除此之外其它地方都表示获取一个指针变量保存的地址里面的内容

扩展:如果一行中定义多个指针变量的前面都需要加*修饰

int *p;//定义一个int型指针变量 
	
	int *p1, *p2, *p3;//定义三个int型指针 
	
	int *pa = NULL;//空指针 
	
	int *pb;//野指针 
	
	void *pd;//万能指针,可以指向任意数据类型

可以给指针指向的数据赋值,如果指针还没有指向地址,则不能给它赋值

3. 指针的引用

指针变量中只能存放地址,与指针相关的两个运算符时&(取地址运算)和*(指针运算)

int *p;//定义一个int型指针变量 
	int a = 10;
	p = &a;
	
	printf("%d\n", a); //输出a的值
	printf("%p\n", &a);//输出a的地址
	printf("%d\n", *&a); //输出a的值
	printf("%p\n", p);//输出a的地址
	printf("%p\n", *&p);//输出a的地址
	printf("%p\n", &p);//输出p的地址(二级指针地址)
	printf("%d\n", *p);//输出a的值
	printf("%p\n", &*p);//输出a的地址

总结:

今天为教务管理系统加了两个功能,也算是对之前密码匹配的和数组的复习,下午又学习了指针的概念,指针就是地址,可以将指针变量指向一个变量,那这个变量的地址就给指针变量赋上了值,可以用*指针变量将这个值打印出来,&变量就是这个变量的地址

回答: 正方教务管理系统最近爆出了一个高危漏洞,攻击者可以利用该漏洞轻易获取网站webshell权限。\[1\]具体的漏洞情况和修复方法没有提供,但可以看出该漏洞可能与系统的前端和后端交互过程有关。\[2\]此外,还有用户在写教务系统查成绩的爬虫过程中发现了一个重要的参数"gnmkdm",该参数似乎控制了权限和页面标题的显示。\[3\]这些信息表明正方教务管理系统存在安全漏洞,需要及时修复以保护用户数据的安全。 #### 引用[.reference_title] - *1* [正方高校教务管理系统漏洞修复](https://blog.csdn.net/fengling132/article/details/7667951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [2021-08-16记一次无意发现正方教务系统的bug](https://blog.csdn.net/qq_43548154/article/details/119722784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于新正方教务系统(湖北工程学院)的one day越权漏洞的说明](https://blog.csdn.net/qq_30347475/article/details/128370854)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值