/* by QQ 116142142 */
#include "stdio.h"
#define STANDHOUR 8 //分界点
//pre level
#define PREFESSOR 0 //教授#define TEACHER 1 //讲师#define ASSISTANCE 2
//teach level
#define LEVELA 0
#define LEVELB 1
#define LEVELC 2
//max week in one year
#define MAXWEEK 54 // 366/7=52.4==53 53+1=54
#define MAXCLASS 10000 //max class in one year
#define MAXCLASSINFO 3
//ref reward
#define STANDREWARD 0
#define OUTREWARD 1
//ref classhour
#define WEEK 0
#define HOUR 1
#define SUMSTU 2
float weekhour[MAXWEEK];
int classhour[MAXCLASS][MAXCLASSINFO];
float sumstandhour=0;
float sumouthour=0;
int titlelevel=3;
int teachlevel=3;
int currentclass=0;
int currentweek=0;
float reward=0;
const char title[][40]={"prefessor","teacher","assistance","null"};
const char level[5]="abcx";
const int rewardref[][2]={{10,40},{9,35},{8,30}};
void init()//初始化{
int i,j;
for(i=0;i
for(i=0;i
for(j=0;j
classhour[i][j]=0;
sumstandhour=0;
sumouthour=0;
titlelevel=3;
teachlevel=3;
reward=0;
}
float getref(int num)//计算系数
{
if(num<=60)return 1.0f;
if(num<=70)return 1.2f;
if(num<=80)return 1.3f;
if(num<=90)return 1.4f;
if(num<=100)return 1.5f;
if(num<=120)return 1.6f;
if(num<=140)return 1.7f;
if(num<=160)return 1.8f;
if(num<=180)return 1.9f;
if(num>=181)return 2.0f;
}
void test_getref()
{
int i;
printf("enter stu num(int):");
scanf("%d",&i);
printf("%f",getref(i));
}
void get_title()//读取职称
{
printf("0:prefessern1:teachern2:assistancenplease enter title(0-2):");
scanf("%d",&titlelevel);
}
void get_teachlevel()//读取评级
{
printf("0:An1:Bn2:Cnplease enter teachlevel(0-2):");
scanf("%d",&teachlevel);
}
void get_weekhour()//读取周课时量及学生数
{
float sumhour=0;
char c;
int week=0;
int day=0;
int clas=0;
while(1)
{
int hour,stu;
float sum=0;
printf("The %d week %d class:nPlease enter hour and stu No.(2 56 means 2 hours 56 students):",week,day);
scanf("%d%d",&hour,&stu);
sum=hour*getref(stu);
day+=1;
sumhour+=sum;
classhour[clas][WEEK]=week;
classhour[clas][HOUR]=hour;
classhour[clas][SUMSTU]=stu;
clas+=1;
printf("nEnd week?(y/n):");
getchar();
c=getchar();
//printf("%c",c);
if(c=='y' || c=='Y')
{
weekhour[week]=sumhour;
week+=1;
printf("Do you want to enter next week?(y/n):");
getchar();
c=getchar();
//printf("%c",c);
if(c=='y' || c=='Y')
{
sumhour=0;
day=0;
}else
{
currentclass=clas;
currentweek=week;
break;
}
}
}
}
void print_weekhour()
{
int i,j=0;
printf("n");
for(i=0;i
{
j+=1;
printf("week%d %f ",i,weekhour[i]);
if(j==10){printf("n");j=0;}
}
}
void print_classhour()
{
int i,j=0;
printf("n");
for(i=0;i
{
j++;
printf("CLASS%d week%d hour%d stu%d ",i,classhour[i][WEEK],classhour[i][HOUR],classhour[i][SUMSTU]);
if(j==3){printf("n");j=0;}
}
}
void get_info()
{
get_title();
get_teachlevel();
get_weekhour();
print_classhour();
print_weekhour();
}
void print_info()
{
printf("sums:%f sumo:%f title%s level:%c reward:%fn",sumstandhour,sumouthour,title[titlelevel],level[teachlevel],reward);
}
void caculatehour()计算标准课时和加时
{
int i;
for(i=0;i
{
if(weekhour[i]>0)
{
if(weekhour[i]>STANDHOUR)
{
sumstandhour+=STANDHOUR;
sumouthour+=weekhour[i]-STANDHOUR;
}
else
{
sumstandhour+=weekhour[i];
}
}
}
}
void get_reward()//计算奖金
{
if(titlelevel==3 || teachlevel==3 || currentweek==0)
{
printf("you need input some info,check out:");
print_info();
return;
}
caculatehour();
if(teachlevel==LEVELA || teachlevel==LEVELB)
{
reward=sumstandhour*(rewardref[titlelevel][STANDREWARD]+1)+sumouthour*(rewardref[titlelevel][OUTREWARD]+1);
}
else if(teachlevel==LEVELC)
{
reward=sumstandhour*(rewardref[titlelevel][STANDREWARD]-1)+sumouthour*(rewardref[titlelevel][OUTREWARD]-1);
}
}
void main()
{
init();
get_info();
get_reward();
print_info();
}
我是按课时输入的,每个周为一个结点,只是简单的读取加计算,没有保存,修改之类的。你可以自己添加。如果要做完整,我只怕三天也不够。英语不好,写的很混乱。现丑了。很久没有摸这东西了。希望对你有点小帮助。