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

  • 42
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
课 程 设 计 报 告 书 专 业: 信息管理与信息系统 课程设计名称: 《数据库原理及应用》 题 目: 人事管理系统 班 级: XXXXXXX 设 计 者: XXX 完 成 时 间: 2010-06-18 一:需求分析 通过实际调查,要求本系统具有以下功能: 1)良好的人机界面 2)要求实现一定的权限管理 3)方便的数据查询功能 4)方便的添加,删除和修改数据功能 二:开发工具选择 本系统采用SQL Server 2005创建后台数据库,前台开发工具利用Visual Studio 2005进行开发,同时运用一定C#语言的辅助 三:系统功能设计 要设计一个完备的企业人事管理系统,需涉及大量的信息,因目前还未涉及C#语言的学 习,只能简化系统设计,只选取与企业基本信息紧密相关的部门信息,员工信息以及考 勤信息等进行管理。具体规划的模块如下: 1. 部门信息管理:包括部门信息的查询,修改,添加,删除等功能 2. 员工信息管理:包括员工基本信息的查询,修改,添加,删除等功能 3. 考勤信息管理:包括考勤信息的录入,查看等功能 四:系统功能设计 根据功能的关联关系,将功能细化为下图所示的功能结构图(图1),其业务流程如图( 2)所示。 图(1) 图(2) 五:系统数据库设计 1:实体E-R图 根据人事管理系统的系统分析与功能设计,人事管理系统中主要包括部门信息实体 ,员工信息实体,职位信息实体,考勤信息实体等,下面为它们的E-R图: 实体E- R图 2:由实体E-R图得到的关系模式如下: 员工表(员工编号 姓名 性别 职位 学历 所属部门 联系电话 出生年月 政治面貌 婚姻状况) 部门表(部门编号 部门名称 负责人 办公室) 考勤表(员工编号 考勤编号 考勤月份 出差天数 病假天数 事假天数) 职位表(职位编号 职位名称 所属部门) 婚姻表(员工编号 婚姻状况) 政治面貌表(员工编号 政治面貌) (说明:以上关系模式达到第三范式) 3 数据库关系图: 六:前台界面设计 1 创建项目 启动程序"Microsoft Visual Studio 2005",创建项目,创建文件夹。 2 模板页设计 添加新项——选择母版页,命名为MasterPage.master,添加一行两列的ta ble,将模板编辑区拖入右边单元格中,在左侧单元格中 添加treeciew控件,建立如图所示的目录树 再创建一模板页保存为MasterPage2.master,雷同上述操作建立如下图所示的母版页: 3.查看部门信息窗体 添加一应用模板一的web窗体,命名为ckbm.aspx,在编辑区中输入相应文本,配置数据 源,并添加gridview和detailsview控件,建立如下图所示窗体,实现部门信息的查看: 4.修改部门信息窗体 添加一应用模板一的wen窗体,命名为xgbm.aspx,在编辑区内输入相应文本,配置数据源 ,并设置其select查询属性,添加gridview控件,再配置数据源,设置其delect查询属 性和updata查询属性,建立如下图所示的窗体,实现管理员对部门信息的编辑,更改,删 除操作: 5.添加部门信息窗体 添加一应用模板一得web窗体,命名为tjbm.aspx,在编辑区内输入相应文本,配置数据 源,添加一十行两列的table,分别添加相应的label控件和textbox,最后添加两个butt on控件,分别将其text文本改为"确定""取消",配置数据源,并设置其insert查询属性 ,建立如下图所示的窗体,实现部门信息的录入: 以上为部门信息管理模块部分的窗体设计过程和示例,员工信息管理模块和考勤信息管 理模块均与其类似,应用模板一实现的均是系统管理员的权限,可以对系统内部信息添 加,删除,修改,查看,下面为应用模板二的普通用户的权限实现页面,实现过程与以 上页面均为相似,以查看考勤信息页面为例: 6 母版页导航的实现 各个具体功能页面建好之后,回到模板页,将建好的目录树与相应的具体 共能页面之间建立联系,实现 导航的功能,使得用户使用时方便在各个页面之间进行转换。分别应用模 板页建立管理员和普通用户登录时的欢迎界面 7 登录窗体设计 添加新项——选择web窗体,命名为dl1.aspx,单击确定。在页面中输入相 关文本,然后添加两个hiperlink控件,并将其text 文本改为"管理员""普通用户",将其NavigateUrl设置为"gly.aspx""pty h.aspx" 将图中的"管理员"和"普通用户"分别与建好的管理员登录欢迎界面和普通 用户欢迎界面链接在一起,方便用户实现自己权限范围内 的访问和操作。 七:代码部分 在设计过程中运用到的代码,下面以几个页面源代码作为示例 1. 添加部门信息 using System; using
软件项目管理课程设计是针对软件项目管理的理论和实践知识进行系统性的学习和培训。课程设计主要包括以下几个方面:首先,需要了解软件项目管理的基本概念和原理,包括项目管理的基本流程、项目管理的主要方法和工具等。其次,需要学习软件项目管理的组织架构和团队管理,包括项目经理的角色和责任、团队协作和沟通等。再次,需要学习软件项目的计划和控制,包括项目计划的编制和调整、进度和成本的控制、风险管理等。最后,需要学习软件项目的质量保障和项目交付,包括项目质量的管理和评估、软件测试和验收、项目交付和闭环等。 在CSDN上,软件项目管理课程设计可以包括视频教学、在线讨论、案例分析等多种形式。教学内容可以结合实际软件项目管理经验,向学生传授项目管理的最佳实践和成功案例。学生可以通过CSDN平台进行互动交流,分享项目管理经验和研究成果。此外,教师可以在CSDN上发布课程资料和作业要求,方便学生进行学习和提交作业。学生还可以通过CSDN平台进行在线测验和考试,评估学习效果。 软件项目管理课程设计不仅可以提高学生的软件项目管理能力,更可以为软件行业培养更多具备项目管理技能的人才,推动软件行业的发展。通过CSDN平台的互动和交流,可以更好地促进师生之间的沟通和学习,为软件项目管理的教育培训提供更好的支持和平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.魚肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值