# Chatgpt
以下是由chatgpt所生成的原始回答
```c=
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定義人員結構
struct Person {
int id;
int isRecruited;
char name[80];
};
// 列印菜單
void printMenu() {
printf("Choose a function, enter 0 to finish:\n");
printf("1) Show list of positions to be hired\n");
printf("2) Show list of already hired positions (Sort by number)\n");
printf("3) Show list of already hired positions (Sort by name)\n");
printf("4) Hire a person\n");
printf("5) Fire a person\n");
}
// 顯示待招募職位列表(按編號排序)
void showPositionsToBeHired(struct Person recruits[]) {
printf("Positions to be hired:\n");
for (int i = 0; i < 10; i++) {
if (!recruits[i].isRecruited) {
printf("%d\n", recruits[i].id);
}
}
}
// 按編號排序顯示已招募職位列表
void showHiredPositionsByNumber(struct Person recruits[]) {
printf("Hired positions (sorted by number):\n");
for (int i = 0; i < 10; i++) {
if (recruits[i].isRecruited) {
printf("Position %d: %s\n", recruits[i].id, recruits[i].name);
}
}
}
// 按姓名排序顯示已招募職位列表
void showHiredPositionsByName(struct Person recruits[]) {
printf("Hired positions (sorted by name):\n");
// 複製人員陣列以進行排序
struct Person sortedRecruits[10];
memcpy(sortedRecruits, recruits, sizeof(struct Person) * 10);
// 使用氣泡排序按姓名排序
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10 - i - 1; j++) {
if (strcmp(sortedRecruits[j].name, sortedRecruits[j + 1].name) > 0) {
struct Person temp = sortedRecruits[j];
sortedRecruits[j] = sortedRecruits[j + 1];
sortedRecruits[j + 1] = temp;
}
}
}
// 列印已招募職位列表
for (int i = 0; i < 10; i++) {
if (sortedRecruits[i].isRecruited) {
printf("Position %d: %s\n", sortedRecruits[i].id, sortedRecruits[i].name);
}
}
}
// 招募一个人员
void hirePerson(struct Person recruits[]) {
int position;
char name[80];
printf("Enter position number to hire: ");
scanf("%d", &position);
// 檢查職位是否已招募
if (recruits[position - 1].isRecruited) {
printf("Position %d is already hired.\n", position);
return;
}
printf("Enter name for position %d: ", position);
scanf("%s", name);
recruits[position - 1].id = position;
recruits[position - 1].isRecruited = 1;
strcpy(recruits[position - 1].name, name);
printf("Person hired for position %d.\n", position);
}
// 解雇一個人员
void firePerson(struct Person recruits[]) {
int position;
printf("Enter position number to fire: ");
scanf("%d", &position);
// 檢查職位是否已招募
if (!recruits[position - 1].isRecruited) {
printf("Position %d is not hired.\n", position);
return;
}
recruits[position - 1].isRecruited = 0;
printf("Person fired from position %d.\n", position);
}
int main() {
struct Person recruits[10]; // 創建人員陣列
// 初始化人員陣列
for (int i = 0; i < 10; i++) {
recruits[i].id = i + 1;
recruits[i].isRecruited = 0;
}
int choice;
do {
printMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
showPositionsToBeHired(recruits);
break;
case 2:
showHiredPositionsByNumber(recruits);
break;
case 3:
showHiredPositionsByName(recruits);
break;
case 4:
hirePerson(recruits);
break;
case 5:
firePerson(recruits);
break;
default:
printf("Invalid choice. Please try again.\n");
}
printf("\n");
} while (choice != 0);
printf("Program finished.\n");
return 0;
}
```
## 把功能分成不同檔案
myheader
```c=
#ifndef MYHEADER_H_INCLUDED
#define MYHEADER_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定義人員結構
struct Person {
int id;
int isRecruited;
char name[80];
};
#endif // MYHEADER_H_INCLUDED
```
main
```c=
#include "myheader.h"
// 列印菜單
void printMenu() {
printf("Choose a function, enter 0 to finish:\n");
printf("1) Show list of positions to be hired\n");
printf("2) Show list of already hired positions (Sort by number)\n");
printf("3) Show list of already hired positions (Sort by name)\n");
printf("4) Hire a person\n");
printf("5) Fire a person\n");
}
int main() {
struct Person recruits[10]; // 創建人員陣列
// 初始化人員陣列
for (int i = 0; i < 10; i++) {
recruits[i].id = i + 1;
recruits[i].isRecruited = 0;
}
int choice;
do {
printMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
showPositionsToBeHired(recruits);
break;
case 2:
showHiredPositionsByNumber(recruits);
break;
case 3:
showHiredPositionsByName(recruits);
break;
case 4:
hirePerson(recruits);
break;
case 5:
firePerson(recruits);
break;
default:
printf("Invalid choice. Please try again.\n");
}
printf("\n");
} while (choice != 0);
printf("Program finished.\n");
return 0;
}
```
showlist
```c=
#include "myheader.h"
#include <stdio.h>
// 顯示待招募職位列表(按編號排序)
void showPositionsToBeHired(struct Person recruits[]) {
printf("Positions to be hired:\n");
for (int i = 0; i < 10; i++) {
if (!recruits[i].isRecruited) {
printf("%d\n", recruits[i].id);
}
}
}
```
showHiredByNumber
```c=
#include "myheader.h"
// 按編號排序顯示已招募職位列表
void showHiredPositionsByNumber(struct Person recruits[]) {
printf("Hired positions (sorted by number):\n");
for (int i = 0; i < 10; i++) {
if (recruits[i].isRecruited) {
printf("Position %d: %s\n", recruits[i].id, recruits[i].name);
}
}
}
```
showHiredByName
```c=
#include "myheader.h"
// 按姓名排序顯示已招募職位列表
void showHiredPositionsByName(struct Person recruits[]) {
printf("Hired positions (sorted by name):\n");
// 複製人員陣列以進行排序
struct Person sortedRecruits[10];
memcpy(sortedRecruits, recruits, sizeof(struct Person) * 10);
// 使用氣泡排序按姓名排序
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10 - i - 1; j++) {
if (strcmp(sortedRecruits[j].name, sortedRecruits[j + 1].name) > 0) {
struct Person temp = sortedRecruits[j];
sortedRecruits[j] = sortedRecruits[j + 1];
sortedRecruits[j + 1] = temp;
}
}
}
// 列印已招募職位列表
for (int i = 0; i < 10; i++) {
if (sortedRecruits[i].isRecruited) {
printf("Position %d: %s\n", sortedRecruits[i].id, sortedRecruits[i].name);
}
}
}
```
Hire
```c=
#include "myheader.h"
// 招募一个人员
void hirePerson(struct Person recruits[]) {
int position;
char name[80];
printf("Enter position number to hire: ");
scanf("%d", &position);
// 檢查職位是否已招募
if (recruits[position - 1].isRecruited) {
printf("Position %d is already hired.\n", position);
return;
}
printf("Enter name for position %d: ", position);
scanf("%s", name);
recruits[position - 1].id = position;
recruits[position - 1].isRecruited = 1;
strcpy(recruits[position - 1].name, name);
printf("Person hired for position %d.\n", position);
}
```
Fire
```c=
#include "myheader.h"
// 解雇一個人员
void firePerson(struct Person recruits[]) {
int position;
printf("Enter position number to fire: ");
scanf("%d", &position);
// 檢查職位是否已招募
if (!recruits[position - 1].isRecruited) {
printf("Position %d is not hired.\n", position);
return;
}
recruits[position - 1].isRecruited = 0;
printf("Person fired from position %d.\n", position);
}
```
分好的檔案
