栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

题目:

总体设计

详细设计 

 系统实现


题目

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 
#include 
#include 
#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("nttt ++++++++++++++++++++++++nttt + 欢迎使用人事管理系统 +nttt ++++++++++++++++++++++++n");
//    system ("color 1F");			//程序面板颜色 
    while (flag){
        do{
            printf("n		******************菜单栏******************n");
            printf("tt*t     ① 录入新人员tt *n");
            printf("tt*t     ② 删除指定人员tt *n");
            printf("tt*t     ③ 修改指定人员tt *n");
            printf("tt*t     ④ 查询指定人员tt *n");
            printf("tt*t     ⑤ 浏览人员表tt *n"); 
            printf("tt*t     ⑥ 统计人数tt *n");
            printf("tt*t     ⑦ 人员排序tt *n");
            printf("tt*t     ⑧ 退出系统tt *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("nt谢谢使用(^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 filen");
        exit(0);
    }
    for (i=0; iN){
		if(m>N)printf("n!!!太大了!!!请修改程序N值后再来!!!n");		//判断本程序是否能满足需求 
		exit(0);
	}
    else{
    	for(i=0; i11||c<1){	//判断选项是否正常选项 
                    	printf("n选择错误!!!!n");
                		return;
					}
            		sign=0;
            	}
        	}
    	}	
	}
	else if(t==2){
		printf("n请输入姓名:"); 
    	scanf("%s",&no_or_na);
		for(i=0; sign&&i11||c<1){	//判断选项是否正常选项 
                    	printf("n选择错误!!!!n");
                		return;
					}
            		sign=0;
            	}
        	}
    	}
	}
	else {
		printf("nt输入错误!!!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("在职人数为:%dn",m);break;
    case 2:	
        for(i=0; ipr[i+1].age){
    				temp=pr[i];
    				pr[i]=pr[i+1];
    				pr[i+1]=temp;
				}
			}
		}
		sign=1;
	}
	else if(n==2){	//起泡排序从小到大 
		for(j=0;j0){
    				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.不足:因为本人水平有限,所以并没有使用动态数组和动态链表等更优的方案,面对输入数据较多时,还需修改程序。以及可能存在其他的问题和不足。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976717.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号