C语言期末设计不在是千篇一律的学生管理系统,新题设值教师工作量管理系统(数组)。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

题设为模拟学校管理老师工作量程序。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目分析

  • 基本功能概述    
  1.  教师信息录入。
  2. 查询某一教师工作量 。
  3. 所有教师工作量统计。
  4. 教师信息的修改。
  5. 删除教师信息。
  6. 教师信息的排序。
  • 设计要求
  1. 使用结构体保存教师信息
  2. 使用文件系统持久化存储教师信息。

二、使用步骤

1.流程图

2.代码

  • 头文件和结构体

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define  head printf("编号\t姓名\t\t称号\t\t教授课程\t课程时长\t科研信息\t科研计分\t工作量\n");  
#define out 	printf("%-8d%-16s%-16s%-16s%-16d%-16s%-16d%-8.2f\n",te[i].num,te[i].name,te[i].age,te[i].course,te[i].hour,te[i].science,te[i].cent,te[i].work);
struct teacher//
{	int num;//编号 
	char name[10];教师姓名
	char age[10];//教师级别  
	char course[20];//哪门课 
	char science[30];//教师的科研信息
    int hour;//这门课的课时
	int cent;//科研信息计分 
	double  work;//教师工作量

}te[100];
  • 从txt文件获取保存的教师人数

int OpenFile()//获取人数 
{int i=0,cnt=0; //cnt表示获取到的人数。
FILE *fp=NULL;
fp=fopen("C:\\Users\\HUAWEI\\Desktop\\teacher.txt","r+");//填写你电脑上的txt文件路径
if(fp==NULL)
{
	printf("打开文件失败");
	exit(0);
	}
	while(!feof(fp))//feof当读取到文件末尾是返回true
	{
		if(fread(&te[i],sizeof(struct teacher),1,fp)==0)//文件流读取二进制文件
		{
                break;
		}
	    i++;		  
	}
		cnt=i;
	return cnt;	//返回获取到的教师人数。
}

自动保存到文件函数

void save(int cnt)//保存 
{
	FILE * fp;
	int i;
	printf("开始保存记录.....\n");

	fp=fopen("C:\\Users\\HUAWEI\\Desktop\\teacher.txt","r+");
		for(i=0;i<cnt;i++)
		{
			fwrite(&te[i],sizeof(struct teacher),1,fp);写入二进制文件
		}
		fclose(fp);
	
	
}

查找数据位置

int Location(int num,int cnt)//获取地址 
{
	int i,p=-1;
	for(i=0;i<cnt;i++)
	{
		if(num==te[i].num)
		{
			p=i;
			break;
		}
	}
	return p;
save(cnt);

}

主界面(menu)

 Menu(int cnt)
 {int n;
 	while(1)
 	{ 
        printf("         教师工作量管理系统\n");
        printf("1.教师信息录入         2.查询教师工作量\n");
        printf("3.教师信息修改         4.教师工作量统计结果输出\n");
        printf("5.删除教师信息         6.教师信息排序\n");	
        printf("0.退出系统\n");
        scanf("%d",&n);
      switch(n)
      { 
        case 0:exit(0);break;
	    case 1:cnt=addteacher(cnt);break;
	    case 3:modify(cnt);break;
	    case 4:output(cnt);break;
	    case 5:cnt=deleteteacher(cnt);break;
	    case 2: Query(cnt);break;
	    case 6:sort(cnt);break;	
      }
    system("cls");
    }
}

 添加教师数据函数

int addteacher(int cnt)
{
	int i=0,num;
	while(true){
		printf("请输入编号");
		scanf("%d",&num);
		for(int j=0;j<cnt;j++)
		{
			if(te[j].num==num)
			{
				printf("该编号已经存在");
				scanf("%d",&num);
				j=-1; 
			}
		 } 
		 te[i].num=num;
		 getchar();
		 printf("请输入教师姓名");
		 gets(te[i].name);
		 printf("请输入教师称号");
		 gets(te[i].age);
		 printf("请输入教师所教课程");
		 gets(te[i].course);
		 printf("请输入教师课程时长");
		 scanf("%d",&te[i].hour);
		 getchar(); 
		 printf("请输入科研信息");
		 gets(te[i].science);
		 printf("请输入科研计分(1~10分)"); 
		 scanf("%d",&te[i].cent);
		
		  te[i].work=0.8*te[i].hour+10*te[i].cent;//工作量的计算
		 cnt++;i++;int n;
		
		 printf("是否继续添加 1.继续 2.退出");
		 scanf("%d",&n);
		 if(n!=1){
		 	break;
		 }
		 
	}
	save(cnt);
	return cnt;
}

查询某一教师

void Query(int cnt)//查询
{
	int num,i,choice,p,querycnt=0;
	char name[13];
	printf("开始查询记录.....");
	printf("请选择查询方式:(1 按编号  2 按姓名):");
	scanf("%d",&choice);
	if(choice==1)
	{
		printf("请输入要查询的编号:");
		scanf("%d",&num);
		p=Location(num,cnt);//通过location函数获取到被查询教师存储地址
		if(p==-1)
		{
			printf("查询失败,记录不存在,"); 
		}
		else
		{
			i=p;
			printf("查询成功,要查询的教师信息如下:\n");
			head;
			out; 
		}
	}
	else
	{
		getchar();
		printf("请输入要查询的教师:");
		gets(name);
		for(i=0;i<cnt;i++)
		{
			if(strcmp(name,te[i].name)==0)
			{
				if(querycnt==0)
				{
					head;
				}
				out; 
		}
				querycnt++;	
			}
		
		if(querycnt==0)
		{
			printf("查询失败,查询的教师不存在。");
		}	
	}
	getchar();
	getchar();
}

教师信息修改

void modify(int cnt)
{
	int num,i,p; 
	printf("请输入要修改的编号:");
	scanf("%d",&num);
	p=Location(num,cnt);
	if(p==-1)
	{
		printf("修改失败,记录不存在,"); 
	}
	else
	{i=p;
		printf("请输入编号"); 
		 scanf("%d",&te[i].num);
		 getchar();
		 printf("请输入教师姓名");
		 gets(te[i].name);
		 printf("请输入教师称号");
		 gets(te[i].age);
		 printf("请输入课程");
		 gets(te[i].course); 
		 printf("请输入教师课程时长");
		 scanf("%d",&te[i].hour);
		 getchar();
		 printf("请输入科研信息");
		 gets(te[i].science);
		 printf("请输入科研计分(1~10分)"); 
		 scanf("%d",&te[i].cent);
		 te[i].work=0.8*te[i].hour+10*(te[i].cent);
	}
	getchar();printf("按任意键返回主菜单....");getchar();
	save(cnt); 
}

教师总工作量统计

 void output(int cnt){
	int i=0; 
	double average=0,sum=0; 
	for(i=0;i<cnt;i++){
	sum+=te[i].work;
	}
	average=(double)(sum/i);
printf("所有教师工作量:%.2f课时 \n教师平均工作量%.2f时\n",sum,average);
printf("教师个人工作量统计(0.8×课时+10×科研计分)\n");
head;
for(i=0;i<cnt;i++){
out;
}
getchar();
getchar();
}

删除教师信息

int deleteteacher(int cnt) 
{
	int i,num,p;
	printf("开始删除记录.....");
	printf("请输入要删除的编号:");
	scanf("%d",&num);
	p=Location(num,cnt);
	if(p==-1)
	{
		printf("删除失败,教师信息不存在,"); 
	}
	else
	{
		i=p;
		printf("要删除的教师信息如下:\n\n");
	head;
out;
		for(;i<cnt-1;i++)
		{
			te[i]=te[i+1];
		}
		cnt--;	
	}
	getchar(); getchar();
	save(cnt);
		return cnt;
}

教师信息排序(冒泡)

 void sort(int cnt){
int i,j,n;
teacher t;
printf("1(按编号),2(按工作量)");
scanf("%d",&n);
if(n==1){
for(i=0;i<cnt;i++){
 for(j=0;j<cnt-i-1;j++){
 	if(te[j].num>te[j+1].num){
	 t=te[j];
	 te[j]=te[j+1];
	 te[j+1]=t;
	 }
	 }
 }printf("排序成功");
} 	
else if(n==2){
for(i=0;i<cnt;i++){
 for(j=0;j<cnt-i-1;j++){
 	if(te[j].work>te[j+1].work){
	 t=te[j];
	 te[j]=te[j+1];
	 te[j+1]=t;
	 }
	 }
 }	
 printf("排序成功");
 
}
else{
	printf("输入错误");
}
getchar(); 
getchar(); 
}

main函数

int main()
{ 
int count=0;
count=OpenFile();
Menu(count);
	
	return 0;
}

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define  head printf("编号\t姓名\t\t称号\t\t教授课程\t课程时长\t科研信息\t科研计分\t工作量\n");  
#define out 	printf("%-8d%-16s%-16s%-16s%-16d%-16s%-16d%-8.2f\n",te[i].num,te[i].name,te[i].age,te[i].course,te[i].hour,te[i].science,te[i].cent,te[i].work);
struct teacher//哪门课好多课时,科研信息记好多分 
{	int num;//编号 
	char name[10];
	char age[10];//级别 
	int hour;//这门课的课时 
	char course[20];//哪门课 
	char science[30];
	int cent;//科研信息计分 
	double  work;

}te[100];
int OpenFile()//获取人数 
{int i=0,cnt=0;
FILE *fp=NULL;
fp=fopen("C:\\Users\\HUAWEI\\Desktop\\teacher.txt","r+");
if(fp==NULL)
{
	printf("打开文件失败");
	exit(0);
	}
	while(!feof(fp)) 
	{
		if(fread(&te[i],sizeof(struct teacher),1,fp)==0)
		{
break;
		}
	i++;		  
	}
		cnt=i;
	return cnt;	
}
void save(int cnt)//保存 
{
	FILE * fp;
	int i;
	printf("开始保存记录.....\n");

	fp=fopen("C:\\Users\\HUAWEI\\Desktop\\teacher.txt","r+");
		for(i=0;i<cnt;i++)
		{
			fwrite(&te[i],sizeof(struct teacher),1,fp);
		}
		fclose(fp);
	
	
}
int addteacher(int cnt)
{
	int i=0,num;
	while(true){
		printf("请输入编号");
		scanf("%d",&num);
		for(int j=0;j<cnt;j++)
		{
			if(te[j].num==num)
			{
				printf("该编号已经存在");
				scanf("%d",&num);
				j=-1; 
			}
		 } 
		 te[i].num=num;
		 getchar();
		 printf("请输入教师姓名");
		 gets(te[i].name);
		 printf("请输入教师称号");
		 gets(te[i].age);
		 printf("请输入教师所教课程");
		 gets(te[i].course);
		 printf("请输入教师课程时长");
		 scanf("%d",&te[i].hour);
		 getchar(); 
		 printf("请输入科研信息");
		 gets(te[i].science);
		 printf("请输入科研计分(1~10分)"); 
		 scanf("%d",&te[i].cent);
		
		  te[i].work=0.8*te[i].hour+10*te[i].cent;
		 cnt++;i++;int n;
		
		 printf("是否继续添加 1.继续 2.退出");
		 scanf("%d",&n);
		 if(n!=1){
		 	break;
		 }
		 
	}
	save(cnt);
	return cnt;
}
int Location(int num,int cnt)//获取地址 
{
	int i,p=-1;
	for(i=0;i<cnt;i++)
	{
		if(num==te[i].num)
		{
			p=i;
			break;
		}
	}
	return p;
save(cnt);

}
void modify(int cnt)
{
	int num,i,p; 
	printf("请输入要修改的编号:");
	scanf("%d",&num);
	p=Location(num,cnt);
	if(p==-1)
	{
		printf("修改失败,记录不存在,"); 
	}
	else
	{i=p;
		printf("请输入编号"); 
		 scanf("%d",&te[i].num);
		 getchar();
		 printf("请输入教师姓名");
		 gets(te[i].name);
		 printf("请输入教师称号");
		 gets(te[i].age);
		 printf("请输入课程");
		 gets(te[i].course); 
		 printf("请输入教师课程时长");
		 scanf("%d",&te[i].hour);
		 getchar();
		 printf("请输入科研信息");
		 gets(te[i].science);
		 printf("请输入科研计分(1~10分)"); 
		 scanf("%d",&te[i].cent);
		 te[i].work=0.8*te[i].hour+10*(te[i].cent);
	}
	getchar();printf("按任意键返回主菜单....");getchar();
	save(cnt); 
}
 void output(int cnt){
	int i=0; 
	double average=0,sum=0; 
	for(i=0;i<cnt;i++){
	sum+=te[i].work;
	}
	average=(double)(sum/i);
printf("所有教师工作量:%.2f课时 \n教师平均工作量%.2f时\n",sum,average);
printf("教师个人工作量统计(0.8×课时+10×科研计分)\n");
head;
for(i=0;i<cnt;i++){
out;
}
getchar();
getchar();
}
int deleteteacher(int cnt) 
{
	int i,num,p;
	printf("开始删除记录.....");
	printf("请输入要删除的编号:");
	scanf("%d",&num);
	p=Location(num,cnt);
	if(p==-1)
	{
		printf("删除失败,教师信息不存在,"); 
	}
	else
	{
		i=p;
		printf("要删除的教师信息如下:\n\n");
	head;
out;
		for(;i<cnt-1;i++)
		{
			te[i]=te[i+1];
		}
		cnt--;	
	}
	getchar(); getchar();
	save(cnt);
		return cnt;
}
void Query(int cnt)//查询
{
	int num,i,choice,p,querycnt=0;
	char name[13];
	printf("开始查询记录.....");
	printf("请选择查询方式:(1 按编号  2 按姓名):");
	scanf("%d",&choice);
	if(choice==1)
	{
		printf("请输入要查询的编号:");
		scanf("%d",&num);
		p=Location(num,cnt);
		if(p==-1)
		{
			printf("查询失败,记录不存在,"); 
		}
		else
		{
			i=p;
			printf("查询成功,要查询的教师信息如下:\n");
			head;
			out; 
		}
	}
	else
	{
		getchar();
		printf("请输入要查询的教师:");
		gets(name);
		for(i=0;i<cnt;i++)
		{
			if(strcmp(name,te[i].name)==0)
			{
				if(querycnt==0)
				{
					head;
				}
				out; 
		}
				querycnt++;	
			}
		
		if(querycnt==0)
		{
			printf("查询失败,查询的教师不存在。");
		}
		
	}	
	
	getchar();
	getchar();
}
 void sort(int cnt){
int i,j,n;
teacher t;
printf("1(按编号),2(按工作量)");
scanf("%d",&n);
if(n==1){
for(i=0;i<cnt;i++){
 for(j=0;j<cnt-i-1;j++){
 	if(te[j].num>te[j+1].num){
	 t=te[j];
	 te[j]=te[j+1];
	 te[j+1]=t;
	 }
	 }
 }printf("排序成功");
} 	
else if(n==2){
for(i=0;i<cnt;i++){
 for(j=0;j<cnt-i-1;j++){
 	if(te[j].work>te[j+1].work){
	 t=te[j];
	 te[j]=te[j+1];
	 te[j+1]=t;
	 }
	 }
 }	
 printf("排序成功");
 
}
else{
	printf("输入错误");
}
getchar(); 
getchar(); 
}
 Menu(int cnt)
 {int n;
 	while(1)
 	{ 
 printf("         教师工作量管理系统\n");
printf("1.教师信息录入         2.查询教师工作量\n");
printf("3.教师信息修改         4.教师工作量统计结果输出\n");
printf("5.删除教师信息         6.教师信息排序\n");	
printf("0.退出系统\n");
scanf("%d",&n);
switch(n)
{   case 0:exit(0);break;
	case 1:cnt=addteacher(cnt);break;
	case 3:modify(cnt);break;
	case 4:output(cnt);break;
	case 5:cnt=deleteteacher(cnt);break;
	case 2: Query(cnt);break;
	case 6:sort(cnt);break;
	
}
system("cls");
}

}
int main()
{ 
int count=0;
count=OpenFile();
Menu(count);
	
	return 0;
}

总结

  • 15
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
#include #include #include #include #include #define MAX_NAME 20 #define NULL 0 struct course { char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; struct course *next; }; struct teacher { char teacher_num[MAX_NAME]; char teacher_name[MAX_NAME]; struct teacher *next; struct course *chead; struct course *ctail; }; struct teacher *thead,*ttail,*found; //*********************************************************************** //主菜单 void menu() { system("cls"); printf("*************************************\n"); printf("* 1.输入教师信息 *\n"); printf("* 2.插入授课信息 *\n"); printf("* 3.工作量计算与显示 *\n"); printf("* 4.退出 *\n"); printf("*************************************\n"); printf("请输入要操作的序号:"); } int isExist(char number[]) //判断输入的教师号是否已经存在 { struct teacher *p; p=thead; while(p!=NULL && (strcmp(p->teacher_num,number)!=0)) p=p->next; found=p; if(p==NULL) return 0; else return 1; } //************************************************************************ //增加教师教学信息模块 void addIn() { struct teacher *p; struct course *pcourse; char teacher_num[MAX_NAME]; char teacher_name[MAX_NAME]; char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; while(1) { system("cls"); printf("****************************************************\n"); printf("* 输入教师的信息,以输入教师号为#结束输入 *\n"); printf("****************************************************\n"); printf("输入教师号:"); fflush(stdin); scanf("%s",teacher_num); if(isExist(teacher_num)) { printf("!!!该教师号已经存在,请重输入。\n按任意键重输入...\n"); getch(); } else { if(strcmp(teacher_num,"#")==0) { printf("**************************************************\n"); printf("输入结束。按任意键返回主菜单...\n"); getch(); return; } printf("输入教师姓名:");fflush(stdin);scanf("%s",teacher_name); printf("****************************************************\n"); printf("* 输入教师授课信息 *\n"); printf("****************************************************\n"); printf("输入课程名称:");fflush(stdin);scanf("%s",course_name); printf("输入班级数目:");fflush(stdin);scanf("%d",&class_num); printf("输入理论课时:");fflush(stdin);scanf("%d",&ch_per); printf("输入实验课时:");fflush(stdin);scanf("%d",&ex_per); pcourse=(struct course *)malloc(sizeof(struct course)); strcpy(pcourse->course_name,course_name); pcourse->class_num=class_num; pcourse->ch_per=ch_per; pcourse->ex_per=ex_per; pcourse->next=NULL; p=(struct teacher *)malloc(sizeof(struct teacher)); strcpy(p->teacher_num,teacher_num); strcpy(p->teacher_name,teacher_name); p->chead=pcourse; p->ctail=pcourse; if(thead==NULL) { thead=p; ttail=p; } else { ttail->next=p; ttail=p; } ttail->next=NULL; } } } //************************************************************************ //插入教师授课信息模块 void addCourseInfo() { struct course *pcourse; char teacher_num[MAX_NAME]; char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; system("cls"); if(thead==NULL) { printf("****************************************************\n"); printf("* 当前没有可用的教师信息,按任意键返回主菜单... *\n"); printf("****************************************************\n"); getch(); return; } while(1) { system("cls"); printf("输入教师号:");fflush(stdin);scanf("%s",teacher_num); if(isExist(teacher_num)) break; else { printf("!!!该教师号不存在,请重输入.\n按任意键重输入...\n"); getch(); } } printf("****************************************************\n"); printf("* 输入教师授课信息 *\n"); printf("****************************************************\n"); printf("输入课程名称:");fflush(stdin);scanf("%s",course_name); printf("输入班级数目:");fflush(stdin);scanf("%d",&class_num); printf("输入理论课时:");fflush(stdin);scanf("%d",&ch_per); printf("输入实验课时:");fflush(stdin);scanf("%d",&ex_per); pcourse=(struct course *)malloc(sizeof(struct course)); strcpy(pcourse->course_name,course_name); pcourse->class_num=class_num; pcourse->ch_per=ch_per; pcourse->ex_per=ex_per; pcourse->next=NULL; found->ctail->next=pcourse; found->ctail=pcourse; } //************************************************************************ //计算并显示 void calcu() { struct teacher *p; struct course *pcourse; float single_per=0.0; float total_per=0.0; system("cls"); if(thead==NULL) { printf("****************************************************\n"); printf("* 当前没有可用的教师信息,按任意键返回主菜单... *\n"); printf("****************************************************\n"); getch(); return; } p=thead; while(p!=NULL) { total_per=0.0; printf("----------------------------------------------------------------------\n"); printf("教师号:%s\n",p->teacher_num); printf("教师姓名:%s\n",p->teacher_name); printf("----------------------------------------------------------------------\n"); printf("课程名称 班级数目 理论课时 实验课时 单教学任务总课时\n"); printf("----------------------------------------------------------------------\n"); pcourse=p->chead; while(pcourse!=NULL) { single_per=0.0; if(pcourse->class_num==1) single_per=pcourse->ch_per+pcourse->ex_per; if(pcourse->class_num==2) single_per=1.5*(pcourse->ch_per+pcourse->ex_per); if(pcourse->class_num==3) single_per=2.0*(pcourse->ch_per+pcourse->ex_per); if(pcourse->class_num>=4) single_per=2.5*(pcourse->ch_per+pcourse->ex_per); printf("%-10s%-10d%-10d%-10d%-7.3f\n",pcourse->course_name,pcourse->class_num,pcourse->ch_per,pcourse->ex_per,single_per); total_per+=single_per; pcourse=pcourse->next; } printf("----------------------------------------------------------------------\n"); printf("一个学期总的教学工作量:%7.3f\n",total_per); printf("----------------------------------------------------------------------\n\n\n\n"); p=p->next; } printf("\t****************************************************\n"); printf("\t* 已经显示完毕,按任意键返回主菜单... *\n"); printf("\t****************************************************\n"); getch(); } //************************************************************************ //主函数 void main() { int order; while(1) { menu(); fflush(stdin); scanf("%d",&order); switch (order) { case 1:addIn();break; case 2:addCourseInfo();break; case 3:calcu();break; case 4:exit(0);break; default: printf("输入的序号有误,请检查后重输入...\n"); getch(); break; } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值