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

题目如下

教师信息包括教师号、姓名、性别、年龄、学历、职称、工资、住址、电话等(教师号不重复)。试设计一教师信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)教师信息录入功能--输入
(3)教师信息删除功能
(4)教师信息浏览功能 --输出
(5)查询和排序功能:(至少一种查询方式) --算法
 按教师号查询
 按职称查询等
要求:
(1)设计一个主函数和多个子函数,每个子函数完成一个相对独立的子功能。
(2)程序运行时,首先进行口令检查,再显示菜单。并能根据菜单调用相应的函数功能。
口令程序段的功能要求:
《1》提示用户输入一个口令。
《2》用户输入口令后,若口令对,则提示用户通过,可执行后续程序;否则不通过。
《3》可对用户的口令输入进行次数限制(如:重复输入3次都不对),则自动退出系统。
(3)显示数据时,一页显示不下,可分页显示。


我是个菜鸟,本着相互学习的目的, 我将我那拙劣的代码发到这里,给几年后的自己看,有问题还请网友多多指出。未来的自己回过头来看的时候,就当是个笑话吧。

代码优化了吗?没有,所以有很多冗长且无意义的语句。并且!!!变量名的命名很不明不白。
还有一件很致命的缺陷,我没有写注释。

好了,废话少说,上代码。

再补充一句,我这里有一个简单的登录函数,但我在main函数那里注释掉了。如果需要看看效果的话可以自行去掉注释。密码就在Login函数里,去找吧,我把所有的都放在那里了。

#include
#include
#include
int man=0;
struct Teacher
{
	int idnum;//教师号 
	char name[15];//姓名 
	char sex[5];//性别 
	int age;//年龄 
	char xueli[10];//学历 
	char zhicheng[10];//职称 
	float income;//工资
	char where[25];//地址 
	char tel[13];//电话 
}T[51];

int count=0; 

void input()
{
	FILE *fp;
	int i=count;
	system("cls");
	if(i>=51)
	{
		printf("数据已爆满");
		return;
	}
	int L,id;
	printf("请输入\n");
	printf("教师号: ");scanf("%d",&id);
	L=location(id);
	int Max=0;
	for(;L!=-1&&Max<3;Max++)
	{ 
		printf("教师号重复, 请重新输入(你还有%d次输入机会): ",3-Max);
		scanf("%d",&id);
		L=location(id);
	}
	if(Max>2)return;
	T[i].idnum=id;
	printf("姓名: ");scanf("%s",T[i].name);
	printf("性别: ");scanf("%s",T[i].sex);
	printf("年龄: ");scanf("%d",&T[i].age);
	printf("学历: ");scanf("%s",T[i].xueli);
	printf("职称: ");scanf("%s",T[i].zhicheng);
	printf("地址: ");scanf("%s",T[i].where);
	printf("电话: ");scanf("%s",T[i].tel);
	printf("工资: ");scanf("%f",&T[i].income);
	fp=fopen("teacher.bat","ab+");
	fwrite(&T[i],sizeof(struct Teacher),1,fp);
	fclose(fp);
	count++;
}

int location(int id)
{
	int i;
	for(i=0;i<count;i++)
	{
		if(T[i].idnum==id)
		return i;
	}
	return -1;
} 

void Delete()
{
	printf("请输入要删除教师的教师号\n");
	int id,L;
    scanf("%d",&id);
	L=location(id);
	if(L==-1)
	{
		printf("未找到该教师号\n");
		system("pause");
		return;
	}
	int i;
	count--;
	for(i=L;L<count;L++)
	{
		T[i]=T[i+1];
	}
	FILE *fp1,*fp2;
	//fp1=fopen("teacher.bat","r+");
	fp2=fopen("temp.bat","a+");
	for(i=0;i<count;i++)
	{
		fwrite(&T[i],sizeof(struct Teacher),1,fp2);
	}
	fclose(fp2);
	remove("teacher.bat");                
	rename("temp.bat", "teacher.bat");
	printf("删除完成 :)");
	system("pause");
}

void showtimE()
{
	if(count==0)printf("无数据\n"); 
	int i;
	printf("人数统计: %d\n",count); 
	for(i=0;i<count;i++)
	{
		printf("序号:%-2d  教师号:%d  姓名:%s  性别:%s  年龄:%d  学历:%s  \n\t 职称:%s  工资:%.2f  地址:%s  电话:%s\n",i+1,T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
	}
}

void Change()
{
	printf("1.教师号 2.姓名 3.性别 4.年龄 5.学历 6.职称 7.地址 8.电话 9.工资\n");
	printf("请选择需要修改的选项:");
	char error[10];
	int in;
	scanf("%s",error);
	for(in=0;57<error[0]||error[0]<48||strlen(error)!=1;)
	{
		
		printf("输入有误,重新输入\n");
		scanf("%s",error);
	}
	in=error[0]-48;
	printf("请输入要修改的教师编号: "); 
	int id;
	scanf("%d",&id);
	while(location(id)==-1)
	{
		printf("未找到该教师编号,请重新输入\n");
		scanf("%d",&id);
	};
	id=location(id);
	switch(in)
	{
		case 1: {
					int Max=0;
					int new_id,L;
					//printf("139count=%d\n",count); 
					printf("请输入教师号: ");
					scanf("%d",&new_id);
					L=location(new_id);
					for(;Max!=2&&L!=-1;Max++)
					{
						printf("教师号重复, 请重新输入(你还有%d次输入机会): ",2-Max);
						scanf("%d",&new_id);
						L=location(new_id);
					}
					if(Max==2)return;
					T[id].idnum=new_id;
					break;
				}
		case 2: {
					printf("请输入姓名: ");
					scanf("%s",T[id].name);
					break;
				}
		case 3: {
					printf("请输入性别: ");
					scanf("%s",T[id].sex); 
					break;
				}
		case 4: {
					printf("请输入年龄: ");
					scanf("%d",&T[id].age); 
					break;
				}
		case 5: {
					printf("请输入学历: ");
					scanf("%s",T[id].xueli); 
					break;
				}
		case 6: {
					printf("请输入职称: ");
					scanf("%s",T[id].zhicheng); 
					break;
				}
		case 7: {
					printf("请输入地址: ");
					scanf("%s",T[id].where); 
					break;
				}
		case 8: {
					printf("请输入电话: ");
					scanf("%s",T[id].tel); 
					break;
				}
		case 9: {
					printf("请输入工资: ");
					scanf("%f",&T[id].income); 
					break;
				}
	}
	FILE *fp1,*fp2;
	int i;
	fp2=fopen("temp.bat","a+");
	for(i=0;i<count;i++)
	{
		fwrite(&T[i],sizeof(struct Teacher),1,fp2);
	}
	fclose(fp2);
	remove("teacher.bat");                
	rename("temp.bat", "teacher.bat");
	printf("修改完毕\n"); 
}

void S1()
{
	printf("请输入需要查询的教师号: ");
	int id,L;
	scanf("%d",&id);
	L=location(id); 
	if(L==-1)printf("未查询到该教师号\n");
	else 
	{
		int i=L;
		printf("教师号:%d  姓名:%s  性别:%s  年龄:%d  学历:%s  \n\t 职称:%s  工资:%.2f  地址:%s  电话:%s\n",T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
	}
	system("pause");
}

void S2()
{
	printf("请输入需要查询的职称: ");
	char a[10];
	scanf("%s",a);
	int i,key=-1;
	for(i=0;i<count;i++)
	{
		key=strcmp(a,T[i].zhicheng);
		if(key==0)printf("教师号:%d  姓名:%s  性别:%s  年龄:%d  学历:%s  \n\t 职称:%s  工资:%.2f  地址:%s  电话:%s\n",T[i].idnum,T[i].name,T[i].sex,T[i].age,T[i].xueli,T[i].zhicheng,T[i].income,T[i].where,T[i].tel);
	}
	if(key==-1)
	{
		printf("未找到该职称\n"); 
		system("pause");
		return; 
	}
	system("pause");
}

void Search()
{
	system("cls");
	int key;
	getchar();
	int now=0;
	do
	{
		printf("请选择你需要查询的项目: 1:教师号   2:职称\n");
		scanf("%d",&key);getchar();
		switch(key)
		{
			case 1:S1();now=1;break;
			case 2:S2();now=1;break;
			default:printf("输入有误,请重新输入\n");system("pause"); 
		}
	}while(now==0);
}

void show(int a[])
{
	int i;
	for(i=0;i<count;i++)
	{
		printf("%d  ",a[i]);
	}
	printf("\n");
}

void SL(int a[])
{
	int i,j,temp;
	for(i=0;i<count-1;i++)
	for(j=0;j<count-1-i;j++)
	{
		if(a[j]<a[j+1])
		{
			temp=a[j];
			a[j]=a[j+1];
			a[j+1]=temp;
		}
	}
	printf("降序情况如下:\n");
	show(a);
}

void SR(int a[])
{
	int i,j,temp;
	for(i=0;i<count-1;i++)
	for(j=0;j<count-1-i;j++)
	{
		if(a[j]>a[j+1])
		{
			temp=a[j];
			a[j]=a[j+1];
			a[j+1]=temp;
		}
	}
	printf("升序情况如下:\n");
	show(a);
} 

void S_age()
{
	int age[count];
	int i,ab,now;
	for(i=0;i<count;i++)
	{
		age[i]=T[i].age;
	}
	do
	{
		printf("请选择:1.升序  2.降序\n");
		scanf("%d",&ab);getchar();
		switch(ab)
		{
			case 1:SR(age);now=1;break;
			case 2:SL(age);now=1;break;
			default:printf("输入有误,请重新输入\n");system("pause"); 
		}
	}while(now==0);
}

void S_id()
{
	int id[count];
	int i,ab,now;
	for(i=0;i<count;i++)
	{
		id[i]=T[i].idnum;
	}
	do
	{
		printf("请选择:1.升序  2.降序\n");
		scanf("%d",&ab);getchar();
		switch(ab)
		{
			case 1:SR(id);now=1;break;
			case 2:SL(id);now=1;break;
			default:printf("输入有误,请重新输入\n");system("pause"); 
		}
	}while(now==0);
}

void Sort()
{
	system("cls");
	int key;
	getchar();
	int now=0;
	do
	{
		printf("请选择你需要排序的项目: 1:年龄   2:教师号\n");
		scanf("%d",&key);getchar();
		switch(key)
		{
			case 1:S_age();now=1;break;
			case 2:S_id();now=1;break;
			default:printf("输入有误,请重新输入\n");system("pause"); 
		}
	}while(now==0);
}

int Login()
{
	int n=0;
	int i=0;
	char name[10];
	char mima[]={"123456"};
	do
	{
		system("cls");
		printf("***********************\n");
		printf("*                     *\n");
		printf("*                     *\n");
		printf("*   请输入登录口令:  *\n");
		scanf("%s",&name);
		n++;
		i=strcmp(name,mima);
		if(i!=0)
		{
			printf("口令错误,你还有%d次机会\n\n",3-n);
			system("pause");
		}
		else 
		{
			printf("*  匹配成功, 登陆成功 *\n");
			printf("*                     *\n");
			printf("*                     *\n");
			printf("***********************\n");
			system("pause");
			return 1;
		}
	}while(n<3);
	return 0;
}

void whatyouC()
{
	system("cls");
	printf("*********************************************\n");
	printf("*             教师信息管理系统              *\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("*************   工作次数 %d 次  **************\n",man);
	man++;
}

int DoyouLike()
{
	int in;
	char error[20];
	printf("请输入一个数字指令:");
	scanf("%s",error);
	for(in=0;57<error[0]||error[0]<48||strlen(error)!=1;)
	{
		printf("输入有误,重新输入\n");
		scanf("%s",error);
	}
	in=error[0]-48;
	switch(in)
	{
		case 0:return 0;
		case 1:input();break;
		case 2:Delete();break;
		case 3:showtimE();system("pause");break;
		case 4:Search();break;
		case 5:Change();system("pause");break;
		case 6:Sort();system("pause");break;
		case 7:break;
		default:
		{
			printf("输入有误,请重新输入\n");system("pause");break;
		}
	}
	return 1;
}

void hennsinn()
{
	int key=1;
	do
	{
		whatyouC();
		key=DoyouLike();
	}while(key!=0);
}

void inti()
{
	FILE *fp;
	int i; 
	fp=fopen("teacher.bat","ab+");
	getc(fp);
	if(feof(fp));
	else
	{
		rewind(fp);
	}
	for(i=0;feof(fp)==0;i++)
	{
		fseek(fp,sizeof(struct Teacher)*count,SEEK_SET);
		fread(&T[i],sizeof(struct Teacher),1,fp);
		count++;
		getc(fp);
	}
	fclose(fp);
}

int main()
{
	//int keykey=Login();
	//if(keykey==0)return 0;
	inti();//初始化, 读取文件数据 
	hennsinn();
	return 0;
}

看完后想打我的话记得评论一句。
感谢阅读

时间20200103

你可能感兴趣的:(c语言)