【C语言】课程设计实训——人事管理系统

2023-11-04

目录

题目:

总体设计

详细设计 

 系统实现


题目

1、需求分析

   人事档案信息采用文件存储,要提供文件的输入输出操作;根据学院人事的变动情况,可添加或删除记录,因而要提供文件的添加删除操作;能根据编号和姓名进档案查询,所提供文件的查找操作;可以修改指定成员的指定字段的信息,即提供文件的修改操作;统计功能要提供以不同字段的统计操作;排序功能要提供用排序算法对人员信息进行排序;另外还要提供键盘式选择菜单以实现对上述基本功能选择。

2、总体设计

   整体设计为数据浏览模块、数据添加模块、数据删除模块、数据查询模块、数据修改模块、数据统计模块、数据排序模块。

3、详细设计

  数据结构采用结构体:

struct peopleRecord{
    char No[10];          //编号
    char name[10];      //姓名
    char sex[10];         //性别
    int  age;                //年龄
    char job[10];         //职务
    char post[20];       //职称
    char politic[10];     //政治面貌
    char edu_level[10]; //最高学历
    char period[10];      //任职时间
    char start_time[10]; //来院时间
    char type[10];         //人员类别
}

1)数据浏览模块

   采用fread和fopen把文件中的员工信息写读入程序,并输出显示。

2)数据添加模块

   用追加的方式采用fwrite或fprintf把新增员工信息写入人事档案文件。

3)数据删除模块

根据人员编号查找要删除的人员,从文件中读一条记录,查看编号是否要删除,如果是,则舍弃,不再写入文件;否则重新写入文件。

4)数据查询模块

     把编号和姓名作为查询字段,用基本查找算法查找人事档案文件,把符合查找要求的记录输出。

5)数据修改模块

    查找要修改的记录,修改之。先用fread或fscanf读记录,若是要修改的记录,则修改信息,把修改后的信息写入文件;否则直接写入文件。

6)数据排序模块

    通过菜单选择年龄或者来院时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。

7)数据统计模块

通过菜单选择统计字段:在职人数、党员人数、女工人数、高学历人数、高职称人数。

例如选择党员人数。

总体设计

1.功能模块分析

 2.程序流程图

详细设计 

1.数据结构

人员信息采用如下结构体:

typedef struct peopleRecord{
    char No[10];        //编号
    char name[10];      //姓名
    char sex[10];       //性别
    int  age;           //年龄
    char job[10];       //职务
    char post[20];      //职称
    char politic[10];   //政治面貌
    char edu_level[10]; //最高学历
    char period[10];    //任职时间
    char start_time[10]; //来院时间
    char type[10];        //人员类别
} P_tab; //定义学院人事记录表

2.函数

1)全部函数

        主函数main、

        菜单选项函数Options、

        文件重写入函数save、

        文件读入函数open、

        文件追加写入函数save_end、

        信息添加函数Det_add、

        信息删除函数Det_del、

        信息修改函数Det_modi、

        信息浏览函数Det_show、

        信息统计函数Det_count、

        信息查找函数Det_seek、

        信息排序函数Det_sort,

共十二个函数。

2)关键函数

        ①文件读入函数open:

        

        ②数据删除函数Det_del:

        ③数据修改函数Det_modi:

 

系统实现

1.源代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 50
typedef struct peopleRecord{
    char No[10];        //编号
    char name[10];      //姓名
    char sex[10];       //性别
    int  age;           //年龄
    char job[10];       //职务
    char post[20];      //职称
    char politic[10];   //政治面貌
    char edu_level[10]; //最高学历
    char period[10];    //任职时间
    char start_time[10]; //来院时间
	char type[10];		//人员类别
} P_tab; //定义学院人事记录表
P_tab pr[N];		//定义结构体数组 
//本程序全部模块函数 
void save();		//清除原文件所有内容,将数据重写入文件 
int  open();		//文件打开函数,主要是用来获取当前文件中数据项个数 
void save_end();	//从文件尾部将新数据写入文件
void Det_show();	//数据展示,将当前文件中数据全部打印到屏幕上 
void Det_seek();	//按名字查找文件中对应数据项 
void Det_add();		//添加函数,从文件尾写入信息 
void Det_sort();	//排序函数,根据输入的字段来排序 
void Det_del();		//删除函数,删除文件中对应的数据项 
void Det_modi();	//修改函数,根据输入的字段查找对应数据项,在修改对应数据项的内容 
void Det_count();	//根据输入字段统计文件中满足条件的对应数据项个数 
void Options(int option);		//菜单开关 
int i,flag=1,menu;
/*主函数+菜单*/ 
int main(){
    printf("\n\t\t\t ++++++++++++++++++++++++\n\t\t\t + 欢迎使用人事管理系统 +\n\t\t\t ++++++++++++++++++++++++\n");
//    system ("color 1F");			//程序面板颜色 
    while (flag){
        do{
            printf("\n		******************菜单栏******************\n");
            printf("\t\t*\t     ① 录入新人员\t\t *\n");
            printf("\t\t*\t     ② 删除指定人员\t\t *\n");
            printf("\t\t*\t     ③ 修改指定人员\t\t *\n");
            printf("\t\t*\t     ④ 查询指定人员\t\t *\n");
            printf("\t\t*\t     ⑤ 浏览人员表\t\t *\n"); 
            printf("\t\t*\t     ⑥ 统计人数\t\t *\n");
            printf("\t\t*\t     ⑦ 人员排序\t\t *\n");
            printf("\t\t*\t     ⑧ 退出系统\t\t *\n");
            printf("		******************************************\n");
            printf("\n");
            printf("请输入选项:");
            scanf("%d", &menu);
        }while (menu>8 || menu<1);	 
        Options(menu);
    }
}
/*菜单的开关选项函数*/
void Options(int option){
    switch (option){
    	case 1:Det_add();	break;
    	case 2:Det_del();	break;
    	case 3:Det_modi();	break;
    	case 4:Det_seek();	break;
		case 5:Det_show();	break;
    	case 6:Det_count();	break;
    	case 7:Det_sort();	break;
    	case 8:printf("\n\t谢谢使用(^V^)!\n");flag=0;exit(0);
    }
}
/*文件在最后面写入操作函数*/
void save_end(int m){
    int i;
    FILE*fp;
    if ((fp=fopen("P_tab.txt","a"))==NULL){  /*判断文件是否能打开*/
        printf ("cannot open file\n");
        exit(0);
    }
    for (i=0; i<m; i++) 		/*将内存中职工的信息输出到磁盘文件中去*/
        if (fwrite(&pr[i],sizeof(P_tab),1,fp)!=1)
            printf("file write error\n");
    fclose(fp);
}
/*文件重写入操作函数*/
void save(int m){
    int i;
    FILE*fp;
    if ((fp=fopen("P_tab.txt","w"))==NULL){ 	 /*判断文件是否能打开*/
        printf ("cannot open file\n");
        exit(0);
    }
    for (i=0; i<m; i++) 	/*将内存中职工的信息输出到磁盘文件中去*/
        if (fwrite(&pr[i],sizeof(P_tab),1,fp)!=1)
            printf("file write error\n");
    fclose(fp);
}
/*文件读操作函数*/
int open(){
    FILE*fp;
    int i=0;
    if((fp=fopen("P_tab.txt","r"))==NULL){		// 判断文件是否能打开 
        printf ("cannot open file\n");
        exit(0);
    }
    else{
        do{
            fread(&pr[i],sizeof(P_tab),1,fp);	//读文件数据 
            i++;	//并记录文件中数据项个数(重要) 
        }
        while(feof(fp)==0);		//直到读到文件尾结束 
    }
    fclose(fp);
    return(i-1);	//返回文件数据项个数,应为for循环结束时i多加1,所以应该返回i-1 
}
/*浏览显示函数 */
void Det_show(){
    int i;
    int m=open();		//打开文件获取信息及数据项个数 
	printf("\n  -----------------------------------------------------------------------------------------------------------------");
	printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
	printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
    for(i=0; i<m; i++) /*m为输入部分的员工人数*/
        printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type); //用数组下标
    printf("\n按任意键继续……\n");
    getchar();
    getchar();
}
/*信息增加函数*/
void Det_add(){
    int i,m,n;
    printf("请输入需要添加信息的人员人数:\n");
    scanf("%d",&m);
    if(m<=0)printf("输入错误!!!\n");		//判断是否为正常值 
    else if(m>N){
		if(m>N)printf("\n!!!太大了!!!请修改程序N值后再来!!!\n");		//判断本程序是否能满足需求 
		exit(0);
	}
    else{
    	for(i=0; i<m; i++){
       		printf("[增加人员信息%d]\n",i+1);
        	printf("请输入编号:");
        	scanf("%s", pr[i].No);
        	printf("请输入姓名:");
        	scanf("%s", pr[i].name);
        	printf("请输入性别:");
        	scanf("%s", pr[i].sex);
        	printf("请输入年龄:");
        	scanf("%d", &(pr[i].age));
        	printf("请输入职务:");
        	scanf("%s", pr[i].job);
        	printf("请输入职称:");
        	scanf("%s", pr[i].post);
        	printf("请输入政治面貌:");
        	scanf("%s", pr[i].politic);
        	printf("请输入最高学历:");
        	scanf("%s", pr[i].edu_level);
        	printf("请输入任职时间:");
        	scanf("%s", pr[i].period);
        	printf("请输入来院时间:");
        	scanf("%s", pr[i].start_time);
        	printf("请输入人员类别:");
        	scanf("%s", pr[i].type);
        	printf("-----------------------\n"); 
    	}
    	printf("员工信息添加成功!!!");
    	save_end(m);		//将新数据写入文件尾 
    	printf("\n\t现有记录如下:");
		Det_show();			//展示一下写入后的文件 
	}
}
/*人员信息删除函数*/
void Det_del(){
    int m=open();		//打开文件获取信息及数据项个数 
	int i,j,n,t,sign=0;
	char no_or_na[10];
	printf("请输入要删除的员工的编号或姓名:");		
	scanf("%s",&no_or_na);
	for(i=0;i<m;i++){
		if((strcmp(pr[i].No,no_or_na)==0)||(strcmp(pr[i].name,no_or_na))==0){		//顺序查找 
			sign=1;			//找到了sign置 
			printf("\n已找到此人,原始记录为:\n");
			printf("\n  -----------------------------------------------------------------------------------------------------------------");
			printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
			printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
			printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type); 
    		printf("\n确实要删除此人信息请按①,不删除请按 ② \n");
			scanf("%d",&n);
			if(n==1){   /*如果删除,则其他的信息都往上移一行*/
				if(i<m-1){
					for(j=i;j<m-1;j++){
    					pr[j]=pr[j+1];
      	  				m--;
    				}
				}
    			else m=m-1;
				save(m);
				printf("已删除!!"); 
			}
		}
		else if(i==m) printf("\n对不起,查无此人!\n");		//如果遍历整个文件斗殴没找到则输出未找到信息 
	}
	printf("\n按任意键继续……\n");
    getchar();
    getchar();
}
/*人员查找函数*/
void Det_seek(){
    char no_or_na[10];
    int i,n;
    int m=open();	//打开文件获取信息及数据项个数
    printf("以编号查询请按① 以名字查询请按②:");	
    scanf("%d",&n);				//获取查询字段 
    if(n==1){	
    	printf("\n请输入编号:"); 
    	scanf("%s",&no_or_na);
		for(i=0;i<m;i++)
        	if(strcmp(no_or_na,pr[i].No)==0){	//遍历查找编号 
            	printf("\n已找到此人,其记录为:\n");
				printf("\n  -----------------------------------------------------------------------------------------------------------------");
				printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
				printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
				printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type); 
				break;
        	}
	}
	else if(n==2){
		printf("\n请输入姓名:"); 
    	scanf("%s",&no_or_na);
		for(i=0;i<m;i++)
        	if(strcmp(no_or_na,pr[i].name)==0){	//遍历查找名字 
            	printf("\n已找到此人,其记录为:\n");
				printf("\n  -----------------------------------------------------------------------------------------------------------------");
				printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
				printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
				printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type); 
				break;
        	}
	}
	else printf("输入有错误!!!"); 
    if(i==m) printf("\n对不起,查无此人\n");		//如果遍历后没找到输出没找到信息 
    printf("\n");
    printf("\n按任意键继续……\n");
    getchar();
    getchar();
}
/*信息修改函数*/
void Det_modi(){
    char no_or_na[10];   
	char temp[10];  
    char sex[10];     //性别
    int  age;         
    int b=0,c=0,i=0,n=0,t=0,sign=1;
    int m=open(); 			//获取文件项个数 
    printf("以编号查询请按① 以名字查询请按②:");	
    scanf("%d",&t);				//获取查询字段 
    if(t==1){	
    	printf("\n请输入编号:"); 
    	scanf("%s",&no_or_na);
		for(i=0; sign&&i<m; i++){
        	if(strcmp(pr[i].No,no_or_na)==0){
           		printf("\n已找到此人,原始记录为:\n");
				printf("\n  -----------------------------------------------------------------------------------------------------------------");
				printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
				printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
				printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type);            	
				printf("\n确实要修改此人信息请按①; 不修改请按②\t");
            	scanf("%d",&n);
            	if(n==1){
                	printf("\n需要进行修改的选项\n ①编号 ②姓名 ③性别 ④年龄 ⑤职务 ⑥职称 ⑦政治面貌 ⑧最高学历 ⑨任职时间 ⑩来院时间 11.人员类别\n");
                	printf("请输入你想修改的那一项序号:");
                	scanf("%d",&c);
                	if(c>11||c<1){	//判断选项是否正常选项 
                    	printf("\n选择错误!!!!\n");
                		return;
					}
            		sign=0;
            	}
        	}
    	}	
	}
	else if(t==2){
		printf("\n请输入姓名:"); 
    	scanf("%s",&no_or_na);
		for(i=0; sign&&i<m; i++){
        	if(strcmp(pr[i].name,no_or_na)==0){
           		printf("\n已找到此人,原始记录为:\n");
				printf("\n  -----------------------------------------------------------------------------------------------------------------");
				printf("\n  | 编 号   姓 名   性 别   年 龄   职 务    职 称    政治面貌    最高学历     任职时间      来院时间    人员类别 |\n");
				printf("  -----------------------------------------------------------------------------------------------------------------\n"); 
				printf("%8s%8s%7s%8d%10s%9s%10s%12s%15s%14s%10s\n",pr[i].No,pr[i].name,pr[i].sex,pr[i].age,pr[i].job,pr[i].post,pr[i].politic,pr[i].edu_level,pr[i].period,pr[i].start_time,pr[i].type);            	
				printf("\n确实要修改此人信息请按①; 不修改请按②\t");
            	scanf("%d",&n);
            	if(n==1){
                	printf("\n需要进行修改的选项\n ①编号 ②姓名 ③性别 ④年龄 ⑤职务 ⑥职称 ⑦政治面貌 ⑧最高学历 ⑨任职时间 ⑩来院时间 11.人员类别\n");
                	printf("请输入你想修改的那一项序号:");
                	scanf("%d",&c);
                	if(c>11||c<1){	//判断选项是否正常选项 
                    	printf("\n选择错误!!!!\n");
                		return;
					}
            		sign=0;
            	}
        	}
    	}
	}
	else {
		printf("\n\t输入错误!!!\n");
		return;
	}
    if(sign==1)
        printf("\n对不起,查无此人!\n");
    if(n==1){
    	switch(c){     
       		case 1:
           		printf("编号改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].No,temp);
           		break;
        	case 2:
           		printf("姓名改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].name,temp);
           		break;
       		case 3:
        		printf("性别改为: ");
           		getchar();
           		scanf("%s",&temp);
            	strcpy( pr[i-1].sex,temp);
           		break;
       		case 4:
           		printf("年龄改为: ");
           		scanf("%d",&age);
           		pr[i-1].age=age;
           		break;
        	case 5:
           		printf("职务改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].job,temp);
           		break;
       		case 6:
           		printf("职称改为: ");
           		scanf("%s",&temp); 
           		strcpy(pr[i-1].post,temp);
           		break;
       		case 7:
           		printf("政治面貌改为: ");
           		scanf("%s",&temp);
            	strcpy(pr[i-1].politic,temp);
            	break;
        	case 8:
           		printf("最高学历改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].edu_level,temp);
           		break;
       		case 9:
           		printf("任职时间改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].period,temp);
           		break;
       		case 10:
           		printf("来院时间改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].start_time,temp);
           		break;
        	case 11:
           		printf("人员类别改为: ");
           		scanf("%s",&temp);
           		strcpy(pr[i-1].type,temp);
           		break;
       	}
   		printf("\n是否确定所修改的信息?\n 是-请按①; 不-重新修改请按②:\n");
   		scanf("%d",&b);	
   		if(b==2)return;
    	printf("修改成功!!!\n");	
    	printf("浏览修改后的所有人员信息:\n");
    	save(m);
   	 	Det_show();
	}
}
/*数据统计函数*/
void Det_count(){
    int i,t,a=0,b=0,c=0,d=0;
    int m=open();		//打开文件获取信息及数据项个数
    char politic[10]= {"党员"};
    char sex[10]= {"女"};
    char level[10]= {"博士"};
    char post[10]={"职称3"};
    printf("可统计项:"); 
    printf("①在职人数\t②党员人数\t③女工人数\t④高学历人数(博士)\t⑤高职称人数(职称3)\n");
    printf("请输入要统计的类型:");
    scanf("%d",&t);
    printf("\n");
    switch(t){			//统计字段选项开关 
    case 1: printf("在职人数为:%d\n",m);break;
    case 2:	
        for(i=0; i<m; i++)
            if(strcmp(politic,pr[i].politic)==0)
                a++;
        printf("党员人数为:%d\n",a);
        break;
    case 3:
        for(i=0; i<m; i++)
            if(strcmp(sex,pr[i].sex)==0)
                b++;
        printf("女工人数为:%d\n",b);
        break;
    case 4:
        for(i=0; i<m; i++)
            if(strcmp(level,pr[i].edu_level)==0)
                c++;
        printf("高学历人数为:%d\n",c);
        break;
    case 5:
        for(i=0; i<m; i++)
            if(strcmp(post,pr[i].post)==0)
                d++;
        printf("高职称人数为:%d\n",d);
        break;
    default:
        break;
    }
    printf("\n");
    printf("\n按任意键继续……\n");
    getchar();
    getchar();
}
/*数据排序函数*/
void Det_sort(){
    int i,j,n,m,s,sign=0;
	P_tab temp;		//定义结构体类型的交换变量 
    m=open();
    printf("\n可排序选项:①年龄   ②来院时间\n");
    printf("\n请输入您要排序的选项:");
    scanf("%d",&n);			//获取排序字段 
    if(n==1){	//起泡排序从小到大 
    	for(j=0;j<m;j++){
    		for(i=0;i<m-j-1;i++){
    			if(pr[i].age>pr[i+1].age){
    				temp=pr[i];
    				pr[i]=pr[i+1];
    				pr[i+1]=temp;
				}
			}
		}
		sign=1;
	}
	else if(n==2){	//起泡排序从小到大 
		for(j=0;j<m;j++){
    		for(i=0;i<m-j-1;i++){
    			if((strcmp(pr[i].start_time,pr[i+1].start_time))>0){
    				temp=pr[i];
    				pr[i]=pr[i+1];
    				pr[i+1]=temp;
				}
			}
		}	
		sign=1;
	}
	if(sign){	//判断是否按字排序好了 
		printf("排好了!!!!\n");
		save(m);
		Det_show();
	}
	else printf("!!!出错了!!\n");
}

2.运行截图

1)浏览人员表。运行程序,根据菜单提示选择“录浏览人员表”功能即输入“5”。(已提前录入部分信息)。

2)录入新成员。根据菜单提示(因菜单部分和图 5-1所示菜单一致,故以下图片均未截取菜单部分)选择“录入新成员”功能即输入“1”;输入录入人数为“1”;然后依次输入添加人员的各项信息。

3)删除指定成员。根据菜单提示选择“删除指定成员”功能即输入“2”;然后输入要删除的员工姓名“王五”;找到该人员信息后确认删除及输入“1”。

 4)修改指定成员。根据菜单提示选择“修改指定成员”功能即输入“3”;选择查找字段为“名字”即输入“2”,根据提示查找姓名输入“张三”;确认修改该人员信息输入“1”;选择修改字段为“职务”输入“5”;修改职务输入“职务3”;确认修改信息输入“1”。

 5)查询指定成员。根据菜单提示选择“查询指定成员”功能即输入“4”;按编号查找输入“1006”。

 6)统计人数。根据菜单提示选择“统计人数”功能即输入“6”;选择统计字段为“党员人数”输入“2”。

 7)人员排序。根据菜单提示选择“人员排序”功能即输入“7”,选择以年龄排序,输入“1”。

 8)退出系统。根据菜单提示选择“退出系统”功能即输入“8”。

 3.不足:因为本人水平有限,所以并没有使用动态数组和动态链表等更优的方案,面对输入数据较多时,还需修改程序。以及可能存在其他的问题和不足。

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

【C语言】课程设计实训——人事管理系统 的相关文章

随机推荐

  • redis常用数据类型的场景,你真的用对了么?

    关注微信公众号 虾米聊吧 每天更新一篇技术文章 文章内容涵盖架构师成长必经之路应掌握的技术 一起学习 一起交流 redis常用数据类型的场景 你真的用对了么 redis常用数据类型包含string hashmap list set sort
  • 使用Transformers离线模型(以bert模型为例)

    首先需要安装transformers pip install transformers 以bert base uncased为例 进入网站 https huggingface co bert base uncased tree main 可
  • qt/e在arm板上显示中文的方法

    QTCN社区 gt Qt嵌入式开发 gt 求qt e在arm板上显示中文的方法 打印本页 登录 注册 回复主题 发表主题 newalan 2008 04 15 00 38 求qt e在arm板上显示中文的方法 求qt e在arm板上显示中文
  • mysql 高效复制存储数据到另一张表

    最近有个需求 我们老大说让我写个存储过程把一张表的数据分组之后按时间取最近的三条数据 复制到另一张表中 刚开始他也没有说这么明白 我就用存储过程写了 写完之后他才说每天取最近三条数据 我一想 这根本用不到存储过程 直接两条SQL搞定如下 d
  • windows server 2008 R2使用nginx代理https访问,外网访问失败

    windows server 2008 R2使用nginx代理https访问 外网访问失败 问题 因为公司固定了ip 在公司服务器Windows server 2008 R2部署项目后 使用nginx代理了https 出现 使用公司的网络
  • 无需Root 手机装电脑系统 虚拟机

    不需要ROOT 安装也有简单方法 比较适合小白 也有大神操作方法 特别说下这不是云电脑 不需要网都可以跑起来 下面具体看下面操作 来自网上教程 非本站原创 我们需要一个软件 windows模拟器 链接 https pan baidu com
  • vue把el-dialog提取出来作为子组件,并实现父组件和子组件相互传值

    最近做项目遇到了一个需求是 为了防止组件中代码冗长 需要将el dialog对话弹出框单独封装成子组件 并将父组件中的id传递给子组件 子组件再根据id刷新父组件 具体项目代码太长 这里仅记录一下实现思路 01 把el dialog提取出来
  • 初识kafka---Kafka从入门到精通(一)

    Kafka中的消息是以topic进行分类的 生产者生产消息 消费者消费消息都是面向topic 而每个topic里面都是有分区的概念 一个topic有三个分区 而每个分区都是有分区leader partition leader 和partit
  • http协议详解

    本篇博文主要介绍HTTP请求 响应的系列过程 包括四个部分 是在陆续学习中觉着之间有关联总结下来的 以便自己今后忘记后可以快速查看也为各位看到这篇文章的朋友们梳理一下知识 下面 正文开始 作为一个前端开发人员 我们每天都在与页面打交道 那么
  • 源码编译安装httpd-2.4.39

    环境 apr 1 7 0 tar bz2 apr util 1 6 1 tar bz2 httpd 2 4 39 tar bz2 1 合并源码文件 tar xvf apr 1 7 0 tar bz2 tar xvf apr util 1 6
  • 2020-12-13 51单片机笔记

    单片机型号选择错误 该STC软件左上角的单片机型号 显示不出来 LCD1602显示屏插反 extern uchar time 报错没定义 在其他文件运用时也要加上uchar time 不能直接使用 下图是错误案例 在 c文件定义变量 然后在
  • 华为eNSP配置PPP协议中的CHAP认证

    CHAP认证 CHAP认证过程比较复杂 三次握手机制 使用密文格式发送CHAP认证信息 由认证方发起CHAP认证 有效避免暴力破解 在链路建立成功后具有再次认证检测机制 目前在企业网的远程接入环境中用的比较常见 两个路由器都要加模块 路由器
  • 把照片改成指定像素基于PS(证件照修改为制定像素大小)

    下图所示的图片当前宽度为1064像素 高度为1972像素 右键图片打开 属性 对话框可查看尺寸 接下来我们想将图片尺寸改为宽度1000像素 高度1000像素 同时图片不能变形 操作步骤 1 打开PS软件 按Ctrl N组合键打开 新建文档
  • [译]Android 中 Kotlin 与 RecyclerView 高性能列表

    翻译说明 原标题 Kotlin RecyclerView for High Performance Lists in Android 原文地址 www andreasjakl com 原文作者 Andreas Jakl RecyclerVi
  • nginx 配置 http, https可以同时访问(报错: The plain HTTP request was sent to HTTPS port)

    Aphorism full stack 前言 最近微信项目升级 https 域名 购买好域名后 开放 443 端口后 http 访问竟然出错了 The plain HTTP request was sent to HTTPS port 导致
  • crypto-js 加密、解密使用方法,复制就能用

    一 安装crypto js npm install crypto js 二 封装加密方法 单独在js中封装一个js存放这个方法 后期使用再引入 import CryptoJS from crypto js let aesKeyInfo ke
  • algorithm头文件下的函数

    非修改性序列操作 12个 循环 对序列中的每个元素执行某操作 for each 查找 在序列中找出某个值的第一次出现的位置 find 在序列中找出符合某谓词的第一个元素 find if 在序列中找出一子序列的最后一次出现的位置 find e
  • anaconda

    卸载 直接删除 下载 ENTER anaconda3 和 conda 然后清除 bashrc 中conda相关的字段 安装 sudo Anaconda3 5 2 0 Linux x86 64 sh u u表示覆盖安装 中是默认值 询问过程要
  • proc文件系统探索 之 根目录下的文件[七]

    主要参考内核文档和红帽文档对 gt cat proc meminfo 读出的内核信息进行解释 下篇文章会简单对读出该信息的代码进行简单的分析 MemTotal 507480 kBMemFree 10800 kBBuffers 34728 k
  • 【C语言】课程设计实训——人事管理系统

    目录 题目 总体设计 详细设计 系统实现 题目 1 需求分析 人事档案信息采用文件存储 要提供文件的输入输出操作 根据学院人事的变动情况 可添加或删除记录 因而要提供文件的添加删除操作 能根据编号和姓名进档案查询 所提供文件的查找操作 可以