C语言程序设计教师工作量,C语言院教师工作量统计课程设计报告书.doc

本文档详细介绍了使用C语言进行课程设计的项目——高校教师工作量管理系统。系统实现了教师信息录入、工作量计算、数据保存、信息查找、超时费计算、数据编辑等功能,通过结构数组和数据文件管理数据,具有良好的用户交互界面。
摘要由CSDN通过智能技术生成

C语言课程设计

C语言课程设计报告书

课程名称: C语言课程设计

课题名称: 院教师工作量计算系统

班级:

学号:

姓名:

指导老师:

成绩:

2010年6月

一、课程设计目的

1. 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2. 通过课程设计,进一步掌握C语言中有关重要的数据结构,诸如:数组、结构数组、链表、数据文件…等在程序开发中的应用。

3. 通过课程设计,锻炼与提高程序开发和调试能力,要求程序可读性好、调试能力强。

4. 通过课程设计,增加 C语言知识的运用能力和自主学习能力,能独立设计和实现一个中小型系统。

二、课题设计内容

以高校某学院工作量考核办法为背景,设计与开发一个高校教师教学工作量管理系统,提供教师教学工作量的录入、查找与计算功能。主要功能要求如下:

(1)工作量信息录入:教师一个教学任务的信息为:教师编号(不重复)、姓名、职称、课程名称、授课班级、小课班级数目、理论课时、实验课时、教学任务总课时。提供录入界面供用户输入数据,并以合理数据结构,诸如:结构数组或数据文件的形式加以保存。

(2)工作量计算:以教师为单位,计算出该教师一个学年的总工作量。计算公式如下:

a. 教学任务总课时。计算方法如下表:

小班班级数目

单个教学任务总课时

2

1.5*(理论课时+实验课时)

3

2*(理论课时+实验课时)

>=4

2.5*(理论课时+实验课时)

b. 一个学年总的教学工作量=所有单个教学任务总课时之和*职称系数。其中:正教授系数=1.2;副教授系统=1.1;其他职称系数=1。

(3)查找:能查找一个教师年度工作量明细、查找某教师年度总作量。

(4)超时费计算:统计该院年度工作量超过200学时的所有教师,以单价20元标准计算出其超时费,并显示出发放报表。

(5)进一步考虑信息的编辑功能,能插入、修改、删除教师授课教学信息。

(6)系统以菜单方式工作,界面应清晰直观,便于用户操作。

三、系统总体设计

主函数

数据录入

计算工作量

保存数据

查找数据

计算超时费

插入数据

修改数据

删除数据

菜单函数

退出

1. 主函数 main()

功能:设计字体和背景的颜色,调用菜单函数;

2. 菜单函数 menu()

功能:调出可视化的菜单外观界面,提供用户选择的入口,进入其他模块进行相关处理;

3. 信息输入函数 enter()

功能:录入需查询教师的相关信息(结构数组形式);

4. 信息保存函数 save()

功能:将录入的教师信息保存至文件;

5. 工作量计算函数 count()

功能:计算该教师一个学年的总工作量;

6. 查找函数 search()

功能:调用相关模块,对指定的信息项进行查询;

7. 超时费计算函数 covex()

功能:统计、计算教师一年度的超时费,并显示出发放报表;

8. 插入函数 insert()

功能:插入教师授课教学信息;

9. 修改函数 alter()

功能:对教师信息进行修改;

10. 删除函数()

功能:删除不需要的信息。

四、系统详细设计

(一)数据结构设计

(1)教师信息的定义

struct teacher /* 定义结构数组名*/

{ int numberofteacher; /*教师编号*/

char name[80]; /*教师姓名*/

char professionaltitle; /*职称*/

char nameofcourse; /*课程名称*/

char nameofclasses; /*授课班级*/

int numberofsmallclasses; /*小班班级数目*/

int theoreticperiods; /*理论课时*/

int experimentalperiods; /*实验课时*/

int totalperiods; /*教学任务总课时*/

}tea[N];

(2)菜单的设计

menu()

{int choice;

clrscr(); /*清屏*/

printf("\n\t\t*************************MENU*************************\n");

printf("\n\t\t 1.Enter new data");/*输入模块*/

printf("\n\t\t 3.Save data");/*保存数据*/

printf("\n\t\t 2.Count load");/*计算工作量*/

printf("\n\t\t 4.Search data");/*查找数据*/

printf("\n\t\t 5.Count overtime expenses");/*计算超时费*/

printf("\n\t\t 6.Insert data");/*插入数据*/

printf("\n\t\t 7.Alter data");/*修改数据*/

printf("\n\t\t 8.Delete data");/*删除数据*/

printf("\n\t\t 9.Exit");/*退出*/

printf("\n\t\t******************************************************\n");

while(1)

{choice=Menuselect();

if(choice<0||choice>9)

printf("Input ERROR!"); printf("\n");

switch(choice);

{case 1:enter();break;

case 2:save();break;

case 3:count();break;

case 4:search();break;

case 5:covex();break;

case 6:insert();break;

case 7:alter();break;

case 8:delete();break;

case 9:exit(0);}

}

int Menuselect() /*输入选择相关功能的菜单*/

{int i;

printf("please type in your choice:");

scanf("%d",&i);

printf("\n");

return(i);

}

(二)模口接块的设计

程序主要是通过选择菜单manu()接入各个模块,用switch语句调用各个模块,通过break分开各个模块,进行所要操作的选择,也主要通过调用manu()菜单返回,再进行其他选项的选择。

1. 菜单函数

通过菜单函数完成与其他模块的连接和退出,其运行程序见(一)中“菜单的设计”项,此处不再累述。

2. 信息的输入 enter()

通过case 1进入,信息录入成功后调用menu()函数,先对输入的信息进行保存。

3. 信息保存 save()

在manu()中,通过case 2调用save(),以文件形式对其进行保存;

4. 计算工作量 covex()

通过case3进入该函数,计算出教师年度工作量再返回主菜单。

5. 查找信息 search()

通过case4输入某教师姓名,查找该教师所有信息。

6. 计算超时费 covex()

case5:进入计算超时费模块,进行操作,再返回主菜单。

7. 插入数据 insert()

case6:补充插入一些数据,返回主菜单。

8. 修改数据 alter()

case7:修改电脑中的数据,返回主菜单。

9. 删除数据 delete()

case8:删除不需要的数据,返回主菜单。

(三)流程图

1.主要模块流程图

Start

菜单选择项是否小于0或大于9

主函数

定义全局变量liang量

主要选择菜单

输入错误

数据录入

保存数据

计算工作量

查找数据

计算超时费

插入数据

修改数据

删除数据

退出

2.主要选择菜单流程图

输入choice

菜单选择项是否小于0或大于9

输入错误

1??

根据所选项接入子函数

定义变量,输入相关信息

3.信息保存函数流程图

判断可否打开文件

i=0

i< n

保存教师的信息

i++

不能打开文件

关闭文件

4.工作量计算函数

定义变量

输出小班数目

小班数

目=2

=2

A=1.5

小班数目=3

A=2.5

A=2

职称系数=1.0

单个教学任务总课时=A*(理论课时+实验课时)

职称=

副教授

=2

职称= 正 教授

职称系数=1.2

职称系数=1.1

年度总工作量=所有单个教学任务总课时之和*职称系数

(五)删除函数

将内存中的数据重新存入二进制文件夹中

结束

k++

intj=0,d=0,k=0;char name[80];work (*p)

打开文件

从文件中读出数据,记录数据块数J

输入教师姓名

开始

k<=j

q[k].name=name

output(&q[k])

d=k

d<=k

q[d]=q[d+1]

d++

五、运行结果

(一)主菜单截图

(二)信息录入界面截图

(三)信息保存至文件成功截图

(四)查找到的总工作量信息截图

(五)超时费显示报表截图

第14页.共15 页

展开阅读全文

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include #include #include #include #include #define MAX_NAME 20 #define NULL 0 struct course { char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; struct course *next; }; struct teacher { char teacher_num[MAX_NAME]; char teacher_name[MAX_NAME]; struct teacher *next; struct course *chead; struct course *ctail; }; struct teacher *thead,*ttail,*found; //*********************************************************************** //主菜单 void menu() { system("cls"); printf("*************************************\n"); printf("* 1.输入教师信息 *\n"); printf("* 2.插入授课信息 *\n"); printf("* 3.工作量计算与显示 *\n"); printf("* 4.退出 *\n"); printf("*************************************\n"); printf("请输入要操作的序号:"); } int isExist(char number[]) //判断输入的教师号是否已经存在 { struct teacher *p; p=thead; while(p!=NULL && (strcmp(p->teacher_num,number)!=0)) p=p->next; found=p; if(p==NULL) return 0; else return 1; } //************************************************************************ //增加教师教学信息模块 void addIn() { struct teacher *p; struct course *pcourse; char teacher_num[MAX_NAME]; char teacher_name[MAX_NAME]; char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; while(1) { system("cls"); printf("****************************************************\n"); printf("* 输入教师的信息,以输入教师号为#结束输入 *\n"); printf("****************************************************\n"); printf("输入教师号:"); fflush(stdin); scanf("%s",teacher_num); if(isExist(teacher_num)) { printf("!!!该教师号已经存在,请重新输入。\n按任意键重新输入...\n"); getch(); } else { if(strcmp(teacher_num,"#")==0) { printf("**************************************************\n"); printf("输入结束。按任意键返回主菜单...\n"); getch(); return; } printf("输入教师姓名:");fflush(stdin);scanf("%s",teacher_name); printf("****************************************************\n"); printf("* 输入教师授课信息 *\n"); printf("****************************************************\n"); printf("输入课程名称:");fflush(stdin);scanf("%s",course_name); printf("输入班级数目:");fflush(stdin);scanf("%d",&class_num); printf("输入理论课时:");fflush(stdin);scanf("%d",&ch_per); printf("输入实验课时:");fflush(stdin);scanf("%d",&ex_per); pcourse=(struct course *)malloc(sizeof(struct course)); strcpy(pcourse->course_name,course_name); pcourse->class_num=class_num; pcourse->ch_per=ch_per; pcourse->ex_per=ex_per; pcourse->next=NULL; p=(struct teacher *)malloc(sizeof(struct teacher)); strcpy(p->teacher_num,teacher_num); strcpy(p->teacher_name,teacher_name); p->chead=pcourse; p->ctail=pcourse; if(thead==NULL) { thead=p; ttail=p; } else { ttail->next=p; ttail=p; } ttail->next=NULL; } } } //************************************************************************ //插入教师授课信息模块 void addCourseInfo() { struct course *pcourse; char teacher_num[MAX_NAME]; char course_name[MAX_NAME]; int class_num; int ch_per; int ex_per; system("cls"); if(thead==NULL) { printf("****************************************************\n"); printf("* 当前没有可用的教师信息,按任意键返回主菜单... *\n"); printf("****************************************************\n"); getch(); return; } while(1) { system("cls"); printf("输入教师号:");fflush(stdin);scanf("%s",teacher_num); if(isExist(teacher_num)) break; else { printf("!!!该教师号不存在,请重新输入.\n按任意键重新输入...\n"); getch(); } } printf("****************************************************\n"); printf("* 输入教师授课信息 *\n"); printf("****************************************************\n"); printf("输入课程名称:");fflush(stdin);scanf("%s",course_name); printf("输入班级数目:");fflush(stdin);scanf("%d",&class_num); printf("输入理论课时:");fflush(stdin);scanf("%d",&ch_per); printf("输入实验课时:");fflush(stdin);scanf("%d",&ex_per); pcourse=(struct course *)malloc(sizeof(struct course)); strcpy(pcourse->course_name,course_name); pcourse->class_num=class_num; pcourse->ch_per=ch_per; pcourse->ex_per=ex_per; pcourse->next=NULL; found->ctail->next=pcourse; found->ctail=pcourse; } //************************************************************************ //计算并显示 void calcu() { struct teacher *p; struct course *pcourse; float single_per=0.0; float total_per=0.0; system("cls"); if(thead==NULL) { printf("****************************************************\n"); printf("* 当前没有可用的教师信息,按任意键返回主菜单... *\n"); printf("****************************************************\n"); getch(); return; } p=thead; while(p!=NULL) { total_per=0.0; printf("----------------------------------------------------------------------\n"); printf("教师号:%s\n",p->teacher_num); printf("教师姓名:%s\n",p->teacher_name); printf("----------------------------------------------------------------------\n"); printf("课程名称 班级数目 理论课时 实验课时 单教学任务课时\n"); printf("----------------------------------------------------------------------\n"); pcourse=p->chead; while(pcourse!=NULL) { single_per=0.0; if(pcourse->class_num==1) single_per=pcourse->ch_per+pcourse->ex_per; if(pcourse->class_num==2) single_per=1.5*(pcourse->ch_per+pcourse->ex_per); if(pcourse->class_num==3) single_per=2.0*(pcourse->ch_per+pcourse->ex_per); if(pcourse->class_num>=4) single_per=2.5*(pcourse->ch_per+pcourse->ex_per); printf("%-10s%-10d%-10d%-10d%-7.3f\n",pcourse->course_name,pcourse->class_num,pcourse->ch_per,pcourse->ex_per,single_per); total_per+=single_per; pcourse=pcourse->next; } printf("----------------------------------------------------------------------\n"); printf("一个学期的教学工作量:%7.3f\n",total_per); printf("----------------------------------------------------------------------\n\n\n\n"); p=p->next; } printf("\t****************************************************\n"); printf("\t* 已经显示完毕,按任意键返回主菜单... *\n"); printf("\t****************************************************\n"); getch(); } //************************************************************************ //主函数 void main() { int order; while(1) { menu(); fflush(stdin); scanf("%d",&order); switch (order) { case 1:addIn();break; case 2:addCourseInfo();break; case 3:calcu();break; case 4:exit(0);break; default: printf("输入的序号有误,请检查后重新输入...\n"); getch(); break; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值