Description
编写一套计算机学院教师信息管理系统,用菜单进行管理,具备输入、显示、查找、排序、插入等功能。每一条记录包括一位教师的职工号、姓名、职称、性别、2门主讲课程,包括课程名称、开课学期、课程性质(必修/限选课)和教学效果,以及教学效果综合评分。
要求:(1)输入功能(input):可以一次完成若干条记录的输入。教师人员数量最多可达到100。(2)显示功能(display):完成全部教师记录的显示。(3)查找功能(search):能够按照教师的姓名或课程名称查找教师的相关记录,并显示。如果没有查找到相关记录,输出 NO match!(4)排序功能(sort):按照职工号或者教学效果综合评分由高至低进行排序。0按照职工号排序,1按照教学效果综合评分排序。(5)插入功能(insert):插入一条教师记录。(6)修改功能(change):按照职工号修改一条教师记录。(7)删除功能(delete):按照教师的姓名删除一条教师记录。(8)退出功能(quit)退出程序 Input选择相应功能,如:输入功能:输入每一条记录包括一位教师的职工号、姓名、职称、性别、2门主讲课程,包括课程名称、开课学期、课程性质(必修/限选课)和教学效果,以及教学效果综合评分。插入功能:插入一条教师记录。排序功能:按照教学效果综合评分由高至低进行排序。显示功能:完成全部教师记录的显示。退出功能:退出程序
Output输出相应信息Sample Inputinput220160000 张三 教授 女 程序设计基础 2019-2020-1 必修 优秀 离散数学 2019-2020-2 必修 优秀 93 20160001 李四 讲师 女 数字逻辑 2019-2020-1 必修 优秀 图像处理 2019-2020-2 必修 优秀 91 insert20160002 王五 讲师 女 软件工程 2019-2020-1 限选课 优秀 高等数学 2019-2020-2 限选课 优秀 92sort1displaysearch李四一change2016000120160001 李四一 副教授 女 数字逻辑 2019-2020-1 必修 优秀 图像处理 2019-2020-2 必修 优秀 91displaydelete王五 displayquitSample Output20160000 张三 教授 女 程序设计基础 2019-2020-1 必修 优秀 离散数学 2019-2020-2 必修 优秀 9320160002 王五 讲师 女 软件工程 2019-2020-1 限选课 优秀 高等数学 2019-2020-2 限选课 优秀 9220160001 李四 讲师 女 数字逻辑 2019-2020-1 必修 优秀 图像处理 2019-2020-2 必修 优秀 91NO match!20160000 张三 教授 女 程序设计基础 2019-2020-1 必修 优秀 离散数学 2019-2020-2 必修 优秀 9320160002 王五 讲师 女 软件工程 2019-2020-1 限选课 优秀 高等数学 2019-2020-2 限选课 优秀 9220160001 李四一 副教授 女 数字逻辑 2019-2020-1 必修 优秀 图像处理 2019-2020-2 必修 优秀 9120160000 张三 教授 女 程序设计基础 2019-2020-1 必修 优秀 离散数学 2019-2020-2 必修 优秀 9320160001 李四一 副教授 女 数字逻辑 2019-2020-1 必修 优秀 图像处理 2019-2020-2 必修 优秀 91
#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
using namespace std;
typedef struct//课程信息
{
string class_name;
string class_date;
string class_type;
string class_effect;
}Class;
typedef struct//教师信息
{
string num;
string name;
string pos;
string sexul;
Class class1;
Class class2;
int sumscore;
}Teacher;
typedef struct teacher_xinxi//创建链表节点
{
Teacher teacher;
struct teacher_xinxi *next;
}Linklist;
//创建链表
Linklist * creatlinklist(int num)
{
Linklist *head_node , *temp_node, *end_node;
head_node = new Linklist;
if(head_node == NULL){
//cout<<"内存分配失败"<<endl;
return NULL;
}
end_node = head_node;//刚开始没有存数据的是时候,头节点就是尾节点
//开始输入学生数据
for(int i = 1; i <= num; i++){
temp_node = new Linklist;
cin>>temp_node->teacher.num>>temp_node->teacher.name>>temp_node->teacher.pos>>temp_node->teacher.sexul;
cin>>temp_node->teacher.class1.class_name>>temp_node->teacher.class1.class_date>>temp_node->teacher.class1.class_type>>temp_node->teacher.class1.class_effect;
cin>>temp_node->teacher.class2.class_name>>temp_node->teacher.class2.class_date>>temp_node->teacher.class2.class_type>>temp_node->teacher.class2.class_effect;
cin>>temp_node->teacher.sumscore;
end_node->next = temp_node;
end_node = temp_node;
}
end_node->next = NULL;
return head_node;
}
//输出链表中的内容
void display_Linklist(Linklist *h)
{
while(h->next != NULL){
h = h->next;
cout<<h->teacher.num<<" "<<h->teacher.name<<" "<<h->teacher.pos<<" "<<h->teacher.sexul<<" ";
cout<<h->teacher.class1.class_name<<" "<<h->teacher.class1.class_date<<" "<<h->teacher.class1.class_type<<" "<<h->teacher.class1.class_effect<<" ";
cout<<h->teacher.class2.class_name<<" "<<h->teacher.class2.class_date<<" "<<h->teacher.class2.class_type<<" "<<h->teacher.class2.class_effect;
cout<<" "<<h->teacher.sumscore<<endl;
}
}
//查找链表中的内容
int Search_teacher(string flag,Linklist *h)
{
int res = 0;//记录已经找到的符合条件的教师数量;
while(NULL != h->next){
h = h->next;
if(flag == h->teacher.name||flag == h->teacher.class1.class_name||flag == h->teacher.class2.class_name){
cout<<h->teacher.num<<" "<<h->teacher.name<<" "<<h->teacher.pos<<" "<<h->teacher.sexul<<" ";
cout<<h->teacher.class1.class_name<<" "<<h->teacher.class1.class_date<<" "<<h->teacher.class1.class_type<<" "<<h->teacher.class1.class_effect<<" ";
cout<<h->teacher.class2.class_name<<" "<<h->teacher.class2.class_date<<" "<<h->teacher.class2.class_type<<" "<<h->teacher.class2.class_effect;
cout<<" "<<h->teacher.sumscore<<endl;
res++;
}
}
return res;
}
//修改系统中某教师信息
int Change_Linklist(string flag_num,Linklist *h)
{
while(NULL != h->next){
h = h->next;
if(flag_num == h->teacher.num){
cin>>h->teacher.num>>h->teacher.name>>h->teacher.pos>>h->teacher.sexul;
cin>>h->teacher.class1.class_name>>h->teacher.class1.class_date>>h->teacher.class1.class_type>>h->teacher.class1.class_effect;
cin>>h->teacher.class2.class_name>>h->teacher.class2.class_date>>h->teacher.class2.class_type>>h->teacher.class2.class_effect;
cin>>h->teacher.sumscore;
return 1;
}
}
return 0;
}
//系统教师信息的删除
int delete_Linklist(string name,Linklist *h)
{
Linklist *temp = h, *t;
int if_delete = 0;
while(NULL != temp->next){
t = temp;
temp = temp->next;
if(temp->teacher.name == name){
if_delete = 1;
break;
}
}
//如果是头节点后的第一个元素,只需要将头节点连接至第一个元素后面的信息即可
if(temp == h->next){
h->next = temp->next;
}
//普通节点的情况
else{
t->next = temp->next;
}
delete(temp);
return if_delete;
}
//插入数据
void List_insert(Linklist *h)
{
Linklist *temp = new Linklist;
cin>>temp->teacher.num>>temp->teacher.name>>temp->teacher.pos>>temp->teacher.sexul;
cin>>temp->teacher.class1.class_name>>temp->teacher.class1.class_date>>temp->teacher.class1.class_type>>temp->teacher.class1.class_effect;
cin>>temp->teacher.class2.class_name>>temp->teacher.class2.class_date>>temp->teacher.class2.class_type>>temp->teacher.class2.class_effect;
cin>>temp->teacher.sumscore;
/*
//从头结点插入数据
temp->next = h->next;
h->next = temp;*/
//从尾结点插入数据
Linklist *end_node = h;
while(NULL != end_node->next){
end_node = end_node->next;
}
end_node->next = temp;
temp->next = NULL;
}
//获取链表存储长度
int get_List_len(Linklist *h)
{
int count = 0;
while(NULL != h->next){
h = h->next;
count++;
}
return count;
}
//冒泡排序对列表数据进行排序
void sort_List(Linklist *h,int sort_type)
{
int length = get_List_len(h);
Linklist *p = h->next;
Teacher temp;
//p,是为了防止排序过程中h被改变,temp做排序交换时的中间变量
for(int i = 0; i < length - 1; i++){
p = h->next;//保证每次排序都是从头节点开始
if(sort_type){//如果输入的是1则按照教学效果综合评分排序
for(int j = 0; j <length - 1 - i; j++){
if(p->teacher.sumscore < p->next->teacher.sumscore){
temp = p->teacher;
p->teacher = p->next->teacher;
p->next->teacher = temp;
}
p = p->next;
}
}
else{
for(int j = 0; j <length - 1 - i; j++){
if(p->teacher.num < p->next->teacher.num){
temp = p->teacher;
p->teacher = p->next->teacher;
p->next->teacher = temp;
}
p = p->next;
}
}
}
}
//链表的内存释放
void delete_all_Linklist(Linklist * h)
{
while(NULL != h){
Linklist *p = h;
delete(p);
h = h->next;
}
}
int main()
{
Linklist *p;
int tnum;//起始输入系统教师数量
while(1){
string oper;
cin>>oper;
//起始输入教师信息
if(oper == "input"){
cin>>tnum;
p = creatlinklist(tnum);
}
//通过输入的教师姓名或者课程名称查找教师
if(oper == "search"){
string flag;
cin>>flag;
int ans = Search_teacher(flag,p);
if(!ans){
cout<<"NO match!"<<endl;
}
}
//修改系统中教师信息
if(oper == "change"){
string flag_num;
cin>>flag_num;
int if_change = Change_Linklist(flag_num,p);
}
//删除输入教师名信息
if(oper == "delete"){
string name;
cin>>name;
int if_delete = delete_Linklist(name,p);
/*if(!if_delete){
cout<<"删除失败"<<endl;
}*/
}
//插入老师信息,由于这里没有说明每次插入信息的位置,所以默认从头结点插入
if(oper == "insert"){
List_insert(p);
}
//对系统中的老师按要求进行排序
//0按照职工号排序,1按照教学效果综合评分排序
if(oper == "sort"){
int sort_type;//判断应该按哪种方式进行排序的标识符
cin>>sort_type;
sort_List(p,sort_type);
}
//输出系统中教师信息
if(oper == "display"){
display_Linklist(p);
}
//退出程序
if(oper == "quit"){
break;
}
}
delete_all_Linklist(p);//释放内存
return 0;
}
https://blog.csdn.net/CUCUC1/article/details/106913919/
基于ChatGPT4与博主叶秋学长的回答,望采纳!!!有其他问题也可以询问我哦💕:
这是一个相对复杂的项目,需要有一定的C语言基础。这个项目需要设计一个教师信息管理系统,包括输入、显示、查找、排序、插入等功能。
首先,我们需要创建一个数据结构来存储教师的信息。每个教师的信息包括工号、姓名、职称、性别、主讲课程(两门,包括课程名称、开课学期、课程性质和教学效果)、以及教学效果综合评分。我们可以使用一个结构体来存储这些信息。
例如,我们可以定义这样一个结构体:
typedef struct {
char id[10];
char name[20];
char title[20];
char gender[10];
struct {
char courseName[20];
char term[10];
char courseType[10];
char teachingEffect[10];
} courses[2];
int overallScore;
} Teacher;
然后我们需要创建一个Teacher类型的数组来存储所有的教师信息:
Teacher teachers[100];
然后我们需要定义一些函数来实现输入、显示、查找、排序、插入等功能。
例如,我们可以定义一个input函数来输入教师的信息:
void input(Teacher* teachers, int* count) {
// 输入教师信息
}
我们也可以定义一个display函数来显示所有的教师信息:
void display(Teacher* teachers, int count) {
// 显示教师信息
}
我们也需要定义一个search函数来查找教师的信息:
void search(Teacher* teachers, int count, char* name) {
// 查找教师信息
}
我们还需要定义一个sort函数来排序教师的信息:
void sort(Teacher* teachers, int count, int type) {
// 排序教师信息
}
我们还需要定义一个insert函数来插入一条教师的信息:
void insert(Teacher* teachers, int* count, Teacher teacher) {
// 插入教师信息
}
我们还需要定义一个change函数来修改一条教师的信息:
void change(Teacher* teachers, int count, char* id, Teacher teacher) {
// 修改教师信息
}
我们还需要定义一个delete函数来删除一条教师的信息:
void delete(Teacher* teachers, int* count, char* name) {
// 删除教师信息
}
最后,我们需要定义一个main函数来显示菜单并处理用户的输入:
int main() {
// 显示菜单
// 处理用户输入
}
每个函数的具体实现需要根据项目的具体要求来编写。这只是一个大致的框架,具体的实现可能会有所不同。
根据您的问题描述,您需要编写一套教师信息管理系统,具备输入、显示、查找、排序、插入等功能。下面是一个基本的C语言实现示例:
#include <stdio.h>
#include <string.h>
#define MAX_TEACHERS 100
typedef struct {
char id[10];
char name[20];
char title[10];
char gender[5];
char course1[30];
char semester1[20];
char nature1[10];
char effect1[10];
char course2[30];
char semester2[20];
char nature2[10];
char effect2[10];
int score;
} Teacher;
Teacher teachers[MAX_TEACHERS];
int numTeachers = 0;
void input() {
printf("请输入教师信息:\n");
while (1) {
Teacher teacher;
printf("职工号:");
scanf("%s", teacher.id);
if (strcmp(teacher.id, "quit") == 0) break;
printf("姓名:");
scanf("%s", teacher.name);
printf("职称:");
scanf("%s", teacher.title);
printf("性别:");
scanf("%s", teacher.gender);
printf("主讲课程1:");
scanf("%s", teacher.course1);
printf("开课学期1:");
scanf("%s", teacher.semester1);
printf("课程性质1:");
scanf("%s", teacher.nature1);
printf("教学效果1:");
scanf("%s", teacher.effect1);
printf("主讲课程2:");
scanf("%s", teacher.course2);
printf("开课学期2:");
scanf("%s", teacher.semester2);
printf("课程性质2:");
scanf("%s", teacher.nature2);
printf("教学效果2:");
scanf("%s", teacher.effect2);
printf("教学效果综合评分:");
scanf("%d", &teacher.score);
teachers[numTeachers++] = teacher;
}
}
void display() {
printf("教师信息如下:\n");
for (int i = 0; i < numTeachers; i++) {
Teacher teacher = teachers[i];
printf("%s %s %s %s %s %s %s %s %s %s %s %s %d\n",
teacher.id, teacher.name, teacher.title, teacher.gender,
teacher.course1, teacher.semester1, teacher.nature1, teacher.effect1,
teacher.course2, teacher.semester2, teacher.nature2, teacher.effect2,
teacher.score);
}
}
void search() {
char name[20];
printf("请输入要查找的教师姓名:");
scanf("%s", name);
int found = 0;
for (int i = 0; i < numTeachers; i++) {
Teacher teacher = teachers[i];
if (strcmp(teacher.name, name) == 0) {
printf("%s %s %s %s %s %s %s %s %s %s %s %s %d\n",
teacher.id, teacher.name, teacher.title, teacher.gender,
teacher.course1, teacher.semester1, teacher.nature1, teacher.effect1,
teacher.course2, teacher.semester2, teacher.nature2, teacher.effect2,
teacher.score);
found = 1;
}
}
if (!found) {
printf("NO match!\n");
}
}
void sort() {
int type;
printf("请选择排序类型(0-职工号排序,1-教学效果综合评分排序):");
scanf("%d", &type);
for (int i = 0; i < numTeachers - 1; i++) {
for (int j = 0; j < numTeachers - 1 - i; j++) {
if ((type == 0 && strcmp(teachers[j].id, teachers[j + 1].id) > 0) ||
(type == 1 && teachers[j].score < teachers[j + 1].score)) {
Teacher temp = teachers[j];
teachers[j] = teachers[j + 1];
teachers[j + 1] = temp;
}
}
}
printf("排序完成!\n");
}
void insert() {
Teacher teacher;
printf("请输入要插入的教师信息:\n");
printf("职工号:");
scanf("%s", teacher.id);
printf("姓名:");
scanf("%s", teacher.name);
printf("职称:");
scanf("%s", teacher.title);
printf("性别:");
scanf("%s", teacher.gender);
printf("主讲课程1:");
scanf("%s", teacher.course1);
printf("开课学期1:");
scanf("%s", teacher.semester1);
printf("课程性质1:");
scanf("%s", teacher.nature1);
printf("教学效果1:");
scanf("%s", teacher.effect1);
printf("主讲课程2:");
scanf("%s", teacher.course2);
printf("开课学期2:");
scanf("%s", teacher.semester2);
printf("课程性质2:");
scanf("%s", teacher.nature2);
printf("教学效果2:");
scanf("%s", teacher.effect2);
printf("教学效果综合评分:");
scanf("%d", &teacher.score);
teachers[numTeachers++] = teacher;
printf("插入成功!\n");
}
void change() {
char id[10];
printf("请输入要修改的教师职工号:");
scanf("%s", id);
int found = 0;
for (int i = 0; i < numTeachers; i++) {
Teacher* teacher = &teachers[i];
if (strcmp(teacher->id, id) == 0) {
printf("请输入修改后的教师信息:\n");
printf("姓名:");
scanf("%s", teacher->name);
printf("职称:");
scanf("%s", teacher->title);
printf("性别:");
scanf("%s", teacher->gender);
printf("主讲课程1:");
scanf("%s", teacher->course1);
printf("开课学期1:");
scanf("%s", teacher->semester1);
printf("课程性质1:");
scanf("%s", teacher->nature1);
printf("教学效果1:");
scanf("%s", teacher->effect1);
printf("主讲课程2:");
scanf("%s", teacher->course2);
printf("开课学期2:");
scanf("%s", teacher->semester2);
printf("课程性质2:");
scanf("%s", teacher->nature2);
printf("教学效果2:");
scanf("%s", teacher->effect2);
printf("教学效果综合评分:");
scanf("%d", &teacher->score);
found = 1;
break;
}
}
if (found) {
printf("修改成功!\n");
} else {
printf("未找到对应职工号的教师!\n");
}
}
void delete() {
char name[20];
printf("请输入要删除的教师姓名:");
scanf("%s", name);
int found = 0;
for (int i = 0; i < numTeachers; i++) {
if (strcmp(teachers[i].name, name) == 0) {
for (int j = i; j < numTeachers - 1; j++) {
teachers[j] = teachers[j + 1];
}
numTeachers--;
found = 1;
break;
}
}
if (found) {
printf("删除成功!\n");
} else {
printf("未找到对应姓名的教师!\n");
}
}
int main() {
while (1) {
printf("请选择功能(input/display/search/sort/insert/change/delete/quit):");
char choice[10];
scanf("%s", choice);
if (strcmp(choice, "input") == 0) {
input();
} else if (strcmp(choice, "display") == 0) {
display();
} else if (strcmp(choice, "search") == 0) {
search();
} else if (strcmp(choice, "sort") == 0) {
sort();
} else if (strcmp(choice, "insert") == 0) {
insert();
} else if (strcmp(choice, "change") == 0) {
change();
} else if (strcmp(choice, "delete") == 0) {
delete();
} else if (strcmp(choice, "quit") == 0) {
break;
} else {
printf("无效的选择!\n");
}
}
return 0;
}
这是一个简单的教师信息管理系统,可以根据菜单选择进行输入、显示、查找、排序、插入等功能操作。您可以根据需要进一步扩展和优化代码。
c语言设计 教师信息管理系统
#include<stdio.h>
#include<string.h>
#include <windows.h>
#include<stdlib.h>
int renshu=0,anquan[10]={0},mima=88888888; //全局变量,便于各个函数访问和修改
struct Teacher{
int Num; //编号 -------教师号 《性别,年龄,电话,工资,学历》
char Name[25]; //姓名
char Sex[20]; //性别
int Age; //年龄
long int dianhua; //电话
int money; //工资
char zhicheng[25]; //职称
char Course[50]; //课程编号--------课程名称
int ClassNum; // 班级数
}Tc[100];
void hello() //开始
{ char ttt[] = { "欢迎访问教师信息管理系统!!!" };
int i;
printf("\n 时间:");
system("date/t");
// system ( "time/t " );
printf("\t ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n\n");
puts("\n");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
printf(" ┃ ");
for(i = 0; ttt[i] != '\0'; i++) {
Sleep(100);
printf("%c", ttt[i]);
if(i==1)
system ( " color 1" );
else if (i==2)
system ( " color 2" );
else if (i==3)
system ( " color 3" );
else if (i==4)
system ( " color 4" );
else if (i==5)
system ( " color 5" );
else if (i==6)
system ( " color 6" );
else if (i==7)
system ( " color 7" );
else if (i==8)
system ( " color 8" );
else if (i==9)
system ( " color 9" );
else if (i==10)
system ( " color A" );
else if (i==11)
system ( " color B" );
else if (i==12)
system ( " color 3" );
else if (i==13)
system ( " color 4" );
else if (i==14)
system ( " color 6" );
else if (i==15)
system ( " color 6" );
else if (i==16)
system ( " color 7" );
else if (i==17)
system ( " color 8" );
else if (i==18)
system ( " color 2" );
else if (i==19)
system ( " color 3" );
else if (i==20)
system ( " color 4" );
else if (i==21)
system ( " color 5" );
else if (i==22)
system ( " color 4" );
}
// system ( " color 0 " );
system ( " color B0" );
printf(" ┃ \n");
puts("\t ┃ ┃");
puts("\t ┃ --------------- ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃ ");
puts("\n \n");
printf("\n\t 请按回车键进入系统……\n");
system ( " color 0 " );
getchar();
system("cls"); //清空屏幕
}
void jieshu() //结束界面
{ system("cls");
printf("\n\n\n");
printf("\n\t ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
puts("\n");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ 感谢访问教师信息管理系统!欢迎下次再来! ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃");
puts("\t ┃ ┃ ");
puts("\n ");
printf("\n\n\n");
}
void caidan() //主菜单
{ printf("\n\n\n\n");
printf(" 时间:");
system("date/t");
// system ( "time/t " );
printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
printf(" ☆********************************************************************★\n");
printf(" ★ 教师信息管理系统 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.录入教师信息 5.统计信息 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.浏览所有教师信息 6. 按条件排序 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.按条件查询信息 7.信息安全及权限管理 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 4.修改教师信息 8.文件保存与读取 ☆\n");
printf(" ☆ ★\n");
printf(" ★********************************************************************☆\n");
printf(" ☆ 输入9退出系统 输入10返回主菜单 ★\n");
printf(" ★ ---------------------------------------------- ☆\n");
}
void save() //文件存盘
{
FILE *fp; //定义文件指针
int i;
if((fp=fopen("Tc.txt","w"))==NULL) // 打开文件,没有文件自动创建,‘w’为只写 模式
{
printf("文件打开错误!\n"); //检查文件打开状态,打开不成功则提示
exit(0);
}
for(i=0;i<renshu;i++)
fwrite(&Tc[i],sizeof(struct Teacher),1,fp); //将结构体Tc数据写到文件中
fclose(fp); //关闭文件
printf("\n ★数据保存成功 ★ \n\n ");
}
void load()
{ // 读入函数 磁盘信息读入到内存
FILE *fp; //定义文件指针
int i;
if((fp=fopen("Tc.txt","r"))==NULL) // 打开文件,,‘r’为只读
{
printf("文件打开错误!\n"); //检查文件打开状态,打开不成功则提示
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&Tc[i],sizeof(struct Teacher),1,fp); //将文件数据写到结构体Tc[]中
fclose(fp); //关闭文件
renshu=i-1;
printf("\n ★数据读取成功 ★ \n\n ");
}
void wenjiancaidan() //文件操作菜单
{
system("cls"); //清空屏幕
printf("\n\n\b ★文件保存与读取★ \n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.文件保存到磁盘 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.从磁盘读取文件 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void wenjian() //文件功能主函数
{
int t,i;
wenjiancaidan();
while (1)
{ printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if (t==3) break;
switch (t)
{
case 1: save(); getchar(); break;
case 2: load();getchar(); break;
default:printf("\n ★操作有误!! ★\n");getchar();
}
}
system("cls");
caidan();
}
void anquancaidan() //信息安全及权限管理菜单
{ system("cls"); //清空屏幕
printf("\n\n\b ★信息安全及权限管理★ \n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.功能权限设置 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.修改密码 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 3.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void anquan_1() // 1.功能权限设置
{ int a;
printf("\n\n");
printf(" | 1.录入教师信息 5.统计信息 |\n");
printf(" | 2.浏览所有教师信息 6. 按条件排序 |\n");
printf(" | 3.按条件查询信息 7.信息安全及权限管理 |\n");
printf(" | 4.修改教师信息 8.文件保存与读取 |\n");
printf(" ☆ 输入9返回上一级 ☆ \n");
while(1)
{
printf("--------------------------------------------------------------------------------------\n");
printf(" 请输入需要设置的功能序号(按9返回):");
scanf("%d",&a);
if(a==9) break;
printf("\n 权限设置为(0为关,1为开):");
scanf("%d",&anquan[a]);
printf(" ★ 设置成功 ★ \n");
getchar();
}
}
void xiugaimima() //修改密码
{ int t;
printf("初始秘密为:88888888\n");
printf(" 输入1返回菜单,输入其他建进行修改密码\n");
scanf("%d",&t);
if(t==1) {}
else { printf(" 请输入新密码:\n");
scanf("%d",&mima);
printf(" ★ 修改成功 ★ \n");
}
}
int anquangongneng(int x) //权限管理功能实现函数
{ int shurumima;
if(anquan[x]==1){
printf("请输入密码:");
scanf("%d",&shurumima);
if (shurumima==mima){ printf("密码正确");return 1; }
else { printf("密码错误"); return 0; }
}
else return 1;
}
void anquan_() //信息安全及权限管理主函数
{ int t;
anquancaidan();
while (1)
{
printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if(t==3) break;
switch (t)
{
case 1: anquan_1();getchar(); break;
case 2: xiugaimima(); getchar(); break;
default: printf("\n ★操作有误!! ★\n"); getchar();
}
}
getchar();
system("cls");
caidan();
}
void paoxucaidan() //排序函数菜单
{
system("cls"); //清空屏幕
printf("\n\n\n ★按条件排序选项★ \n\n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.按教师号排序 ☆\n");
printf(" ☆ 2.按年龄排序 ★\n");
printf(" ★ 3.按工资排序 ☆\n");
printf(" ☆ 4.返回主菜单 ★\n");
printf(" ★ ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
void paixu_1()
//按条件排序---------1.按教师号排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].Num>Tc[j+1].Num) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu_2() //按条件排序--------- 2.按年龄排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].Age>Tc[j+1].Age) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu_3() //按条件排序--------- 3.按工资排序
{ int i,j;
struct Teacher t[2];
for(i=0;i<renshu-1;i++)
{ for(j=0;j<renshu-1-i;j++){
if(Tc[j].money>Tc[j+1].money) { t[1]=Tc[j];Tc[j]=Tc[j+1];Tc[j+1]=t[1]; }
}
}
}
void paixu() //排序功能主函数
{ int t,i;
paoxucaidan();
while (1)
{ printf("\n ★请选择您的操作: ");
scanf("%d",&t);
if (t==4) break;
switch (t)
{
case 1: paixu_1(); getchar();break;
case 2: paixu_2();getchar();break;
case 3: paixu_3();getchar();break;
default:printf("\n ★操作有误!! ★\n");getchar();
}
printf("---------------------------------------排序结果:---------------------------------------------------\n");
for (i=0;i<renshu;i++)
{
printf(" 第%d位教师信息:\n",i+1);
printf("教师号 姓名 性别 年龄 电话 工资 职称 课程名称 班级数\n");
printf("%5d%9s%5s%5d%11d%10d%9s%9s%9d\n",Tc[i].Num,Tc[i].Name,Tc[i].Sex,Tc[i].Age,Tc[i].dianhua,Tc[i].money,Tc[i].zhicheng,Tc[i].Course,Tc[i].ClassNum);
}
printf("\n---------------------------------☆所有信息已显示,按回车上一级☆-------------------------------\n");
getchar();
}
getchar();
system("cls");
caidan();
}
void tongjicaidan() //统计函数菜单
{
system("cls"); //清空屏幕
printf("\n\n\n ★统计信息选项★ \n\n");
printf(" ★ ------------------------------------------- ☆\n");
printf(" ☆ ★\n");
printf(" ★ 1.统计工资的平均值、最大最小值 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 2.统计年龄的平均值、最大最小值 ☆\n");
printf(" ☆ ★\n");
printf(" ★ 4.返回主菜单 ☆\n");
printf(" ☆ ★\n");
printf(" ★ ------------------------------------------- ☆\n");
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TEACHERS 100
// 定义课程结构体
typedef struct {
char name[20]; // 课程名称
char semester[10]; // 开课学期
char nature[10]; // 课程性质(必修/限选课)
char effect[10]; // 教学效果
} Course;
// 定义教师结构体
typedef struct {
char id[20]; // 职工号
char name[20]; // 姓名
char title[20]; // 职称
char sex[10]; // 性别
Course course[2]; // 主讲课程
int score; // 教学效果综合评分
} Teacher;
// 定义教师信息管理系统结构体
typedef struct {
Teacher teachers[MAX_TEACHERS]; // 教师信息数组
int count; // 教师数量
} TeacherSystem;
// 输入功能
void input(TeacherSystem* system) {
while (1) {
int n;
printf("请输入要输入的教师人数(最多100人):");
scanf("%d", &n);
if (n <= 0 || n > MAX_TEACHERS) {
printf("输入有误,请重新输入!\n");
continue;
}
printf("请依次输入每位教师的信息:\n");
for (int i = 0; i < n; i++) {
Teacher* teacher = &system->teachers[system->count];
printf("职工号:");
scanf("%s", teacher->id);
printf("姓名:");
scanf("%s", teacher->name);
printf("职称:");
scanf("%s", teacher->title);
printf("性别:");
scanf("%s", teacher->sex);
for (int j = 0; j < 2; j++) {
printf("主讲课程%d:\n", j+1);
printf(" 课程名称:");
scanf("%s", teacher->course[j].name);
printf(" 开课学期:");
scanf("%s", teacher->course[j].semester);
printf(" 课程性质(必修/限选课):");
scanf("%s", teacher->course[j].nature);
printf(" 教学效果:");
scanf("%s", teacher->course[j].effect);
}
printf("教学效果综合评分:");
scanf("%d", &teacher->score);
system->count++;
}
break;
}
}
// 显示功能
void display(const TeacherSystem* system) {
printf("职工号\t姓名\t职称\t性别\t主讲课程1\t\t\t\t\t主讲课程2\t\t\t\t\t教学效果综合评分\n");
for (int i = 0; i < system->count; i++) {
const Teacher* teacher = &system->teachers[i];
printf("%s\t%s\t%s\t%s\t%s(%s,%s,%s)\t%s(%s,%s,%s)\t%d\n",
teacher->id, teacher->name, teacher->title, teacher->sex,
teacher->course[0].name, teacher->course[0].semester, teacher->course[0].nature, teacher->course[0].effect,
teacher->course[1].name, teacher->course[1].semester, teacher->course[1].nature, teacher->course[1].effect,
teacher->score);
}
}
// 查找功能
void search(const TeacherSystem* system) {
char keyword[20];
printf("请输入要查找的关键字(姓名或课程名称):");
scanf("%s", keyword);
int found = 0;
for (int i = 0; i < system->count; i++) {
const Teacher* teacher = &system->teachers[i];
if (strcmp(teacher->name, keyword) == 0 ||
strcmp(teacher->course[0].name, keyword) == 0 ||
strcmp(teacher->course[1].name, keyword) == 0) {
printf("%s\t%s\t%s\t%s\t%s(%s,%s,%s)\t%s(%s,%s,%s)\t%d\n",
teacher->id, teacher->name, teacher->title, teacher->sex,
teacher->course[0].name, teacher->course[0].semester, teacher->course[0].nature, teacher->course[0].effect,
teacher->course[1].name, teacher->course[1].semester, teacher->course[1].nature, teacher->course[1].effect,
teacher->score);
found = 1;
}
}
if (!found) {
printf("没有找到符合条件的教师!\n");
}
}
int main() {
TeacherSystem system = {0};
int option;
while (1) {
printf("\n教师信息管理系统:\n");
printf("1. 输入教师信息\n");
printf("2. 显示教师信息\n");
printf("3. 查找教师信息\n");
printf("0. 退出程序\n");
printf("请选择功能:");
scanf("%d", &option);
switch (option) {
case 1:
input(&system);
break;
case 2:
display(&system);
break;
case 3:
search(&system);
break;
case 0:
printf("程序已退出!\n");
return 0;
default:
printf("输入有误,请重新选择功能!\n");
}
}
}
设计结构体,函数列出来:
void input() {
// 输入若干条记录
}
void display() {
// 显示全部教师记录
}
void search() {
// 按照教师的姓名或课程名称查找教师的相关记录,并显示
}
void sort(int type) {
// 按照职工号或者教学效果综合评分由高至低进行排序
}
void insert() {
// 插入一条教师记录
}
void change() {
// 按照职工号修改一条教师记录
}
void delete() {
// 按照教师的姓名删除一条教师记录
}
可以参考:https://peakchen.blog.csdn.net/article/details/131407519?spm=1001.2014.3001.5502