写代码(教师信息管理系统)

使用文件进行存储和管理。程序启动时可从文件中读取信息,或从键盘输入信息;运行过程中如添加或删除记录时也可对文件进行存取;退出前可选择将信息保存到文件中。系统功能可根据情况自行分析,建议系统功能如下:1、教师信息查询(根据姓名或只根据姓氏查询)
2、教师信息添加
3、教师信息修改
4、教师信息删除
5、教师信息排序(按姓名或按办公地点)
6、教师信息积分计算(迟到一次扣一分,早退一次扣一分,旷课一次扣一分)
7、按积分进行教师信息排序

参考GPT和自己的思路,下面是一个简单的教师信息管理系统的C语言代码示例,包括上述功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LENGTH 20
#define MAX_OFFICE_LENGTH 20
#define MAX_TEACHERS 100

// 定义教师结构体
typedef struct {
    char name[MAX_NAME_LENGTH];
    char office[MAX_OFFICE_LENGTH];
    int late_count;
    int leave_count;
    int absent_count;
    int score;
} Teacher;

Teacher teachers[MAX_TEACHERS]; // 定义教师数组
int teacher_count = 0; // 记录当前教师数量

// 显示菜单
void show_menu() {
    printf("\n教师信息管理系统\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("请输入选择:");
}

// 从文件中读取教师信息
void load_teachers_from_file() {
    FILE* fp;
    fp = fopen("teachers.dat", "rb"); // 以二进制读取方式打开文件
    if (fp == NULL) {
        printf("无法打开文件\n");
        return;
    }
    while (teacher_count < MAX_TEACHERS && fread(&teachers[teacher_count], sizeof(Teacher), 1, fp) == 1) {
        teacher_count++;
    }
    fclose(fp); // 关闭文件
}

// 将教师信息保存到文件中
void save_teachers_to_file() {
    FILE* fp;
    fp = fopen("teachers.dat", "wb"); // 以二进制写入方式打开文件
    if (fp == NULL) {
        printf("无法打开文件\n");
        return;
    }
    fwrite(teachers, sizeof(Teacher), teacher_count, fp); // 写入教师信息
    fclose(fp); // 关闭文件
}

// 按姓名查找教师信息,返回匹配的教师数量
int find_teacher_by_name(char* name) {
    int count = 0;
    for (int i = 0; i < teacher_count; i++) {
        if (strcmp(teachers[i].name, name) == 0) {
            printf("教师姓名: %s\n", teachers[i].name);
            printf("办公地点: %s\n", teachers[i].office);
            printf("迟到次数: %d\n", teachers[i].late_count);
            printf("早退次数: %d\n", teachers[i].leave_count);
            printf("旷课次数: %d\n", teachers[i].absent_count);
            printf("积分: %d\n", teachers[i].score);
            count++;
        }
    }
    return count;
}

// 删除教师信息
void delete_teacher() {
char name[MAX_NAME_LENGTH];
printf("请输入要删除的教师姓名:");
scanf("%s", name);
int index = find_teacher_by_name(name);
if (index == -1) {
printf("未找到该教师\n");
return;
}
for (int i = index; i < teacher_count - 1; i++) {
teachers[i] = teachers[i + 1];
}
teacher_count--;
printf("已删除该教师信息\n");
}

// 按姓名排序教师信息
void sort_teachers_by_name() {
qsort(teachers, teacher_count, sizeof(Teacher), compare_by_name);
printf("已按姓名排序\n");
}

// 按办公地点排序教师信息
void sort_teachers_by_office() {
qsort(teachers, teacher_count, sizeof(Teacher), compare_by_office);
printf("已按办公地点排序\n");
}

// 计算教师积分
int calculate_teacher_score(Teacher teacher) {
return teacher.late_count + teacher.leave_count + teacher.absent_count;
}

// 按积分排序教师信息
void sort_teachers_by_score() {
qsort(teachers, teacher_count, sizeof(Teacher), compare_by_score);
printf("已按积分排序\n");
}

int main() {
load_teachers_from_file(); // 从文件中读取教师信息
int choice;
do {
print_menu(); // 打印菜单
scanf("%d", &choice);
switch (choice) {
case 1:
find_teacher();
break;
case 2:
add_teacher();
break;
case 3:
update_teacher();
break;
case 4:
delete_teacher();
break;
case 5:
sort_teachers_by_name();
break;
case 6:
sort_teachers_by_office();
break;
case 7:
calculate_teacher_scores();
break;
case 8:
sort_teachers_by_score();
break;
case 0:
break;
default:
printf("无效的选择,请重新输入\n");
}
} while (choice != 0);
save_teachers_to_file(); // 保存教师信息到文件
return 0;
}

不谢


#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1000
typedef struct Teacher {
  char name[20];
  char location[20];
  int lateCount; // 迟到次数
  int leaveEarlyCount; // 早退次数
  int absentCount; // 旷课次数
  int score; // 积分
} Teacher;
Teacher teacher[MAX_SIZE];
int size; // 当前数组中Teacher的个数
// 查询教师信息
void queryTeacherInfo(char *name) {
  int i;
  for (i = 0; i < size; i++) {
    if (strcmp(teacher[i].name, name) == 0) {
      printf("姓名:%!s(MISSING)\n", teacher[i].name);
      printf("办公地点:%!s(MISSING)\n", teacher[i].location);
      printf("迟到次数:%!d(MISSING)\n", teacher[i].lateCount);
      printf("早退次数:%!d(MISSING)\n", teacher[i].leaveEarlyCount);
      printf("旷课次数:%!d(MISSING)\n", teacher[i].absentCount);
      printf("积分:%!d(MISSING)\n", teacher[i].score);
    }
  }
}
// 添加教师信息
void addTeacherInfo(Teacher t) {
  teacher[size++] = t;
}
// 修改教师信息
void modifyTeacherInfo(char *name, Teacher t) {
  int i;
  for (i = 0; i < size; i++) {
    if (strcmp(teacher[i].name, name) == 0) {
      teacher[i] = t;
    }
  }
}
// 删除教师信息
void deleteTeacherInfo(char *name) {
  int i;
  for (i = 0; i < size; i++) {
    if (strcmp(teacher[i].name, name) == 0) {
      int j;
      for (j = i; j < size - 1; j++) {
        teacher[j] = teacher[j + 1];
      }
      size--;
    }
  }
}
// 根据姓名排序
void sortByName() {
  int i, j;
  for (i = 0; i < size - 1; i++) {
    for (j = 0; j < size - 1 - i; j++) {
      if (strcmp(teacher[j].name, teacher[j + 1].name) > 0) {
        Teacher temp = teacher[j];
        teacher[j] = teacher[j + 1];
        teacher[j + 1] = temp;
      }
    }
  }
}
// 根据办公地点排序
void sortByLocation() {
  int i, j;
  for (i = 0; i < size - 1; i++) {
    for (j = 0; j < size - 1 - i; j++) {
      if (strcmp(teacher[j].location, teacher[j + 1].location) > 0) {
        Teacher temp = teacher[j];
        teacher[j] = teacher[j + 1];
        teacher[j + 1] = temp;
      }
    }
  }
}
// 计算积分
void calculateScore() {
  int i;
  for (i = 0; i < size; i++) {
    teacher[i].score = 0 - (teacher[i].lateCount + teacher[i].leaveEarlyCount +
                            teacher[i].absentCount);
  }
}
// 根据积分排序
void sortByScore() {
  int i, j;
  for (i = 0; i < size - 1; i++) {
    for (j = 0; j < size - 1 - i; j++) {
      if (teacher[j].score < teacher[j + 1].score) {
        Teacher temp = teacher[j];
        teacher[j] = teacher[j + 1];
        teacher[j + 1] = temp;
      }
    }
  }
}
int main(void) {
  return 0;
}

int main()
{
    data a;
    int n,length;
    length=0;
    if(Login()==1)
    {
        Open(a,length);
        do
        {
            UI();
            scanf("%d",&n);
            switch (n)
            {
                case 1:Entry(a,length);break;
                case 2:Del(a,length);break;
                case 3:Browse(a,length);break;
                case 4:Save(a,length);break;
                case 5:Inquire(a,length);break;
                case 6:sort(a,length);break;
                default:putchar('\a');
            }
        } while (n!=0);
    }
    else printf("                                 三次输入密码错误,已自动退出系统\n");
    printf("                                 ");
    return 0;
}

int Login(void)
{
    int i=3;
    int k=0;
    char a[100];
    char b[100]="在这里写一个你的系统的密码";
    printf("\n\n\n\n\n\n");
    printf("                                 * * * * * * * * * * * * * * * * * * * * * * *\n");
    printf("                                 *                                           *\n");
    printf("                                 *      你真的非常棒学院教师信息管理系统     *\n");
    printf("                                 *                                           *\n");
    printf("                                 * * * * * * * * * * * * * * * * * * * * * * *\n");
    do
    {
        printf("                                 密码:");
        scanf("%s",a);
        if(strcmp(a,b)==0)
        {
            return (1);
        }
        else k++;
        if (k!=3) printf("                                 输入错误,请重新输入(再输入%d次错误自动退出系统)\n",i-k);
    } while (k!=3);
    return 0;
}

void Entry(data &a,int &n)
{
    int m;
    do
    {   
        system("cls");
        printf("\n\n\n");
        printf("                               * * * * * * * * * * 教师信息录入 * * * * * * * * * *\n");
        printf("                               请输入要录入的教师的信息:\n");
        printf("                               教师号:");
        scanf("%s",a[n].num);
        printf("                               姓名:");
        scanf("%s",a[n].name);
        printf("                               性别:");
        scanf("%s",a[n].gender);
        printf("                               年龄:");
        scanf("%d",&a[n].age);
        printf("                               学历:");
        scanf("%s",a[n].education);
        printf("                               职称:");
        scanf("%s",a[n].title);
        printf("                               工资:");
        scanf("%d",&a[n].wage);
        printf("                               住址:");
        scanf("%s",a[n].address);
        printf("                               电话:");
        scanf("%s",a[n].phone);
        printf("\n");
        n++;
        printf("                               该名教师的信息输入完毕,请选择进行以下哪项操作\n");
        printf("                               1.继续录入教师信息\n");
        printf("                               2.返回首页\n");
        printf("                               3.保存已录入教师信息\n");
        printf("                               * * * * * * * * * * * * * * * *  * * * * * * * * * *\n");
        printf("                               ");
        scanf("%d",&m);
        if(m==3)
        {
            Save(a,n);
            system("cls");
            printf("\n\n\n");
            printf("                               * * * * * * * * * * 教师信息录入 * * * * * * * * * *\n");
            printf("                               保存成功,请选择进行以下哪项操作\n");
            printf("                               1.继续录入教师信息\n");
            printf("                               2.返回首页\n");
            printf("                               * * * * * * * * * * * * * * * *  * * * * * * * * * *\n");
            printf("                               ");
            scanf("%d",&m);
        }
    }while (m!=2);
}

void Del(data &a,int &n)
{
    system("cls");
    printf("\n\n\n");
    printf("                       * * * * * * * * * * * * * * * * 教师信息删除 * * * * * * * * * * * * * * * *\n");
    int i,j,k,m;
    char number[50];
    printf("                       请输入要删除教师信息的教师号:");
    scanf("%s",number);
    for (i=0;i<n;i++)
    {
        if(strcmp(a[i].num,number)==0) 
        {
            printf("                       以下是这名教师的信息:\n");
            printf("                       教师号    姓名   性别 年龄 学历    职称    工资    住址       电话      \n");
            printf("                       %-10s%-7s%-5s%-5d%-8s%-8s%-8d%-11s%-10s\n",a[i].num,a[i].name,a[i].gender,a[i].age,a[i].education,a[i].title,a[i].wage,a[i].address,a[i].phone);
            j=1;
            m=i;
            break;
        }
        else
        {
            j=0;
            m=999;
        }
    }
    if (j==1)
    {
        printf("                       是否要删除该名教师的信息(请输入1或2)\n");
        printf("                       1.是\n");
        printf("                       2.否\n");
        printf("                       ");
        scanf("%d",&k);
        printf("                       * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * * * * * *\n");
        if(k==1)
        {
            for (i=m;i<n-1;i++)
            {
                strcpy(a[i].num,a[i+1].num);
                strcpy(a[i].name,a[i+1].name);
                strcpy(a[i].gender,a[i+1].gender);
                a[i].age=a[i+1].age;
                strcpy(a[i].education,a[i+1].education);
                strcpy(a[i].title,a[i+1].title);
                a[i].wage=a[i+1].wage;
                strcpy(a[i].address,a[i+1].address);
                strcpy(a[i].phone,a[i+1].phone);
            }
            n--;
            printf("                       删除成功,回车以返回首页\n");
        }
        else
        {
            if (k==2)
            {
                printf("                       取消删除,回车以返回首页\n");
            }
            else
            {
                printf("                       指令输入错误,回车以返回首页\n");
            }
        }
    }
    else printf("                       未查询到该名教师的信息\n");
    getchar();
    printf("                       ");
    getchar();
}

void Inquire(data a,int n)
{
    int style;
    system("cls");
    printf("\n\n\n");
    printf("                       * * * * * * * * * * * * * * * * 教师信息查询 * * * * * * * * * * * * * * * *\n");
    printf("                       请选择以哪种方式进行查询(输入1或2):\n");
    printf("                       1.按教师号进行查询\n");
    printf("                       2.按职称进行查询\n                       ");
    scanf("%d",&style);
    switch (style)
    {
        case 1:Inquire_1(a,n);break;
        case 2:Inquire_2(a,n);break;
        default:printf("                       输入错误指令,查询失败!\n");
    }
    printf("\n                       * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * * * * * * * *\n");
    printf("                       回车以返回首页\n");
    getchar();
    printf("                       ");
    getchar();
}

void Inquire_1(data a,int n)
{
    int i;
    int j=0;
    char number[50];
    printf("                       请输入要查询教师信息的教师号:");
    scanf("%s",number);
    for (i=0;i<n;i++)
    {
        if(strcmp(a[i].num,number)==0) j=1;
    }
    if(j==1)
    {
        printf("                       查询到以下信息:\n");
        printf("                       教师号    姓名   性别 年龄 学历    职称    工资    住址       电话      \n");
        for (i=0;i<n;i++)
        {
            if(strcmp(a[i].num,number)==0)
            {
                printf("                       %-10s%-7s%-5s%-5d%-8s%-8s%-8d%-11s%-10s\n",a[i].num,a[i].name,a[i].gender,a[i].age,a[i].education,a[i].title,a[i].wage,a[i].address,a[i].phone);
            }
        }
    }
    else printf("\n                       未查询到该名教师的信息\n");
}

void sort(data &a,int n)
{
    int style;
    system("cls");
    printf("\n\n\n\n\n\n\n\n                                    * * * * * * * * * * 教师信息排序 * * * * * * * * * *\n\n");
    printf("                                    请输入排序方式:\n");
    printf("                                    1.按年龄进行排序\n");
    printf("                                    2.按工资进行排序\n                                    ");
    scanf("%d",&style);
    switch (style)
    {
        case 1:sort_1(a,n);break;
        case 2:sort_2(a,n);break;
        default:putchar('\a');
    }  
    printf("                                    * * * * * * * * * * * * * * * *  * * * * * * * * * *\n");
    printf("                                    排序完成,回车以返回首页\n");
    getchar();
    printf("                                    ");
    getchar();
}


基于Monster组和GTP的调写

#include <stdlib.h>
#include <string.h>

#define MAX_NAME_LEN 20
#define MAX_ADDR_LEN 30
#define MAX_TEACHERS 100

struct Teacher {
    char name[MAX_NAME_LEN];
    char addr[MAX_ADDR_LEN];
    int score;
};

struct Teacher teachers[MAX_TEACHERS];
int numTeachers = 0;

// 从文件中读取教师信息
void readTeachersFromFile(char* fileName) {
    FILE* fp = fopen(fileName, "r");
    if (fp == NULL) {
        printf("无法打开文件 %s\n", fileName);
        return;
    }

    while (1) {
        struct Teacher t;
        int ret = fscanf(fp, "%s %s %d", t.name, t.addr, &t.score);
        if (ret == EOF) break;
        teachers[numTeachers++] = t;
    }

    fclose(fp);
}

// 将教师信息写入文件
void writeTeachersToFile(char* fileName) {
    FILE* fp = fopen(fileName, "w");
    if (fp == NULL) {
        printf("无法打开文件 %s\n", fileName);
        return;
    }

    for (int i = 0; i < numTeachers; i++) {
        fprintf(fp, "%s %s %d\n", teachers[i].name, teachers[i].addr, teachers[i].score);
    }

    fclose(fp);
}

// 根据姓名查询教师信息
void searchTeacherByName(char* name) {
    for (int i = 0; i < numTeachers; i++) {
        if (strcmp(teachers[i].name, name) == 0) {
            printf("%s %s %d\n", teachers[i].name, teachers[i].addr, teachers[i].score);
            return;
        }
    }
    printf("未找到姓名为 %s 的教师\n", name);
}

// 根据姓氏查询教师信息
void searchTeacherByLastName(char* lastName) {
    for (int i = 0; i < numTeachers; i++) {
        if (strcmp(teachers[i].name, lastName) == 0 || 
            strcmp(teachers[i].name + strlen(teachers[i].name) - strlen(lastName), lastName) == 0) {
            printf("%s %s %d\n", teachers[i].name, teachers[i].addr, teachers[i].score);
        }
    }
}

// 添加教师信息
void addTeacher() {
    if (numTeachers >= MAX_TEACHERS) {
        printf("教师信息已满,无法添加\n");
        return;
    }

    struct Teacher t;
    printf("请输入教师姓名:");
    scanf("%s", t.name);
    printf("请输入教师办公地点:");
    scanf("%s", t.addr);
    t.score = 0;

    teachers[numTeachers++] = t;
}

// 修改教师信息
void modifyTeacher() {
    char name[MAX_NAME_LEN];
    printf("请输入要修改信息的教师姓名:");
    scanf("%s", name);

    for (int i = 0; i < numTeachers; i++) {
        if (strcmp(teachers[i].name, name) == 0) {
            printf("请输入新的办公地点:");
            scanf("%s", teachers[i].addr);

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这里给出一个简单的Python代码实现,用于实现教师信息管理系统。

import os

class Teacher:
    def __init__(self, name, gender, age, office, late=0, early=0, absent=0):
        self.name = name
        self.gender = gender
        self.age = age
        self.office = office
        self.late = late
        self.early = early
        self.absent = absent
        self.score = 100 - late - early - absent
    
    def __str__(self):
        return f"{self.name} {self.gender} {self.age} {self.office} 迟到 {self.late} 次 早退 {self.early} 次 旷课 {self.absent} 次 积分 {self.score}\n"

class TeacherMgr:
    def __init__(self, filename):
        self.filename = filename
        self.teachers = []
        self.load()
        
    def load(self):
        if not os.path.exists(self.filename):
            return
        with open(self.filename, 'r') as fp:
            while line := fp.readline().rstrip():
                name, gender, age, office, late, early, absent = line.split(" ")
                self.teachers.append(Teacher(name, gender, int(age), office, int(late), int(early), int(absent)))
                
    def save(self):
        with open(self.filename, 'w') as fp:
            for teacher in self.teachers:
                fp.write(f"{teacher.name} {teacher.gender} {teacher.age} {teacher.office} {teacher.late} {teacher.early} {teacher.absent}\n")
    
    def query(self, query_key):
        if query_key.isalpha():
            result = [t for t in self.teachers if t.name.startswith(query_key)]
        else:
            result = [t for t in self.teachers if t.name == query_key]

        for teacher in result:
            print(teacher)
                
    def add(self, name, gender, age, office, late=0, early=0, absent=0):
        teacher_new = Teacher(name, gender, age, office, late, early, absent)
        self.teachers.append(teacher_new)
        self.save()
                
    def modify(self, query_key):
        if query_key.isalpha():
            result = [t for t in self.teachers if t.name.startswith(query_key)]
        else:
            result = [t for t in self.teachers if t.name == query_key]

        for teacher in result:
            print(f"修改前的信息:{teacher}")
            teacher.name = input("请输入新的姓名:")
            teacher.gender = input("请输入新的性别:")
            teacher.age = int(input("请输入新的年龄:"))
            teacher.office = input("请输入新的办公地点:")
            teacher.late = int(input("请输入新的迟到次数:"))
            teacher.early = int(input("请输入新的早退次数:"))
            teacher.absent = int(input("请输入新的旷课次数:"))
            teacher.score = 100 - teacher.late - teacher.early - teacher.absent
            print(f"修改后的信息:{teacher}")
        self.save()
                
    def delete(self, query_key):
        if query_key.isalpha():
            result = [t for t in self.teachers if t.name.startswith(query_key)]
        else:
            result = [t for t in self.teachers if t.name == query_key]

        for teacher in result:
            self.teachers.remove(teacher)
            print(f"成功删除教师信息:{teacher}")
        self.save()

    def sort(self, criteria):
        if criteria == "name":
            self.teachers.sort(key=lambda x: x.name)
        else:
            self.teachers.sort(key=lambda x: x.office)
        self.save()
        self.show_all()
                
    def show_all(self):
        for teacher in self.teachers:
            print(teacher)

def show_menu():
    print("教师信息管理系统")
    print("1. 查询教师信息")
    print("2. 添加教师信息")
    print("3. 修改教师信息")
    print("4. 删除教师信息")
    print("5. 按姓名排序教师信息")
    print("6. 按办公地点排序教师信息")
    print("7. 显示所有教师信息")
    print("0. 退出系统")
    return input("请输入菜单编号:")
        
if __name__ == '__main__':
    mgr = TeacherMgr("teachers.txt")
    
    while True:
        choice = show_menu()
        if choice == '1':
            query_key = input("请输入教师姓名或姓氏:")
            mgr.query(query_key)
        elif choice == '2':
            name = input("请输入教师姓名:")
            gender = input("请输入教师性别:")
            age = int(input("请输入教师年龄:"))
            office = input("请输入教师办公地点:")
            late = int(input("请输入教师迟到次数:"))
            early = int(input("请输入教师早退次数:"))
            absent = int(input("请输入教师旷课次数:"))
            mgr.add(name, gender, age, office, late, early, absent)
        elif choice == '3':
            query_key = input("请输入教师姓名:")
            mgr.modify(query_key)
        elif choice == '4':
            query_key = input("请输入教师姓名:")
            mgr.delete(query_key)
        elif choice == '5':
            mgr.sort("name")
        elif choice == '6':
            mgr.sort("office")
        elif choice == '7':
            mgr.show_all()
        elif choice == '0':
            print("感谢使用教师信息管理系统!")
            break
        else:
            print("请输入正确的菜单编号!")

如果我的回答解决了您的问题,请采纳!