C语言程序设计课程设计-教师工作量计算.doc_第1页
C语言程序设计课程设计-教师工作量计算.doc_第2页
C语言程序设计课程设计-教师工作量计算.doc_第3页
C语言程序设计课程设计-教师工作量计算.doc_第4页
C语言程序设计课程设计-教师工作量计算.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告课程名称 C语言程序设计 课题名称 教师工作量计算 专 业 电气工程及其自动化 班 级 0783 学 号 200713010314 姓 名 冯鑫 指导教师 王颖 2008-3-21课程设计任务书课程名称 语言程序设计 课题名称 班级档案管理系统 专业班级 电气0783班 学生姓名 冯鑫 学 号 200713010314 指导老师 王颖 审 批 任务书下达日期:2008 年3月15日任务完成日期:2008年3月22日C语言课程设计任务书前 言C语言程序设计课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘(缺一不可)收齐后交指导老师。全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。二、基本情况课程类别:必修课课程学分:1学分课程学时:1周课程对象:电气工程0781、0782、0783、0784、0785、0786三、时间安排时间任务2008-3-8下午3:40-5:40指导老师给学生布置课程设计的任务及要求2008-3-10到2008-3-15学生根据设计任务及要求,对系统进行需求分析、概要设计和详细设计,并在此基础上编写程序代码学生提交系统程序清单初稿上机调试程序修改并完善程序并上机调试程序2008-3-16接受指导老师的验收2008-3-16到2008-3-22 书写课程设计报告 提交课程设计报告课题要求一、 需求分析分析系统功能需求以及用户操作流程。二、 概要设计在需求分析的基础上,确定系统总体框架(系统功能结构图)。三、 详细设计定义数据储存结构,并设计实现系统功能的具体算法,画出各算法的工作流程图。四、 代码设计根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后还可以返回到主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量。重点功能部分均要求给出清晰的程序注释。五、 程序调试程序编译、连接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和改正。如果程序能够基本正确地运行,可考虑增加若干基本的容错功能;另外尽量对现有的算法给出改进方案,并比较不同算法之间的优缺点。l 设计报告及书写内容要求 课程设计任务完成后,每位同学必须独立书写一份课程设计报告,注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。课程设计报告的内容应包括以下五个部分:1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;2) 概要设计:包括系统总计设计框架和系统功能模块图;3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4) 主要源程序代码:包括存储结构设计说明,以及完整源程序清单;5) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、主错原因、解决方法及效果等);6) 总结:包括课程设计过程中的学习体会与收获、对C语言和本次课程设计的认识以及自己的建议等内容。7) 书写格式严格按所附要求书写。附:课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数在5000字以上(不含程序原代码)。六、考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体卡和标准包含以下几个部分:1) 平时出勤(占10%)2) 系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)3) 程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)4) 设计报告(占30%)5) 独立完成情况(占10%)目 录课程设计主文档81需求分析82概要设计93详细设计10【流程图】:124代码设计134.1数据结构135调试分析】:146功能扩充147心得体会148附件15课程设计主文档一、 课程设计题目:教师工作量计算。二、 内容摘要:1设计内容:实现(创建教师基本信息,显示首条,最后一条,前一条,下一条,清除,读入文件,保存文件,删除记录)。教师信息表包括(编号,姓名,性别,职称,部门,课程1,课程2,工作量,代课费)等信息。1设计要求:能输入教师信息,包括编号,姓名,性别,职称,部门,课程1,课程2,工作量,代课费等信息。A、 能保存教师的基本信息,并能对其进行删除、添加、显示及运算等功能。B、 在Turbo C下支持鼠标工作和窗口操作,窗口带有命令按钮。2、 算法提示:A、 数据结构:带表头结点的双链循环表。B、 用包含语句将三个.c文件的联系起来,分别实现鼠标功能,截面设计和主函数,显示、删除等应用功能。3、 测试数据:虚拟教师信息,并对其工作量进行计算。1需求分析学校教职工工作量计算是学校管理中需要经常处理的一项工作,本程序结合一个简化的教职工工作量计算系统的制作,介绍如何利用C语言的应用程序向导制作应用程序。该系统的制作涉及一个数据库、一个据表及其相关的对话框的制作开发,涉及在工程中增加对话框、调用对话框的方法以及应用程序向导的方法。最重要的是,在本程序中,我们将介绍一种新的应用程序。2概要设计在学校里,教师工作量计算统计是一项基本任务,为此本程序实现了这个功能,其基本功能模块如图所示。 主程序.初始化创建教师基本信息显示首条显示最后一条显示前一条显示下一条清除读入文件保存文件删除记录退出程序编写了三个.c文件,分别为mouse.c完成鼠标功能,teacher.c实现界面设计和主函数,teacher.c完成显示。删除等应用功能。用包含语句的方式将这三个文件联系起来,将这三个文件分别编译无错后运行。读者也可以不用包含语句的,而是定义一个工程,然后在文件书写这三个文件名,运行工程文件。学校教职工工作量计算是学校管理中需要经常处理的一项工作,本程序结合一个简化的学校教职工工作量计算程序的制作,介绍如何利用C语言的应用程序向导制作应用程序。该系统的制作涉及一个数据库、两个数据表及其相关的对话框的制作开发,涉及在工程中增加对话框的方法以及应用程序向导的使用方法。最重要的是,在本程序中,我们将介绍一种新的数据引用方法3详细设计本程序利用带头结点的双循环表实现教师工作量计算,通过这个程序掌握双链循环表的数据结构的定义、创建以及运算,体会它的优势所在,加深对指针的理解。另外,本程序模仿Windows应用程序制作了窗口界面和命令按钮。读者通过本程序可以学会如何在Turbo C下支持鼠标工作和窗口操作。 31teacher.c文件main()主函数主函数是程序的入口,采用模块化设计,主函数不宜复杂,功能尽量在各模块中实现。主函数的功能相对比较简单,初始化双链表,然后提示输入是否创建表,如果是第一次则应选Y,调用函数create(),按照提示信息输入教师基本信息。一旦建立好后,可以选择保存功能,以后再次运行,可以从文件读入教师基本信息。数据准备好后,初始化图形系统,调用mousexindows()函数进入窗口命令处理命令。Buttou()按钮函数本程序主控界面上有许多按钮,命令按钮,标签显示均是由这个函数完成的,其实现方法是用函数 bar()采用不同颜色的填充方式实现,分别设计了平面按钮、凸起的按钮、凹下的按钮以及蓝色背景的按钮样式。例如画凸起的按钮,设左上角坐标为(x1,y1),右下角坐标为(x2,y2),则先用白色填充矩形区域,然后将左上角的x1和y1坐标加1,右下角坐标不变,用深灰色填充区域,再将左上角x1和y1坐标加1,右下角的坐标x2和y2各减1,用浅灰色填充矩形区域,这样通过三次填充就在视觉上产生了凸起的效果。同样的方法,不同的颜色在不同位置填充区域,产生凹下的效果。Wins()窗口函数 实现窗口界面。与画按钮方式相同,画出具体立体效果的窗口区域,画标题栏、关闭按钮、凹下按钮显示标签信息、凸起显示命令按钮。程序主要是计算各输出点的坐标位置,利用的函数主要是bar()和setfilestyle()。将按钮上显示的文字定义为字符串,这样利用循环语句将字符串输出。命令按钮文字除在此函数中用到外,还在mousewin()中用到,所以定义为全局变量。Mouse.c鼠标文件在Windows应用程序中,人们月来越离不开的输入设备是鼠标,用户拿着鼠标指指点点就完成了几乎全部的工作,利用Visual Basic,Visual C等开发工具开发Windows应用程序,系统提供了鼠标支持功能,无须程序员在这方面下功夫。然后在DOS环境下,用户要使用鼠标必须自己加载鼠标驱动程序。在Windows操作系统下,系统自动加载了鼠标驱动程序,但并不意味在任何程序下都可以使用,用Toubo C开发的应用程序要支持鼠标操作,则必须进行鼠标设备驱动程序的访问。 鼠标设备驱动程序的访问通过使用中断Ox33访问。本程序中所用中断Ox33的功能与参数如表。 功能入口参数出口参数参数描述AX=0x01开始显示光标AX=0x02停止显示光标AX=0x03读取光标位置与按钮状态BX(CX,DX)按钮状态:0为左按钮,1为右按钮,2为中按钮AX=0x04设置光标位置(CX,DX)光标位置(x,y)32teacherfun.c文件这个文件集中了教师工作量计算的主要功能,因为存储结构采用的是双链循环表,所以主要的操作是双链表的操作,将每个教师看作一个结点。Init()初始化循环双链表由于是使用带表头结点的循环双链表,所以初始化所做的工作如下:为头结点First申请空间。将尾指针Last指向头结点。设置头结点的前趋和后继指针。设置当前记录指针为头结点。 【流程图】:双链循环表FirstDataataLast2、鼠标驱动程序0x33的功能参数:功能入口参数出口参数参数描述_AX=0x01开始显示光标_AX=0x02停止显示光标_AX=0x03读取光标位置与按钮状态BX (CX,DX)按钮状态:0为左按钮,1为右按钮,2为中按钮光标位置(x,y)_AX=0x04设置光标位置(CX,DX)光标位置(x,y)1、 排序: p0指针不指向头结点: templastFirstp00p11p0p11-next=p0;p11-prior=p0;p0-prior=p11;p00-next=p11;p0指针指向头结点:4代码设计 4.1数据结构设计带表头结点的双链循环表,每个结点包含基本数据信息和两个指针:指向前趋结点的指针和指向后继结点的指针。为了运算方便设计了一个头指针和一个尾指针。所以定义表结点的结构如下:typedef struct t1char no11;/*编号*/char name15; /*姓名*/fclose(fp);/*帮助文件*/void help()Clrscr;DraFrame(1,4,6,8,80,7);/*画边框*/Gotoxy(15,6);Cprintf(“click menu to run each function”);/*输出字符串*/Getch();Clrscr();/*版本信息*/void Ver()Clrscr();DrawFrame(1,4,6,8,80,7);/*画边框*/Gotoxy(15,6);Cprintf(“Ver 1.0 finished by liming”)/*输出字符串*/Getch();Clrscr();5调试分析】:1、 测试数据:运行程序后,出现一个窗口,将光标点到输入处,输入教师信息。编号no:007姓名name:fengxin性别sex:M职称profess:teacher部门dept:office课程class:EN2、 测试输出结果:输入信息后,按下run,即会出现计算结果。工作量workload:100000代课费lessonf:10000再按下save进行保存。3、程序调试中出现的问题: 调试(debugging)是指去掉程序中的错误(通常被称为bugs)的过一个错误可能非常简单,例如拼错一个单词或者漏掉一个分号;也可能比较复杂,例如使用一个指向并不存在的地址的指针。无论错误的复杂程度如何,它的作用是让程序员能够观察程序的运行情况、程序的当前运行行号、变量的值,6功能扩充(1) 在图书信息里增加字段,登记相应的借书日期和还书日期,如果超期,则罚款,如果丢失图书则加倍赔偿。限制每个会员最多借书8本。(2) 图书增加出版社字段以及出版社信息,可以根据图书的出版社字段查阅出版社信息。(3) 制作帮助文件。7心得体会在此次C语言程序设计的过程中,我一直在思考着两个问题,怎样才能找到课堂所学与实际应用的最佳结合?怎样才能是自己的程序在形式上最简单,而在应用中最实用?完成一项这样的任务并不是一件简单的事。我需要经过严密的思考和理性的筛选才能得出最后结果! 实践C语言的课程设计让我们进一步了解了C语言在实际应用中的作用。将课本知识进行系统的梳理、整合。融会贯通之后再应用到实际中去。以实现学以致用,学有所用,同时也增加了我对C语言的兴趣,激起了学习的激情。我觉得,用到的程序并不要太复杂,反而是越简单越好。在形式简单,功能强大,潜在问题少的指导思想的下,我最终完成了这一程序。 该程序以C语言为实用工具,运用变量的思想从而实现程序的功能。8附件/*1. mouse.c源程序*/*mouse.c*/#include dos.h/*鼠标光标显示*/void MouseOn() _AX=0x01; geninterrupt(0x33);/*产生软中断*/*鼠标光标隐藏*/void MouseOff() _AX=0x02; geninterrupt(0x33);/*设置鼠标当前位置x和y*/void MouseSetXY(int x,int y) _CX=x; _DX=y; _AX=0x04; geninterrupt(0x33);/*读取鼠标状态,x和y返回鼠标位置,status返回鼠标击键操作代码 */void MouseStatus(int *x,int *y,int *status) union REGS regs; /*寄存器变量*/ regs.x.ax=3; int86(0x33,®s,®s); *x=regs.x.cx; *y=regs.x.dx; *status=regs.x.bx;/*7. teacher.c源程序*/* teacher.c*/*头文件、函数原型及全局变量定义*/#include stdio.h#include bios.h#include dos.h#include conio.h#include stdlib.h#include string.h#include mem.h#include ctype.h#include alloc.h#include stdio.h#include graphics.h#include d:cbook14c14_m.c /*根据实际存放位置设*/typedef struct t1 char no11; char name15; char sex5; char profess15; char dept15; char class15; float workload; float lessonf; struct t1 *prior; struct t1 *next;TEACHER;TEACHER *First;TEACHER *Last;TEACHER *p;void init(); /*初始化双链表*/void firstr(); /*显示头一条*/void lastr();/*显示最后一条*/void priorr(); /*显示前一条*/void nextr();/*显示下一条*/void clear(); /*清除显示信息*/void delete(); /*删除当前记录*/void save(); /*保存*/void load();/*读入文件*/void sort();/*排序*/void create(); /*创建双链表*/void print(TEACHER*p); /*输出数据*/void run(int m,int n); /*调用各功能*/void button(int buttonx1,int buttony1,int buttonx2,int buttony2,char *name,int stat); /*按钮*/void wins(int x1,int y1,int x2,int y2); /*窗口*/void realwin(int x1,int y1,int x2,int y2);/*校验窗口*/void mousewin(); /*主控界面*/void cross(int y1,int x2,int press); /*关闭按钮*/char *Str=First,Prior,Next,Last,Clear, Delete,Load,Save,Sort,Exit; /*命令项*/*主函数*/void main() char ch; int gdriver,gmode,i,j; init(); printf(Do you create new table(Y/N)n); ch=getchar(); if(ch=Y|ch=y) create(); gdriver=DETECT; initgraph(&gdriver,&gmode,); mousewin(); closegraph();/*按钮实现函数,buttonx1和 buttony1为按钮的左上角的坐标,buttonx2和 buttony2为按钮的右下角的坐标,*name为按钮上显示的字符串名,stat为按钮类型,0为平面,1为凸起,2为凹下,3为兰色平面*/void button(int buttonx1,int buttony1,int buttonx2, int buttony2,char *name,int stat) if(stat=0) /*显示平面按钮*/ setcolor(BLACK); outtextxy(buttonx1+3,buttony1+4,name); if(stat=1) /*显示凸起按钮*/ setfillstyle(1,WHITE); bar(buttonx1,buttony1,buttonx2,buttony2); setfillstyle(1,DARKGRAY); bar(buttonx1+1,buttony1+1,buttonx2,buttony2); setfillstyle(1,LIGHTGRAY); bar(buttonx1+1,buttony1+1,buttonx2-1,buttony2-1); setcolor(BLACK); outtextxy(buttonx1+3,buttony1+4,name); if(stat=2) /*显示凹下按钮*/ setfillstyle(1,DARKGRAY); bar(buttonx1,buttony1,buttonx2,buttony2); setfillstyle(1,WHITE); bar(buttonx1+1,buttony1+1,buttonx2,buttony2); setfillstyle(1,LIGHTGRAY); bar(buttonx1+1,buttony1+1,buttonx2-1,buttony2-1); setcolor(BLACK); outtextxy(buttonx1+3,buttony1+4,name); if(stat=3) /*显示平面兰色背景按钮*/ setfillstyle(1,DARKGRAY); bar(buttonx1,buttony1,buttonx2,buttony2); setfillstyle(1,WHITE); bar(buttonx1+1,buttony1+1,buttonx2,buttony2); setfillstyle(1,BLUE); bar(buttonx1+1,buttony1+1,buttonx2-1,buttony2-1); setcolor(WHITE); outtextxy(buttonx1+3,buttony1+4,name); /*窗口函数,x1和y1为左上角坐标,x2和y2为右下角坐标*/void wins(int x1,int y1,int x2,int y2) char lable10=No,Name,Sex, Profess,Dept, Class,Workload,LessonF; /*标签信息*/ int m,n; setfillstyle(1,WHITE);/*画窗口*/ bar(x1,y1,x2,y2); setfillstyle(1,LIGHTGRAY); bar(x1+1,y1+1,x2,y2); setfillstyle(1,BLUE); /*画兰色标题栏*/ bar(x1+3,y1+3,x2-3,y1+20); cross(y1,x2,0); /*画关闭按钮*/ outtextxy(x1+5,y1+8,teacher LessonF);/*输出标题文字*/ for(m=0;m4;m+) for(n=0;n2;n+) button(x1+n*250+20,y1+50+m*30+20,x1+n*250+90, y1+50+m*30+40,lablen+m*2,2);/*标签信息*/ setfillstyle(1,WHITE); bar(x1+n*250+100,y1+50+m*30+20,x1+n*250+200,y1+50+m*30+40); /*白色背景显示数据区*/ settextstyle(0,0,1); for(m=0;m2;m+) for(n=0;nwinx1+3&x1winy1+21&y1winx1+3&x1winy1+35&y1winx1+3&x1winy1+21&y1winx1+3& x1winy1+35&y1winx1+3&x1winy1+21&y1winx2-17&y1winy1+5&x1winx2-5&y1winx1+5&y1winy1+220&x1winx2-20&y1winy2-20) if(cpress=0) /*鼠标在命令按钮上*/ settextstyle(0,0,1); for(m=0;m2;m+) /*显示命令按钮*/ for(n=0;n80&x1320&y1180&x1320&y1280&x1320&y1380&x1320&y1480&x1320&y1prior=Last; /*设置头结点的前驱指针*/ Last-next=First; /*设置头结点的后继指针*/ p=First; /*设置当前记录指针为头结点*/*创建教师信息循环双链表*/void create() int unit,flag=0; float temp; TEACHER *info; /*新增结点*/ init(); for(;) if(flag=1)break; /*标志为1,不再输入*/ clrscr(); /*清屏*/ printf(Please enter teacher infomationn); printf(input end entern); info=(TEACHER *)malloc(sizeof(TEACHER);/*为新增结点申请空间*/ if(!info) /*没有空间出错处理*/ printf(nout of memory); exit(0); printf(No:); /*开始提示输入*/ scanf(%s,info-no); if(info-no0=)/*输入结束输入*/ flag=1;break; printf(Name:); scanf(%s,info-name); printf(Sex:); scanf(%s,info-sex); printf(Profess:); scanf(%s,info-profess); printf(Dept:); scanf(%s,info-dept); printf(Class:); scanf(%s,info-class); printf(Workload:); scanf(%f,&temp); info-workload=temp; if(strcmp(info-profess,prof)unit=25; /*教授*/ if(strcmp(info-profess,aprof)unit=20;/*副教授*/ if(strcmp(info-profess,lect)unit=15;/*讲师*/ if(strcmp(info-profess,ass)unit=10;/*助教*/ info-lessonf=unit*info-workload;/*根据职称计算代课费*/ info-next=Last-next;/*新插入结点插在表末尾*/ info-prior=Last; /*新结点的前驱为原来的尾结点*/ Last-next=info; /*原来尾结点的后继为新结点*/ Last=info; /*新的尾结点为新结点*/ First-prior=Last;/*头结点的前驱为尾指针*/ return;/*显示第一条记录*/void firstr() if(First=Last)return; clear(); p=First-next; print(p);/*显示最后一条记录*/void lastr() if(First=Last)return; clear(); p=Last; print(p);/*显示前一条记录*/void priorr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论