C语言实现学生成绩管理系统思考
学生成绩管理系统思考
作业要求:
目录
思路
基本函数
学习理解大佬的代码:
完成作业:
思路
学生成绩管理系统,首先要初始化系统,
用C语言做学生实验管理系统要求实现对某班学生3门课程(包括语文、数学、英语)成绩的管理功能,学生成绩的统计,如每个人的平均成绩、每门课的平均成绩等;,
按个人平均成绩从高到低的顺序进行排序。输出不及格学生名单。
基本函数
1.结构体 struct Student
定义一个结构体struct ,结构体的关键字,students 定义的结构体对象。学号char ID[20];姓名char Name[10]; 各项成绩float Mark,每个人的平均成绩float average1;
每个科目的平均成绩float average2;
2.录入(void inputt())
利用循环将数据从students[0]开始录入各项信息,计数器num+1,直至到3(内部数据中会有 0 1 2 )
3.修改(void modfiy())
利用循环将数组里面的信息与待修改的信息比对,若相同,对其进行重新复制即修改;若无此项,提示重新输入。
5.排序 (void sort()){按照题目要求此时应该有两次排序:每个人的平均成绩float average1; 每个科目的平均成绩float average2;}
排序的平均分,依次比较两个相邻的成绩,如果他们的顺序如果前小于后就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
利用什么方法:冒泡排序法
6.显示 (void display())
利用循环将已录入的信息打印出来。
7.查询 (void Student_SearchByIndex(){此时按照题目要求应该输出个人平均成绩从高到低的顺序以及不及格学生名单}
8.主函数 main()
利用无限次循环while和swithch()实现各函数的调用,系统根据输入的数字来操控相应的函数,同时显示可供选择的选项
学习理解大佬的代码:
学生成绩管理系统(C语言)_张十五的博客-CSDN博客_学生成绩管理系统
#include<stdio.h>#include<stdlib.h>#include<stdlib.h>#include<string.h>struct Student{ //每个学生对应一个结构体char ID[20];//学号char Name[10];//姓名float Mark1;//语文成绩float Mark2;//数学成绩 //四个变量float Mark3;//英语成绩float Mark4;//计算机成绩float All; //总分float Average;//平均成绩}students[1000];int num=0; //计数器void Copy(struct Student *arr,int i,int j){strcpy(arr[i].ID,arr[j].ID); //strcpy()函数的简介:是将一个字符串复制到另一块空间地址中 的函数,‘\0’是停止拷贝的终止条件,也复制到目标空间。下面是库中的strcpy()函数声明:strcpy(arr[i].Name,arr[j].Name);arr[i].Mark1 = arr[j].Mark1;arr[i].Mark2 = arr[j].Mark2;arr[i].Mark3 = arr[j].Mark3;arr[i].Mark4 = arr[j].Mark4;arr[i].All = arr[j].All;arr[i].Average = arr[j].Average;}int Student_SearchByName(char name[])//通过姓名来检索学生{int i;for (i=0;i<num;i++){if (strcmp(students[i].Name,name)==0) //通过strcmp函数来对比学生姓名,找到返回在数组的位置{return i;}}return -1; //未找到返回 -1}int Student_SearchByIndex(char id[])//通过学号来检索学生信息{int i;for (i=0;i<num;i++){if (strcmp(students[i].ID,id)==0) //通过strcmp函数来对比学生id,找到返回位置{return i;} }return -1; //未找到返回 -1}void Student_DisplaySingle(int index)//输出表头{printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","语文","数学","英语","计算机","总成绩","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[index].ID,students[index].Name,students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Mark4,students[index].All,students[index].Average);}void inputt()//利用循环录入学生信息{while(1){printf("请输入学号:");scanf("%s",&students[num].ID);getchar();printf("请输入姓名:");scanf("%s",&students[num].Name);getchar();printf("请输入成绩:");scanf("%f",&students[num].Mark1);getchar();printf("请输入成绩:");scanf("%f",&students[num].Mark2);getchar();printf("请输入成绩:");scanf("%f",&students[num].Mark3);getchar();printf("请输入成绩:");scanf("%f",&students[num].Mark4); //依次输入各项数据getchar();students[num].All=students[num].Mark1+students[num].Mark2+students[num].Mark3+students[num].Mark4; //输完数据后自动计算总成绩与平均成绩students[num].Average=(students[num].Mark1+students[num].Mark2+students[num].Mark3+students[num].Mark4)/4;if(Student_SearchByIndex(students[num].ID) == -1){num++; //移向下一个位置}else{printf("学号重复,输入数据无效 !!!\n");}printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}void modify()//修改成绩{while(1){char id[20];int index;printf("请输入要修改的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置if (index==-1){printf("学生不存在!\n");}else{printf("你要修改的学生信息为:\n");Student_DisplaySingle(index);printf("-- 请输入新值--\n");printf("请输入学号:");scanf("%s",&students[index].ID);getchar();printf("请输入姓名:");scanf("%s",&students[index].Name);getchar();printf("请输入语文成绩:");scanf("%f",&students[index].Mark1);getchar();printf("请输入数学成绩:");scanf("%f",&students[index].Mark2);getchar();printf("请输入英语成绩:");scanf("%f",&students[index].Mark3);getchar();printf("请输入计算机成绩:");scanf("%f",&students[index].Mark4); //重新录入一套新的数据替代getchar();students[index].All=students[index].Mark1+students[index].Mark2+students[index].Mark3+students[index].Mark4;students[index].Average=(students[index].Mark1+students[index].Mark2+students[index].Mark3+students[index].Mark4)/4; }printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}void deletee()//删除学生信息{int i;while(1){char id[20];int index;printf("请输入要删除的学生的学号:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id); //调用搜查id函数,根据其返回值确定位置if (index==-1){printf("学生不存在!\n");}else{printf("你要删除的学生信息为:\n");Student_DisplaySingle(index);printf("是否真的要删除?(y/n)");if (getchar()=='y'){for (i=index;i<num-1;i++){Copy(students,i,i+1);//students[i]=students[i+1]; //把后边的对象都向前移动}num--;}getchar();}printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}void display()//打印已录入的学生信息{int a;printf("%10s%10s%8s%8s%8s%8s%10s%10s\n","学号","姓名","语文","数学","英语","计算机","总成绩","平均成绩");printf("-------------------------------------------------------------\n");for (a=0;a<num;a++){printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[a].ID,students[a].Name,students[a].Mark1,students[a].Mark2,students[a].Mark3,students[a].Mark4,students[a].All,students[a].Average);}}void insert()//指定位置插入学生信息{int a,b,c;printf("请输入你要插入的位置");scanf("%d",&a);if(a>num) {printf("输入的位置有误,请重新输入,当前共%d条数据\n",num);scanf("%d",&a);}b=num-1;for(;b>=a-1;b--){//strcpy(students[b+1].ID,students[b].ID);//strcpy(students[b+1].Name,students[b].Name);//students[b+1].Mark1=students[b].Mark1;//students[b+1].Mark2=students[b].Mark2;//students[b+1].Mark3=students[b].Mark3;//students[b+1].Mark4=students[b].Mark4;//students[b+1].All=students[b].All;//students[b+1].Average=students[b].Average; Copy(students,b+1,b); //根据其输入的位置,将其及以后的数据向后移动一个位置}num++;printf("请输入学号:");scanf("%s",&students[a-1].ID);getchar();printf("请输入姓名:");scanf("%s",&students[a-1].Name);getchar();printf("请输入语文成绩:");scanf("%f",&students[a-1].Mark1);getchar();printf("请输入数学成绩:");scanf("%f",&students[a-1].Mark2);getchar();printf("请输入英语成绩:");scanf("%f",&students[a-1].Mark3);getchar();printf("请输入计算机成绩:");scanf("%f",&students[a-1].Mark4); //输入新数据getchar(); students[a-1].All=students[a-1].Mark1+students[a-1].Mark2+students[a-1].Mark3+students[a-1].Mark4;students[a-1].Average=(students[a-1].Mark1+students[a-1].Mark2+students[a-1].Mark3+students[a-1].Mark4)/4;}void search()//查询学生信息{while(1){char name[20];int index;printf("请输入要查询的学生的姓名:");scanf("%s",&name);getchar();index=Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置if (index==-1){printf("学生不存在!\n");}else{printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(y/n)");if (getchar()=='n'){break;}}}voidsort()//根据平均分排序 (此时注意按照题目要求应该排序两个){int i,j;//struct students tmp;for (i=0;i<num;i++){students[i].Average=(students[i].Mark1+students[i].Mark2+students[i].Mark3+students[i].Mark4)/4;}for (i=0;i<num;i++){for (j=1;j<num-i;j++){if (students[j-1].Average<students[j].Average){Copy(students,num,j-1);Copy(students,j-1,j);Copy(students,j,num);//tmp=students[j-1];//students[j-1]=students[j];//students[j]=tmp; //冒泡排序} }}int a;printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","语文","数学","英语","计算机","总成绩","平均成绩");printf("-------------------------------------------------------------\n");for (a=0;a<num;a++){printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n",students[a].ID,students[a].Name,students[a].Mark1,students[a].Mark2,students[a].Mark3,students[a].Mark4,students[a].All,students[a].Average);}}void SearchLow()//搜索不及格的并输出{int a;printf(" 语文不及格的有%10s%10s%8s\n","学号","姓名","语文");for(a=0;a<num;a++){if(students[a].Mark1<60)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark1); //从头搜索到尾,若小于60就输出}printf(" 数学不及格的有%10s%10s%8s\n","学号","姓名","数学");for(a=0;a<num;a++){if(students[a].Mark2<60)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark2);}printf(" 英语不及格的有%10s%10s%8s\n","学号","姓名","英语");for(a=0;a<num;a++){if(students[a].Mark3<60)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark3);}printf(" 计算机不及格的有%10s%10s%8s\n","学号","姓名","计算机");for(a=0;a<num;a++){if(students[a].Mark4<60)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark4);}system("pause"); //这个好像没作用}void SearchHigh()//搜索成绩最高者输出{int a;int max ;printf(" 语文最高分为%10s%10s%8s\n","学号","姓名","语文");max=students[0].Mark1;for(a=1;a<num;a++){if(students[a].Mark1>max)max=students[a].Mark1;}for(a=0;a<num;a++){if(max==students[a].Mark1)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark1);}printf(" 数学最高分为%10s%10s%8s\n","学号","姓名","数学");max=students[0].Mark2;for(a=1;a<num;a++){if(students[a].Mark2>max)max=students[a].Mark2;}for(a=0;a<num;a++){if(max==students[a].Mark2)printf("%10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark2);}printf(" 英语最高分为%10s%10s%8s\n","学号","姓名","英语");max=students[0].Mark3;for(a=1;a<num;a++){if(students[a].Mark3>max)max=students[a].Mark3;}for(a=0;a<num;a++){if(max==students[a].Mark3)printf(" %10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark3);}printf(" 计算机最高分为%10s%10s%8s\n","学号","姓名","计算机");max=students[0].Mark4;for(a=1;a<num;a++){if(students[a].Mark4>max)max=students[a].Mark4;}for(a=0;a<num;a++){if(max==students[a].Mark4)printf(" %10s%10s%8.2f\n",students[a].Name,students[a].ID,students[a].Mark4);}system("pause");}void Save(){FILE*fp = fopen("temp.txt","w+");fprintf(fp,"%d\n",num);for(int i = 0 ; i< num ;i++){fprintf(fp,"%s %s %f %f %f %f %f %f\n",students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Mark4,students[i].All,students[i].Average);}fclose(fp);}void Load(){FILE*fp = fopen("temp.txt","r");fscanf(fp,"%d",&num);for(int i = 0 ; i< num ;i++){fscanf(fp,"%s %s %f %f %f %f %f %f\n",students[i].ID,students[i].Name,&students[i].Mark1,&students[i].Mark2,&students[i].Mark3,&students[i].Mark4,&students[i].All,&students[i].Average);}fclose(fp);}/*主程序*/
int main(){int i;while(1){Load();printf("\t\t\t\t\t-------- 学生成绩管理系统-------\n\n\n\n"); //菜单printf("\t\t\t\t\t1. 增加学生记录\n\n");printf("\t\t\t\t\t2. 修改学生记录\n\n");printf("\t\t\t\t\t3. 删除学生记录\n\n");printf("\t\t\t\t\t4. 插入学生记录\n\n");printf("\t\t\t\t\t5. 显示所有记录\n\n");printf("\t\t\t\t\t6. 查询学生记录\n\n");printf("\t\t\t\t\t7. 按平均成绩排序\n\n");printf("\t\t\t\t\t8. 输出各科目不及格学生\n\n");printf("\t\t\t\t\t9. 输出各科目最高分\n\n");printf("\t\t\t\t\t0. 退出\n\n\n");printf("请选择(0-9):");scanf("%d",&i);switch(i){case 1:inputt();break;case 2:modify();break;case 3:deletee();break;case 4:insert();break;case 5:display();break;case 6:search();break;case 7:sort();break;case 8:SearchLow();break;case 9:SearchHigh();break;case 0:exit(0);default: ;}Save();}return 0;}void Save() {FILE *fp = fopen("temp.txt", "w+");fprintf(fp, "%d\n", num);for (int i = 0 ; i < num ; i++) {fprintf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, students[i].Mark1, students[i].Mark2,students[i].Mark3, students[i].Average1);}fclose(fp);}void Load() {FILE *fp = fopen("temp.txt", "r");fscanf(fp, "%d", &num);for (int i = 0 ; i < num ; i++) {fscanf(fp, "%s %s %f %f %f %f %f %f\n", students[i].ID, students[i].Name, &students[i].Mark1, &students[i].Mark2,&students[i].Mark3, &students[i].Average1);}fclose(fp);}
完成作业:
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#include <string.h>struct Student { //每个学生对应一个结构体char ID[20];//学号char Name[10];//姓名float Mark1;//语文成绩float Mark2;//数学成绩 //四个变量float Mark3;//英语成绩float Average1;//平均成绩
} students[1000];
int num = 0; //计数器void Copy(struct Student *arr, int i, int j) {strcpy(arr[i].ID, arr[j].ID); //strcpy()函数的简介:strcpy(arr[i].Name, arr[j].Name);arr[i].Mark1 = arr[j].Mark1;arr[i].Mark2 = arr[j].Mark2;arr[i].Mark3 = arr[j].Mark3;arr[i].Average1 = arr[j].Average1;
}int Student_SearchByName(char name[]) {//通过姓名来检索学生int i;for (i = 0; i < num; i++) {if (strcmp(students[i].Name, name) == 0) { //通过strcmp函数来对比学生姓名,找到返回在数组的位置return i;}}return -1; //未找到返回 -1
}int Student_SearchByIndex(char id[]) { //通过学号来检索学生信息int i;for (i = 0; i < num; i++) {if (strcmp(students[i].ID, id) == 0) { //通过strcmp函数来对比学生id,找到返回位置return i;}}return -1; //未找到返回 -1
}void Student_DisplaySingle(int index) { //输出表头printf("%10s%10s%8s%8s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语","平均成绩");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%8.2f\n", students[index].ID, students[index].Name,students[index].Mark1, students[index].Mark2, students[index].Mark3, students[index].Average1);
}void inputt() { //利用循环录入学生信息while (1) {printf("请输入学号:");scanf("%s", &students[num].ID);getchar();printf("请输入姓名:");scanf("%s", &students[num].Name);getchar();printf("请输入语文成绩:");scanf("%f", &students[num].Mark1);getchar();printf("请输入数学成绩:");scanf("%f", &students[num].Mark2);getchar();printf("请输入英语成绩:");scanf("%f", &students[num].Mark3);getchar();students[num].Average1 = (students[num].Mark1 + students[num].Mark2 + students[num].Mark3) / 3;if (Student_SearchByIndex(students[num].ID) == -1) {num++; //移向下一个位置} else {printf("学号重复,输入数据无效 !!!\n");}printf("是否继续?(y/n)");if (getchar() == 'n') {break;}}
}void display() { //打印已录入的学生信息int a;printf("%10s%10s%8s%8s%8s%8s%10s%10s\n", "学号", "姓名", "语文", "数学", "英语", "平均成绩");printf("-------------------------------------------------------------\n");for (a = 0; a < num; a++) {printf("%10s%10s%8.2f%8.2f%8.2f%8.2f%10.2f%10.2f\n", students[a].ID, students[a].Name,students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Average1);}
}void search() { //查询学生信息while (1) {char name[20];int index;printf("请输入要查询的学生的姓名:");scanf("%s", &name);getchar();index = Student_SearchByName(name); //调用搜查name函数,根据其返回值确定位置if (index == -1) {printf("学生不存在!\n");} else {printf("你要查询的学生信息为:\n");Student_DisplaySingle(index);}printf("是否继续?(y/n)");if (getchar() == 'n') {break;}}
}void sort() { //根据平均分排序int i, j; //struct students tmp;for (i = 0; i < num; i++) {students[i].Average1 = (students[i].Mark1 + students[i].Mark2 + students[i].Mark3) / 3;}for (i = 0; i < num; i++) {for (j = 1; j < num - i; j++) {if (students[j - 1].Average1 < students[j].Average1) {Copy(students, num, j - 1);Copy(students, j - 1, j);Copy(students, j, num);//tmp=students[j-1];//students[j-1]=students[j];//students[j]=tmp; //冒泡排序}}}int a;printf("%10s%10s%8s%8s%8s%10s\n", "学号", "姓名", "语文", "数学", "英语", "平均成绩");printf("-------------------------------------------------------------\n");for (a = 0; a < num; a++) {printf("%10s%10s%8.2f%8.2f%8.2f%8.2f\n", students[a].ID, students[a].Name,students[a].Mark1, students[a].Mark2, students[a].Mark3, students[a].Average1);}
}void SearchLow() { //搜索不及格的并输出int a;printf(" 语文不及格的有%10s%10s%8s\n", "学号", "姓名", "语文");for (a = 0; a < num; a++) {if (students[a].Mark1 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark1); //从头搜索到尾,若小于60就输出}printf(" 数学不及格的有%10s%10s%8s\n", "学号", "姓名", "数学");for (a = 0; a < num; a++) {if (students[a].Mark2 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark2);}printf(" 英语不及格的有%10s%10s%8s\n", "学号", "姓名", "英语");for (a = 0; a < num; a++) {if (students[a].Mark3 < 60)printf("%10s%10s%8.2f\n", students[a].Name, students[a].ID, students[a].Mark3);}printf(" 计算机不及格的有%10s%10s%8s\n", "学号", "姓名", "计算机");system("pause");
}void Save() {FILE *fp = fopen("temp2.txt", "w+");fprintf(fp, "%d\n", num);for (int i = 0 ; i < num ; i++) {fscanf(fp, "%s %s %f %f %f %f \n", students[i].ID, students[i].Name, &students[i].Mark1, &students[i].Mark2,&students[i].Mark3, &students[i].Average1);}fclose(fp);
}void Load() {FILE *fp = fopen("temp2.txt", "r");fscanf(fp, "%d", &num);for (int i = 0 ; i < num ; i++) {fprintf(fp, "%s %s %f %f %f %f \n", students[i].ID, students[i].Name, students[i].Mark1, students[i].Mark2,students[i].Mark3, students[i].Average1);}fclose(fp);
}int main() {int i;float Average2;//语文平均成绩float Average3;//数学平均成绩float Average4;//英语平均成绩while (1) {Load();printf("\t\t\t\t\t-------- 学生成绩管理系统-------\n\n\n\n"); //菜单printf("\t\t\t\t\t1. 增加学生成绩记录\n\n");printf("\t\t\t\t\t2. 显示所有成绩记录\n\n");printf("\t\t\t\t\t3. 查询学生成绩记录\n\n");printf("\t\t\t\t\t4. 按平均成绩排序\n\n");printf("\t\t\t\t\t5. 输出各科目不及格学生\n\n");printf("\t\t\t\t\t0. 退出\n\n\n");printf("请选择(0-5):");scanf("%d", &i);switch (i) {case 1:inputt();break;case 2:display();break;case 3:search();break;case 4:sort();break;case 5:SearchLow();break;case 0:exit(0);default:;}Save();}return 0;
}
相关文章:

C语言实现学生成绩管理系统思考
学生成绩管理系统思考 作业要求: 目录 思路 基本函数 学习理解大佬的代码: 完成作业: 思路 学生成绩管理系统,首先要初始化系统, 用C语言做学生实验管理系统要求实现对某班学生3门课程(包括语文、数…...

C++11中Lambda新特性
1.定义 lambda匿名函数的语法格式: [外部变量访问方式说明符](参数)mutablenoexcept/throw()->返回值类型 {函数体; };其中各部分的含义分别为: a.[外部变量方位方式说明符] []方括号用于向编译器表明当前是一个lambda表达式,其不能被省略…...

【jvm系列-01】初识虚拟机与java虚拟机
初识虚拟机与java虚拟机一,虚拟机与java虚拟机1,虚拟机2,java虚拟机3,jvm整体结构图4,jvm的架构模型5,jvm的生命周期6,jvm的种类划分6.1,Sun Classic Vm6.2,Exact VM6.3&…...

「Python 基础」数据库应用编程
Python 定义了一套 DB-API,任何数据库要连接到 Python,只需要提供符合 Python 标准的数据库驱动即可; 文章目录1. 连接 SQLite1. 建表、插入数据2. 查询数据2. 连接 MySQL1. 安装驱动2. 演示连接3. SQLAlchemy1. 安装2. DBSession3. add4. qu…...

一个nginx的小项目,不写代码,实现在局域网内访问其他电脑的网页
准备工作 下载nginx //官网 https://nginx.org/en/download.html //直接下载 https://nginx.org/download/nginx-1.23.3.zip解压 下载一个html项目,或者自己随便写一个 我是直接下载的,然后使用的是第一个01 https://gitee.com/StarPort/HTML_CSSTe…...

23.3.14打卡 2022年江西省大学生程序设计竞赛(正式赛)ABL
就写了签到, 其他题没写, 这场好像3题就银了 纪念一下3.14原粥率日 比赛链接:https://ac.nowcoder.com/acm/contest/43898 A题 Special Adjustment Method 题意 给出非负整数x, y, z 你可以让其中两个数字-1, 另外一个2, 使得x2y2z2x^2y^{2}z^{2}x2y2z2最大 题解 这题很容…...

用idea操作hbase数据库,并映射到hive
依赖条件:需要有Hadoop,hive,zookeeper,hbase环境映射:每一个在 Hive 表中的域都存在于 HBase 中,而在 Hive 表中不需要包含所有HBase 中的列。HBase 中的 RowKey 对应到 Hive 中为选择一个域使用 :key 来对…...

手机解锁方法:8个顶级的 Android 手机解锁软件
一般来说,太简单的密码是不安全的,所以我们设置一个安全的密码,可能会稍微复杂一点。然而,我们可能经常会忘记复杂的密码并锁定我们的 Android 智能手机。 8个顶级的 Android 手机解锁软件 如果您遇到过这种情况并且正在寻找一种…...

JVS快速开发平台2.1.7版本,列表页配置新增特性介绍
JVS 在3月份更新了2.1.7版本,本次更新涉及到很多方面,其中包括逻辑引擎、流程引擎、列表引擎、数据处理引擎、图表配置加工等。这里我们先介绍下列表页配置引擎扩展的相关内容,我们先来看看最后配置的列表页配置的效果1、列表页展示方面&…...

【华为机试真题详解 Python实现】去除多余空格【2023 Q1 | 100分】
文章目录 前言题目描述输入描述输出描述示例 1解题思路参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能…...

【SpringBoot项目实战+思维导图】瑞吉外卖⑤(新增套餐、套餐分页查询、删除套餐、短信发送、手机验证码登录)
文章目录新增套餐需求分析数据模型准备工作前端页面分析代码开发根据分类查询菜品功能实现功能测试保存套餐功能实现功能测试思维导图总结套餐分页查询需求分析前端页面分析代码开发基本信息查询问题分析功能完善功能测试思维导图总结删除套餐需求分析前端页面分析代码开发功能…...

OpenAI 发布GPT-4——全网抢先体验
OpenAI 发布GPT-4 最近 OpenAI 犹如开挂一般,上周才刚刚推出GPT-3.5-Turbo API,今天凌晨再次祭出GPT-4这个目前最先进的多模态预训练大模型。与上一代GPT3.5相比,GPT-4最大的飞跃是增加了识图能力,并且回答准确性也得到显著提高。…...

C++——多态
多态分为两类静态多态:函数重载和运算符重载属于静态多态,复用函数名动态多态:派生类和虚函数实现运行时多态静态多态和动态多态的区别:静态多态的函数地址早绑定——编译阶段确定函数地址动态多态的函数地址晚绑定——运行阶段确…...

javaSE系列之类与对象
javaSE系列之类与方法什么是类类的定义书写事项什么是实例化this引用this的注意事项对象的初始化构造方法封装的概念访问限定符封装扩展之包static成员static的特性static的初始化代码块注意事项内部类1.实例内部类💗 💗 博客:小怡同学💗 &am…...

远程构建(命令、脚本构建)jenkins
在对应项目,开启远程构建开关添加API token系统设置调整用户权限获取crumbcurl调用构建 1、进入对应项目的设置页面:开启远程构建开关 2、 添加 API token:进入对应用户的设置页面 3、系统设置调整权限,如图 4、由于jenkins的安全…...

2023-03-15 ElasticSearch
ElasticSearch 1.Docker安装ElasticSearch 1.1. es及kibana下载 docker pull elasticsearch:7.4.2 docker pull kibana:7.4.2创建映射文件: mkdir -p /elasticsearch/configmkdir -p /elasticsearch/datamkdir -p /elasticsearch/plugins在config下执行 vim elasticsearch…...

指针和数组笔试题解析【下篇】
文章目录👁️6.指针笔试题👀6.1.试题(1)👀6.2.试题(2)👀6.3.试题(3)👀6.4.试题(4)👀6.5.试题(5&am…...

DHCP原理简析及交互实践
环境: os:centos7 dnsmasq:version 2.76 一. dhcp工作原理 首先补充几个dhcp相关的基本概念: 1、动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用…...

用二极管、三极管和MOS管搭建逻辑门电路
文章目录1. 二极管(1)二极管与门(2)二极管或门2. 三极管(1)三极管非门(2)三极管与门(3)三极管或门(4)三极管与非门(5&…...

SpringBoot:手写一个 SpringBoot Starter
声明:原文作者:yuan_404 文章目录1. 说明2 . 编写启动器3 . 新建项目测试自己写的启动器1. 说明 启动器模块是一个 空 jar 文件,仅提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库 命名归约: 官方命名&…...

【23】Verilog进阶 - 数位转换【实时处理 + 标志信号】
【初次尝试】VL32 非整数倍数据位宽转换24to128 1 理解题目含义 根据【模块端口】和【题目描述】本题的真实意思是比较清楚啦。但不可大意轻敌! (1)问题1:输出一直为0 猛然间发现计数值也为0,没有增加 去排查cnt的代码,很容易找到到问题,是cnt上电复位的逻辑写错了 …...

常见的HTTP状态码
一.2开头 200:响应成功; 204:响应成功,但是响应头没有数据; 206:部分响应成功,比如分片上传,断点续传; 二.3开头 301:永久重定向; 302&…...

D. Peculiar Movie Preferences(思维 + 一个坑)
Problem - D - Codeforces 米海打算去看电影。他只喜欢回文电影,所以他想跳过一些(可能是零)场景,让电影的其余部分变成回文。给你一个包含n个长度不超过3的非空字符串的列表,代表Mihai的电影场景。如果s的子序列非空,并且子序列中…...

真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩
💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…...

蓝桥刷题总结1
数组三角形 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个…...

淘宝商品详情数据接口 关键字搜索接口 请求代码分享
item_get-获得淘宝商品详情item_get_app-获得淘宝app商品详情原数据item_search-按关键字搜索淘宝商品参数说明通用参数说明参数不要乱传,否则不管成功失败都会扣费url说明 https://api-gw.onebound.cn/平台/API类型/ 平台:淘宝,京东等&#…...

【数据结构】链表OJ(二)
Yan-英杰的博客 悟已往之不谏 知来者之可追 目录 一、反转链表 二、合并两个有序链表 三、链表分割 四、链表的回文结构 一、反转链表 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 输入:head [1,2] 输出:[2,1] 示例 3…...

Linux系统搭建FTP服务器
安装vsftpdyum -y install vsftpd添加FTP用户方式1、添加只允许通过ftp访问的用户useradd -d /home/ftp ftp_user #-d指定用户登录时的启始目录方式2、允许用户登录操作系统usermod -d /home/ftp -s /bin/bash ftp_user #-s指定用户登入后所使用的shell设置用户登录密码passwd …...

MySQL数据同步到 Redis 缓存的几种方法
1 Mysql查完数据,再同步写入到Redis中缺点1:会对接口造成延迟,因为同步写入redis本身就有延迟,并且还要做重试,如果redis写入失败,还需要重试,那就更费时间了。缺点2:不解耦…...

2023年网络安全比赛--CMS网站渗透中职组(超详细)
一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.使用渗透机对服务器信息收集,并将服务器中网站服务端口号作为flag提交; 2.使用渗透机对服务器信息收集,将网站的名称作为flag提交; 3.使用渗透机对服务器渗透,将可渗透页面的名称作为flag提交; 4.使用渗透机对服务器渗透,…...