| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:人事档案管理系统
只看楼主 加入收藏
习惯了宠爱
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-7-4
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
人事档案管理系统
一、问题描述:
对一个有N个员工的公司,通过该系统实现对员工学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。

二、功能要求:
1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:序号、姓名、性别、年龄、备注等。
2、本系统显示这样的菜单:
请选择系统功能项:
a.    员工基本信息录入
b.    员工基本信息显示
c.    员工基本信息保存
d.    员工基本信息删除
e.    员工基本信息修改(要求先输入密码)
f.    员工基本信息查询
(1)    按序号查询
(2)    按姓名查询
(3)    按性别查询
(4)    按年龄查询
g. 退出系统
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将员工基本信息保存到文件中。
5、进入系统之前要先输入密码。
三、算法提示:
1、    数据结构:结构体类型数组
2、    数据库结构:下表构成该系统的基本数据库。
      
姓名    序号    性别    年龄    备注
char    char     char    int    char

四、测试数据:
员工人数N=10

五、其它:
对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。
搜索更多相关主题的帖子: 人事档案 系统 管理 
2010-07-04 11:37
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:6 
呵呵呵  很想帮你,但这几天忙着考试没时间啊 ,暑假如果有时间就帮你写啊 !

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-07-04 17:35
yuls
Rank: 2
等 级:论坛游民
帖 子:23
专家分:60
注 册:2010-5-28
收藏
得分:6 
动态链表。。。(插入、删除。。。)
2010-07-04 22:23
aufish
Rank: 2
等 级:论坛游民
威 望:1
帖 子:59
专家分:94
注 册:2010-4-22
收藏
得分:6 
比我的学生系统你吧,你改下就差不多少~~~

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct Student{            //链表的数据结构
    int number ;
    char name[20] ;
    char grad[20] ;
    char profess[30] ;
    float score[5] ;
    struct Student *next ;  
}Student,*LinkList;

void CreateList(LinkList &T){        //初始化链表
    T = (LinkList)malloc(sizeof(Student)) ;
    T->next = NULL;
        
}

void print(LinkList T){    //把链表的数据输出
    LinkList p = T ;
    int j=0 ;
    if(p->next){
        while(p->next){
            p = p->next ;
            printf("学号: %d,姓名: %s,年级: %s,专业: %s 成绩 :(%3.2f  %3.2f  %3.2f)  \n",
                            p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
        }
    }else{
        printf("没有数据可输出!!!\n") ;
    }
}

void RearInsert(LinkList &T){        //尾插入结点
    int number ;
    char chars[3][20] ;
    float score[3] ;
    LinkList p = T;
    printf("请输入要添加的记录: \n") ;
    printf("\n请以(25 梁卓文 大二 计算机 100 89 87)的形式输入学生资料: \n") ;
                scanf("%d %s %s %s %f %f %f",&number,chars[0],chars[1],chars[2],&score[0],&score[1],&score[2]) ;
    while(p->next){    //找到最后一个结点
        p=p->next ;
    }
    LinkList q = (LinkList)malloc(sizeof(Student)) ;
    strcpy(q->name,chars[0]) ; strcpy(q->grad,chars[1]) ;strcpy(q->profess,chars[2]) ;
    q->number = number ;
    q->score[0] = score[0] ;
    q->score[1] = score[1] ;
    q->score[2] = score[2] ;
    q->score[3] = (q->score[0]+q->score[1]+q->score[2])/3 ;
    q->score[4] = (q->score[0]+q->score[1]+q->score[2]) ;
    p->next = q ;
    q->next = NULL ;
    printf("添加后为: \n") ;
    print(T) ;
}


void NumberDelete(LinkList &T){    //删除给出学号的结点,找不到则不做任何操作
    int number ;
    printf("\n请输入要删除的学号 :") ;
    scanf("%d",&number) ;
    if (T->next){
        if (number>0){
            LinkList p = T ;
            if (T->next->next==NULL&&T->next->number==number){
                free(T->next) ;
                T->next =NULL ;
                return ;        //删了就跳出函数
            }
            while (p->next){
                if (p->next->number==number){
                    LinkList q = p->next ;        //记录下p->next结点
                    p->next = q ->next ;
                    free(q) ;
                    return ;        //删了就跳出函数
                }
                p = p->next ;        
            }
            printf("没有可删除的学号!!!") ;
        }else
            printf("学号有错误!!!") ;
    }else
        printf("链表为空!!!") ;
}

void NameDelete(LinkList &T){    //删除给出姓名的结点,找不到则不做任何操作
    char name[20] ;
    printf("\n请输入要删除的姓名 :") ;
    scanf("%s",name) ;
    if (T->next){
        
        LinkList p = T ;
        if (T->next->next==NULL&&strcmp(T->next->name,name)==0){
            free(T->next) ;
            T->next =NULL ;
            return ;        //删了就跳出函数
        }
        while (p->next){
            if (strcmp(T->next->name,name)==0){
                LinkList q = p->next ;        //记录下p->next结点
                p->next = q ->next ;
                free(q) ;
                return ;        //删了就跳出函数
            }
            p = p->next ;        
        }//while
        printf("没有可删除的姓名!!!") ;
        
    }else
        printf("链表为空!!!") ;
}

void Delete(LinkList &T){        //调用上面两个删除函数
    int n=0 ;
    printf("请选择查找的方法: 1.学号 2.姓名 : ") ;
    scanf("%d",&n) ;
    if (n==1){
        NumberDelete(T) ;
    }
    if (n==2){
        NameDelete(T) ;
    }
    printf("\n删除后为: \n") ;
    print(T) ;
}

void SeachNumber(LinkList T){    //按学号查找并修改
    if (T->next==NULL){
        printf("链表为空没有数据!!!\n") ;
        return  ;
    }
    int n,m,number ;
    char chars[20] ;
    float score=0.0 ;
    LinkList p = T ;
    printf("\n请输入要修改的学生学号 :") ;
    scanf("%d",&number) ;
    while (p->next){               
            p=p->next ;
            if (p->number==number){   
                printf("找到的资料: \n") ;
                printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                            p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
                do{
                    printf("------------------------\n") ;
                    printf("    你要修改?        \n") ;
                    printf("    1.学号   2.姓名    \n") ;
                    printf("    3.年级   4.专业        \n") ;
                    printf("    5.成绩1  6.成绩2     \n") ;
                    printf("    7.成绩3              \n") ;
                    printf("    0.退出修改            \n") ;        
                    printf("------------------------\n") ;
                    printf("输入你要选择的操作: ");
                    scanf("%d",&n) ;
                    switch(n){
                        case 1: printf("改为: ") ;scanf("%d",&m) ;p->number = m ;break ;
                        case 2: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->name,chars) ;break ;
                        case 3: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->grad,chars) ;break ;
                        case 4: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->profess,chars) ;break ;
                        case 5: printf("改为: ") ;scanf("%f",&score) ;p->score[0] = score ;break ;
                        case 6: printf("改为: ") ;scanf("%f",&score) ;p->score[1] = score ;break ;
                        case 7: printf("改为: ") ;scanf("%f",&score) ;p->score[2] = score ;break ;
                        case 0: return ;
                        default: printf("请正确输入!!!");break ;
                    }
                    printf("\n改后为: \n") ;printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                    p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
                    
                }while (1);
            }
        }
        printf("找不到数据!!!") ;
}

void SeachName(LinkList T){    //按姓名查找并修改
    if (T->next==NULL){
        printf("链表为空没有数据!!!\n") ;
        return  ;
    }
    int n,m ;
    char chars[20],name[20] ;
    float score=0.0 ;
    LinkList p = T ;
    printf("\n请输入要修改的学生的姓名 :") ;
    scanf("%s",name) ;
    while (p->next){               
            p=p->next ;
            if (strcmp(p->name,name)==0){   
                printf("找到的资料: \n") ;
                printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                            p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
                do{                    
                    printf("------------------------\n") ;
                    printf("    你要修改?        \n") ;
                    printf("    1.学号    2.姓名    \n") ;
                    printf("    3.年级    4.专业    \n") ;
                    printf("    5.成绩1   6.成绩2     \n") ;
                    printf("    7.成绩3              \n") ;
                    printf("    0.退出修改            \n") ;        
                    printf("------------------------\n") ;
                    printf("输入你要选择的操作: ");
                    scanf("%d",&n) ;
                    switch(n){
                        case 1: printf("改为: ") ;scanf("%d",&m) ;p->number = m ;break ;
                        case 2: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->name,chars) ;break ;
                        case 3: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->grad,chars) ;break ;
                        case 4: printf("改为: ") ;scanf("%s",chars) ;strcpy(p->profess,chars) ;break ;
                        case 5: printf("改为: ") ;scanf("%f",&score) ;p->score[0] = score ;break ;
                        case 6: printf("改为: ") ;scanf("%f",&score) ;p->score[1] = score ;break ;
                        case 7: printf("改为: ") ;scanf("%f",&score) ;p->score[2] = score ;break ;
                        case 0: return ;
                        default: printf("请正确输入!!!");break ;
                    }
                    printf("\n改后为: \n") ;printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                    p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;

                }
                while (1);
            }            
        }
        printf("找不到数据!!!") ;
}

void Revise(LinkList &T){    //修改函数,调用上面两个函数
    int n=0 ;
    printf("请选择查找的方法: 1.学号 2.姓名 : ") ;scanf("%d",&n) ;
    if (n==1){
    SeachNumber(T) ;
    }
    if (n==2){
        SeachName(T) ;
    }
    printf("\n修改后为: \n") ;
    print(T) ;
}

void ScoreSort(LinkList &L){    //按成绩排序(交换指针排序)
    if (L->next){
        LinkList p1,p10,p2,p20;        
        LinkList pt,pm0,pm;
        float x;
        p10=L;
        p1=L->next;   
        while(p1->next){
            x=p1->score[3];
            p20=p1;
            p2=p1->next;     
            while(p2){               
                if(x-p2->score[3]<0.01){        
                    x=p2->score[3];
                    pm0=p20;
                    pm=p2;
                }
                p20=p20->next;
                p2=p20->next;
            }//whlie
            if(x-(p1->score[3])<-0.01||x-(p1->score[3])>0.01){
                if(pm==p1->next){
                    p10->next=pm;
                    pt=pm->next;
                    pm->next=p1;     
                    p1->next=pt;
                }else{
                    p10->next=pm;
                    pt=pm->next;
                    pm->next=p1->next;
                    pm0->next=p1;
                    p1->next=pt;   
                }
            }//if
            p10=p10->next;
            p1=p10->next;
        }//while
    } //if
}

void Write(LinkList T){  //写入文件
    FILE *fp ;
    LinkList p = T->next;
    char stud[20] ;
    printf("请输入保存文件名: ") ;
    scanf("%s",stud) ;
    if((fp=fopen(stud,"w"))==NULL){
        printf("无法打开文件!!!") ;
        fclose(fp) ;
        return ;        //退出函数
    }
    printf("\n你存入的数据为: \n") ;
    while (p){
        fprintf(fp,"%d %s %s %s %3.2f %3.2f %3.2f\n",
                    p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;   
        printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                            p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
        p = p->next ;
    }
    fclose(fp) ;
}

int sum;    //用num来记录链表个数
void Read(float yun[]){        //读取文件
    sum=0 ;
    FILE *out ;
    LinkList p = (LinkList)malloc(sizeof(Student)) ;//新建一个链表来存放读取的数据
    p->next = NULL ;
    char stud[20] ;
    printf("请输入要打开的文件名: ") ;
    scanf("%s",stud) ;
    if((out=fopen(stud,"r"))==NULL){
        printf("无法打开文件!!!") ;
        fclose(out) ;
        return ;        //退出函数
    }
    printf("\n文件数据为: \n") ;
    while(!feof(out)){
        fscanf(out,"%d %s %s %s %f %f %f\n",
                    &p->number,p->name,p->grad,p->profess,&p->score[0],&p->score[1],&p->score[2])    ;   
        printf("学号: %d,姓名: %s,年级: %s, 专业: %s,三门成绩:(%3.2f,%3.2f,%3.2f)\n",
                            p->number,p->name,p->grad,p->profess,p->score[0],p->score[1],p->score[2]) ;
        yun[sum] = p->score[0]+p->score[1]+p->score[2] ;
        sum++ ;
    }
    fclose(out) ;   
}

void HalfSort(float yun[],float score){    //折半查找一个数据
    int i,m,low,high ;   
    low = 0 ; high=sum ;    //sum为读取数据时统计元素的个数   
    while (low<=high){
        m= (low+high)/2 ;
        if (yun[m]==score){
            printf("总分为%3.2f的有一个人!!!",score) ;
            return ;    //退出函数
        }
        if (yun[m]<score){
            high = m-1 ;
        }
        if (yun[m]>score){
            low = m+1 ;
        }
    }
    printf("没有人总分为: %3.2f",score) ;
}

void ReadAndSave(LinkList &T,float yun[]){    //显示,保存
    int n=0 ;
    printf("现在有数据: \n") ;
    print(T) ;
    printf("\n请选择; 1.保存数据 2.打开数据") ;
    scanf("%d",&n) ;
    if (n==1)Write(T) ;
    if (n==2)Read(yun) ;
    if (n!=1&&n!=2)printf("输入错误!!!") ;
}

void SortAndSave(LinkList &T){    //排序并保存
    int n =0 ;
    printf("请选择: 1.按平均分排序 2.按总分排序 : ") ;scanf("%d",&n) ;
    if (n==1){
        printf("\n按平均分排序后: \n") ;ScoreSort(T) ;print(T) ;Write(T) ;
    }
    if (n==2){
        printf("\n按总分排序后: \n") ;ScoreSort(T) ;print(T) ;Write(T) ;
    }
}

void Seach(LinkList &T,float yun[]){    //查找给定的分数
    float score ;
    printf("请输入你要找的分数: ") ;
    scanf("%f",&score);printf("\n") ;
    Read(yun) ;
    HalfSort(yun,score) ;
}


void Enter(){        //密码函数
    int number,i ;
    int mima=25 ;   
    for (i=0;i<3 ;i++ ){
        printf("请输入密码: ") ;
        scanf("%d",&number) ;
        if (number==mima){
            printf("  欢迎进入系统 \n") ;
            return ;
        }
        printf("你第%d次输入密码错误!!!\n",i+1) ;
    }
    exit(1) ;
}

void main(){
    float yun[MAX] ; //用于存放读取链表中的总分
    int c ;
    Enter() ;   
    LinkList T ;
    CreateList(T) ;   
    do{
        printf("--------------------------------\n") ;
        printf("(五)学生成绩管理系统            \n") ;
        printf("    1.添加记录                    \n") ;
        printf("    2.删除记录                    \n") ;
        printf("    3.修改记录                    \n") ;
        printf("    4.显示、保存记录            \n") ;
        printf("    5.排序并保存                \n") ;
        printf("    6.查询功能                    \n") ;
        printf("    7.输出全部                    \n") ;
        printf("    0.退出系统                    \n") ;        
        printf("--------------------------------\n") ;        
        printf("输入你要选择的操作: ");
        scanf("%d",&c) ;        
        switch (c){
        case 1: RearInsert(T) ;break ;
        case 2:    Delete(T) ;break ;
        case 3:    Revise(T) ;break ;
        case 4:    ReadAndSave(T,yun) ;break ;               
        case 5:    SortAndSave(T) ;break ;                        
        case 6: Seach(T,yun) ;break ;
        case 7: print(T) ;break ;
        case 0: return ;
        default :printf("请正确输入!!") ;break ;
        }
        putchar(10) ;
        getchar() ;
    }while (1);
}
2010-07-04 22:40
aufish
Rank: 2
等 级:论坛游民
威 望:1
帖 子:59
专家分:94
注 册:2010-4-22
收藏
得分:0 
肿要好多可以完善的,自己捻下吧。C语言只是一种语言,关健系自己捻法!(这不全是C,有点系C++的,你要在VC6.0下运行。保存名为##.cpp)

[ 本帖最后由 aufish 于 2010-7-4 22:44 编辑 ]
2010-07-04 22:41
快速回复:人事档案管理系统
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014025 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved