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

题目如下

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


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

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

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

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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

  • 7
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
" " " "学 号: " " 课 程 设 计 "题 目 "教学管理信息系统—教师数据库 " " "设计 " "学 院 "计算机科学与技术学院 " "专 业 " " "班 级 " " "姓 名 " " "指导教师 "唐祖锴 " "2013 "年"01 "月"09 "日 " 课程设计任务书 学生姓名: 专业班级: 指导教师: 唐祖锴 工作单位: 计算机学院 题目:教学管理信息系统——教师数据库设计 初始条件: 大学有多个学院,每个学院有多名教师(教授,讲师,等)。每一门课的主讲教师都 应提前获得该课的主讲资格证,一个教师能具有多门课程的主讲资格证;一门课程的主 讲资格证也可能颁发给多名教师。一个教师可能已主讲过多门课,或多次主讲同一门课 。 要求完成的主要任务: 1. 根据上述的初始条件,进行调查分析并设计适当的属性。设计一个教师数据库,记录教 师的基本信息,主讲资格,讲课经历等,DBMS可选Ms SQL Server、Access、VFP等。 2. 完成课程设计说明书,其格式遵守学校今年的新规定。主要内容包括:需求分析,概念 设计,逻辑设计,物理实现等。 3. 基于该数据库,最好实现一个或多个应用程序(自己确定功能),程序设计语言(工具 )任选。这一项是选作,不作硬性要求。 时间安排: 本学期第18周: 1. 消化资料、系统调查 1天 2. 系统分析 1天 3. 总体设计,实施计划 2天 4. 撰写报告 1天 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 1.引言 1.1项目开发背景 本系统作为大三第一学期《数据库技术》课程的作业。要求采用Borland Delphi 7 和Microsoft SQL Server 2000 做为开发工具开发一个中南大学教学管理系统。 1.2.项目开发的目标 建立一个教务信息管理系统,主要功能为实现对学生,教师,班级,系部,选修,课程 ,授课和用户等基本信息的添加,修改,删除和查询。因为时间不足,而且第一次接触 Borland Delphi 7和Mircosoft SQL Server 2000这两个开发工具,所以并没有设立权限,也没有建立索引和视图等来优化系统功能 。只是实现了对信息的基本处理功能。 1 1.4.数据库系统的选择原则 (1)数据库系统采用易于集成的,开放的技术。 (2)产品质量优异,可靠性高,适于长期运行,能支持关键应用。 (3)数据安全,保安型高。 (4)能提供分布式数据库功能。 (5)支持多种开发环境,软件开发容易。 (6)扩充性和升级能力强。 2.系统分析 2.1.可行性研究 1 2.1.1经济可行性研究 经济可行性--- 估计开发费用以及最终从开发成功的系统所获得的收入或利益,衡量比较支出的费用和收 到的利益。对于一个基于计算机系统的研制项目要在经济方面评价其是否合理,成本- -效益分析要估计出研制开发的花费并与收益(包括有形的可以用货币计数的及无形的 利益)衡量比较。 而该系统的设计只是通过网络自己下载免费开发工具来开发,所以经济方面可行。 2 2.1.2.技术可行性研究 技术可行性--- 分析功能,性能以及限制条件,能否是一个技术上可实现的系统。开发该软件的基本要求 与功能是实现教务信息数据的管理与操作处理,基于数据库系统的数据管理使该软件有更 优异的性能。系统的基本数据流动为教务数据的输入,学生信息,课程信息,教师信息,授 课信息,班级信息,选修信息,系部信息和用户信息的添加与修改,以及有关用户提出的 对教务信息查询要求所产生的数据输出。数据的输入与输出处理流程都依靠数据库的支 持。MicrosoftSQLServer 2000数据的完整性保证性能比较令人满意,该软件设计中保持与其他一些数据库的基本兼 容。就目前使用的开发技术来说系统的功能目标应该能够达到;利用现有的技术在规定 的期限内开发工作基本能够完成。 2.2.业务流程图 经过系统的调查与系统分析得到学生基本信息的基本业务流程图如下: 图2.1学生表操作业务流程图 图2.2给出了教务信息管理业务流程图,图中表明在学生管理模块中要建立一个学生数 据库,学生管理工作中的输入、编辑和查询都与此数据库发生业务。 2.3.系统功能分解图 图2.1粗略给出了整个系统的框架,中南大学教学管理系统分为学生、教师、课程 表操作子功能:对学生的一些基本的信息进行管理工作如:学生的学号、姓名、等进行 管理。 2.4.系统需求分析 1 2.4.1功能需求 1、能够查询学生,教师,班级,专业,课程等所有信息 2、能够通过知道学生,教师教师课程的一个信息找到其它的相关信息(例如:知道学 生的姓名能够找到该学生的所有有关的信息) 3、通过一条信息找到与之匹配的信息(例如:查询同一专业或同班级的所有学生) 4、管
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值