xin112532604 发表于 2022-8-29 16:32

[C语言]职工信息管理系统

本帖最后由 xin112532604 于 2022-8-31 08:11 编辑

职工信息管理系统
录入模块:输入该厂现有员工信息并保存与文件中,方便日后进行排序,更新,统计,打印等操作。
输出模块:将所有员工信息,或所需员工信息输出于屏幕上,用于查询员工信息每二十条
删除模块:此分为按姓名,职工号删除
添加模块:添加新员工信息并保存起来。
修改模块:找到该员工选择所要修改的选项。
查询模块:此分为按姓名,职工号查询


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#define FORMART "|%-20d|%-15s|%-20lld|%-12.1f|\n"
#define txtA emp.Number,emp.name,emp.Tel,emp.money

struct employee{//员工信息结构体
      int Number;//职工号
      char name;//姓名
      float money;//工资
      long long int Tel;//电话
};
struct employee emp,emp1;

//功能函数声明
void Welcome();//主菜单
void in();//输入员工信息
void save(int m);   //存储信息
intread();    // 读取信息
void Print();//浏览信息
void add();   //添加
void find();//查找
void findname();//按姓名查找
void findnum();//按职工号查找
void Delete();//删除操作
void change();//修改操作
//主函数
int main()   {
      system("color 0e");
      int n;
      while(1)
      {
                        
                        Welcome();
                        scanf("%d",&n);
            if(n==0)
            {
                  printf("输入错误,请重新输入!\n");
                  system("pause");
                  fflush(stdin);
                  continue;
                }
               
                switch(n)   
                {      
                        case 1: system("cls");
                                        printf("\n\t\t\t录入职工信息\n\n");
                                        in();
                                        break;   
                        case 2: system("cls");
                                        printf("\n\t\t\t\t浏览职工信息\n");
                                        Print();
                                        system("cls");
                                        break;      
                        case 3: system("cls");
                                        printf("\n\t\t\t\t查询职工信息\n");
                                        find();
                                        break;      
                        case 4: system("cls");
                                        printf("\n\t\t添加职工信息");
                                        add();
                                        break;      
                        case 5: system("cls");
                                        printf("\n\t\t\t\t删除职工信息\n\n");
                                        Delete();
                        case 6: system("cls");
                                        printf("\n\t\t\t\t修改职工信息\n");            
                                        change();
                                        Print();
                                        system("cls");
                                        break;         
                        case 7:      getchar();
                                        exit(7);
                                        break;         
                        }
   }   
}
void Welcome(){//主菜单
   
      printf("\n\n\n");
      printf("\t\t**************************欢迎访问职工信息管理系统************************\n");
    printf("\t\t**                                                                      **\n");
      printf("\t\t**                                                                      **\n");
      printf("\t\t**                        1---录入职工信息数据                        **\n");
    printf("\t\t**                        2---浏览职工信息数据                        **\n");
    printf("\t\t**                        3---查询职工信息数据                        **\n");
    printf("\t\t**                        4---添加职工信息数据                        **\n");
    printf("\t\t**                        5---删除职工信息数据                        **\n");
    printf("\t\t**                        6---修改职工信息数据                        **\n");
      printf("\t\t**                        7---退出职工信息系统                        **\n");
    printf("\t\t**                                                                      **\n");
      printf("\t\t**                                                                      **\n");
      printf("\t\t**************************************************************************");
      printf("\n请您选择你需要的操作(1-7):");
}

void in(){      //录入职工信息
      int i,m,num;
      printf("请您输入需要创建信息的职工人数: ");
    scanf("%d",&m);
      system("cls");
      printf("\n");
    for (i=0;i<m;i++)
                {   printf("第%d个员工信息输入:\n", i+1);
                        printf("请输入职工号: ");
                        scanf("%d",&num);
                        for(int j=0;j<i;j++)
                              while(emp.Number==num)
                              {      printf("职工号为 %d 的员工已存在,请重新输入:\n",num);
                                        scanf("%d",&num);
                              }
                        emp.Number=num;
                        printf("请输入姓名:");
                        scanf("%s",&emp.name);
                              do
                        {
                            printf("请输入工资:");
                              scanf("%f",&emp.money);
                              if(emp.money>0) break;
                              else printf("对不起,您输入格式错误,请重新输入!\n");
                        }while(1);   
                        do
                        {
                        printf("请输入电话:");   
                        scanf("%lld",&emp.Tel);
                        if(emp.Tel>0)
                        {
                              break;
                        }
                        else
                        {
                              printf("对不起,您输入格式错误,请重新输入!\n");
                        }
                        }while(1);
                        system("cls");
                        printf("\n职工信息创建完成!\n\n");      
               }      
                save(m);      //保存入文件中
}

void save(int m){
      int i;
   FILE *fp;
   if ((fp=fopen("employee.dat","wb"))==NULL)   
         {printf ("cannot open file!\n");
                exit(0);
         }   
         for (i=0;i<m;i++)
      if (fwrite(&emp,sizeof(struct employee),1,fp)!=1)
                printf("file write error!\n");   
      fclose(fp);
}

int read(){//导入函数
      FILE*fp;
      int i=0;   
      if((fp=fopen("employee.dat","rb"))==NULL)
      {   printf ("cannot open file!\n");
                exit(0);      
    }
      else
      {   
                do {   
                  fread(&emp,sizeof(struct employee),1,fp);
                        i++;
                        }while(feof(fp)==0);
      }
      fclose(fp);
      return(i-1);
}      
void Print(){//浏览职工信息
      char ch;
      int m=read(),x;
      int page=1,firstindex=0,i,pageamount=m/20+1,j;//定义联系人为一页
      x=m-19;
    do
      {      system("cls");
      if(page>pageamount)
                printf("**对不起,页数的最大值为%d\n",pageamount);
                else if (page < 0)
                printf("**对不起,输入的数字必须为正数\n");
      else
                {
            firstindex=20*(page - 1)-1;
            printf("\n贵公司所有职工信息(共计%d人):\n",m);
                        printf("************************************************************************\n");
                        printf("|\t\t\t\t\t\t\t\t       |\n");
                        printf("|职工号            |姓名         |电话                |工资      |\t\n");
            for(i=0;i<firstindex;++i)m=i;
                        i=0;
                        //x=m-19;
            while(m!=NULL&&i<20)
                        {
                              if(j>=m+x)
                              {
                                        break;
                              }
                i++;
                j=i+firstindex;
                printf("|%-20d|%-15s|%-20lld|%-12.1f|\n",emp.Number,emp.name,emp.Tel,emp.money);
               
            }
                              printf("|\t\t\t\t\t\t\t\t       |\n");
                              printf("|\t\t\t\t\t\t\t\t       |\n");
                              printf("|*************************** 第%d页(共%d页) *****************************|\n", page, pageamount);
      }
      printf("请输入跳转页面(按0返回通讯录主菜单):");
      scanf("%d",&page);
    }
      while (page);

      printf("\n");
}

void Delete(){    //删除职工信息
      int m=read();
      int i,j,t,n,f,Num;   
      //Print();
      printf("请您输入要删除的职工的职工号:");
      scanf("%d",&Num);
      for(i=0,f=1;f&&i<m;i++)         //遍历全部职员
      {    if(emp.Number==Num)    //判断输入职工号是否与原职工号相同
                {   
                        printf("\n已找到此人,原始记录为:\n");
                        printf("************************************************************************\n");
                        printf("|\t\t\t\t\t\t\t\t       |\n");
                        printf("|职工号            |姓名         |电话                |工资      |\t\n");
                        printf(FORMART,txtA);
                        printf("\n确认删除请按 1,取消删除请按 0: ");   
                        scanf("%d",&n);            
                        if(n==1)   
                        {         for(j=i;j<m-1;j++)
                                       emp=emp;   
                              f=0;
                        }
                        else f=2;
                }

      }
      system("cls");
   switch(f){
                case 0: m=m-1;
                              printf("\n\t\t\t\t删除成功!\n");
                              save(m);   //调用保存函数   
                            //Print();//调用浏览函数
                              break;
                case 1: printf("\n\t\t\t没有该员工!\n");   
                            //Print();//调用浏览函数
                              break;
                case 2: printf("\n\t\t\t\t取消删除!\n");
                              break;
      }   
      //Print();/*调用浏览函数*/
   printf("\n继续删除请按1,返回主菜单请按0: ");
   scanf("%d",&t);    //输入t调用switch中的函数
   system("cls");
   switch(t)
   {    case 1:Delete();
                           break;   
                case 0:system("cls");
                                 main();
                                 break;
                default: break;
   }
    system("cls");
}

void add(){   //添加职工信息
    int n=read();   //读取文件
      int i,m,num=0;
    printf("(目前职工人数%d人)\n\n",n);
      printf("请您输入需要添加信息的职工人数: ");   
      scanf("%d",&m);   
      if(m+n>1000){
                system("cls");
                printf("\n职工人数超出范围,请重新输入(0至%d之间):\n\n",1000-n);
                add();       //重新调用add()函数
      }
      else{
                for (i=n;i<m+n;i++)   
                {      printf("第%d个员工信息输入(按Enter确认输入): \n", i+1);
                        printf("请输入职工号:");
                        scanf("%d",&num);
                        for(int j=0;j<i;j++)
                              while(emp.Number==num)    //判断输入职工号是否与原职工号重复
                              {      printf("职工号为 %d 的员工已存在,请重新输入\n",num);
                                        scanf("%d",&num);    //重新输入职工号
                                       
                              }
                        emp.Number=num;
                        printf("请输入姓名:");
                        scanf("%s",emp.name);
                        
                              do
                        {
                            printf("请输入工资:");
                              scanf("%f",&emp.money);
                        if(emp.money>0)
                        {
                              break;
                        }
                        else
                        {
                        
                              printf("对不起,您输入格式错误,请重新输入!\n");
                        
                        }
                        }while(1);   
                        printf("请输入电话:");   
                        scanf("%lld",&emp.Tel);
                        system("cls");
                        printf("\n一个职工的信息档案创建完毕!请输入下一个职工的信息\n");
                        printf("\n");      
                }      
                save(m+n);    //调用save并保存文件
                system("cls");
                printf("\n添加职工信息完成!\n");
                Print();    //调用Print函数 浏览全部信息
                printf("\n按Enter键继续\n");
                getchar();//吸收回车
                getchar();//吸收回车
                system("cls");
      }
}

void find(){ //查询职工信息
    int t;
      do {      
                printf("\n 姓名查询请按 1;   职工号查询请按 2;进入主菜单请按 0 : ");
                scanf("%d",&t);   //输入数字对应操作选项
                if(t>=0&&t<=3)      
                {         break;   }
                else {      printf("您输入有误,请重新选择!");   }
      }while(0);
      system("cls");
      while(1)
      {      
                switch(t)   
                {   case 0: main();
                                    break;
                        case 1: printf("\n按姓名查询\n");
                                        findname();
                                        break;      
                        case 2: printf("\n按职工号查询\n");
                                    findnum();
                                        break;
                        default:break;
                }      
                system("cls");   
      }
}

void findname(){ //按姓名查找职工信息
    char name1;   //定义一个数组指向字符串
      int i,t,n=0;   
      int m=read();   
      printf("\n请输入要查找的姓名:");
      scanf("%s",name1);   
      for(i=0;i<m;i++)    //遍历
                if(strcmp(name1,emp.name)==0) //strcmp对两个字符串的大小进行比较
                {   
                        if(n==0)
                        {      printf("\n已找到以下信息:\n");
                              printf("************************************************************************\n");
                              printf("|\t\t\t\t\t\t\t\t       |\n");
                              printf("|职工号            |姓名         |电话                |工资      |\t\n");
                        }
                        n++;
printf(FORMART,txtA);                }   
      if(n==0)//没有一个符合条件
      {      printf("\n对不起,贵公司没有该员工!\n");
                getchar();
                getchar();
      }
      else
      {      printf("\n查询到有 %d 个员工符合要求。\n",n);
                printf("\n");   
                printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :");
                scanf("%d",&t);       //输入数字对应操作选项
                switch(t)
                {      case 0: system("cls");   
                                        main();
                                        break;
                        case 1: Delete();
                                        break;
                        case 2: change();
                                        break;
                        case 3: break;
                        case 4: system("cls");   
                                        find();
                                        break;
                        default:break;   
                }
      }
}

void findnum(){ //按职工号查找职工信息
    int num1;
      int i,t,n=0;
      int m=read();
      printf("\n请输入要查找的职工号:");
      scanf("%d",&num1);
      for(i=0;i<m;i++)    //遍历
                if(num1==emp.Number)
                {   
                        if(n==0)
                        {      printf("\n已找到以下信息:\n");
                              printf("************************************************************************\n");
                              printf("|\t\t\t\t\t\t\t\t       |\n");
                              printf("|职工号            |姓名         |电话                |工资      |\t\n");
                        }
                        n++;
printf(FORMART,txtA);                }   
                if(n==0)//没有一个符合条件
      {      printf("\n对不起,贵公司没有该员工!\n");
                getchar();
                getchar();
      }
      else
      {      printf("\n查询到有 %d 个员工符合要求。\n",n);
                printf("\n");   
                printf("删除员工请按 1,修改信息请按 2,继续查询请按 3,返回上一层请按 4,返回主菜单请按 0 :");
                scanf("%d",&t);       //输入数字对应操作选项
                switch(t)
                {      case 0: system("cls");   
                                        main();
                                        break;
                        case 1: Delete();
                                        break;
                        case 2: change();
                                        break;
                        case 3: break;
                        case 4: system("cls");   
                                        find();
                                        break;
                        default:break;   
                }
      }
}   
               
void change() {   //修改职工信息
    int Number;       //职工号
      char name;   //姓名
      float money;      //工资
      int Tel;      //电话
      int b=1,c,i,n,t,k=0,g;
      int m=read();               //导入文件内的信息
      printf("\n");      
      printf("请输入要修改的职工的职工号:");
      scanf("%d",&Number);
      system("cls");
      for(i=0;i<m;i++)
      {   if(emp.Number==Number)    //判断输入的职工号是否与原职工号相同
                {          k=1;
                        printf("\n已找到该职工号员工,其记录为:\n");
                        printf("************************************************************************\n");
                        printf("|\t\t\t\t\t\t\t\t       |\n");
                        printf("|职工号            |姓名         |电话                |工资      |\t\n");
            printf(FORMART,txtA);
                        printf("\n确认修改请按1,取消修改请按0:");
                        scanf("%d",&n);            
                        if(n==1)      
                        {   printf("\n需要进行修改的选项\n 1.职工号2.姓名3.电话4.工资\n");
                              printf("请输入你想修改的那一项序号:");
                scanf("%d",&c);               //输入数字对应操作选项   
                              do{      
                                        switch(c)   
                                        {   case 1: printf("职工号改为: ");
                                                                scanf("%d",&g);
                                                for(int i=0;i<m;i++)
                                                while(emp.Number==g)    //判断输入的职工号是否与原来的重复
                                                {      printf("职工号为 %d 的员工已存在,请重新输入:\n",g);
                                                scanf("%d",&g);
                                                }
                                    emp.Number=g;         //将重新输入的职工号录入程序中
                                                                break;                  
                                                case 2: printf("姓名改为: ");
                                                                scanf("%s",name);         
                                                                strcpy(emp.name,name);
                                                                break;   
                                                
                                                case 4: printf("基本工资改为: ");
                                                                scanf("%f",&money);
                                                                emp.money=money;
                                                                break;      
                                                
                                                case 3: printf("电话改为: ");
                                                                scanf("%lld",Tel);
                                                                emp.Tel=Tel;
                                                                break;               
                                        }            
                                        printf("\n确认修改 请按1,重新输入 请按2:   ");
                                        scanf("%d",&b);
                                        if(b==1)
                                        {
                                                system("cls");
                                                save(m);//储存修改后的数据
                                                printf("\n");   
                                                
                                        }
                              } while(b==2);
                        }               
                }

                else if(i==(m-1)) i++;      
      }   
      if(k==0) {
                printf("\n对不起,您输入有误!\n");
            getchar();
                getchar();
      }
      else{
                printf("\n继续修改请按 1,退出修改请按 0:");
            scanf("%d",&t);
      }
      system("cls");
      switch(t)
      {   case 1:
                              change();//返回修改函数
                              break;
                case 0: break;   
                default:break;
      }
      system("cls");
}

chishingchan 发表于 2022-8-29 20:54

源码发附件就好。贴个图比贴源码更好理解!

xin112532604 发表于 2022-9-2 19:15

Mokte 发表于 2022-9-2 15:44
为什么不能发个成品图出来呢?

这个是在cmd窗口编译运行的程序,还没在运用在软件中呢:lol

erui 发表于 2022-8-29 21:59

谢谢楼主分享,编程是个技术活,要有创作意图,还要能用编程语言写出代码。

zhaoqingdz 发表于 2022-8-31 13:06

感谢楼主的分享!学习了

Mokte 发表于 2022-9-2 15:44

为什么不能发个成品图出来呢?

cfengah 发表于 2022-9-9 19:57

        楼主很棒,一起加油哦{:1_893:}

lzg6664 发表于 2022-12-2 13:23

可以可以

mrtwzchi 发表于 2022-12-5 08:30

学习学习

hebkljk 发表于 2022-12-7 06:22

感谢楼主的分享!学习了
页: [1] 2 3 4
查看完整版本: [C语言]职工信息管理系统