C语言教师管理系统.docx
《C语言教师管理系统.docx》由会员分享,可在线阅读,更多相关《C语言教师管理系统.docx(17页珍藏版)》请在冰点文库上搜索。
C语言教师管理系统
通信与信息工程学院
高级语言课程设计
班级:
电子信息工程1503
姓名:
周阳刘锦谷静霆
学号:
150705031415070503211507050334
指导教师:
刘晓佩李远征王静倪云峰
设计时间:
2016-07-04~2016-07-24
成绩:
评语:
通信与信息工程学院
二〇一七年
一、课程设计要求
设计教师工作管理系统,并拥有如下功能。
1.计算并显示每个老师在一个学期中所教课程的总工作量。
2.输入教师姓名可以查询教师信息。
3.可以浏览并删改教师信息。
4.完成教师信息
二、程序的功能设计
三、程序的数据结构
C语言使用结构体来扩展自定义的数据类型,数据结构如下:
#pragmapack(4)
//设置结构体的对其方式
typedefstructTEACH
{
//数据域
charArrTeachNum[10];//教工号
charArrTeachName[10];//姓名
charArrTeachSex[4];//性别
charArrTitle[10];//职称
charArrSubject[20];//所教课程
charArrClass[36];//所教班级
unsignedintClassNum;//班级数目
unsignedintTheoryClaHour;//理论课时
unsignedintpracticerClaHour;//实践课时
unsignedintAllClaHour;//总课时
//指针域
structTEACH*pNext;//指向下一个节点
}
四、程序的函数设计
1.函数的功能描述
main函数
功能:
调用菜单函数所示的函数;
Menu()函数
功能:
显示给用户所有的功能
AddTeaMsg()函数
功能:
增一个教师信息
SearchTeach()函数
功能:
查找一个教师信息
DeleTeacher()函数
功能:
删除一个教师信息
ShowAllTeacher()函数
功能:
显示所有老师信息
2.函数的调用关系
main函数调用所有的子函数来完成相应操作;
查找,删除,修改信息函数都必须调用查找函数。
五、源程序代码
头文件:
#ifndefteach
#defineteach
//所需的头文件
#include
#include
#include
#pragmapack(4)
//设置结构体的对其方式
typedefstructTEACH
{
//数据域
charArrTeachNum[10];//教工号
charArrTeachName[10];//姓名
charArrTeachSex[4];//性别
charArrTitle[10];//职称
charArrSubject[20];//所教课程
charArrClass[36];//所教班级
unsignedintClassNum;//班级数目
unsignedintTheoryClaHour;//理论课时
unsignedintpracticerClaHour;//实践课时
doubleAllClaHour;//总课时
//指针域
structTEACH*pNext;//指向下一个节点
}TEACHER;
typedefTEACHER*PTEACH;
//函数声明
//添加一个教师的信息
voidAddTeaMsg(TEACHERTeacher);
//删除一个教师信息
voidDeleTeacher(PTEACHpNode);
//查找一个教师信息
PTEACHSearchTeach(char*Name);
//显示所有教师信息
voidShowAllTeacher(void);
//保存信息进文件
voidSaveTeachToFile(void);
//菜单函数
voidMenu(void);
#endif//!
teach
源文件:
#include"teacher.h"
//声明链表的头和尾
TEACHER*pHead=NULL;//O
TEACHER*pEnd=NULL;
intmain(void)
{
//初始化变量
intflag=1;
PTEACHpTemp=NULL;
intnOrder=-1;
TEACHERTeacher;
charName[10]={'\0'};
Menu();
while(flag)
{
printf("请输入指令:
\n");
scanf("%d",&nOrder);
switch(nOrder)
{
case1:
//OK
{
printf("请输入教工号:
");
scanf("%s",Teacher.ArrTeachNum);
printf("请输入教师姓名:
");
scanf("%s",Teacher.ArrTeachName);
printf("请输入性别:
");
scanf("%s",Teacher.ArrTeachSex);
printf("请输入职称:
");
scanf("%s",Teacher.ArrTitle);
printf("请输入所授课程:
");
scanf("%s",Teacher.ArrSubject);
printf("请输入授课班级:
");
scanf("%s",Teacher.ArrClass);
printf("请输入授课班级数目:
");
scanf("%u",&Teacher.ClassNum);
printf("请输入理论课时时长:
");
scanf("%u",&Teacher.TheoryClaHour);
printf("请输入实践课时时长:
");
scanf("%u",&Teacher.practicerClaHour);
AddTeaMsg(Teacher);
break;
}
case2:
//OK
{
printf("请输入指定教师的姓名:
");
scanf("%s",Name);
pTemp=SearchTeach(Name);
if(NULL==pTemp)
{
printf("该教师信息不存在\n");
}
else
{
printf("姓名:
%s\n工号:
%s\n性别:
%s\n职称:
%s\n所教课程:
%s\n所教班级:
%s\n班级数目:
%d\n理论课时:
%d\n实践课时:
%d\n总课时:
%3.2f\n",pTemp->ArrTeachName,pTemp->ArrTeachNum,pTemp->ArrTeachSex,pTemp->ArrTitle,pTemp->ArrSubject,pTemp->ArrClass,pTemp->ClassNum,pTemp->TheoryClaHour,pTemp->practicerClaHour,pTemp->AllClaHour);
}
break;
}
case3:
//OK
{
printf("请输入指定教师的姓名:
");
scanf("%s",Name);
pTemp=SearchTeach(Name);
if(NULL!
=pTemp)
{
printf("请输入教工号:
");
scanf("%s",pTemp->ArrTeachNum);
printf("请输入性别:
");
scanf("%s",pTemp->ArrTeachSex);
printf("请输入职称:
");
scanf("%s",pTemp->ArrTitle);
printf("请输入所授课程:
");
scanf("%s",pTemp->ArrSubject);
printf("请输入授课班级:
");
scanf("%s",pTemp->ArrClass);
printf("请输入授课班级数目:
");
scanf("%u",&(pTemp->ClassNum));
printf("请输入理论课时时长:
");
scanf("%u",&(pTemp->TheoryClaHour));
printf("请输入实践课时时长:
");
scanf("%u",&(pTemp->practicerClaHour));
}
break;
}
case4:
{
SaveTeachToFile();
break;
}
case5:
//OK
{
printf("请输入指定教师的姓名:
");
scanf("%s",Name);
pTemp=SearchTeach(Name);
//删除这个节点
if(NULL!
=pTemp)
{
DeleTeacher(pTemp);
}
break;
}
case6:
//OK
{
ShowAllTeacher();
break;
}
case0:
//OK
{
exit
(1);
}
default:
printf("输入的指令不对!
\n");
}
}
system("pause");
return0;
}
//指令菜单
voidMenu(void)
{
printf("********************教师信息管理系统*********************\n");
printf("*******************本系统操作指令如下*******************\n");
printf("***1、增加一个教师信息(链表尾部添加)***\n");
printf("***2、查找指定教师的信息(姓名/工号)***\n");
printf("***3、修改指定教师的信息***\n");
printf("***4、保存教师的信息到文件中***\n");
printf("***5、删除指定教师的信息***\n");
printf("***6、显示所有教师的信息***\n");
printf("***0、退出系统***\n");
printf("********************************************************\n");
}
//增加一个教师信息
voidAddTeaMsg(TEACHERTeacher)
{
//创建一个节点
TEACHER*pTemp=(PTEACH)malloc(sizeof(TEACHER));
//由于参数过多,本次设计在此处不检验参数的合法性
//数值部分赋值
pTemp->ClassNum=Teacher.ClassNum;
pTemp->practicerClaHour=Teacher.practicerClaHour;
pTemp->TheoryClaHour=Teacher.TheoryClaHour;
if(2==pTemp->ClassNum)
{
pTemp->AllClaHour=1.3*(pTemp->TheoryClaHour+pTemp->practicerClaHour);
}
if(3==pTemp->ClassNum)
{
pTemp->AllClaHour=1.7*(pTemp->TheoryClaHour+pTemp->practicerClaHour);
}
if(pTemp->ClassNum>=4)
{
pTemp->AllClaHour=2.0*(pTemp->TheoryClaHour+pTemp->practicerClaHour);
}
//数组部分赋值
strcpy(pTemp->ArrClass,Teacher.ArrClass);
strcpy(pTemp->ArrSubject,Teacher.ArrSubject);
strcpy(pTemp->ArrTeachName,Teacher.ArrTeachName);
strcpy(pTemp->ArrTeachNum,Teacher.ArrTeachNum);
strcpy(pTemp->ArrTitle,Teacher.ArrTitle);
strcpy(pTemp->ArrTeachSex,Teacher.ArrTeachSex);
if(NULL==pHead)
{
pHead=pTemp;
}
else
{
pEnd->pNext=pTemp;//链接
}
pEnd=pTemp;
pEnd->pNext=NULL;
}
//查找一个教师信息
PTEACHSearchTeach(char*Name)
{
PTEACHpTemp=pHead;
//检测参数的合法性
if(NULL==Name)
{
printf("姓名输入错误!
\n");
returnNULL;
}
//判断链表是否为空
if(NULL==pHead||NULL==pEnd)
{
printf("链表为空!
\n");
returnNULL;
}
//遍历链表
while(pTemp!
=NULL)
{
if(0==strcmp(pTemp->ArrTeachName,Name))
{
returnpTemp;
}
pTemp=pTemp->pNext;
}
printf("无此教师信息!
\n");
returnNULL;
}
//删除一个教师信息
voidDeleTeacher(PTEACHpNode)
{
PTEACHpTemp=pHead;
//判断
if(pHead==pNode)//删除头结点的情况
{
//pTemp=pHead;
pHead=pHead->pNext;
free(pTemp);
pTemp=NULL;
return;//结束
}
while(pTemp)
{
if(pTemp->pNext==pNode)
{
//删除
if(pNode==pEnd)//删除尾节点的情况
{
free(pNode);
pNode=NULL;
pEnd=pTemp;
pEnd->pNext=NULL;
return;
}
else
{
//记住要删除的节点
PTEACHp=pTemp->pNext;
//链接
pTemp->pNext=pTemp->pNext->pNext;
//释放节点
free(p);
p=NULL;
return;
}
}
pTemp=pTemp->pNext;
}
}
//显示所有教师信息
voidShowAllTeacher(void)
{
PTEACHpTemp=pHead;
while(pTemp!
=NULL)
{
printf("姓名:
%s\n工号:
%s\n性别:
%s\n职称:
%s\n所教课程:
%s\n所教班级:
%s\n班级数目:
%d\n理论课时:
%d\n实践课时:
%d\n总课时:
%3.2f\n",pTemp->ArrTeachName,pTemp->ArrTeachNum,pTemp->ArrTeachSex,pTemp->ArrTitle,pTemp->ArrSubject,pTemp->ArrClass,pTemp->ClassNum,pTemp->TheoryClaHour,pTemp->practicerClaHour,pTemp->AllClaHour);
pTemp=pTemp->pNext;
}
}
//保存信息进文件
voidSaveTeachToFile(void)
{
FILE*pFile=NULL;
PTEACHpTemp=pHead;
charstrBuf[100]={'\0'};
charstrNum[5]={'\0'};
if(NULL==pHead)
{
printf("没有教师信息\n");
return;
}
pFile=fopen("教师信息.txt","wb+");
if(NULL==pFile)
{
printf("文件打开失败\n");
return;
}
strcpy(strBuf,pTemp->ArrTeachNum);
strcat(strBuf,".");
strcat(strBuf,pTemp->ArrTeachName);
strcat(strBuf,".");
strcat(strBuf,pTemp->ArrClass);
strcat(strBuf,".");
strcat(strBuf,pTemp->ArrSubject);
strcat(strBuf,".");
strcat(strBuf,pTemp->ArrTeachSex);
strcat(strBuf,".");
strcat(strBuf,pTemp->ArrTitle);
itoa(pTemp->AllClaHour,strNum,5);//转成ascii
strcat(strBuf,strNum);
strcat(strBuf,".");
itoa(pTemp->ClassNum,strNum,5);
strcat(strBuf,strNum);
strcat(strBuf,".");
itoa(pTemp->practicerClaHour,strNum,5);
strcat(strBuf,strNum);
strcat(strBuf,".");
itoa(pTemp->TheoryClaHour,strNum,5);
strcat(strBuf,strNum);
strcat(strBuf,".");
fwrite(strBuf,1,strlen(strBuf),pFile);
fwrite("\r\n",1,strlen("\r\n"),pFile);
fclose(pFile);
}
六、调试及总结
在调试中遇到了不少问题,我曾想用char*P这个指针去代替数组,后来才发现这样是不行的,数组和指针是有区别的。
还有,我也遇到了结构体的赋值问题,后来对单个成员进行赋值,才调试通过,使我认识到了自己的C语言知识还是有所不足,这正如有人所说,程序不是写出来的,而是debug出来的。
本次任务,以小组的形式进行,良好的提升了我们学生之间的合作能力以及团队协调能力,并且提高了我们的动手能力。
在进行课题的过程中,我们曾一度陷入了僵局,缘由是我们的c语言知识还是略有不足。
为了解决这些过程中出现的问题,我们曾多次进入图书馆去查询资料,来完善我们的系统并了解相关的知识。
我们也曾与多位同学进行交流,虽然大家的系统不同但是都有着相同的基础,这是我们能完成这套系统的前提。
系统完成中出现了许多的问题与错误,但我们通过长时间的检查与细致的研究解决了这些问题,最终完成了系统。
这次设计对于我们来说有着重大的的意义,提升了我们的技术水平与素养。
增加了我们的能力,是一次成功的活动。