教师工作量计算系统 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语言课设,指尖在键盘上飞跃的感觉真滴爽瑟瑟发抖。都看到最后了,还不赶紧点个赞膜拜一波?希望大家多多支持,不吝赐教。你们的支持就是我最大的动力。

教师工作量计算系统 课程设计 C语言相关推荐

  1. 基于ACCESS的教师工作量计算系统的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 设计(论文) 题    目    基于ACCESS的教师工作量计算系统的设计与实现 摘  要 教 ...

  2. 中英翻译机c语言实验报告引言,课程设计--C语言关键字中英翻译机.doc

    课程设计--C语言关键字中英翻译机.doc 课 程 设 计 报 告学院.系 吉林大学珠海学院计算机科学与技术系专业名称 计算机科学与技术课程设计科目 C 语言程序课程设计所在班级 4 班学生学号 04 ...

  3. c语言关键字中英翻译机课程设计,课程设计--C语言关键字中英翻译机.doc

    课程设计--C语言关键字中英翻译机 课 程 设 计 报 告 学院.系:吉林大学珠海学院计算机科学与技术系专业名称:计算机科学与技术课程设计科目C语言程序课程设计所在班级:4班学生学号:学生姓名:曾伟雄 ...

  4. c语言关键词中英翻译机编程,课程设计--C语言关键字中英翻译机

    <课程设计--C语言关键字中英翻译机>由会员分享,可在线阅读,更多相关<课程设计--C语言关键字中英翻译机(21页珍藏版)>请在人人文库网上搜索. 1.课课 程程 设设 计计 ...

  5. c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc

    编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...

  6. c语言程序课程设计投票程序,C语言课程设计--C语言投票程序.doc

    C语言课程设计--C语言投票程序 C程序设计实习报告 题目:C语言投票程序 学 院: 专 业: 姓 名: 班级学号 指导教师: 2010 年 07 月 17 日 目录 一.课程设计题目描述与要求--- ...

  7. 重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc

    重言式判别 重言式判别源码及课程设计 c语言版 重言式的判别 题目: 一个逻辑表达式如果对于其変元的任一种取值都为真,则称为重言式:反之,如果对于其变元的任一种取值都为假,则称为矛盾式:然而,更多的情 ...

  8. c语言大一课程设计,大一课程设计(C语言).doc

    大一课程设计(C语言) 一. 课程设计目的和要求 (一). 课程设计目的 本课程设计是重要的实践性环节之一,是在学生学习完<程序设计语言(C)>课程后进行的一次全面的综合练习.本课程设计的 ...

  9. 数据结构与算法课程设计——C语言《职员薪资查询系统》

    数据结构与算法课程设计--C语言<职员薪资查询系统> 温馨提示:课设要自己去操作,自己写代码,可以借鉴他人代码,学习思路和一些操作,切不可完全抄袭!!! 总体说明:设计一个职员薪资查询系统 ...

最新文章

  1. 网易云音乐的消息队列改造之路
  2. 注解图Annotation
  3. void*与int互转
  4. 2.Linux技能要求
  5. MM中如何更改物料的评估类
  6. tutorial_coreos 01-01-install 2015-05-27
  7. 【Linux】一步一步学Linux——lsattr命令(116)
  8. VirtualBox下安装Ubuntu Server 16.04
  9. 使用Set求两个数组的并集|| 交集||差集
  10. 《剑指offer》-合并两个排序的链表
  11. rust全息要啥才能做_在 Rust 中不能做什么
  12. 华为手机计算机小游戏,华为手机怎么玩自带小游戏 | 手游网游页游攻略大全
  13. Linux桌面文件被隐藏,在Deepin系统中隐藏桌面图标的好办法
  14. ArrayList扩容机制
  15. 『运维自媒体联盟』限时特供学习资源大礼包
  16. [004]Python数据类型二_python_全栈基础
  17. 华为荣耀8青春版手机无限重启,系统修复后, 与usb有关的奇怪问题
  18. 【高老师软件需求分析】20级云班课习题答案合集
  19. 在…视域下是什么意思_视阈是什么意思论文范文 有关教师在社会视域中的角色认知毕业论文写作资料...
  20. 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础

热门文章

  1. 光伏电池PV建模,基于Boost/Buck电路实现最大功率追踪MPPT,包括扰动观察法
  2. 汇编语言相关指令介绍(二)
  3. [Cadence Sigrity] PowerDC打开提示No license available
  4. WoShop分销积分直播短视频商城全开源无加密商城源码
  5. 5.4 数值分析: 牛顿插值多项式及余项
  6. WinEdt 与 SumatraPDF 的正反向搜索功能
  7. ssm+Vue计算机毕业设计学生在线请假管理系统(程序+LW文档)
  8. 超级搜索术前4节课思维导图
  9. html设计一张试卷算分,html5模拟试卷
  10. 学习笔记 | 深度森林 Deep Forest