教师工作量计算系统 课程设计 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语言课设,指尖在键盘上飞跃的感觉真滴爽瑟瑟发抖。都看到最后了,还不赶紧点个赞膜拜一波?希望大家多多支持,不吝赐教。你们的支持就是我最大的动力。
教师工作量计算系统 课程设计 C语言相关推荐
- 基于ACCESS的教师工作量计算系统的设计与实现(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 设计(论文) 题 目 基于ACCESS的教师工作量计算系统的设计与实现 摘 要 教 ...
- 中英翻译机c语言实验报告引言,课程设计--C语言关键字中英翻译机.doc
课程设计--C语言关键字中英翻译机.doc 课 程 设 计 报 告学院.系 吉林大学珠海学院计算机科学与技术系专业名称 计算机科学与技术课程设计科目 C 语言程序课程设计所在班级 4 班学生学号 04 ...
- c语言关键字中英翻译机课程设计,课程设计--C语言关键字中英翻译机.doc
课程设计--C语言关键字中英翻译机 课 程 设 计 报 告 学院.系:吉林大学珠海学院计算机科学与技术系专业名称:计算机科学与技术课程设计科目C语言程序课程设计所在班级:4班学生学号:学生姓名:曾伟雄 ...
- c语言关键词中英翻译机编程,课程设计--C语言关键字中英翻译机
<课程设计--C语言关键字中英翻译机>由会员分享,可在线阅读,更多相关<课程设计--C语言关键字中英翻译机(21页珍藏版)>请在人人文库网上搜索. 1.课课 程程 设设 计计 ...
- c语言实现编译器编译原理,编译原理课程设计--C语言编译器实现.doc
编译原理课程设计--C语言编译器实现 甘肃政法学院 编译原理课程设计 题 目 C语言编译器实现 计算机科学学院计算机科学与技术专业10 级 计本 班 学 号: 201081010137 姓 名: 杨青 ...
- c语言程序课程设计投票程序,C语言课程设计--C语言投票程序.doc
C语言课程设计--C语言投票程序 C程序设计实习报告 题目:C语言投票程序 学 院: 专 业: 姓 名: 班级学号 指导教师: 2010 年 07 月 17 日 目录 一.课程设计题目描述与要求--- ...
- 重言式判别c语言中文网,重言式判别 重言式判别源码及课程设计 c语言版.doc
重言式判别 重言式判别源码及课程设计 c语言版 重言式的判别 题目: 一个逻辑表达式如果对于其変元的任一种取值都为真,则称为重言式:反之,如果对于其变元的任一种取值都为假,则称为矛盾式:然而,更多的情 ...
- c语言大一课程设计,大一课程设计(C语言).doc
大一课程设计(C语言) 一. 课程设计目的和要求 (一). 课程设计目的 本课程设计是重要的实践性环节之一,是在学生学习完<程序设计语言(C)>课程后进行的一次全面的综合练习.本课程设计的 ...
- 数据结构与算法课程设计——C语言《职员薪资查询系统》
数据结构与算法课程设计--C语言<职员薪资查询系统> 温馨提示:课设要自己去操作,自己写代码,可以借鉴他人代码,学习思路和一些操作,切不可完全抄袭!!! 总体说明:设计一个职员薪资查询系统 ...
最新文章
- 网易云音乐的消息队列改造之路
- 注解图Annotation
- void*与int互转
- 2.Linux技能要求
- MM中如何更改物料的评估类
- tutorial_coreos 01-01-install 2015-05-27
- 【Linux】一步一步学Linux——lsattr命令(116)
- VirtualBox下安装Ubuntu Server 16.04
- 使用Set求两个数组的并集|| 交集||差集
- 《剑指offer》-合并两个排序的链表
- rust全息要啥才能做_在 Rust 中不能做什么
- 华为手机计算机小游戏,华为手机怎么玩自带小游戏 | 手游网游页游攻略大全
- Linux桌面文件被隐藏,在Deepin系统中隐藏桌面图标的好办法
- ArrayList扩容机制
- 『运维自媒体联盟』限时特供学习资源大礼包
- [004]Python数据类型二_python_全栈基础
- 华为荣耀8青春版手机无限重启,系统修复后, 与usb有关的奇怪问题
- 【高老师软件需求分析】20级云班课习题答案合集
- 在…视域下是什么意思_视阈是什么意思论文范文 有关教师在社会视域中的角色认知毕业论文写作资料...
- 埃及通信和信息技术部使用 OpenText ECM 内容服务平台为电子政务转型奠定基础
热门文章
- 光伏电池PV建模,基于Boost/Buck电路实现最大功率追踪MPPT,包括扰动观察法
- 汇编语言相关指令介绍(二)
- [Cadence Sigrity] PowerDC打开提示No license available
- WoShop分销积分直播短视频商城全开源无加密商城源码
- 5.4 数值分析: 牛顿插值多项式及余项
- WinEdt 与 SumatraPDF 的正反向搜索功能
- ssm+Vue计算机毕业设计学生在线请假管理系统(程序+LW文档)
- 超级搜索术前4节课思维导图
- html设计一张试卷算分,html5模拟试卷
- 学习笔记 | 深度森林 Deep Forest