教师工作量计算系统 课程设计 C语言

教师工作量计算系统 C语言

一、软件开发目的

该软件主要是使用C语言设计开发一个简单的计算教师工作量管理系统,实现对工作量的输入、输出、计算、查询和统计功能。

二、数据结构

程序中采用结构体数组存储教师的信息。结构体成员包括:编号、姓名、职称、课程编号、班级数、工作量、代课费。

三、软件功能说明

1.信息的录入和保存:
首先提示输入教师人数,接着是分别输入每个教师生的信息包括:编号、姓名、职称、课程编号、学时、班级数。录入完毕后系统计算生成每个教师的工作量(在输入后计算)(若1个班,则系数为11,2个班,系数为1.52,3个班系数为2*3,用系数乘以学时数即为工作量),代课费(在输入后计算)的计算(若职称为助教(ZJ),则每个工作量的代课费为20,若职称为讲师(JS),则每个工作量的代课费为24,若职称为副教授(FJS),则每个工作量的代课费为28,若职称为教授(JSS),则每个工作量的代课费为32)并保存全部教师相关信息。
2.显示信息:
将教师信息在屏幕上列表输出。要求先显示提示信息“编号、姓名、职称、课程编号、班级数、工作量、代课费”,然后再显示教师信息,每行显示一名教师的信息。
3.查询信息:
按编号和姓名(实现模糊查询)查询,输出编号、姓名、工作量、代课费。
4.修改:
按编号修改, 只能修改课程编号、学时数、班级数,并从新计算工作量和代课费。
5.删除信息:
通过编号对某个教师全部信息进行删除,并将删除后的信息列表输出,以方便用户确认。
6.追加信息:(在原来已有的编号上增加新的工作量)
输入新的工作量信息,将新的信息插入原信息清单中,并将新的信息列表输出,以方便用户确认。
7.统计:
(1)输入编号,输出该教师总的工作量和总代课费;
(2)按照职称统计,各类职称的平均工作量。
8.退出系统,结束任务。

简单回顾一下:

这个题目就是一个简单的结构体的增删改查吧,只不过需要理解一下题目的工作量和代课费的计算方法。

注意事项:

1.班级数只能输 1、2、3(题意)。
2.在输入框尽量全程Capslock(大写锁定),因为教师职称是采用大写匹配的。
3.职称包括:助教(ZJ) 讲师(JS) 副教授(FJS) 教授(JSS) 按括号内单词选择职称输入。
4.输入的变量必须大于四种职称,防止在统计平均工作量时因为除数为零输出异常。

部分运行截图如下:/*图片可能范围太大了,文字会有点看不清楚,请谅解*/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

头文件以及全局变量、结构体数组的定义代码如下:

1.	#include <stdio.h>  
2.	#include <stdlib.h>  
3.	#include <string.h>  
4.	int TcNum;        //全局变量,便于各个函数访问和修改   
5.	struct Teacher{  
6.	    char    Num[10];         // 编号   
7.	    char    Name[20];        // 姓名   
8.	    char    Title[20];       // 职称   
9.	    char    Course[10];      // 课程编号      
10.	    int     Hours;           // 学时   
11.	    int     ClassNum;        // 班级数  
12.	    float     Workload;        // 工作量 = 系数 * 班级 ( 1*1 or 1.5*2 or 2*3)  浮点型   
13.	    float     Fee;             // 代课费 = 工作量 * 不同职称的单位费  浮点型   
14.	}Tc[100];  

废话不多说,甩代码了:

主函数代码如下:

// 主函数,不同的输入调用不同的函数

int main(){
	int choice;
    char ifcontinue;   
    //等待用户选择菜单项
	ShowMenu(); 
    while(1)
    {
    	//system("cls");
    	
        printf("\n请输入你选择的操作 (key in 1-9): ");
        scanf("%d",&choice);
        	//根据用户不同的选择,调用相应的函数               
        switch(choice)
        {
            case 1:  InputSave();        	break;
            case 2:  Display();          	break;
            case 3:  SearchNum(TcNum);   	break;
            case 4:  SearchName(TcNum);  	break;
            case 5:  ChangeInfo();       	break;
            case 6:  DeleteInfo();  	    break;
            case 7:  AddInfo();          	break;
            case 8:  Statistical();      	break;
            case 9:  printf("\n等待您的下次使用!");
					 exit(0);    	     	break;
            default:printf("\n错误的输入!\n");
        }
        printf("\n\n如果你想继续,请输入Y,否则输入任意键结束!  ");
        getchar();
        ifcontinue= getchar();
        if(ifcontinue!='Y')
            break;             
    }	
	return 0;
}

## 完整的代码如下:

```C++
//
//Created by Ep on 2019/6/15 
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int TcNum;        //全局变量,便于各个函数访问和修改 
struct Teacher{
	char    Num[10];         // 编号 
	char    Name[20];		 // 姓名 
	char    Title[20];       // 职称 
	char    Course[10];      // 课程编号	
	int     Hours;           // 学时 
	int     ClassNum;        // 班级数
	float     Workload;        // 工作量 = 系数 * 班级 ( 1*1 or 1.5*2 or 2*3)  浮点型 
	float     Fee;             // 代课费 = 工作量 * 不同职称的单位费    浮点型 
}Tc[100];

//信息的录入和保存 
void InputSave(){
	int  i, j;  //TcNum保存教师人数 
	printf("请输入教师人数:");  
	scanf("%d",&TcNum);  
	for(i=0;i<TcNum;i++){   		//在输入之后进行对工作量和代课费的统计 
		printf("请输入教师%d的\n编号 姓名 职称 课程编号 学时 班级数:(空格分隔)\n",i+1);
		scanf("%s%s%s%s%d%d",Tc[i].Num,Tc[i].Name,Tc[i].Title,Tc[i].Course,&Tc[i].Hours,&Tc[i].ClassNum);
		if(Tc[i].ClassNum == 1)
			Tc[i].Workload = 1 * Tc[i].Hours;
		else if(Tc[i].ClassNum == 2)
			Tc[i].Workload = 3 * Tc[i].Hours;
		else //(Tc[i].ClassNum == 3)
			Tc[i].Workload = 6 * Tc[i].Hours;
		if(strcmp(Tc[i].Title,"ZJ")==0)
			Tc[i].Fee = 20 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"JS")==0)
			Tc[i].Fee = 24 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"FJS")==0)
			Tc[i].Fee = 28 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"JSS")==0)
			Tc[i].Fee = 32 * Tc[i].Workload;
	}		
}
// 按照编号查找信息 
void SearchNum(int TcNum){
	char scnum[10];  	//查找时输入的编号 
	int i;
	printf("\n请输入要查询的编号:");
	scanf("%s",scnum);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Num,scnum)==0){					
			printf("信息如下:\n");
			printf("编号 姓名 工作量 代课费\n");
			printf("%s  %s  %.2f  %.2f",Tc[i].Num,Tc[i].Name,Tc[i].Workload,Tc[i].Fee);
		break;
		}
	}
}

// 按照姓名查找信息 
void SearchName(int TcNum){
	char scname[20];
	int i;
	printf("\n请输入要查询的姓名:");
	scanf("%s",scname);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Name,scname)==0){					
			printf("信息如下:\n");
			printf("编号 姓名 工作量 代课费\n");
			printf("%s  %s  %.2f  %.2f",Tc[i].Num,Tc[i].Name,Tc[i].Workload,Tc[i].Fee);
		break;
		}
	}
}

// 信息修改函数 
void ChangeInfo(){
	char changenum[20];
	int i;
	printf("请输入你要修改的信息的编号:\n");
	scanf("%s",changenum);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Num,changenum)==0){
			printf("请输入修改后的课程编号 学时数 班级数\n");
			scanf("%s%d%d",Tc[i].Course,&Tc[i].Hours,&Tc[i].ClassNum);
		if(Tc[i].ClassNum == 1)
			Tc[i].Workload = 1 * Tc[i].Hours;
		else if(Tc[i].ClassNum == 2)
			Tc[i].Workload = 3 * Tc[i].Hours;
		else //(Tc[i].ClassNum == 3)
			Tc[i].Workload = 6 * Tc[i].Hours;
		if(strcmp(Tc[i].Title,"ZJ")==0)
			Tc[i].Fee = 20 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"JS")==0)
			Tc[i].Fee = 24 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"FJS")==0)
			Tc[i].Fee = 28 * Tc[i].Workload;
		if(strcmp(Tc[i].Title,"JSS")==0)
			Tc[i].Fee = 32 * Tc[i].Workload;
		break;
		}
	}
	printf("修改后的信息如下:\n");
	printf("编号 姓名 职称 课程编号 工作量  代课费:\n",i+1);
	printf("%s  %s %s   %s      %.2f   %.2f\n",Tc[i].Num,Tc[i].Name,Tc[i].Title,Tc[i].Course,Tc[i].Workload,Tc[i].Fee);
}

//信息删除函数
void DeleteInfo(){
	char deletenum[20];
	int i, change;
	printf("请输入要删除的信息的编号:\n");
	scanf("%s",deletenum);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Num,deletenum)==0){
		change = i;
		break;	
		}	
	}
	for(i=0;i<TcNum;i++){
		while(i>=change && i<TcNum){
			for(i=change;i<TcNum;i++){
				strcpy(Tc[i].Num, Tc[i+1].Num);
				strcpy(Tc[i].Name, Tc[i+1].Name);
				strcpy(Tc[i].Title, Tc[i+1].Title);
				strcpy(Tc[i].Course, Tc[i+1].Course);
				Tc[i].Workload = Tc[i+1].Workload;
				Tc[i].Fee = Tc[i+1].Fee;
			}
		break;	
		}	
	}
	TcNum--;
	printf("删除后的信息如下:\n");
	for(i=0;i<TcNum;i++){	
		printf("编号 姓名 职称 课程编号 工作量  代课费:\n",i+1);
		printf("%s  %s %s   %s      %.2f   %.2f\n",Tc[i].Num,Tc[i].Name,Tc[i].Title,Tc[i].Course,Tc[i].Workload,Tc[i].Fee);
	}
}
//信息追加函数
void AddInfo(){
	char addnum[20];
	int i, change;
	int NewHours, NewClassNum, NewWorkload, NewFee;
	printf("请输入要追加的信息的编号:\n");
	scanf("%s",addnum);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Num,addnum)==0){
			change = i;
			break;
		}
	}
	printf("请输入要追加的 学时 班级数:(每个编号的班级总数不能超过3)\n");
	scanf("%d%d", &NewHours, &NewClassNum);
		Tc[change].Hours += NewHours;
		Tc[change].ClassNum += NewClassNum;
		if(Tc[change].ClassNum == 1)
			Tc[change].Workload = 1 * Tc[change].Hours;
		else if(NewClassNum == 2)
			Tc[change].Workload = 3 * Tc[change].Hours;
		else //(NewClassNum == 3)
			Tc[change].Workload = 6 * Tc[change].Hours;
		if(strcmp(Tc[change].Title,"ZJ")==0)
			Tc[change].Fee = 20 * Tc[change].Workload;
		if(strcmp(Tc[change].Title,"JS")==0)
			Tc[change].Fee = 24 * Tc[change].Workload;
		if(strcmp(Tc[change].Title,"FJS")==0)
			Tc[change].Fee = 28 * Tc[change].Workload;
		if(strcmp(Tc[change].Title,"JSS")==0)
			Tc[change].Fee = 32 * Tc[change].Workload;
	for(i=0;i<TcNum;i++){	
		printf("编号 姓名 职称 课程编号 工作量  代课费:\n",i+1);
		printf("%s  %s %s   %s      %.2f   %.2f\n",Tc[i].Num,Tc[i].Name,Tc[i].Title,Tc[i].Course,Tc[i].Workload,Tc[i].Fee);
	}
	
} 

// 统计并输出函数 int类型是因为 当输入的编号不存在时 return0 退出本函数 
int Statistical(){
	int i, sta=0;      //sta暂存该编号的下标 
	char stanum[20]; // 暂存要查看的编号的字符串数组 
	float ZJworkload = 0, JSworkload = 0, FJSworkload = 0, JSSworkload = 0;  // 分别用来统计每个职称下的总工作量 
	float ZJsum = 0, JSsum = 0, FJSsum = 0, JSSsum = 0;    //统计每个职称教师的数量,便于最后求平均值 
	printf("请输入要查看的编号:\n");
	scanf("%s",stanum);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Num,stanum)==0){
			sta = i;
			break;
		}
	}
	if((sta+1) == TcNum){
		printf("不存在该编号!\n");
		return 0;
	}
	else{	
	printf("该教师的总工作量  总代课费:\n");
	printf("%.2f  %.2f",Tc[sta].Workload,Tc[sta].Fee);
	for(i=0;i<TcNum;i++){
		if(strcmp(Tc[i].Title,"ZJ")==0){
			ZJworkload += Tc[i].Workload;
			ZJsum++;	
		}	
		if(strcmp(Tc[i].Title,"JS")==0){
			JSworkload += Tc[i].Workload;
			JSsum++;
		}	
		if(strcmp(Tc[i].Title,"FJS")==0){
			FJSworkload += Tc[i].Workload;
			FJSsum++;
		}	
		if(strcmp(Tc[i].Title,"JSS")==0){
			JSSworkload += Tc[i].Workload;
			JSSsum++;
		}		
	}
	}
	printf("\n\n各职称的平均工作量如下:\n");
	if(ZJsum == 0)
		ZJworkload = 0;
	if(JSsum == 0)
		JSworkload = 0;
	if(FJSsum == 0)
		FJSworkload = 0;
	if(JSSsum == 0)
		JSSworkload = 0;
	printf("ZJ   JS   FJS   JSS\n");
	printf("%.2f %.2f %.2f %.2f", ZJworkload/ZJsum, JSworkload/JSsum, FJSworkload/FJSsum, JSSworkload/JSSsum);
}
//print函数用于在显示菜单时,打印星号和空格。
void print(char c, int n)
{
    int i;
    for(i=1;i<=n;i++)
        putchar(c);
}
//信息显示函数 
void Display(){
	int i;
	printf("教师信息显示如下:\n");
	for(i=0;i<TcNum;i++){	
		printf("编号 姓名 职称 课程编号 工作量  代课费:\n",i+1);
		printf("%s  %s %s   %s      %.2f   %.2f\n",Tc[i].Num,Tc[i].Name,Tc[i].Title,Tc[i].Course,Tc[i].Workload,Tc[i].Fee);
	}
}
//显示菜单
void ShowMenu(){
    putchar('\n');
    print(' ',10);
    print('*',60);
    putchar('\n');
    print(' ',20);
    printf("1--信 息 录 入\n");
    print(' ',20);
    printf("2--信 息 显 示\n"); 
    print(' ',20);
    printf("3--查 询 (按编号)\n");
    print(' ',20);
    printf("4--查 询 (按姓名)\n");
    print(' ',20);
    printf("5--修 改\n");
    print(' ',20);
    printf("6--删 除\n");
    print(' ',20);
    printf("7--追 加\n");
    print(' ',20);
    printf("8--统 计\n");
    print(' ',20); 
    printf("9--退 出 系 统\n");
    print(' ',10);
    print('*',60);
    putchar('\n');
}
// 主函数,不同的输入调用不同的函数 
int main(){
	int choice;
    char ifcontinue;   
    //等待用户选择菜单项
	ShowMenu(); 
    while(1)
    {
    	//system("cls");
    	
        printf("\n请输入你选择的操作 (key in 1-9): ");
        scanf("%d",&choice);
        	//根据用户不同的选择,调用相应的函数               
        switch(choice)
        {
            case 1:  InputSave();        	break;
            case 2:  Display();          	break;
            case 3:  SearchNum(TcNum);   	break;
            case 4:  SearchName(TcNum);  	break;
            case 5:  ChangeInfo();       	break;
            case 6:  DeleteInfo();  	    break;
            case 7:  AddInfo();          	break;
            case 8:  Statistical();      	break;
            case 9:  printf("\n等待您的下次使用!");
					 exit(0);    	     	break;
            default:printf("\n错误的输入!\n");
        }
        printf("\n\n如果你想继续,请输入Y,否则输入任意键结束!  ");
        getchar();
        ifcontinue= getchar();
        if(ifcontinue!='Y')
            break;             
    }	
	return 0;
}

这就是之前帮同学做的一个小小的C语言课设,指尖在键盘上飞跃的感觉真滴爽瑟瑟发抖。都看到最后了,还不赶紧点个赞膜拜一波?希望大家多多支持,不吝赐教。你们的支持就是我最大的动力。
在这里插入图片描述

  • 52
    点赞
  • 185
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值