C语言教师管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通信与信息工程学院
高级语言课程设计
班级:电子信息工程1503
姓名:周阳刘锦谷静霆
学号:1507050314 1507050321 1507050334指导教师:刘晓佩李远征王静倪云峰设计时间:2016-07-04 ~ 2016-07-24
成绩:
评语:
通信与信息工程学院
二〇一七年
一、课程设计要求
设计教师工作管理系统,并拥有如下功能。
1.计算并显示每个老师在一个学期中所教课程的总工作量。
2.输入教师姓名可以查询教师信息。
3.可以浏览并删改教师信息。
4.完成教师信息
二、程序的功能设计
三、程序的数据结构
C 语言使用结构体来扩展自定义的数据类型,数据结构如下: #pragma pack (4) //设置结构体的对其方式 typedef struct TEACH {
//数据域
char ArrTeachNum[10]; //教工号 char ArrTeachName[10]; //姓名 char ArrTeachSex[4]; //性别 char ArrTitle[10]; //职称 char ArrSubject[20]; //所教课程 char ArrClass[36]; //所教班级 unsigned int ClassNum ; //班级数目 unsigned int TheoryClaHour ; //理论课时
主函数
添加一个教师的信息 Void
AddTeaMsg(TE ACHER Teacher);
删除一个教师的信
息
Void
DeleTeacher(PTEACH pNode);
查找一个教师信息
PTEACH
SearchTeach(char * Name);
显示所有教师信息保存
void
ShowAllTeach er(void );
unsigned int practicerClaHour ; //实践课时
unsigned int AllClaHour ; //总课时
//指针域
struct TEACH *pNext; //指向下一个节点}
四、程序的函数设计
1.函数的功能描述
main函数
功能:调用菜单函数所示的函数;
Menu()函数
功能:显示给用户所有的功能
AddTeaMsg()函数
功能:增一个教师信息
SearchTeach()函数
功能:查找一个教师信息
DeleTeacher()函数
功能:删除一个教师信息
ShowAllTeacher()函数
功能:显示所有老师信息
2.函数的调用关系
main函数调用所有的子函数来完成相应操作;
查找,删除,修改信息函数都必须调用查找函数。
五、源程序代码
头文件:
#ifndef teach
#define teach
//所需的头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma pack(4)
//设置结构体的对其方式
typedef struct TEACH
{
//数据域
char ArrTeachNum[10]; //教工号
char ArrTeachName[10]; //姓名
char ArrTeachSex[4]; //性别
char ArrTitle[10]; //职称
char ArrSubject[20]; //所教课程
char ArrClass[36]; //所教班级
unsigned int ClassNum ; //班级数目
unsigned int TheoryClaHour ; //理论课时
unsigned int practicerClaHour ; //实践课时
double AllClaHour ; //总课时
//指针域
struct TEACH *pNext; //指向下一个节点}TEACHER;
typedef TEACHER * PTEACH;
//函数声明
//添加一个教师的信息
void AddTeaMsg(TEACHER Teacher);
//删除一个教师信息
void DeleTeacher(PTEACH pNode);
//查找一个教师信息
PTEACH SearchTeach(char * Name);
//显示所有教师信息
void ShowAllTeacher(void);
//保存信息进文件
void SaveTeachToFile(void);
//菜单函数
void Menu(void);
#endif// !teach
源文件:
#include"teacher.h"
//声明链表的头和尾
TEACHER* pHead = NULL; //O
TEACHER* pEnd = NULL;
int main(void)
{
//初始化变量
int flag = 1;
PTEACH pTemp = NULL;
int nOrder = -1;
TEACHER Teacher;
char Name[10] = {'\0'};
Menu();
while (flag)
{
printf("请输入指令:\n");
scanf("%d", &nOrder);
switch (nOrder)
{
case 1: //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;
}
case 2: //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;
}
case 3: //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;
}
case 4:
{
SaveTeachToFile();
break;
}
case 5: //OK
{
printf("请输入指定教师的姓名:");
scanf("%s", Name);
pTemp = SearchTeach(Name);
//删除这个节点
if (NULL != pTemp)
{
DeleTeacher(pTemp);
}
break;
}
case 6: //OK
{
ShowAllTeacher();
break;
}
case 0: //OK
{
exit(1);
}
default:
printf("输入的指令不对!\n");
}
}
system("pause");
return 0;
}
//指令菜单
void Menu(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");
}
//增加一个教师信息
void AddTeaMsg(TEACHER Teacher)
{
//创建一个节点
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;
}
//查找一个教师信息
PTEACH SearchTeach(char * Name)
{
PTEACH pTemp = pHead;
//检测参数的合法性
if (NULL == Name)
{
printf("姓名输入错误!\n");
return NULL;
}
//判断链表是否为空
if (NULL == pHead || NULL == pEnd)
{
printf("链表为空!\n");
return NULL;
}
//遍历链表
while (pTemp != NULL)
{
if (0 == strcmp(pTemp->ArrTeachName, Name))
{
return pTemp;
}
pTemp = pTemp->pNext;
}
printf("无此教师信息!\n");
return NULL;
}
//删除一个教师信息
void DeleTeacher(PTEACH pNode)
{
PTEACH pTemp = 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
{
//记住要删除的节点
PTEACH p = pTemp->pNext;
//链接
pTemp->pNext = pTemp->pNext->pNext;
//释放节点
free(p);
p = NULL;
return;
}
}
pTemp = pTemp->pNext;
}
}
//显示所有教师信息
void ShowAllTeacher(void)
{
PTEACH pTemp = 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->ArrTeachSe
x,pTemp->ArrTitle,pTemp->ArrSubject,pTemp->ArrClass,pTemp->ClassNum,p Temp->TheoryClaHour,pTemp->practicerClaHour,pTemp->AllClaHour);
pTemp = pTemp->pNext;
}
}
//保存信息进文件
void SaveTeachToFile(void)
{
FILE* pFile = NULL;
PTEACH pTemp = pHead;
char strBuf[100] = {'\0'};
char strNum[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语言知识还是略有不足。
为了解决这些过程中出现的问题,我们曾多次进入图书馆去查询资料,来完善我们的系统并了解相关的知识。
我们也曾与多位同学进行交流,虽然大家的系统不同但是都有着相同的基础,这是我们能完成这套系统的前提。
系统完成中出现了许多的问题与错误,但我们通过长时间的检查与细致的研究解决了这些问题,最终完成了系统。
这次设计对于我们来说有着重大的的意义,提升了我们的技术水平与素养。
增加了我们的能力,是一次成功的活动。