深圳幻海软件技术有限公司 欢迎您!

程序设计职工管理系统

2023-07-12

需求分析1.1 设计系统的目的分析本系统要求用C语言建立一个职工信息管理系统,本职工信息管理系统可以实现对众多员工信息的管理。包含对职工信息进行添加、查询、删除、修改。1.2系统的界面要求 按任意键便可以进入主菜单,在主菜单上显示出该系统的功能,通过输入数字0到6 来进

需求分析

1.1 设计系统的目的分析

本系统要求用 C 语言建立一个职工信息管理系统,本职工信息管理系统可以实现对众多员工信息的管理包含职工信息进行添加查询删除、修改

1.2系统的界面要求 

按任意键便可以进入主菜单,在主菜单上显示出该系统的功能,通过输入数字 0 到 6 来进行选择便可以实现用户所需要的功能,每个模块进入模块内部实现系统的具体功能,实现用户所需要的功能

1.3主体功能分析 

该系统用下面六个功能模块编写,每个模块执行不同的功能,体现了模块化

设计的思想。下面六个模块都是利用 C 语言文件文件操作,向文件中添加数据、修改数据查询数据、删除数据和保存数据。

1.3.1创建、读取和写入文件 

   判断是否有存储信息用的文本文件,若无则提示需建立一个文件

fopen()建立一个文本文件,然后向其中写入数据(例如,向文件中输

“职工号”,“姓名”,“性别”“年龄”“学历”,“工资”址”,“电话”),并对文件进行命名为a.txt

1.3.2 添加职工信息 

通过键盘输入职工人员的职工号、姓名、性别、年龄、职务电话号码、地址信息便可添加到通讯录文件内,添加完毕后,系统会自动询问你是否继续添加,如你想继续添加,再通过键盘输入通讯录人员的姓名、电话号码、地址信息即可实现继续添加。

通过调用add()函数来添加职工信息,可以连续添加多个职工信息。

1.3.3 显示职工信息 

通过前面第一个模块添加职工信息后,之后便可以执行第二个模块,通过第二个模块可以对已有的职工信息进行显示。

通过调用 browser()函数来进行显示所有的职工信息browser()函数可以实现显示全部职工信息

1.3.4 查询职工信息 

调用search()函数来实现查询功能。查询可由四个方式进行:一是根据职工号进行查询,二是根据姓名进行查询。

1.3.5 删除职工信息

调用_delete()函数实现删除功能,删除可由两个方式进行:一是根据职工号进行删除,二是根据姓名进行删除。

1.3.6修改职工信息 

调用 modify()函数来实现修改功能,提供了修改方法为根据职工号进行修改。

1.4 设计要求分析 

①根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,

撰写课程设计报告。

②进一步理解和运用结构化程序设计的思想和方法;

③掌握开发一个小型实用系统的基本方法;  

④学会利用流程图表示算法。

⑤学会调试一个较长程序的基本方法进一步掌握利用 C 语言进行程序设计的能力;

1.5软件的数据结构分析 

1.5.1 软件的函数 

本软件采用了不同的函数来进行定义不同模块的功能,通过调用不同的函数,可以实现不同的功能。软件中采用了五个主体函数来实现添加职工,修改职工,查找职工,显示职工,删除职工的功能。

1.5.2 文件的调用和保存 

系统通过文本方式对用户所添加的信息进行保存。通过保存下来的文本文件用户可以在电脑磁盘中找到用户存入文件,进而可以找到用户所录入的职工信息。


 概要设计

2.1 系统界面设计

做到整洁清楚,能够层层选择进行具体的操作,对用户的请求能够进行合适的反馈。既有输入界面,又有输出界面,每个界面都有详细的指引。

2.2 系统的数据(结构)设计 

系统通过调用不同的函数来实现不同的功能,通过循环调用函数来实现反复输入,实现用户不同的需求。

用户通过代码中的scanf()函数从键盘上输入不同的数字选项,然后通过 swtich case()分支条件语句来实现对不同函数的调用,满足各种需求。

2.2.1 系统的文件功能

系统采用了文本文档进行存取,在 C 盘建立了一个a.txt 文本文档用于存放用户输入的职工信息,打开 C 盘后就能直接看到用户录入的信息,做到简洁和方便。

2.3 系统的模块图 

系统的模块图很直观的反映出软件能够实现的功能,由下面的模块图可以很

直观的看出该职工信息管理系统的添加职工信息、显示职工信息、删除职工信息、修改职工信息功能。

  1. 增加职工信息部分,有九个模块,一步步完善职工信息。
  2. 在显示联系人部分,直接显示所有职工信息。
  3. 查询职工信息部分,有四个模块,可通过按工号查询,按姓名查询,按学历查询,按职务查询,然后显示职工信息。
  4. 在修改职工信息部分,输入要修改的职工的工号,然后根据需要,修改职工的姓名,学历,职务,工资,住址,电话。
  5. 在删除职工信息模块,输入要删除的职工的工号,即可完成删除。
  6. 最后是退出模块,需要保存信息后退出。异常退出可能会导致数据丢失

 

图1系统模块图

2.4 系统的流程图 

由于系统流程图较为复杂,采用了分块画出程序流程图。

2.4.1 添加职工信息程序流程图

由添加职工的程序流程图可以看出,在添加职工板块上,有三种信息:

输入工号,姓名,性别,年龄,学历,职务,工资,住址,电话;输入完成后会提示是否继续输入,如果输入Y则继续输入,输入N后返回主菜单。

 

图2添加职工信息流程图

2.4.2 显示职工信息程序流程图

在主菜单上输入 2 后便可以显示职工信息。

 

图3显示职工信息流程图

2.4.3 查询职工流程图

在删除联系人流程图上,分为全部删除和单个删除功能,单个删除设计了按

照姓名删除和按电话号码删除两种选择,在删除时,系统都会询问您是否删除,

以免误删。

 

图4查询职工流程图

2.4.3 修改职工信息流程图

修改联系人界面,输入输入需修改的职工的工号即可。

修改项目:修改姓名,修改学历,修改职务,修改工资,修改地址,修改完毕后系统会提示您是否继续 ,输入Y修改,如不修改,则输入N又返回主界面等待输入。

 

图5修改职工信息流程图

 

 


详细设计

3.1 函数声明 

  1. void read();//读取信息函数
  2. void write();//写入信息函数
  3. void menu();//菜单函数
  4. void add();//添加职工信息函数
  5. void show(int id);//显示职工信息函数
  6. void browser();//显示所有职工信息函数
  7. void search();//查询职工信息函数
  8. void modify();//修改职工信息函数
  9. void _delete();//删除职工信息函数

3.2 读取信息函数

  1. void read()//读入数据
  2. {
  3. FILE *fp;
  4. int i = 0;
  5. if( (fp = fopen("c:\\a.txt","r")) == NULL )
  6. {
  7. printf("请新建一个文本文件,文件名为a\n\n\n");
  8. system("pause");
  9. system("cls");
  10. return ;
  11. }
  12. fscanf(fp,"%d\n",&n);
  13. while(i < n)
  14. {
  15. fscanf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].age,work[i].edu,work[i].position,work[i].wage,work[i].address,work[i].tel);
  16. i ++;
  17. }
  18. fclose(fp);
  19. }

3.3写入信息函数

  1. void write()//写入数据
  2. {
  3. FILE *fp;
  4. int i = 0;
  5. if( (fp = fopen("c:\\a.txt","w")) == NULL )
  6. {
  7. printf("无法打开文件!\n");
  8. return ;
  9. }
  10. fprintf(fp,"%d\n",n);
  11. while(i < n)
  12. {
  13. fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",work[i].ID,work[i].name,work[i].sex,work[i].age,work[i].edu,work[i].position,work[i].wage,work[i].address,work[i].tel);
  14. i ++;
  15. }
  16. fclose(fp);
  17. }

3.4菜单函数

  1. void menu()//菜单
  2. {
  3. printf("* * 职工信息管理系统菜单 * *\n");
  4. printf("* *\n");
  5. printf("* 1.添加职工信息 *\n");
  6. printf("* *\n");
  7. printf("* 2.显示职工信息 *\n");
  8. printf("* *\n");
  9. printf("* 3.查询职工信息 *\n");
  10. printf("* *\n");
  11. printf("* 4.修改职工信息 *\n");
  12. printf("* *\n");
  13. printf("* 5.删除职工信息 *\n");
  14. printf("* *\n");
  15. printf("* 0.退出 *\n");
  16. printf("* *\n");
  17. printf("* * * * * * * * * * * * * **\n");
  18. printf("请输入选项(0-5): ");
  19. }

3.5添加职工信息函数

  1. void add()// 从键盘输入
  2. {
  3. int i;
  4. int flag;//标记工号是否已存在
  5. char c;
  6. read();//输入数据前先将文件中原有的数据读入
  7. do
  8. {
  9. flag = 0;
  10. printf("请输入职工的工号: \n\t\t");
  11. scanf("%s",work[n].ID);
  12. for(i = 0 ; i < n ; i ++)
  13. {
  14. if(strcmp(work[i].ID,work[n].ID) == 0)
  15. {
  16. flag = 1;
  17. break;
  18. }
  19. }
  20. if(flag)
  21. {
  22. printf("该工号已存在!\n\n");
  23. printf("是否继续输入?(Y/N): ");
  24. scanf("%*c%c",&c);
  25. if(c == 'N' || c == 'n') break;
  26. continue;
  27. }
  28. printf("请输入职工的姓名: \n");
  29. scanf("%s",work[n].name);
  30. printf("请输入职工的性别: \n");
  31. scanf("%s",work[n].sex);
  32. printf("请输入职工的年龄: \n");
  33. scanf("%s",work[n].age);
  34. printf("请输入职工的学历: \n");
  35. scanf("%s",work[n].edu);
  36. printf("请输入职工的职务: \n");
  37. scanf("%s",work[n].position);
  38. printf("请输入职工的工资: \n");
  39. scanf("%s",work[n].wage);
  40. printf("请输入职工的住址: \n");
  41. scanf("%s",work[n].address);
  42. printf("请输入职工的电话: \n");
  43. scanf("%s",work[n].tel);
  44. printf("是否继续输入?(Y/N): ");
  45. scanf("%*c%c",&c);
  46. n ++;
  47. }while( c != 'N' && c != 'n');
  48. write();
  49. printf("\n\n数据已保存!\n\n");
  50. }

3.6显示职工信息函数

  1. void show(int id)
  2. {
  3. printf("职工号: %s\n",work[id].ID);
  4. printf("姓名: %s\n",work[id].name);
  5. printf("性别: %s\n",work[id].sex);
  6. printf("年龄: %s\n",work[id].age);
  7. printf("学历: %s\n",work[id].edu);
  8. printf("职务: %s\n",work[id].position);
  9. printf("工资: %s\n",work[id].wage);
  10. printf("住址: %s\n",work[id].address);
  11. printf("电话: %s\n",work[id].tel);
  12. printf("\n\n\n");
  13. }

3.7显示所有职工信息函数

  1. void browser()//显示所有职工信息
  2. {
  3. int i;
  4. read();
  5. if(n == 0) printf("无记录!\n\n");
  6. else
  7. for(i = 0 ; i < n ; i ++)
  8. {
  9. show(i);
  10. }
  11. }

3.8查询职工信息函数

  1. void search()//查询信息
  2. {
  3. char num;
  4. int flag,i;
  5. char s_id[20] ;//查询工号
  6. char s_name[20] ;//查询姓名
  7. char s_edu[20] ; //查询学历
  8. char s_position[20] ;//查询职位
  9. char c;//指令Y?N
  10. read();//打开程序后,要查询以前的数据,要先读入
  11. while(1)
  12. {
  13. system("cls");
  14. printf("* * * * * * * 查询* * * * * * *\n");
  15. printf("* *\n");
  16. printf("* 1.按工号查询 *\n");
  17. printf("* *\n");
  18. printf("* 2.按姓名查询 *\n");
  19. printf("* *\n");
  20. printf("* 3.按学历查询 *\n");
  21. printf("* *\n");
  22. printf("* 4.按职务查询 *\n");
  23. printf("* *\n");
  24. printf("* 输入其他任意键退出本模块 *\n");
  25. printf("* * * * * * * * * * * * * * * *\n");
  26. printf("请输入指令(1-4):");
  27. scanf("%*c%c",&num);
  28. if(num < '1' || num > '4')
  29. {
  30. printf("错误指令!\n\n");
  31. system("pause");
  32. continue;
  33. }
  34. system("cls");
  35. flag = 0;//用来标记职工信息是否存在
  36. if(num == '1')//按工号查询
  37. {
  38. printf("请输入您要查询职工的工号:");
  39. scanf("%s",s_id);
  40. for(i = 0 ; i < n ;i ++)
  41. {
  42. if( strcmp(work[i].ID,s_id) == 0)
  43. {
  44. show(i);
  45. flag = 1;//标记
  46. break;
  47. }
  48. }
  49. }
  50. else if(num == '2')//按姓名查询
  51. {
  52. printf("请输入您要查询职工的姓名:");
  53. scanf("%s",s_name);
  54. for(i = 0 ; i < n ;i ++)
  55. {
  56. if( strcmp(work[i].name,s_name) == 0)
  57. {
  58. show(i);
  59. flag = 1;//标记
  60. }
  61. }
  62. }
  63. else if(num == '3')//按学历查询
  64. {
  65. printf("请输入您要查询职工的学历:");
  66. scanf("%s",s_edu);
  67. for(i = 0 ; i < n ;i ++)
  68. {
  69. if( strcmp(work[i].edu,s_edu) == 0)
  70. {
  71. show(i);
  72. flag = 1;//标记
  73. }
  74. }
  75. }
  76. else if(num == '4')//按职务查询
  77. {
  78. printf("请输入您要查询职工的职务:");
  79. scanf("%s",s_position);
  80. for(i = 0 ; i < n ;i ++)
  81. {
  82. if( strcmp(work[i].position,s_position) == 0)
  83. {
  84. show(i);
  85. flag = 1;//标记
  86. }
  87. }
  88. }
  89. if(!flag)//判断是否有该职工信息
  90. {
  91. printf("\n\n无该职工信息!\n\n");
  92. }
  93. printf("\n\n是否继续查询(Y/N):");
  94. scanf("%*c%c",&c);
  95. if(c == 'N' || c == 'n') break;
  96. }
  97. }

3.9修改职工信息函数

  1. void modify()//修改职工信息
  2. {
  3. char change_ID[20];//需修改的职工的工号
  4. int number;//职工信息在数据中的位置
  5. char num;//指令
  6. char message[100];//修改的信息
  7. char c;//指令Y?N
  8. int flag;
  9. int i;
  10. read();
  11. while(1)
  12. {
  13. flag = 0;
  14. system("cls");
  15. printf("请输入需修改的职工的工号:");
  16. scanf("%s",change_ID);
  17. for(i = 0 ; i < n ; i ++)
  18. {
  19. if( strcmp(work[i].ID,change_ID) == 0 )
  20. {
  21. number = i;
  22. flag = 1;
  23. break;
  24. }
  25. }
  26. if(!flag)
  27. {
  28. printf("\n\n无此员工信息!!\n\n");
  29. printf("\n\n是否继续修改(Y/N):");
  30. scanf("%*c%c",&c);
  31. if(c == 'N' || c == 'n') break;
  32. continue;
  33. }
  34. printf("\n\n* * * * * * * * 修改* * * * * * *\n");
  35. printf("* *\n");
  36. printf("* 1.修改姓名 *\n");
  37. printf("* *\n");
  38. printf("* 2.修改学历 *\n");
  39. printf("* *\n");
  40. printf("* 3.修改职务 *\n");
  41. printf("* *\n");
  42. printf("* 4.修改工资 *\n");
  43. printf("* *\n");
  44. printf("* 5.修改住址 *\n");
  45. printf("* *\n");
  46. printf("* 6.修改电话 *\n");
  47. printf("* *\n");
  48. printf("* 输入其他任意键退出本模块 *\n");
  49. printf("* * * * * * * * * * * * * * * * *\n");
  50. printf("请输入指令(1-6):");
  51. scanf("%*c%c",&num);
  52. if(num < '1' || num > '6')
  53. {
  54. printf("错误指令!\n\n");
  55. system("pause");
  56. continue;
  57. }
  58. system("cls");
  59. printf("请输入修改后的信息:");
  60. scanf("%s",message);
  61. switch(num)
  62. {
  63. case '1' : strcpy(work[number].name,message); break;
  64. case '2' : strcpy(work[number].edu,message); break;
  65. case '3' : strcpy(work[number].position,message); break;
  66. case '4' : strcpy(work[number].wage,message); break;
  67. case '5' : strcpy(work[number].address,message); break;
  68. case '6' : strcpy(work[number].tel,message); break;
  69. }
  70. system("cls");
  71. printf("\n\n是否继续修改(Y/N):");
  72. scanf("%*c%c",&c);
  73. if(c == 'N' || c == 'n') break;
  74. }
  75. write();
  76. }

3.10删除职工信息函数

  1. void modify()//修改职工信息
  2. {
  3. char change_ID[20];//需修改的职工的工号
  4. int number;//职工信息在数据中的位置
  5. char num;//指令
  6. char message[100];//修改的信息
  7. char c;//指令Y?N
  8. int flag;
  9. int i;
  10. read();
  11. while(1)
  12. {
  13. flag = 0;
  14. system("cls");
  15. printf("请输入需修改的职工的工号:");
  16. scanf("%s",change_ID);
  17. for(i = 0 ; i < n ; i ++)
  18. {
  19. if( strcmp(work[i].ID,change_ID) == 0 )
  20. {
  21. number = i;
  22. flag = 1;
  23. break;
  24. }
  25. }
  26. if(!flag)
  27. {
  28. printf("\n\n无此员工信息!!\n\n");
  29. printf("\n\n是否继续修改(Y/N):");
  30. scanf("%*c%c",&c);
  31. if(c == 'N' || c == 'n') break;
  32. continue;
  33. }
  34. printf("\n\n* * * * * * * * 修改* * * * * * *\n");
  35. printf("* *\n");
  36. printf("* 1.修改姓名 *\n");
  37. printf("* *\n");
  38. printf("* 2.修改学历 *\n");
  39. printf("* *\n");
  40. printf("* 3.修改职务 *\n");
  41. printf("* *\n");
  42. printf("* 4.修改工资 *\n");
  43. printf("* *\n");
  44. printf("* 5.修改住址 *\n");
  45. printf("* *\n");
  46. printf("* 6.修改电话 *\n");
  47. printf("* *\n");
  48. printf("* 输入其他任意键退出本模块 *\n");
  49. printf("* * * * * * * * * * * * * * * * *\n");
  50. printf("请输入指令(1-6):");
  51. scanf("%*c%c",&num);
  52. if(num < '1' || num > '6')
  53. {
  54. printf("错误指令!\n\n");
  55. system("pause");
  56. continue;
  57. }
  58. system("cls");
  59. printf("请输入修改后的信息:");
  60. scanf("%s",message);
  61. switch(num)
  62. {
  63. case '1' : strcpy(work[number].name,message); break;
  64. case '2' : strcpy(work[number].edu,message); break;
  65. case '3' : strcpy(work[number].position,message); break;
  66. case '4' : strcpy(work[number].wage,message); break;
  67. case '5' : strcpy(work[number].address,message); break;
  68. case '6' : strcpy(work[number].tel,message); break;
  69. }
  70. system("cls");
  71. printf("\n\n是否继续修改(Y/N):");
  72. scanf("%*c%c",&c);
  73. if(c == 'N' || c == 'n') break;
  74. }
  75. write();
  76. }

3.11主函数

  1. int main()
  2. {
  3. int num;
  4. n = 0;
  5. while(1)
  6. {
  7. menu();
  8. scanf("%d",&num);
  9. system("cls");
  10. switch(num)
  11. {
  12. case 1: add(); break;
  13. case 2: browser(); break;
  14. case 3: search(); break;
  15. case 4: modify(); break;
  16. case 5: _delete(); break;
  17. case 0: printf("谢谢使用!\n\n"); return 0;
  18. default :printf("\n--->无效的指令!\n\n\n");
  19. }
  20. system("pause");
  21. system("cls");
  22. }
  23. }

以上代码为完整代码,代码测试就自己试试吧。

如果对你有帮助请支持一下哦。

文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览49086 人正在系统学习中