(C语言)教师信息管理系统


前言

刚学完C语言,仍是菜鸟一枚。有些不好的地方不要介意啊!!!(咳咳,不能介意○( ^皿^)っ``)


一、具体功能

1.1维护教师信息。
(1)增加教师信息
(2)修改教师信息
(3)删除教师信息

1.2查询教师信息。

(1)按教师编号查询
(2)按姓名查询
(3)按工作时间查询

1.3统计教师信息

(1)统计某年参加工作的教师总数及教师基本情况按部门统计总数并显示数据

1.4对教师信息排序

(1)按部门、教师姓名的拼音顺序排序并显示排序结果
(2)按教师编号排序并显示排序结果

二、总体设计

二、代码

源代码:

话不多说,直接上代码(ヾ(≧▽≦*)o):
#include<stdio.h>
#include<string.h>
#include <windows.h>
#include<stdlib.h>

#define N 300                        //最大总人数
#define BUMEN 7                      //部门总数

struct Teacher                       //定义结构体
{
	int Num;                          //编号 -------教师号
	char Name[25];		              //姓名 
	char Sex[20];                     //性别 
	int Age;                          //年龄
	char dianhua[12];                 //电话 
	int money;                        //工资 
	char zhicheng[25];                //职称 
	int time;                         //工作时间
	char bumen[50];                  //所属部门	           
}Tc[N];      //定义教师结构体数组名

#define LEN sizeof(struct Teacher)            //结构体占的字节数   
int renshu = 0;                             //全局变量_总人数

void hello();
void caidan();
void jieshu();
void weihu();
void zengjia();
void xiugao();
void shangchu();
void tongji();
void chaxun();
void chaxun_1();
void chaxun_2();
void chaxun_3();
void paixu();
void paixu_1();
void paixu_2();
void save_load();
void save();
void load();

int main()
{
	int n;			//操作选择
	system ("title 教师信息管理系统");  //改变标题
	hello();      //开始界面
	while(1)
	{
		system("cls");//清屏
		caidan();     //菜单界面
		scanf("%d", &n);   //输入选择
		system("cls");   //清除菜单,展示选择的内容 
		switch(n)
		{	
		case 0:
			
			save();    //退出系统时保存文件
			jieshu();   //退出画面
		case 1:
			weihu();   //维护(增加、修改、删除)
			break;
		case 2:
			tongji();  //统计(根据部门名进行分类)
			break;
		case 3:
			chaxun();  //查询(姓名、教师号、工作时间)
			break;
		case 4:
			paixu();  //排序(教师号、部门名姓名)
			break;
		case 9:
			save_load();  //文件读写
			break;
		default:    //输入错误时
			printf("\n\n\n\n\t请输入正确的选项!!!\n");
			system("pause");
		}
	}
	return 0;
}

void hello()  //开始
{
	printf("时间:");
	system("date/t");
	printf("☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n\n");
	printf("\n欢迎来到教师信息管理系统\n\n");
	printf("☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n\n");
	system("pause");
}
void caidan()  // 主菜单
{
	printf("时间:");
	system("date/t");
	printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
    printf(" ☆********************************************************************★\n");
    printf(" ★                          教师信息管理系统                          ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★         1、维护教师信息                 2、统计教师信息            ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★         3、查询教师信息                 4、排序并查看教师信息      ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★          ----------------------------------------------            ☆\n"); 
	printf(" ☆         0、退出系统                     9、文件保存与读取          ★\n");
	printf(" ★                                                                    ☆\n");
	printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
    printf("请选择您的操作:");
}
void weihu()               //维护教师信息_菜单
{
	int m;    //操作选择
	while(1)
	{
		system("cls");   //完成一次操作后清屏
		printf("时间:");
		system("date/t");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf(" ☆********************************************************************★\n");
		printf(" ★            ***************维护教师信息***************              ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         1、增加教师信息                            ☆\n");
		printf(" ☆                         2、修改教师信息                            ★\n");
		printf(" ★                         3、删除教师信息                            ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★          ----------------------------------------------            ☆\n"); 
		printf(" ☆                         0、返回上一菜单                            ★\n");
		printf(" ★                                                                    ☆\n");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf("请输入您的选择:");
		scanf("%d", &m);
		switch (m)
		{
		case 0:
			return;  //返回上一菜单
		case 1:
			zengjia();  
			break;
		case 2:
			xiugao();
			break;
		case 3:
			shangchu();
			break;
		default:
			printf("\n请输入正确选项!!!\n");
			system("pause");   //输入错误,冻结屏幕
		}
	}
}
void zengjia()        //  增加教师信息
{
	
	int i, n;     // n:新增人数
	printf("请输入新增人数:");
	scanf("%d", &n);
	if(n == 0)
		return;   
	for(i=renshu; i<renshu + n; i++)
	{
		printf("----------------------------------------------------------------------------------------------------\n");
		printf("请输入教师 %d的\n教师号 姓名 性别 年龄 电话 工资 职称 所属部门 工作时间:(空格分隔)\n",i+1);
		scanf("%d%s%s%d%s%d%s%s%d", &Tc[i].Num, Tc[i].Name, Tc[i].Sex, &Tc[i].Age, Tc[i].dianhua, &Tc[i].money, Tc[i].zhicheng, Tc[i].bumen, &Tc[i].time);
	}
	renshu += n;    //总人数 == 原本人数 + 新增人数
	printf("\n--------------------------------☆输入结束,返回上一菜单☆--------------------------------------\n");
	system("pause");    //操作结束,冻结屏幕
}
void xiugao()             // 修改教师信息
{
	int i, n, t;  // t:判断输入教师号是否正确
	while(1)
	{
		printf("请输入需要修改的教师号(输入0结束修改):");
		scanf("%d", &n);
		t = 0;      //每次修改教师信息时 t = 0,
		if(n == 0)
			break;
		for(i=0; i<renshu; i++)
		{
			if(n == Tc[i].Num)
			{
				printf("您要修改的教师信息为:\n");
				printf("教师号  姓名    性别  年龄      电话     工资    职称    所属部门    工作时间\n");
				printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
				t = 1;          //存在该教师,t = 1
				printf("请输入修改后的信息:\n");
				printf("请输入教师 %d的\n教师号 姓名 性别 年龄 电话 工资 职称 所属部门 工作时间:(空格分隔)\n",i+1);
				scanf("%d%s%s%d%s%d%s%s%d", &Tc[i].Num, Tc[i].Name, Tc[i].Sex, &Tc[i].Age, Tc[i].dianhua, &Tc[i].money, Tc[i].zhicheng, Tc[i].bumen, &Tc[i].time);
			}
		}
		if(t == 0)    //  若t == 0, 表示不存在该教师号
			printf("""\n★!!!该教师号为空!!! ★\n");
	}
} 
void shangchu()        //删除教师信息
{
	int i, n, m, t;    // t: 判断输入教师号是否正确
	while(1)
	{
		printf("请输入需要删除的教师号(输入0结束删除):");
		scanf("%d", &n);
		t = 0;
		if(n == 0)
			break;
		for(i=0; i<renshu; i++)
			if(n == Tc[i].Num)
			{
				printf("您要删除的教师信息为:\n");
				printf("教师号  姓名    性别  年龄      电话     工资    职称   所属部门    工作时间\n");
				printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
				t = 1;
q1:				printf("是否确认删除?\n1、确认删除  2、取消删除\n");
				scanf("%d", &m);
				if(m == 2)
					continue;  //取消删除,跳过该教师,继续循环   
				else if(m == 1)
				{
					Tc[i] = Tc[renshu-1]; //用最后一名教师的信息覆盖
					renshu--;   //确认删除,总人数 - 1,放弃最后一条重复的教师信息
				}
				else
				{
					printf("请正确输入选项:\n");
					goto q1;  //输入有误,“goto q1”重新确认是否删除
				}
				if(t == 0)
					printf("""\n★!!!该教师号为空!!! ★\n");
			}
	}
}
void tongji()    //对教师信息进行统计
{
	int i, j;
	char bu[BUMEN][11] = {"办公室", "实验室", "图书室", "宿舍", "美术室" ,"音乐室", "教务处"};  //以部门分类(该二维数组必须将所有部门包括在内)
	for(j=0; j<BUMEN; j++)  
	{
		printf("部门:%s\n", bu[j]);
		for(i=0; i<renshu; i++)
		{
			if(strcmp(bu[j], Tc[i].bumen) == 0)  //若该教师部门与之相同,输出该教师信息
			{	
				printf("教师号  姓名    性别  年龄      电话     工资    职称   所属部门   工作时间 \n");
				printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
			}
		}
		printf("----------------------------------------------------------------------------------------------------\n");  //分割线
	}
	system("pause");  //操作完成,冻结屏幕
}
void chaxun()
{
	int n;
	while(1)
	{
		system("cls");
		printf("时间:");
		system("date/t");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf(" ☆********************************************************************★\n");
		printf(" ★            *******************查 询********************            ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         1.按教师号查询                             ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         2.按姓名查询                               ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         3.按工作时间查询                           ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★          ----------------------------------------------            ☆\n"); 
		printf(" ☆                         0、返回上一菜单                            ★\n");
		printf(" ★                                                                    ☆\n");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf("请输入您的选择:");
		scanf("%d", &n);
		switch (n)
		{
		case 0:
			return;
		case 1:
			chaxun_1();
			break;
		case 2:
			chaxun_2();
			break;
		case 3:
			chaxun_3();
			break;
		default:
			printf("请正确输入!!!");
			system("pause");
		}
	}
}
void chaxun_1()
{
	int i, hao, b=0;  
	while(1)  
	{
		printf("请输入查询的教师号(输入0退出):");
		scanf("%d",&hao);
		if(hao == 0)
			return;   //输入0, 退出
		printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
		for (i=0; i<renshu; i++)
		{
			if(Tc[i].Num==hao)
			{ 
				b=1;
				printf("教师号  姓名    性别  年龄      电话     工资    职称    所属部门    工作时间\n");
				printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
			}
		}
		if(b==0)
			printf("\n   ★无匹配教师!! ★\n");
	}
}
void chaxun_2()                                                                           //按条件查询信息--------- 2.按姓名查询 
{  
	int i, t = 0;
	char b[20];
	printf("请输入查询的教师姓名:");
	scanf("%s", &b);
	printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
	for (i=0;i<renshu;i++)
	{
		if(strcmp(Tc[i].Name,b)==0)
		{
			t = 1;
			printf("教师号  姓名    性别  年龄      电话     工资    职称   所属部门    工作时间\n");
			printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
		}
	}
	if(t == 0)
		printf("\n  ★无匹配教师!! ★\n");
	system("pause");
}

void chaxun_3()
{
	int i, time, b=0;
    printf("请输入查询教师工作时间:");
    scanf("%d",&time);
    printf("---------------------------------------查询结果:---------------------------------------------------\n") ;
	for (i=0; i<renshu; i++)
	{
		if(Tc[i].time == time)
		{ 
			b=1;
			printf("教师号  姓名    性别  年龄      电话     工资    职称   所属部门    工作时间\n");
			printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
		}
	}
	if(b==0)
		printf("\n   ★无匹配教师!! ★\n");
	system("pause");
}
void save_load()      //文件保存和读取
{
	int m;
	printf("时间:");
	system("date/t");
	printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
    printf(" ☆********************************************************************★\n");
    printf(" ★            *****************文件读写*****************              ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★                         1、从文件中读取信息                        ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★                         2、保存信息到文件                          ☆\n");
    printf(" ☆                                                                    ★\n");
    printf(" ★          ----------------------------------------------            ☆\n"); 
	printf(" ☆                         0、返回上一菜单                            ★\n");
	printf(" ★                                                                    ☆\n");
	printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
	printf("请输入您的选择:");
	scanf("%d", &m);
	switch(m)
	{
	case 1:
		load();
		break;
	case 2:
		save();
		break;
	case 0:
		return;
	}		
}
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 ");
	system("pause");
}
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 ");
	system("pause");
}
void paixu()
{
	int m;
	while(1)
	{
		system("cls");                                                //清空屏幕 
		printf("时间:");
		system("date/t");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf(" ☆********************************************************************★\n");
		printf(" ★            *********************排 序******************            ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         1、按部门、教师名字的拼音排序              ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★                         2、按教师编号排序                          ☆\n");
		printf(" ☆                                                                    ★\n");
		printf(" ★          ----------------------------------------------            ☆\n"); 
		printf(" ☆                         0、返回上一菜单                            ★\n");
		printf(" ★                                                                    ☆\n");
		printf(" ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n");
		printf("请输入您的选择:");
		scanf("%d", &m);
		switch(m)
		{
		case 1:
			paixu_1();
			break;
		case 2:
			paixu_2();
			break;
		case 0:
			return;
		}			
	}
}
void paixu_1()    //按条件排序---------1.按部门、教师名字的拼音顺序排序
{  
	int i, j;
	struct Teacher t;
	for(i=0; i<renshu-1; i++)
		for(j=0; j<renshu-1-i; j++)
			if(strcmp(Tc[j].bumen, Tc[j+1].bumen) > 0) 
			{
				t=Tc[j]; 
				Tc[j]=Tc[j+1];
				Tc[j+1]=t; 
			}
	for(i=0; i<renshu-1; i++)
		for(j=0; j<renshu-1-i; j++)
			if(strcmp(Tc[j].Name, Tc[j+1].Name) > 0) 
			{
				t=Tc[j]; 
				Tc[j]=Tc[j+1];
				Tc[j+1]=t; 
			}
			printf("按部门、教师名字的拼音顺序排序(总人数:%d):\n", renshu);
			for(i=0; i<renshu; i++)
			{
				printf("----------------------------------------------------------------------------------------------------\n");
				printf("教师号  姓名    性别  年龄      电话     工资    职称   所属部门    工作时间\n");
				printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
			}
	system("pause");
}
void paixu_2()    //按条件排序---------2.按教师号排序
{  
	int i, j;
	struct Teacher t;
	for(i=0; i<renshu-1; i++)    //冒泡排序法
		for(j=0; j<renshu-1-i; j++)
			if(Tc[j].Num > Tc[j+1].Num) 
			{
				t=Tc[j]; 
				Tc[j]=Tc[j+1];
				Tc[j+1]=t; 
			}
	printf("按教师号排序(总人数:%d):\n", renshu);
	for(i=0; i<renshu; i++)    //输出排序结果
	{
		printf("----------------------------------------------------------------------------------------------------\n");
		printf("教师号  姓名    性别  年龄      电话     工资    职称    所属部门    工作时间\n");
		printf("%5d%9s%5s%5d%13s%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].bumen, Tc[i].time);
	}
	system("pause");
}

void jieshu()             //结束界面 
{   system("cls");  
printf("\n\n\n");
printf("时间:");
system("date/t");
printf("\n★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
puts("\n");
puts(" ┃                                               ┃");
puts(" ┃                                               ┃");
puts(" ┃     感谢访问教师信息管理系统!欢迎下次再来!    ┃");
puts(" ┃                                               ┃");
puts(" ┃                                               ┃");
puts(" ┃                                               ┃");
puts(" ┃                                               ┃");
printf("\n★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★\n\n");
printf("\n系统将在3秒后关闭\n");   
Sleep(3000);   //3秒后关闭
exit(0);
}     

还有一些不足:

1.因为我本来是想用链表做的,不过做链表的时候一直出现BUG,只好退一步,用数组来存放教师信息了。
2.汉字拼音排序的实在是没有找到具体的资料,时间也比较短,就用的字符串的比较方式来排序了。
3.可能还有一些其他的错误没有被我发现(手动狗头)<( ̄▽ ̄)/


( ^ ▽ ^ )

学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。 系统的主要功能包括: 1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件。 2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。 3. 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。 4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。 5. 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。 (1) 按学号查询,输入一个学号,输出对应的学生信息。 (2) 按姓名查询,包括精确查询(输入全名),模糊查询(输入姓)。 (3) 按学院查询,输入学院名称,输出该学院的全部学生的信息。 (4) 按班级查询,输入班级名称,输出该班级的全部学生的信息。 6. 按不同条件对学生成绩进行统计工作。 (1) 按总分对学生信息进行排序(由高到低),输出排序后的信息,并将排序后的学生信息存放到一个新的二进制文件。 (2) 按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。 (3) 分别找出3门课程成绩最高的学生,并输出他们的信息。 (4) 分别统计出3门课程的不及格率,并输出。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹹魚不鹹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值