当前位置:   article > 正文

数据结构C/C++ 职工信息管理系统_数据结构公司雇员管理系统

数据结构公司雇员管理系统

数据结构C/C++ 职工信息管理系统​​​​​​​

一、前言

二、系统结构设计

三、模块功能代码

3.1 菜单函数

3.2 初始化单链表

3.3 添加信息

3.4 信息输出

3.5 信息排序

3.6 信息删除

3.7 信息存储

3.8 按照员工姓名查询

3.9 按照职工编号查询

四、系统完整代码

五、运行结果(部分展示)

六、实验总结

七、参考网址


一、前言

本文还是使用较老的 VC++6.0

这里推荐可以使用小熊猫C++ 用的还是比较舒服方便的,下头完整代码里会有区别介绍。

系统还是较为简陋,会有一些bug,欢迎各位大佬进行改进。

系统任务描述如下:

设有一组职工数据,每个职工记录包含职工编号(no)、姓名(name)、部门号(depno)和工资数(salary)。设计一个程序完成以下功能:

(1)建表。从键盘输入职工记录,并建立一个带头结点的单链表L。

(2)输入。添加一个职工信息。

(3)输出。输出全部职工信息。

(4)排序。按职工编号no所有职工记录进行递增排序,并输出所有职工记录。

(5)排序。按部门号no所有职工记录进行递增排序,并输出所有职工记录。

(6)排序。按工资数salary所有职工记录进行递增排序,并输出所有职工记录。

(7)删除。删除指定职工编号的职工记录。

(8)删除。删除职工链表L中的全部记录。

(9)存储后退出。将单链表中的全部结点数据存储到职工文件中,然后退出程序运行过程。

二、系统结构设计

1. 职工信息管理系统功能模块结构图和职工信息结构图:

2. 菜单功能

三、模块功能代码

3.1 菜单函数

  1. void menu()
  2. {
  3. system("cls");//清屏
  4. system("color 00b");//设置为蓝色
  5. printf(" **********欢迎使用职工管理系统**************\n");
  6. printf(" 请输入如下命令执行相应功能\n");
  7. printf(" 【1】 添加一个职工信息\n");
  8. printf(" 【2】 输出全部职工信息\n");
  9. printf(" 【3】 按职工号排序\n");
  10. printf(" 【4】 按部门号排序\n");
  11. printf(" 【5】 按工资数排序\n");
  12. printf(" 【6】 删除指定职工编号记录\n");
  13. printf(" 【7】 删除全部职工记录 \n");
  14. printf(" 【8】 清屏\n");
  15. printf(" 【9】 储存信息并退出\n");
  16. printf(" 【-1】 退出程序\n");
  17. printf(" ********************************************\n");
  18. }

3.2 初始化单链表

使用malloc函数为头节点分配内存,并强制转化为结点指针类型,并赋值给头指针。接下来看内存分配是否成功。如果头指针不为空,则令头结点next域指向空。否则,它会打印错误消息 "内存不足!" 并返回-1表示初始化失败。

  1. int Initlist(LinkNode *&L)
  2. {
  3. L=(LinkNode *)malloc(sizeof(LinkNode));
  4. if(L!=NULL)
  5. {
  6. L->next=NULL;
  7. return 1;
  8. }
  9. else
  10. {
  11. printf("内存不足!\n");
  12. return 0;
  13. }
  14. }

3.3 添加信息

利用头插法建表,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直至读入结束标志为止。

若链表中存在与新结点中相同的职工号,打印“录入失败提示:此职工号已经存在!”的提示信息,表示插入失败,并释放新结点。反之,打印“录入成功!”的提示信息,表示插入成功。

  1. int CreateListF(LinkNode *&L)
  2. {
  3. LinkNode *q=(LinkNode *)malloc(sizeof(LinkNode));
  4. printf("请输入职工号(数字):");
  5. scanf("%d",&q->w.no);
  6. LinkNode *s=L->next;
  7. while(s)
  8. {
  9. if(s->w.no==q->w.no)
  10. {
  11. free(q);
  12. printf("录入失败提示:此职工号已经存在!\n");
  13. return -1;
  14. }
  15. s=s->next;
  16. }
  17. printf("请输入职工姓名(文字):");
  18. scanf("%s",&q->w.name);
  19. printf("请输入职工部门号(数字):");
  20. scanf("%d",&q->w.departno);
  21. printf("请输入职工工资数(数字):");
  22. scanf("%d",&q->w.salary);
  23. q->next=L->next;
  24. L->next=q;
  25. printf("录入成功!\n");
  26. return 1;
  27. }

3.4 信息输出

使用while循环遍历链表,如果链表非空,则执行以下步骤。输出当前节点的职工信息,包括职工号、姓名、部门号、工资等。将节点的指针移动到链表的下一个节点。循环执行步骤2~3,直到链表为空为止。输出显示完毕的信息。

  1. void show(LinkNode *L)
  2. {
  3. menu();
  4. printf("浏览职工信息\n");
  5. printf("职工号\t姓名\t部门号\t工资\t\n");
  6. while(L->next!=NULL)
  7. {
  8. printf("%d\t%s\t%d\t%d\t\n",L->next->w.no,L->next->w.name,L->next->w.departno,L->next->w.salary);
  9. L=L->next;
  10. }
  11. printf("显示完毕!\n");
  12. }

3.5 信息排序

构建一个有序的结点序列,其相关数据域按递增排序,从头节点遍历有序序列,与无序序列头节点数据域一一比较,取出结点并将其放在有序序列中合适的位置上,直到无序序列中没有元素。

若要以部门号或薪资号进行递增排序,只需更改结点中结构体的成员即可。

职工号递增:

  1. LinkNode nolist(LinkNode *&L)
  2. {
  3. LinkNode *p=L->next;
  4. LinkNode *r=p->next;
  5. LinkNode *q;
  6. LinkNode *pre;
  7. p->next=NULL;
  8. p=r;
  9. while(p!=NULL)
  10. {
  11. r=p->next;
  12. q=L;
  13. while(q->next!=NULL&&q->next->w.no<p->w.no)
  14. {
  15. q=q->next;
  16. }
  17. pre=q;
  18. p->next=pre->next;
  19. pre->next=p;
  20. p=r;
  21. }
  22. return *L;
  23. }

部门号递增:

  1. LinkNode depnolist(LinkNode *&L)
  2. {
  3. LinkNode *p=L->next;
  4. LinkNode *r=p->next;
  5. LinkNode *q;
  6. LinkNode *pre;
  7. p->next=NULL;
  8. p=r;
  9. while(p!=NULL)
  10. {
  11. r=p->next;
  12. q=L;
  13. while(q->next!=NULL&&q->next->w.departno<p->w.departno)
  14. {
  15. q=q->next;
  16. }
  17. pre=q;
  18. p->next=pre->next;
  19. pre->next=p;
  20. p=r;
  21. }
  22. return *L;
  23. }

工资递增:

  1. LinkNode salarylist(LinkNode *&L)
  2. {
  3. LinkNode *p=L->next;
  4. LinkNode *r=p->next;
  5. LinkNode *q;
  6. LinkNode *pre;
  7. p->next=NULL;
  8. p=r;
  9. while(p!=NULL)
  10. {
  11. r=p->next;
  12. q=L;
  13. while(q->next!=NULL&&q->next->w.salary<p->w.salary)
  14. {
  15. q=q->next;
  16. }
  17. pre=q;
  18. p->next=pre->next;
  19. pre->next=p;
  20. p=r;
  21. }
  22. return *L;
  23. }

3.6 信息删除

删除指定的员工

遍历链表,查找待删除职工号所在的节点。若找到,则保存该节点的指针q,并让节点k指向q的下一个节点。使用free函数释放q指向的节点空间,并输出删除成功的信息。若遍历完整个链表仍未找到待删除的职工号,则输出删除失败的信息。

  1. int deleteone(LinkNode *&L,int no)
  2. {
  3. menu();
  4. printf("正在按职工号删除职工信息\n");
  5. LinkNode *k=L;
  6. while(k->next!=NULL)
  7. {
  8. if(k->next->w.no==no)
  9. {
  10. LinkNode *q=k->next;
  11. k->next=q->next;
  12. free(q);
  13. printf("删除职工号%d成功!\n",no);
  14. return 1;
  15. }
  16. k=k->next;
  17. }
  18. printf("没有你输入的职工号!\n");
  19. return -1;
  20. }

删除全部员工

使用while循环遍历链表,如果链表非空,则执行以下步骤。保存链表头结点指向的节点q的指针,并让头结点指向q的下一个节点。释放q指向的节点空间。循环执行步骤2~3,直到链表为空为止。

  1. void deleteall(LinkNode *&L)
  2. {
  3. while(L->next!=NULL)
  4. {
  5. LinkNode *q=L->next;
  6. L->next=L->next->next;
  7. free(q);
  8. }
  9. }

3.7 信息存储

定义文件指针fp,并使用fopen函数打开文件work.txt,如果打开失败,则输出提示信息,函数结束。使用while循环遍历链表,如果链表非空,则执行以下步骤。

将当前节点存储的职工信息写入文件,使用fwrite函数,并向其传递3个参数:待写入的数据地址、每个数据单元的字节数、待写入的数据单元数量,函数的返回值表示成功写入的数据单元数量。将节点的指针移动到链表的下一个节点,并统计写入的节点数量n。循环执行步骤3~4,直到链表为空为止。使用fclose函数关闭文件。

使用free函数释放链表头结点的内存空间。输出写入文件的职工信息数量,或者提示没有任何记录写入文件。

代码生成的work.txt文件与C++编译文件在相同路径

  1. void SaveFile(LinkNode *L) {
  2. LinkNode *q = L->next;
  3. int n = 0;
  4. FILE *fp;
  5. if ((fp = fopen("work.txt", "w")) == NULL) {
  6. printf("提示:不能创建文件\n");
  7. return;
  8. } else {
  9. printf("保存成功\n");
  10. }
  11. fprintf(fp, "职工号\t姓名\t部门号\t薪资\n");
  12. fprintf(fp, "----------------------------------------------------\n");
  13. while (q != NULL) {
  14. fprintf(fp, "%d\t%s\t%d\t%d\n", q->w.no, q->w.name, q->w.departno, q->w.salary);
  15. q = q->next;
  16. n++;
  17. }
  18. fclose(fp);
  19. if (n > 0)
  20. printf("%d个职工记录写入work.txt文件\n", n);
  21. else
  22. printf("没有任何职工记录写入work.txt文件\n");
  23. free(L);
  24. }

3.8 按照员工姓名查询

查询主要还是遍历链表

利用strcmp函数查看字符串是否匹配

3.9原理类似

  1. void searchname(LinkNode *L)
  2. {
  3. int flag = 0;
  4. LinkNode *p = L->next;
  5. char num[5];
  6. printf("请输入要查找的职工姓名: ");
  7. scanf("%s", num);
  8. while (p != NULL)
  9. {
  10. if (strcmp(p->w.name, num) == 0)
  11. {
  12. flag = 1;
  13. printf("职工信息为:\n");
  14. printf("%d\t%s\t%d\t%d\n", p->w.no, p->w.name, p->w.departno, p->w.salary);
  15. break;
  16. }
  17. p = p->next;
  18. }
  19. if (flag == 0)
  20. {
  21. printf("姓名为%s的职工不存在!\n", num);
  22. }
  23. }

3.9 按照职工编号查询

  1. void searchno(LinkNode *L)
  2. {
  3. int flag = 0;
  4. int no;
  5. LinkNode *p = L->next;
  6. char num[5];
  7. printf("请输入要查找的职工编号: ");
  8. scanf("%s", num);
  9. sscanf(num, "%d", &no);
  10. while (p != NULL)
  11. {
  12. if (p->w.no == no)
  13. {
  14. flag = 1;
  15. printf("职工信息为:\n");
  16. printf("职工号: %d\t姓名: %s\t部门号: %d\t薪资: %d\n",
  17. p->w.no, p->w.name, p->w.departno, p->w.salary);
  18. break;
  19. }
  20. p = p->next;
  21. }
  22. if (flag == 0)
  23. {
  24. printf("编号为%s的职工不存在!\n", num);
  25. }
  26. }

四、系统完整代码

这里直接将代码放到vc++6.0的c++文件就行。

要是使用小熊猫C++的话注意

void main() 改成 int main()

scanf("%s",%q->w.name) 改成 scanf("%s",q->w.name); 

下头的文件保存就会保存到与建立的c++文件相同的路径。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <malloc.h>
  5. struct Worker {
  6. int no;
  7. char name[8];
  8. int departno; //部门
  9. int salary;
  10. };
  11. typedef struct LNode {
  12. Worker w;
  13. LNode *next;
  14. } LinkNode;
  15. void menu() {
  16. system("cls");//清屏
  17. printf(" **********欢迎使用职工管理系统**************\n");
  18. printf(" 请输入如下命令执行相应功能\n");
  19. printf(" 【1】 添加一个职工信息\n");
  20. printf(" 【2】 输出全部职工信息\n");
  21. printf(" 【3】 按职工号排序\n");
  22. printf(" 【4】 按部门号排序\n");
  23. printf(" 【5】 按工资数排序\n");
  24. printf(" 【6】 删除指定职工编号记录\n");
  25. printf(" 【7】 删除全部职工记录 \n");
  26. printf(" 【8】 清屏\n");
  27. printf(" 【9】 储存信息并退出\n");
  28. printf(" 【10】 按职工姓名查询\n");
  29. printf(" 【11】 按职工编号查询\n");
  30. printf(" 【-1】 退出程序\n");
  31. printf(" ********************************************\n");
  32. }
  33. int Initlist(LinkNode *&L)
  34. {
  35. L=(LinkNode *)malloc(sizeof(LinkNode));
  36. if(L!=NULL)
  37. {
  38. L->next=NULL;
  39. return 1;
  40. }
  41. else
  42. {
  43. printf("内存不足!\n");
  44. return 0;
  45. }
  46. }
  47. void SaveFile(LinkNode *L) {
  48. LinkNode *q = L->next; // 从第一个数据节点开始遍历
  49. int n = 0; // 记录写入的职工记录数量
  50. FILE *fp;
  51. if ((fp = fopen("work.txt", "w")) == NULL) {
  52. printf("提示:不能创建文件\n");
  53. return;
  54. } else {
  55. printf("保存成功\n");
  56. }
  57. fprintf(fp, "职工号\t姓名\t部门号\t薪资\n");
  58. fprintf(fp, "----------------------------------------------------\n");
  59. while (q != NULL) {
  60. // 将职工信息写入文件
  61. fprintf(fp, "%d\t%s\t%d\t%d\n", q->w.no, q->w.name, q->w.departno, q->w.salary);
  62. q = q->next; // 移动到下一个节点
  63. n++;
  64. }
  65. fclose(fp);
  66. if (n > 0)
  67. printf("%d个职工记录写入work.txt文件\n", n);
  68. else
  69. printf("没有任何职工记录写入work.txt文件\n");
  70. free(L);
  71. }
  72. /*录入职工信息*/ //采用头插法
  73. int CreateListF(LinkNode *&L)
  74. {
  75. LinkNode *q=(LinkNode *)malloc(sizeof(LinkNode));
  76. printf("请输入职工号(数字):");
  77. scanf("%d",&q->w.no);
  78. LinkNode *s=L->next;
  79. while(s)
  80. {
  81. if(s->w.no==q->w.no)
  82. {
  83. free(q);
  84. printf("录入失败提示:此职工号已经存在!\n");
  85. return -1;
  86. }
  87. s=s->next;
  88. }
  89. printf("请输入职工姓名(文字):");
  90. scanf("%s",q->w.name);
  91. printf("请输入职工部门号(数字):");
  92. scanf("%d",&q->w.departno);
  93. printf("请输入职工工资数(数字):");
  94. scanf("%d",&q->w.salary);
  95. q->next=L->next;
  96. L->next=q;
  97. printf("录入成功!\n");
  98. return 1;
  99. }
  100. //职工号排序
  101. LinkNode nolist(LinkNode *&L)
  102. {
  103. LinkNode *p=L->next;
  104. LinkNode *r=p->next;
  105. LinkNode *q;
  106. LinkNode *pre;
  107. p->next=NULL;
  108. p=r;
  109. while(p!=NULL)
  110. {
  111. r=p->next;
  112. q=L;
  113. while(q->next!=NULL&&q->next->w.no<p->w.no)
  114. {
  115. q=q->next;
  116. }
  117. pre=q;
  118. p->next=pre->next;
  119. pre->next=p;
  120. p=r;
  121. }
  122. return *L;
  123. }
  124. //部门号排序
  125. LinkNode depnolist(LinkNode *&L)
  126. {
  127. LinkNode *p=L->next;
  128. LinkNode *r=p->next;
  129. LinkNode *q;
  130. LinkNode *pre;
  131. p->next=NULL;
  132. p=r;
  133. while(p!=NULL)
  134. {
  135. r=p->next;
  136. q=L;
  137. while(q->next!=NULL&&q->next->w.departno<p->w.departno)
  138. {
  139. q=q->next;
  140. }
  141. pre=q;
  142. p->next=pre->next;
  143. pre->next=p;
  144. p=r;
  145. }
  146. return *L;
  147. }
  148. //工资排序
  149. LinkNode salarylist(LinkNode *&L)
  150. {
  151. LinkNode *p=L->next;
  152. LinkNode *r=p->next;
  153. LinkNode *q;
  154. LinkNode *pre;
  155. p->next=NULL;
  156. p=r;
  157. while(p!=NULL)
  158. {
  159. r=p->next;
  160. q=L;
  161. while(q->next!=NULL&&q->next->w.salary<p->w.salary)
  162. {
  163. q=q->next;
  164. }
  165. pre=q;
  166. p->next=pre->next;
  167. pre->next=p;
  168. p=r;
  169. }
  170. return *L;
  171. }
  172. //按职工号删除职工信息(已修改)
  173. int deleteone(LinkNode *&L,int no)
  174. {
  175. menu();
  176. printf("正在按职工号删除职工信息\n");
  177. LinkNode *k=L;
  178. while(k->next!=NULL)
  179. {
  180. if(k->next->w.no==no)
  181. {
  182. LinkNode *q=k->next;
  183. k->next=q->next;
  184. free(q);
  185. printf("删除职工号%d成功!\n",no);
  186. return 1;
  187. }
  188. k=k->next;
  189. }
  190. printf("没有你输入的职工号!\n");
  191. return -1;
  192. }
  193. //删除全部员工记录(修改已正常)
  194. void deleteall(LinkNode *&L)
  195. {
  196. while(L->next!=NULL)
  197. {
  198. LinkNode *q=L->next;
  199. L->next=L->next->next;
  200. free(q);
  201. }
  202. }
  203. //浏览职工信息
  204. void show(LinkNode *L)
  205. {
  206. menu();
  207. printf("浏览职工信息\n");
  208. printf("职工号\t姓名\t部门号\t工资\t\n");
  209. while(L->next!=NULL)
  210. {
  211. printf("%d\t%s\t%d\t%d\t\n",L->next->w.no,L->next->w.name,L->next->w.departno,L->next->w.salary);
  212. L=L->next;
  213. }
  214. printf("显示完毕!\n");
  215. }
  216. //查询
  217. void searchname(LinkNode *L) {
  218. int flag = 0;
  219. LinkNode *p = L->next;
  220. char num[5];
  221. printf("请输入要查找的职工姓名: ");
  222. scanf("%s", num);
  223. while (p != NULL)
  224. {
  225. if (strcmp(p->w.name, num) == 0)
  226. {
  227. flag = 1;
  228. printf("职工信息为:\n");
  229. printf("%d\t%s\t%d\t%d\n", p->w.no, p->w.name, p->w.departno, p->w.salary);
  230. break;
  231. }
  232. p = p->next;
  233. }
  234. if (flag == 0)
  235. {
  236. printf("姓名为%s的职工不存在!\n", num);
  237. }
  238. }
  239. void searchno(LinkNode *L)
  240. {
  241. int flag = 0;
  242. int no;
  243. LinkNode *p = L->next;
  244. char num[5];
  245. printf("请输入要查找的职工编号: ");
  246. scanf("%s", num);
  247. sscanf(num, "%d", &no);
  248. while (p != NULL)
  249. {
  250. if (p->w.no == no)
  251. {
  252. flag = 1;
  253. printf("职工信息为:\n");
  254. printf("职工号: %d\t姓名: %s\t部门号: %d\t薪资: %d\n",
  255. p->w.no, p->w.name, p->w.departno, p->w.salary);
  256. break;
  257. }
  258. p = p->next;
  259. }
  260. if (flag == 0)
  261. {
  262. printf("编号为%s的职工不存在!\n", num);
  263. }
  264. }
  265. int main() {
  266. int ord = 0;
  267. int no;
  268. LinkNode *L;
  269. if (!(Initlist(L)))
  270. exit(0);
  271. while (ord != -1) {
  272. switch (ord) {
  273. case 0:
  274. menu();
  275. break;
  276. case 1:
  277. CreateListF(L);
  278. break;
  279. case 2:
  280. show(L);
  281. break;
  282. case 3:
  283. nolist(L);
  284. show(L);
  285. printf("按职工号排列成功!\n");
  286. break;
  287. case 4:
  288. depnolist(L);
  289. show(L);
  290. printf("按部门号排列成功!\n");
  291. break;
  292. case 5:
  293. salarylist(L);
  294. show(L);
  295. printf("按工资排列成功!\n");
  296. break;
  297. case 6:
  298. printf("请输入要删除的职工号:");
  299. scanf("%d", &no);
  300. deleteone(L, no);
  301. printf("删除成功!\n");
  302. //show(L);
  303. break;
  304. case 7:
  305. deleteall(L);
  306. show(L);
  307. printf("记录为空\n");
  308. printf("已经删除全部记录!\n");
  309. break;
  310. case 8:
  311. default:
  312. menu();
  313. break;
  314. case 9:
  315. SaveFile(L);
  316. exit(0);
  317. case 10:
  318. searchname(L);
  319. break;
  320. case 11:
  321. searchno(L);
  322. break;
  323. }
  324. printf("请输入操作命令数字:\n");
  325. scanf("%d", &ord);
  326. }
  327. free(L);
  328. }

五、运行结果(部分展示)

初始界面:

进行插入功能:

进行输出功能:

进行删除功能:删除指定员工和删除全部员工

进行排序功能:以职工号,职工部门号,职工工资信息排序

进行存储功能:

六、实验总结

通过设计职工信息管理系统,我对单链表这个数据结构更加熟悉。单链表可以通过指针进行节点的连接,从而形成一个链式结构,每个节点存储一个员工的信息,如工号、姓名、部门、工资等。首先是节点的定义,每个节点存储一个员工的信息,通过指针连接下一个节点。接着是链表的插入、删除和查找操作,可以通过指针来实现节点之间的连接和数据的读取。最后是利用文件操作实现了职工信息的存储。也知道了链表的头节点需要单独处理,通常不存储数据信息。对链表的操作也需要考虑边界条件,如链表为空、插入位置超出范围等。

通过前面的实验学习我了解到单链表,双链表,栈,队列,的逻辑结构都是一对一的线性结构,学习并掌握了数据结构相关的基本概念、分类、实现方法和应用场景,并通过实验实际操作加深了对数据结构的理解。例如,栈和队列常用于程序调试和嵌套结构的处理;链表通常用于动态内存分配和实现复杂的数据结构;此外,也学习到了各种各样的排序算法,但还是没有十全十美的算法

数据结构是基础的一门课,最初接触是对一些思想可能只是生硬的记忆,随着学习的深入逐渐领悟了很多。数据结构广泛应用于程序设计、数据库、网络等领域。总之,学习数据结构是计算机科学中的重要部分,是提高编程技能和实现复杂程序的必备基础之一。

感谢老师在学习中给予的帮助与指导,让我深入地了解数据结构的原理和实现。

七、参考网址

C语言程序设计 利用文件保存数据_save函数在c语言中有关文件的用法-CSDN博客

https://blog.csdn.net/qq_31790997/article/details/90114169

数据结构《职工管理系统》_提供排序功能,可按照多种关键字对职工进行排序。要求按照“部门号”(“部门号”相-CSDN博客

https://www.bilibili.com/video/BV1et4y197Ud/?spm_id_from=333.999.0.0

希望对你有所帮助

记录:

2024/6/24 对文件存储进行了修改,并修改小熊猫C++运行内容的阐述。

原3.7文件存储错误代码,引用有问题。

  1. void SaveFile(LinkNode *L)
  2. {
  3. LinkNode *q=L->next;
  4. int n=0;
  5. FILE *fp;
  6. if ((fp=fopen("work.txt","wb+"))==NULL)
  7. {
  8. printf(" 提示:不能创建文件work.txt\n");
  9. return;
  10. }
  11. while (q!=NULL)
  12. {
  13. fwrite(&q->w,sizeof(Worker),1,fp);
  14. q=q->next;
  15. n++;
  16. }
  17. fclose(fp);
  18. free(L);
  19. if (n>0)
  20. printf("%d个职工记录写入work.txt文件\n",n);
  21. else
  22. printf("没有任何职工记录写入work.txt文件\n");
  23. }

6.27 添加查询功能

设计图未显示 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/785123
推荐阅读
相关标签
  

闽ICP备14008679号