C语言教师管理系统

更新时间:2024-04-26 23:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

通信与信息工程学院

高级语言课程设计

班 级:姓 名:学 号:指导教师:设计时间:成 绩:评 语:

电子信息工程1503 周阳 刘锦 谷静霆

1507050314 1507050321 1507050334 刘晓佩 李远征 王静 倪云峰

2016-07-04 ~ 2016-07-24

通信与信息工程学院

二〇一七年

一、课程设计要求

设计教师工作管理系统,并拥有如下功能。1.计算并显示每个老师在一个学期中所教课程的总工作量。2.输入教师姓名可以查询教师信息。3.可以浏览并删改教师信息。4.完成教师信息

二、程序的功能设计

主函数 添加一个教师的信息 Void 删除一个教师的查找一个教师信息 显示所有教师信息保存 AddTeaMsg(TEACHER Teacher); Void DeleTeacher(PTEACH pNode); 信息PTEACH SearchTeach(char * Name); void ShowAllTeacher(void);

三、程序的数据结构

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 ; //理论课时

unsigned int practicerClaHour ; unsigned int AllClaHour ; //指针域

struct TEACH *pNext; }

//实践课时 //总课时

//指向下一个节点

四、程序的函数设计

1. 函数的功能描述 main函数

功能:调用菜单函数所示的函数; Menu()函数

功能:显示给用户所有的功能 AddTeaMsg()函数

功能:增一个教师信息 SearchTeach()函数

功能:查找一个教师信息 DeleTeacher()函数

功能:删除一个教师信息 ShowAllTeacher()函数 功能:显示所有老师信息 2. 函数的调用关系

main函数调用所有的子函数来完成相应操作; 查找,删除,修改信息函数都必须调用查找函数。

五、源程序代码

头文件:

#ifndef teach #define teach //所需的头文件

#include #include #include

#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* 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(\, &nOrder); switch (nOrder) {

case 1: //OK {

printf(\请输入教工号:\);

scanf(\, Teacher.ArrTeachNum); printf(\请输入教师姓名:\);

scanf(\, Teacher.ArrTeachName); printf(\请输入性别:\);

scanf(\, Teacher.ArrTeachSex); printf(\请输入职称:\);

scanf(\, Teacher.ArrTitle); printf(\请输入所授课程:\);

scanf(\, Teacher.ArrSubject); printf(\请输入授课班级:\); scanf(\, Teacher.ArrClass); printf(\请输入授课班级数目:\); scanf(\, &Teacher.ClassNum); printf(\请输入理论课时时长:\);

scanf(\, &Teacher.TheoryClaHour); printf(\请输入实践课时时长:\);

scanf(\, &Teacher.practicerClaHour);

AddTeaMsg(Teacher); break; }

case 2: //OK {

printf(\请输入指定教师的姓名:\); scanf(\, 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(\, Name);

pTemp = SearchTeach(Name); if (NULL != pTemp) {

printf(\请输入教工号:\);

scanf(\,pTemp->ArrTeachNum); printf(\请输入性别:\);

scanf(\, pTemp->ArrTeachSex); printf(\请输入职称:\);

scanf(\, pTemp->ArrTitle); printf(\请输入所授课程:\); scanf(\,pTemp->ArrSubject); printf(\请输入授课班级:\); scanf(\,pTemp->ArrClass); printf(\请输入授课班级数目:\); scanf(\, &(pTemp->ClassNum)); printf(\请输入理论课时时长:\);

scanf(\, &(pTemp->TheoryClaHour)); printf(\请输入实践课时时长:\);

scanf(\, &(pTemp->practicerClaHour)); }

break; }

case 4: {

SaveTeachToFile(); break; }

case 5: //OK {

printf(\请输入指定教师的姓名:\); scanf(\, Name);

pTemp = SearchTeach(Name);

//删除这个节点 if (NULL != pTemp) {

DeleTeacher(pTemp); }

break; }

case 6: //OK {

ShowAllTeacher(); break; }

case 0: //OK {

exit(1); }

default:

printf(\输入的指令不对!\\n\); } }

system(\); return 0; }

//指令菜单

void Menu(void) {

printf(\教师信息管理系统*********************\\n\);

printf(\本系统操作指令如下*******************\\n\);

printf(\、 增加一个教师信息(链表尾部添加) ***\\n\);

printf(\、 查找指定教师的信息(姓名/工号) ***\\n\);

printf(\、 修改指定教师的信息 ***\\n\);

printf(\、 保存教师的信息到文件中 ***\\n\);

printf(\、 删除指定教师的信息

***\\n\);

printf(\、 显示所有教师的信息 ***\\n\);

printf(\、 退出系统 ***\\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,pTemp->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\, \); 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(\, 1, strlen(\), pFile); fclose(pFile);

六、调试及总结

在调试中遇到了不少问题,我曾想用char *P这个指针去代替数组,后来才发现这样是不行的,数组和指针是有区别的。还有,我也遇到了结构体的赋值问题,后来对单个成员进行赋值,才调试通过,使我认识到了自己的C语言知识还是有所不足,这正如有人所说,程序不是写出来的,而是debug出来的。 本次任务,以小组的形式进行,良好的提升了我们学生之间的合作能力以及团队协调能力,并且提高了我们的动手能力。在进行课题的过程中,我们曾一度陷入了僵局,缘由是我们的c语言知识还是略有不足。为了解决这些过程中出现的问题,我们曾多次进入图书馆去查询资料,来完善我们的系统并了解相关的知识。我们也曾与多位同学进行交流,虽然大家的系统不同但是都有着相同的基础,这是我们能完成这套系统的前提。系统完成中出现了许多的问题与错误,但我们通过长时间的检查与细致的研究解决了这些问题,最终完成了系统。这次设计对于我们来说有着重大的的意义,提升了我们的技术水平与素养。增加了我们的能力,是一次成功的活动。

本文来源:https://www.bwwdw.com/article/saup.html

Top