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