学生信息管理系统——C语言版本(易懂)

2023-11-10

一、功能概述

        1.账号的登录与注册

        2.学生信息的增添

        3.学生信息对于学号的排序

        4.学生信息的删除

        5.学生信息的修改

        6.学生信息的查找

        7.学生信息的分类

        8.学生信息表的打印

        9.结束程序时对信息的在内存中的保存

        10.执行程序时对保存在内存当中的信息的读取

        11.构建菜单

二、流程图

 

三、功能实现详解

        1.文件信息的读取与保存

void saveInfoToFile(char* fileName, InfoSys* pc)
{
	FILE* fp = fopen(fileName,"w");
	if (fp == NULL)
	{
		perror("fopen");
		return;
	}
	InfoSys* cur =pc->next;
	while (cur)
	{
		fprintf(fp, "%s %s %s %d %lf %s %s\n", cur->ID, cur->name, cur->sex,
                     cur->age, cur->score, cur->professional, cur->clas);
		cur = cur->next;
	}

	fclose(fp);
	fp = NULL;
	return;
}
void readInfoFromFile(char* fileName, InfoSys* pc)
{
	FILE* fp = fopen(fileName,"r");
	int ch=fgetc(fp);
	if (ch == EOF)
	{
		return;
	}
	fseek(fp,0,SEEK_SET);
	if (fp == NULL)
	{
		perror("fopen");
		return;

	}
	InfoSys* temp = (InfoSys*)malloc(sizeof(InfoSys));
	InfoSys* cur = pc;

	cur->next = NULL;
	pc->next = cur;
	
	while (fscanf(fp, "%s %s %s %d %lf %s %s", temp->ID, temp->name, temp->sex, 
                        &(temp->age), &(temp->score), temp->professional, 
                        temp->clas) != EOF)
	{
		InfoSys* next = (InfoSys*)malloc(sizeof(InfoSys));
		next->next = NULL;
		cur->next = next;
		cur = next;
		strcpy(cur->ID, temp->ID);
		strcpy(cur->name, temp->name);
		strcpy(cur->sex, temp->sex);
		cur->age = temp->age;
		cur->score = temp->score;
		strcpy(cur->professional, temp->professional);
		strcpy(cur->clas, temp->clas);
		
		//这一块空间是被需要的,不用free;
	}
	
	fclose(fp);
	fp = NULL;
	free(temp);
	temp = NULL;
	return;

}

2.账号的登录与注册

        可以实现对注册账号在文件中的保存和读取,在登录时,实现掩码操作

int isUserValid(char* userAccount, char* userPassword)
{
	FILE* fp = fopen("UserInfo.txt","r");
	char UAt[USERACCOUNTNUM];
	char UPd[USERPASSWORDNUM];
	char temp[USERPASSWORDNUM];
	if (fgetc(fp) == EOF)
	{
		printf("无此账号,请重新输入.....\n");
		fclose(fp);
		fp = NULL;
		return 0;
	}
	fseek(fp,-1,SEEK_CUR);
	while (strcmp(fgets(UAt, USERACCOUNTNUM, fp), userAccount) != 0)
	{
		fgets(temp, USERACCOUNTNUM, fp);

		if (fgetc(fp)==EOF)
		{
			
			printf("无此账号,请重新输入.....\n");
			fclose(fp);
			fp = NULL;
			return 0;
		}
		else
		{
			fseek(fp, -1, SEEK_CUR);
		}
	}
	if (strcmp(UAt, userAccount) == 0)
	{
		fgets(UPd, USERPASSWORDNUM, fp);
		if((strcmp(UPd, userPassword) == 0))
		{
			printf("\t\t欢迎进入管理系统,请稍后......\n");
			Sleep(1000);
			fclose(fp);
			fp = NULL;
			return 1;
		}
		else
		{
			printf("密码输入错误,请重新输入......\n");
			fclose(fp);
			fp = NULL;
			return 0;
		}
	}
	

}
void enroll_menu()
{
	head_menu();
	printf("\n\n\n");
	printf("\t\t用户注册,请输入账号、密码......\n\n");
}
void login_menu()
{
	head_menu();
	printf("\n\n\n");
	printf("\t\t用户登录,请输入账号、密码......\n\n");
	return;
}
void enroll()
{
	FILE* fp = fopen("UserInfo.txt","a");
	char userAccount[USERACCOUNTNUM];
	char userPassword[USERPASSWORDNUM];
	if (fp == NULL)
	{
		perror("fopen");
		return;
	}
	getchar();
	enroll_menu();
	printf("\t\t账号:>");
	int i;
	for (i = 0; i < USERACCOUNTNUM; i++)
	{
		userAccount[i] = getchar();
		if (userAccount[i] == '\n')
		{
			break;
		}
	}
	userAccount[i] = '\0';
	printf("\t\t密码:>");
	for (i = 0; i < USERPASSWORDNUM; i++)
	{
		userPassword[i] = getchar();
		if (userPassword[i] == '\n')
		{
			break;
		}
	}
	userPassword[i] = '\0';
	fprintf(fp,"%s",userAccount);
	fputc('\n',fp);
	fprintf(fp,"%s",userPassword);
	fputc('\n\n\n', fp);

	printf("\n\n注册成功.....");
	printf("\n\n请退出程序重新运行......");
	Sleep(1000);
	fclose(fp);
	fp = NULL;
}
int login()
{
	char userPassword[USERPASSWORDNUM], userAccount[USERACCOUNTNUM];
	int i;
	/*login_menu();*/
	getchar();
	printf("\t\t账号:>");
	for (i = 0; i < USERACCOUNTNUM; i++)
	{
		userAccount[i] =getchar();
		if (userAccount[i] == '\n')
		{
			break;
		}
	}
	userAccount[++i] = '\0';
	printf("\t\t密码:>");
	for (i = 0; i < USERPASSWORDNUM; i++)
	{
		userPassword[i] = _getch();
		if (userPassword[i] == '\r')//回车
		{
			break;
		}
		printf("*");//掩码处理
	}
	userPassword[i] = '\n';
	userPassword[++i] = '\0';

	if (isUserValid(userAccount, userPassword) == 1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

3.菜单的构建(为了方便对基础功能的种类的了解,先说菜单)

        以下包括了登录菜单和选择菜单,下文出现的功能如图所示

void welcome_menu()
{
	printf("\n\n\n");
	printf("\t                                           ╔═════════════╗\n");
	printf("\t                                           ║      (\\  (\\ ║\n");
	printf("\t                                           ║      (-。-) ║\n");
	printf("\t                                           ║      。_(\") ║\n");
	printf("\t                                           ╚═════════════╝\n");
	printf("\t                                        *欢迎使用信息管理系统*\n");
	printf("\t                                 ····SWPU猪皮兄弟为你服务····\n");
	printf("\n\n\n");
	system("pause");
	
}

void main_menu()
{
	printf("\t\t| * * * * * * * 信息管理系统 * * * * * * |\n");
	printf("\t\t|……………………………………………………|\n");
	printf("\t\t| 请选择操作菜单序号(0-6) |\n");
	printf("\t\t|……………………………………………………|\n");
	printf("\t\t| 1----学生信息录入 |\n");
	printf("\t\t| 2----学生信息排序 |\n");
	printf("\t\t| 3----学生信息查询 |\n");
	printf("\t\t| 4----学生分类查询 |\n");
	printf("\t\t| 5----学生信息删除 |\n");
	printf("\t\t| 6----学生信息修改 |\n");
	printf("\t\t| 7----学生信息打印 |\n");
	printf("\t\t| 0----   退 出     |\n");
	printf("\t\t|……………………………………………………|\n");
	printf("\t\t| * * * * * * * * * * * * * * * * * * *  |\n");
	printf("\n\t请选择序号: ");

}

4.学会信息管理的基础操作(增删查改、打印列表、排序)

        对这部分的实现,采用的是单链表的结构

1.打印列表和退出程序

void showMessge(InfoSys * pc)
{
	printf("                             ~~~~~    学生信息表    ~~~~~\n");
	printf(" ---------------------------------------------------------------------------------------\n");
	printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n","学号","姓名","性别","年龄","成绩","专业","班级");
	InfoSys* cur = pc->next;
	while (cur!=NULL)
	{
		printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, 
                    cur->sex, cur->age, cur->score, cur->professional, cur->clas);
		cur = cur->next;

	}
	return;
}
void Exit()
{
	exit(-1);
}

2.增添学生信息

void Add(InfoSys* pc)
{
	
	InfoSys* cur = pc->next;
	char ID[IDNUM];
	char name[NAMENUM];
	char sex[SEXNUM];
	int age;
	double score;
	char professional[PROFESSIONALNUM];
	char clas[CLASNUM];
	
	while(1)
	{
		printf("请依次输入:>  学号 - 姓名 - 性别 - 年龄 - 成绩 - 专业 - 班级\n");
		scanf("%s %s %s %d %lf %s %s", ID, name, sex, &age, &score, professional, clas);
		InfoSys* newnode = CreateNode(ID, name, sex, age, score, professional, clas);
		if (cur == NULL)
		{
			pc->next = newnode;
		}
		else
		{
			while (cur->next != NULL)
			{
				cur = cur->next;
			}
			cur->next = newnode;
		}
		printf("请选择是否继续添加:>(Y/N)\n");
		char input;
		rewind(stdin);//让下面的scanf不受缓存区的影响
		scanf("%c",&input);//这里的scanf直接跳过的问题,用以上方法
		if (input == 'Y')
		{
			continue;
		}
		else 
		{
			break;
		}
	} 
	
	return;
}

        注意一定要在第二个scanf之前rewind(stdio),不然这个scanf会读取缓冲区里面的\n就等于是直接跳过。

3.删除学生信息

void Del(InfoSys* pc)
{
	InfoSys* cur = pc->next;
	InfoSys* prev = pc;
	char ID[IDNUM] = { 0 };
	printf("请输入要删除学生的学号: \n");
	int count = 0;
	scanf("%s",ID);
	while (cur)
	{
		if (strcmp(cur->ID, ID) == 0)
		{
			prev->next=cur->next;
			free(cur);
			count++;
			cur = NULL;
		}
		else
		{
			cur = cur->next;
			prev = prev->next;
		}
	}
	if (count == 0)
	{
		printf("未找到该学生信息......\n");
		system("pause");
		return;
	}	
	printf("删除成功......\n");
	return;

	
	
}

4.对学生信息进行排序(这里采用冒泡排序的思想)

void Sort(InfoSys* pc)//实际中都是按学号排序//代码未实现,需要多次进行排序操作
{

	InfoSys* prev, * cur, * next;
	int count=0;
	cur = pc->next;
	while (cur != NULL)
	{
		count++;
		cur = cur->next;
	}
	if (count == 1)
	{
		printf("排序成功......\n");
		return;
	}
	else if (count == 0)
	{
		printf("列表中无学生信息\n");
		return;
	}
	else
	{
		
		for (int i = 0; i < count-1; i++)
		{
			prev = pc;
			cur = pc->next;
			next = cur->next;
			while (next != NULL)
			{
				if (strcmp(cur->ID, next->ID) > 0)
				{
					cur->next = next->next;
					prev->next = next;
					next->next = cur;
					next = cur->next;
					prev = prev->next;
				}
				else
				{
					next = next->next;
					cur = cur->next;
					prev = prev->next;
				}
			}
		}

	}
	printf("排序成功......\n");
	return;
}

5.查询与分类查询

普通查询(按学号进行查找)

void Search(InfoSys* pc)
{
	printf("请输入要查找学生的学号\n");
	char ID[IDNUM] = { 0 };
	InfoSys* cur = pc->next;
	int count = 0;
	scanf("%s",ID);
	printf("                             ~~~~~    学生信息表    ~~~~~\n");
	printf(" ---------------------------------------------------------------------------------------\n");
	printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
	while (cur != NULL)
	{
		if (strcmp(cur->ID, ID) == 0)
		{
			
			printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			count++;
		}
		cur = cur->next;
	}
	if(count ==0)
	printf("未找到该学生信息......\n");
	return;
}

分类查询

void ClassifySearch(InfoSys* pc)
{
	printf("                     学生分类......\n");
	printf("------------------------------------------------------\n");
	printf("1.姓名   2.性别    3.年龄   4.成绩    5.专业    6.班级\n");
	printf("请输入要分的类型(1-6):\n");
	int input;
	scanf("%d",&input);
	switch (input)
	{
	case 1:
	{
		printf("请输入需要查找的姓名:");
		char name[NAMENUM] = { 0 };
		scanf("%s", name);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (strcmp(cur->name, name) == 0)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}

		break;
	}
	case 2:
	{
		printf("请输入需要查找的姓别:");
		char sex[SEXNUM] = { 0 };
		scanf("%s", sex);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (strcmp(cur->sex, sex) == 0)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}
		break;
	}
	case 3:
	{
		printf("请输入需要查找的年龄:");
		int age;
		scanf("%d", &age);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (cur->age == age)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}
		break;
	}
	case 4:
	{
		printf("请输入需要查找的成绩:");
		double score;
		scanf("%lf", &score);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (cur->score == score)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}
		break;
	}
	case 5:
	{
		printf("请输入需要查找的专业:");
		char professional[PROFESSIONALNUM] = { 0 };
		scanf("%s", professional);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (strcmp(cur->professional, professional) == 0)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}
		break;
	}
	case 6:
	{
		printf("请输入需要查找的班级:");
		char clas[CLASNUM] = { 0 };
		scanf("%s", clas);
		InfoSys* cur = pc->next;
		if (cur == NULL)
		{
			printf("未查询到相关信息......\n");
			break;
		}
		printf("                             ~~~~~    学生信息表    ~~~~~\n");
		printf(" ---------------------------------------------------------------------------------------\n");
		printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
		while (cur != NULL)
		{
			if (strcmp(cur->clas, clas) == 0)
			{
				printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			}
			cur = cur->next;
		}
		break;

	}
	default:
		printf("输入错误,正在跳回选择界面......\n");
		Sleep(10);
		break;
	}

}

稍微有点繁琐,可以改进,这里就没有去改进了

另外,查询和分类查询也可以合在一起

6.学生信息的修改

void Modify(InfoSys* pc)
{
	char ID[IDNUM] = { 0 };
	int count = 0;
	InfoSys* cur = pc->next;
	printf("请输入修改学生学号;\n");
	scanf("%s",ID);
	while (cur != NULL)
	{
		if (strcmp(cur->ID, ID) == 0)
		{
			printf("已找到该学生信息......\n");
			count++;
			printf("%-12s\t%-9s\t%-4s\t%-4s\t%-9s\t%-9s\t%-7s\n", "学号", "姓名", "性别", "年龄", "成绩", "专业", "班级");
			printf("%-12s\t%-9s\t%-4s\t%-4d\t%-9.2lf\t%-9s\t%-7s\n", cur->ID, cur->name, cur->sex, cur->age, cur->score, cur->professional, cur->clas);
			break;
		}
		cur = cur->next;
	}
	if (count == 0)
	{
		printf("未找到修改学生信息.....\n");
		return;
	}
	printf("进行修改操作.....\n");
	printf("请依次输入:>  学号 - 姓名 - 性别 - 年龄 - 成绩 - 专业 - 班级\n");
	scanf("%s %s %s %d %lf %s %s", cur->ID, cur->name, cur->sex, &(cur->age), &(cur->score), cur->professional, cur->clas);
	//age是个整数类型,需要&,而其他的是字符串,变量名就是首地址
	Sleep(10);
	printf("修改成功\n");
	return;

}

四、测试结果

1.系统页面以及账号登录与注册

 

 实现掩码

2.选择菜单 

 3.基础功能的实现

在这里就不一个个演示了

全部程序放在下面的链接里了,请自行查看
2022.4.20程序设计项目 · 朱毅峰/zhupiC - 码云 - 开源中国 (gitee.com)https://gitee.com/zhu-pi/zhupi-c/tree/master/2022.4.20%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E9%A1%B9%E7%9B%AE


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学生信息管理系统——C语言版本(易懂) 的相关文章

随机推荐

  • 目标检测数据集整理

    本篇博客主要整理基于深度学习的目标检测所用的数据集 评价指标见上一篇博客 参考链接 1 链接1 2 链接2 3 链接3 1 Pascal VOC VOC综述 VOC数据集是目标检测经常用的一个数据集 从05年到12年都会举办比赛 比赛有ta
  • 记一次props延时传值的问题

    今天在写代码的时候 发现父组件在使用props给子组件传值时 尤其是当这个值还是从接口获取的数据 则很可能发生子组件接受到的值为空值 从网上找到了一些解决办法 以此来记录一下 1 this nextTick gt 方法 在你子组件的crea
  • Python爬虫怎么挣钱?解析Python爬虫赚钱方式

    Python爬虫怎么挣钱 解析Python爬虫赚钱方式 想过自己学到的专业技能赚钱 首先需要你能够数量掌握Python爬虫技术 专业能力强才能解决开发过程中出现的问题 Python爬虫可以通过Python爬虫外包项目 整合信息数据做产品 独
  • 使用Nodepad++工具查看文件的十六进制

    1 运行Notepad 工具 2 选择 插件 gt 插件管理 3 搜索 hex 关键字 找到 HEX Editor 插件 4 安装 HEX Editor 插件 5 重启打开Notepad 工具 6 可以发现 插件 菜单项多出了 HEX Ed
  • iTerm2创建ssh自动登陆脚本

    iterm2保存ssh密码自动登录 前提 OS macOS Big Sur 11 6 ITerm2 3 4 10 CPU x86架构 由于mac没有xshell也没有MobaXterm 找了个据说最好使的iTerm2 但是 iterm2不方
  • 把python的字典文件保存为.json格式的文件

    将字典结构数据保存为 json 格式文件 并打开 import json dict a 4 b 2 6 4 3 2 c d 4 e 5 代保存字典文件 dict json json dumps dict 转化为json格式文件 将json文
  • 公安局计算机岗位应知应会综合基础知识,事业单位考试计算机综合知识基础知识真题...

    事业单位考试计算机综合知识基础知识真题 根据最新事业单位考试真题等汇总而成 事业编考试网 http www shizheng100 com 提供更多笔试真题 面试原创内容等 一 单项选择题 本大题共50个小题 每小题1分 共50分 1 下面
  • 微信小程序:从小程序打开H5页面

    1 样式 关于踩的坑和更多信息请看后续文章 已发布 2 两个wxml 第一个wxml
  • 退役小节

    大学期间我能拿的出手的好像只有acm 貌似acm的成绩也拿不出手 有点荒废的意思 大一被猴哥拉进武术协会 然后第二年这个协会就解散了 解散之前猴哥还在协会找个女朋友 真的是皮 第一学期刷了500道题 然后就进了acm实验室 为什么要进实验室
  • 语义分割系列26-VIT+SETR——Transformer结构如何在语义分割中大放异彩

    SETR Rethinking Semantic Segmentation from a Sequence to Sequence Perspectivewith Transformers 重新思考语义分割范式 使用Transformer实
  • Java 函数式编程 详细介绍

    在兼顾面向对象特性的基础上 Java语言通过Lambda表达式与方法引用等 为开发者打开了函数式编程的大门 下面我们做一个初探 Lambda的延迟执行 有些场景的代码执行后 结果不一定会被使用 从而造成性能浪费 而Lambda表达式是延迟执
  • linux远程管理工具之tabby

    linux远程管理工具之tabby Tabby简介 Tabby下载及安装 PowerShell 快捷键 Tabby简介 tabby是一款开源且免费的终端连接工具 可以使用于多平台 例如 windows mac linux等系统都支持 Tab
  • 峰面积峰高半峰宽_峰高峰面积的计算方法

    峰面积和峰高的计算方法 峰面积和峰高是色谱图上最基本数据 它们的测量精度将直接影响定量分析的精度 在色谱峰是对称 峰 且与其他峰完全分离的情况下 准确地测出峰高和峰面积是不困难的 但是当色谱峰不对称 没 有完全分离开以及基线发生较明显的漂移
  • Hudi学习2:数仓和数据湖介绍

    数据湖解决了 1 数仓无法存储非结构化数据 图像 音视频等 的问题 2 解决了数仓必须分层 数据湖直接存储原始数据 不需要分层 直接用于应用 数仓和数据湖的区别 性价比 分层可能存在冗余
  • Pytorch 中 LSTM 和 LSTMCell 的区别

    LSTM 的官方文档在这里 在例子中 LSTM 函数的参数为输入特征向量的长度 input size 10 隐藏层向量的长度 hidden size 20 隐藏层的数量 num layers 2 输入 input 的维度是时间 序列长度 句
  • Java学习interface4

    A package com mashibing interfacedemo5 public interface A public void show B package com mashibing interfacedemo5 public
  • dataphin如何使用zip文件,离线安装python第三方包?

    好久没写文章啦 快过年了啦 打工人要回家啦 背景介绍 每次在dataphin里使用pandas的时候 都要pip install pandas dataphin需要下载pandas安装包 比较费时 总而言之 这种方式慢 所以我要在datap
  • 台式计算机销量排名,2019台式电脑销量排行_笔记本哪些好 2019笔记本销量排行榜...

    笔记本哪些好 2019笔记本销量排行榜 JPG 594x348 232KB 428 250 笔记本哪些好 2019笔记本销量排行榜 JPG 570x350 128KB 407 250 台式电脑哪款好 2019十款热门台式电脑排行榜 JPG
  • cocos2d-x 旅程开始--(实现瓦片地图中的碰撞检测)

    转眼隔了一天了 昨天搞了整整一下午加一晚上 楞是没搞定小坦克跟砖头的碰撞检测 带着个问题睡觉甚是难受啊 还好今天弄成功了 不过感觉程序不怎么稳定啊 而且发现自己写的东西让我重写一遍的话我肯定写不出来 还要继续学习啊 上次的进度 实现了坦克的
  • 学生信息管理系统——C语言版本(易懂)

    一 功能概述 1 账号的登录与注册 2 学生信息的增添 3 学生信息对于学号的排序 4 学生信息的删除 5 学生信息的修改 6 学生信息的查找 7 学生信息的分类 8 学生信息表的打印 9 结束程序时对信息的在内存中的保存 10 执行程序时