使用文件进行存储和管理。程序启动时可从文件中读取信息,或从键盘输入信息;运行过程中如添加或删除记录时也可对文件进行存取;退出前可选择将信息保存到文件中。系统功能可根据情况自行分析,建议系统功能如下: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("请输入正确的菜单编号!")
如果我的回答解决了您的问题,请采纳!