c语言之一个简单的《学生教师管理系统》小结记录(二)
本篇博文用来记录学生头/教师文件建立以及结构体链表创建及链表相关操作
首先是头文件的建立
头文件包含学生结构体以及链表结构
1、学生结构体建立
/****定义学生信息******/ typedef struct studentInfo
{
int ID;
char name[];
char password[];
int age;
int classes;
char sex;
float math;
float chinese;
float clanguage;
}StuInfo;
2、链表结构建立
/*定义链表结构*/
typedef struct studentNode
{
struct studentInfo data;
struct studentNode *pNext;
}Node;
3、函数声明
/*创建链表结构并且申请空间*/
Node* makeNode(); /*学生信息初始化*/
StuInfo initData(); /*头插法*/
void headInsert(Node *pHead); /*循环处理,将节点的数据域写入文件*/
void writeToFile(Node *pHead); /*遍历链表*/
void showList(Node *pHead); /*从文件中读取链表信息*/
Node* readFromFile(Node *pHead); /*查找学生*/
Node* findnode(Node *pHead, const int ID); /*录入查重*/
Node* findstu(Node *pHead, const int ID); /*按班级遍历链表*/
void showClassList(Node *pHead, int classes); /*按总成绩显示排序*/
void showClassSortList(Node *pHead, int classes); /*修改学生信息初始化*/
StuInfo modinitData();
4、整个头文件
#ifndef __STUDENT_H_
#define __STUDENT_H_ #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h> #define STU_LEN sizeof(StuInfo)
#define NODE_LEN sizeof(Node) /****定义学生信息******/ typedef struct studentInfo
{
int ID;
char name[];
char password[];
int age;
int classes;
char sex;
float math;
float chinese;
float clanguage;
}StuInfo; /*定义链表结构*/
typedef struct studentNode
{
struct studentInfo data;
struct studentNode *pNext;
}Node; /*创建链表结构并且申请空间*/
Node* makeNode(); /*学生信息初始化*/
StuInfo initData(); /*头插法*/
void headInsert(Node *pHead); /*循环处理,将节点的数据域写入文件*/
void writeToFile(Node *pHead); /*遍历链表*/
void showList(Node *pHead); /*从文件中读取链表信息*/
Node* readFromFile(Node *pHead); /*查找学生*/
Node* findnode(Node *pHead, const int ID); /*录入查重*/
Node* findstu(Node *pHead, const int ID); /*按班级遍历链表*/
void showClassList(Node *pHead, int classes); /*按总成绩显示排序*/
void showClassSortList(Node *pHead, int classes); /*修改学生信息初始化*/
StuInfo modinitData(); #endif
5、函数实现
/*创建链表节点*/
Node* makeNode()
{
Node *newnode = (Node *)malloc(NODE_LEN);//为新节点分配空间
if(NULL == newnode)//容错处理,如果分配失败再次申请空间
{
newnode = (Node *)malloc(NODE_LEN);
}
memset(&newnode->data, '\0', STU_LEN);
newnode->pNext = NULL;
return newnode;
}
/*学生信息初始化*/
StuInfo initData()
{
StuInfo userInfo;
Node *temp = makeNode();
Node *pHead = makeNode();
pHead = readFromFile(pHead);
memset(&userInfo, '\0', STU_LEN);
printf("\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
while(temp != NULL)//防止学号重复
{
printf("\t\t\t\033[31m\033[1m学号重复,请重新录入\033[0m\033[33m\n");
printf("\n\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
}
printf("\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\t\t\t➢ 请输入数学成绩:");
scanf("%f",&userInfo.math);
getchar();
printf("\t\t\t➢ 请输入语文成绩:");
scanf("%f",&userInfo.chinese);
getchar();
printf("\t\t\t➢ 请输入c语言成绩:");
scanf("%f",&userInfo.clanguage);
getchar();
temp = NULL;
pHead = NULL;
return userInfo;
}
/*修改学生信息*/
StuInfo modinitData(int stuID)//修改时学号可以和之前学号重复,但不能和其他人学号重复
{
StuInfo userInfo;
Node *temp = makeNode();
Node *pHead = makeNode();
pHead = readFromFile(pHead);
memset(&userInfo, '\0', STU_LEN);
printf("\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
while((temp != NULL) && (userInfo.ID != stuID))
{
printf("\t\t\t\033[31m\033[1m学号重复,请重新录入\033[0m\033[33m\n");
printf("\n\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
}
printf("\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\t\t\t➢ 请输入数学成绩:");
scanf("%f",&userInfo.math);
getchar();
printf("\t\t\t➢ 请输入语文成绩:");
scanf("%f",&userInfo.chinese);
getchar();
printf("\t\t\t➢ 请输入c语言成绩:");
scanf("%f",&userInfo.clanguage);
getchar(); return userInfo;
}
/*链表操作之头插法*/
void headInsert(Node *pHead)
{
if(NULL == pHead)
{
perror("the list head is NULL!\n");
} Node *newnode = makeNode();
newnode->data = initData();//保存数据
newnode->pNext = pHead->pNext;//讲新的节点指针指向头结点的下一个节点
pHead->pNext = newnode;//头指针指向新节点
newnode = NULL;
}
/*遍历整个链表*/
void showList(Node *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf("|-- ID --|---- name ----|");
printf("classes|-math-|chinese|clanguage|Total score|\n");
while(temp != NULL)
{
printf("| %-6d | %-12s | %-3d |",
temp->data.ID, temp->data.name, temp->data.classes);
printf("%-5.1f |%-5.1f | %-5.1f | %-5.1f |\n",
temp->data.math, temp->data.chinese,temp->data.clanguage,temp->data.math+temp->data.chinese+temp->data.clanguage);
temp = temp->pNext;//指向下一个节点
}
temp = NULL;
}
//按班级遍历链表
void showClassList(Node *pHead, int classes)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf("|-- ID --|---- name ----|");
printf("classes|-math-|chinese|clanguage|Total score|\n");
while(temp != NULL)
{
if(classes == temp->data.classes)
{
printf("| %-6d | %-12s | %-3d |",
temp->data.ID, temp->data.name, temp->data.classes);
printf("%-5.1f |%-5.1f | %-5.1f | %-5.1f |\n",
temp->data.math, temp->data.chinese,temp->data.clanguage,temp->data.math+temp->data.chinese+temp->data.clanguage);
}
temp = temp->pNext;
}
temp = NULL;
}
//按总成绩显示排序
void showClassSortList(Node *pHead, int classes)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf(" ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ %d班成绩排名一览✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈\n\n",classes);
printf("| 姓名 | 学号 | 数学 | 语文 | C语言 | 总分 |\n");
while(temp != NULL)
{
if(classes == temp->data.classes)
{
printf("| %-12s | %-4d | %-5.1f | %-5.1f | %-5.1f | %-6.1f |\n",
temp->data.name, temp->data.ID,
temp->data.math, temp->data.chinese,temp->data.clanguage,
(temp->data.math + temp->data.chinese + temp->data.clanguage));
}
temp = temp->pNext;
}
temp = NULL;
}
//循环处理,将节点的数据域写入文件
void writeToFile(Node *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("NO data to write...\n");
return;
}
FILE *fpw = fopen("student.txt", "w");//可读写方式
if(NULL == fpw)
{
perror("open file student,txt failed!\n");
return;
} Node *temp = pHead->pNext;
while(NULL != temp)//循环写入
{
fwrite(&temp->data, STU_LEN, , fpw);
temp = temp->pNext;
}
system("clear");
puts("========文件保存成功!==========");
fclose(fpw);//关闭文件
return;
}
//链表的读文件
Node* readFromFile(Node *pHead)//从文件中将数据读取并且建立一个链表
{
if(NULL == pHead)
{
perror("the head is NULL!");
return NULL;
} FILE *fpr = fopen("student.txt", "r");//以可读方式打开
if(NULL == fpr)
{
perror("Open file student.txt failed!");
return NULL;
} Node *newnode = NULL;//新建节点
StuInfo stuInfo;//
memset(&stuInfo, '\0', STU_LEN);//空间初始化
while(fread(&stuInfo, STU_LEN, , fpr) > )//边读文件边建立链表
{
newnode = makeNode();
newnode->data = stuInfo;
newnode->pNext = pHead->pNext;
pHead->pNext = newnode;
}
fclose(fpr);//关闭文件
return pHead;//返回链表的头结点
}
/*查找学生*/
Node* findnode(Node *pHead, const int ID)//用于登录时显示登录信息
{
Node *p = makeNode();
p = pHead;
while(p != NULL)
{
if(ID == p->data.ID)
break;
p = p->pNext;
}
if(p == NULL)
{
printf("ID输入错误或此学生信息未录入\n");
}
return p;
}
完整student.c
/*student.c*/ #include "student.h" #define STU_LEN sizeof(StuInfo)
#define NODE_LEN sizeof(Node)
/*void main()
{
Node *pHead = makeNode();
// for(int i = 0; i < 2; i++)
// {
// printf("=====第 %d 个学生的信息=====\n",i+1);
// headInsert(pHead);
// }
// writeToFile(pHead);
readFromFile(pHead);
showList(pHead);
}*/ /*创建链表节点*/
Node* makeNode()
{
Node *newnode = (Node *)malloc(NODE_LEN);//为新节点分配空间
if(NULL == newnode)//容错处理,如果分配失败再次申请空间
{
newnode = (Node *)malloc(NODE_LEN);
}
memset(&newnode->data, '\0', STU_LEN);
newnode->pNext = NULL;
return newnode;
} /*学生信息初始化*/
StuInfo initData()
{
StuInfo userInfo;
Node *temp = makeNode();
Node *pHead = makeNode();
pHead = readFromFile(pHead);
memset(&userInfo, '\0', STU_LEN);
printf("\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
while(temp != NULL)//防止学号重复
{
printf("\t\t\t\033[31m\033[1m学号重复,请重新录入\033[0m\033[33m\n");
printf("\n\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
}
printf("\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\t\t\t➢ 请输入数学成绩:");
scanf("%f",&userInfo.math);
getchar();
printf("\t\t\t➢ 请输入语文成绩:");
scanf("%f",&userInfo.chinese);
getchar();
printf("\t\t\t➢ 请输入c语言成绩:");
scanf("%f",&userInfo.clanguage);
getchar();
temp = NULL;
pHead = NULL;
return userInfo;
} /*修改学生信息*/
StuInfo modinitData(int stuID)//修改时学号可以和之前学号重复,但不能和其他人学号重复
{
StuInfo userInfo;
Node *temp = makeNode();
Node *pHead = makeNode();
pHead = readFromFile(pHead);
memset(&userInfo, '\0', STU_LEN);
printf("\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
while((temp != NULL) && (userInfo.ID != stuID))
{
printf("\t\t\t\033[31m\033[1m学号重复,请重新录入\033[0m\033[33m\n");
printf("\n\t\t\t➢ 请输入学号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findstu(pHead,userInfo.ID);
}
printf("\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\t\t\t➢ 请输入数学成绩:");
scanf("%f",&userInfo.math);
getchar();
printf("\t\t\t➢ 请输入语文成绩:");
scanf("%f",&userInfo.chinese);
getchar();
printf("\t\t\t➢ 请输入c语言成绩:");
scanf("%f",&userInfo.clanguage);
getchar(); return userInfo;
} /*链表操作之头插法*/
void headInsert(Node *pHead)
{
if(NULL == pHead)
{
perror("the list head is NULL!\n");
} Node *newnode = makeNode();
newnode->data = initData();//保存数据
newnode->pNext = pHead->pNext;//讲新的节点指针指向头结点的下一个节点
pHead->pNext = newnode;//头指针指向新节点
newnode = NULL;
} /*遍历整个链表*/
void showList(Node *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf("|-- ID --|---- name ----|");
printf("classes|-math-|chinese|clanguage|Total score|\n");
while(temp != NULL)
{
printf("| %-6d | %-12s | %-3d |",
temp->data.ID, temp->data.name, temp->data.classes);
printf("%-5.1f |%-5.1f | %-5.1f | %-5.1f |\n",
temp->data.math, temp->data.chinese,temp->data.clanguage,temp->data.math+temp->data.chinese+temp->data.clanguage);
temp = temp->pNext;//指向下一个节点
}
temp = NULL;
} //按班级遍历链表
void showClassList(Node *pHead, int classes)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf("|-- ID --|---- name ----|");
printf("classes|-math-|chinese|clanguage|Total score|\n");
while(temp != NULL)
{
if(classes == temp->data.classes)
{
printf("| %-6d | %-12s | %-3d |",
temp->data.ID, temp->data.name, temp->data.classes);
printf("%-5.1f |%-5.1f | %-5.1f | %-5.1f |\n",
temp->data.math, temp->data.chinese,temp->data.clanguage,temp->data.math+temp->data.chinese+temp->data.clanguage);
}
temp = temp->pNext;
}
temp = NULL;
} //按总成绩显示排序
void showClassSortList(Node *pHead, int classes)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the list is empty!");
return;
}
Node *temp = pHead->pNext;
printf(" ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ %d班成绩排名一览✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈ ✈\n\n",classes);
printf("| 姓名 | 学号 | 数学 | 语文 | C语言 | 总分 |\n");
while(temp != NULL)
{
if(classes == temp->data.classes)
{
printf("| %-12s | %-4d | %-5.1f | %-5.1f | %-5.1f | %-6.1f |\n",
temp->data.name, temp->data.ID,
temp->data.math, temp->data.chinese,temp->data.clanguage,
(temp->data.math + temp->data.chinese + temp->data.clanguage));
}
temp = temp->pNext;
}
temp = NULL;
} //循环处理,将节点的数据域写入文件
void writeToFile(Node *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("NO data to write...\n");
return;
}
FILE *fpw = fopen("student.txt", "w");//可读写方式
if(NULL == fpw)
{
perror("open file student,txt failed!\n");
return;
} Node *temp = pHead->pNext;
while(NULL != temp)//循环写入
{
fwrite(&temp->data, STU_LEN, , fpw);
temp = temp->pNext;
}
system("clear");
puts("========文件保存成功!==========");
fclose(fpw);//关闭文件
return;
} //链表的读文件
Node* readFromFile(Node *pHead)//从文件中将数据读取并且建立一个链表
{
if(NULL == pHead)
{
perror("the head is NULL!");
return NULL;
} FILE *fpr = fopen("student.txt", "r");//以可读方式打开
if(NULL == fpr)
{
perror("Open file student.txt failed!");
return NULL;
} Node *newnode = NULL;//新建节点
StuInfo stuInfo;//
memset(&stuInfo, '\0', STU_LEN);//空间初始化
while(fread(&stuInfo, STU_LEN, , fpr) > )//边读文件边建立链表
{
newnode = makeNode();
newnode->data = stuInfo;
newnode->pNext = pHead->pNext;
pHead->pNext = newnode;
}
fclose(fpr);//关闭文件
return pHead;//返回链表的头结点
} /*查找学生*/
Node* findnode(Node *pHead, const int ID)//用于登录时显示登录信息
{
Node *p = makeNode();
p = pHead;
while(p != NULL)
{
if(ID == p->data.ID)
break;
p = p->pNext;
}
if(p == NULL)
{
printf("ID输入错误或此学生信息未录入\n");
}
return p;
} /*录入查重*/
Node* findstu(Node *pHead, const int ID)//不打印信息
{
Node *p = makeNode();
p = pHead;
while(p != NULL)
{
if(ID == p->data.ID)
break;
p = p->pNext;
}
return p;
}
6、教师相关函数类似,直接放代码
teacher.h
#ifndef __TEACHER_H_
#define __TEACHER_H_
/*teacher.h*/ #include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h> /****定义教师信息******/ typedef struct teacherInfo
{
int ID;//教师工号
char name[];
char password[];
int age;
int classes;
char sex;
char position[]; //班主任 head, 数学math 语文 chinese, C语言 clanguage;
}TeaInfo; /*定义教师链表结构*/
typedef struct teacherNode
{
struct teacherInfo data;
struct teacherNode *pNext;
}TeaNode; #define TEA_LEN sizeof(TeaInfo)
#define TEANODE_LEN sizeof(TeaNode) /*构建节点*/
TeaNode* makeTeaNode(); /*初始化教师信息*/
TeaInfo initTeaData(); /*教师头插法*/
void teaheadInsert(TeaNode *pHead); /*教师信息保存*/
void writeToTeaFile(TeaNode *pHead); /*教师信息遍历*/
void showTeaList(TeaNode *pHead); /*从文件中读取教师信息*/
TeaNode* readFromTeaFile(TeaNode *pHead); /*查找教师*/
TeaNode* findteanode(TeaNode *pHead, const int ID); /*录入查重*/
TeaNode* findtea(TeaNode *pHead, const int ID); /*修改初始化调用*/
TeaInfo modinitTeaData(); #endif
teacher.c
/*teacher.c*/ #include "teacher.h" #define TEA_LEN sizeof(TeaInfo)
#define TEANODE_LEN sizeof(TeaNode) /*void main()
{
TeaNode *pHead = makeTeaNode();
//for(int i = 0; i < 2; i++)
//{
// printf("=====第 %d 个教师的信息=====\n",i+1);
// teaheadInsert(pHead);
//}
//writeToTeaFile(pHead);
pHead = readFromTeaFile(pHead);
showTeaList(pHead);
}*/ /*申请空间*/
TeaNode* makeTeaNode()
{
TeaNode *newnode = (TeaNode *)malloc(TEANODE_LEN);
if(NULL == newnode)
{
newnode = (TeaNode *)malloc(TEANODE_LEN);
}
memset(&newnode->data, '\0', TEA_LEN);
newnode->pNext = NULL;
return newnode;
} /*教师信息初始化*/
TeaInfo initTeaData()
{
TeaInfo userInfo;
TeaNode *temp = makeTeaNode();
TeaNode *pTHead = makeTeaNode();
pTHead = readFromTeaFile(pTHead);
memset(&userInfo, '\0', TEA_LEN);
printf("\n\t\t\t➢ 请输入工号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findtea(pTHead,userInfo.ID);
while(temp != NULL)
{
printf("\t\t\t\033[31m\033[1m工号重复,请重新录入\033[0m\033[33m\n");
printf("\n\t\t\t➢ 请输入工号:");
scanf("%d",&userInfo.ID);
getchar();
temp = findtea(pTHead,userInfo.ID);
}
printf("\n\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\n\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\n\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\n\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\n\t\t\t➢ 请输入职位:");
scanf("%s",userInfo.position);
getchar();
return userInfo;
} /*修改初始化调用*/
TeaInfo modinitTeaData()
{
TeaInfo userInfo;
memset(&userInfo, '\0', TEA_LEN);
printf("\t\t\t➢ 请输入工号:");
scanf("%d",&userInfo.ID);
getchar();
printf("\t\t\t➢ 请输入姓名:");
scanf("%s",userInfo.name);
getchar();
strncpy(userInfo.password,"",);//初始密码为000000
printf("\t\t\t➢ 请输入年龄:");
scanf("%d",&userInfo.age);
getchar();
printf("\t\t\t➢ 请输入班级:");
scanf("%d",&userInfo.classes);
getchar();
printf("\t\t\t➢ 请输入性别:");
scanf("%c",&userInfo.sex);
getchar();
printf("\t\t\t➢ 请输入职位:");
scanf("%s",userInfo.position);
getchar();
return userInfo;
} /*教师头插法*/
void teaheadInsert(TeaNode *pHead)
{
if(NULL == pHead)
{
perror("the teacher list head is NULL!\n");
} TeaNode *newnode = makeTeaNode();
newnode->data = initTeaData();
newnode->pNext = pHead->pNext;
pHead->pNext = newnode;
newnode = NULL;
} /*遍历链表*/
void showTeaList(TeaNode *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("the teacher list is empty!");
return;
}
TeaNode *temp = pHead->pNext;
int i = ;
printf("-- ID -- |---- name ----|-- password --|");
printf("-age-|classes|sex|--position--|\n");
while(temp != NULL)
{
printf("| %-6d | %-12s | %-12s |",
temp->data.ID, temp->data.name, temp->data.password);
printf(" %-3d | %-3d |%-3c| %-10s |\n",
temp->data.age,temp->data.classes, temp->data.sex, temp->data.position);
i++;
temp = temp->pNext;
}
temp = NULL;
return;
} //循环处理,将节点的数据域写入文件
void writeToTeaFile(TeaNode *pHead)
{
if(NULL == pHead || NULL == pHead->pNext)
{
perror("NO teacher data to write...\n");
return;
}
FILE *fpw = fopen("teacher.txt", "w");
if(NULL == fpw)
{
perror("open file teacher.txt failed!\n");
return;
} TeaNode *temp = pHead->pNext;
while(NULL != temp)
{
fwrite(&temp->data, TEA_LEN, , fpw);
temp = temp->pNext;
}
system("clear");
puts("========文件保存成功!==========");
fclose(fpw);
return;
} //链表的读文件
TeaNode* readFromTeaFile(TeaNode *pHead)
{
if(NULL == pHead)
{
perror("the teacher head is NULL!");
return NULL;
} FILE *fpr = fopen("teacher.txt", "r");
if(NULL == fpr)
{
FILE *fpr = fopen("teacher.txt", "w");
} TeaNode *newnode = NULL;
TeaInfo teaInfo;
memset(&teaInfo, '\0', TEA_LEN);
while(fread(&teaInfo, TEA_LEN, , fpr) > )
{
newnode = makeTeaNode();
newnode->data = teaInfo;
newnode->pNext = pHead->pNext;
pHead->pNext = newnode;
}
fclose(fpr);
return pHead;
} /*查找教师*/
TeaNode* findteanode(TeaNode *pHead, const int ID)
{
TeaNode *p = makeTeaNode();
p = pHead;
while(p != NULL)
{
if(ID == p->data.ID)
break;
p = p->pNext;
}
if(p == NULL)
{
printf("ID输入错误或此教师信息未录入\n");
}
return p;
} /*录入查重*/
TeaNode* findtea(TeaNode *pHead, const int ID)
{
TeaNode *p = makeTeaNode();
p = pHead;
while(p != NULL)
{
if(ID == p->data.ID)
break;
p = p->pNext;
}
return p;
}
所有执行模块函数在下一部分记录。。。。。
c语言之一个简单的《学生教师管理系统》小结记录(二)的更多相关文章
- 【python免费代码】设计一个简单的学生信息管理系统
文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...
- PHP实现简单的学生信息管理系统(web版)
(∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...
- 【学生成绩管理系统】 大二c语言作业
几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <i ...
- C++ 简单的学生信息管理系统
// // main.cpp // 2013-7-17作业1 // // Created by 丁小未 on 13-7-17. // Copyright (c) 2013年 dingxiaowei. ...
- C语言练手自己编写学生成绩管理系统
#include<stdio.h> #include<stdlib.h> /*定义学生结构体*/ struct Student { ]; ]; float Mark1; flo ...
- Java实现简单的学生成绩管理系统
ScoreInformation.java import java.util.Scanner; class ScoreInformation { private String stunumber ...
- 学生信息管理系统.cpp(大二上)
#include<iostream> #include<fstream> #include<string> #include<iomanip> #i ...
- 【C语言期末实训】学生学籍管理系统
目录: 一,设计要求 ,总体要求: ,具体功能: 二,设计框架 三,程序代码 ,声明函数和头文件 ,声明结构体 ,声明全局变量 ,主体启动函数 ,主菜单函数 ,创建学生档案函数 ,编辑学生档案函数 , ...
- 程序阅读:简单C++学生信息管理系统
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [程序阅读]阅读并执行以下的程序,找出当中出现 ...
随机推荐
- 阿里云服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题
TCP状态转移要点TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放.网络服务器程序要同时管理大 ...
- cocos2dx图片加密解密(npk方式)
话不多说,直接开始: 准备的工具: 链接:https://pan.baidu.com/s/1Om4kBNWcG2jL_RTsHqqzpQ 提取码:bv7i npkCreate.exe是加密图片的工具, ...
- 2019-10-17 李宗盛 spss作业
开放数据库连接是为解决异构数据库之间的数据共享而产生的,现已成为Wosa cwindows开放系统体系结构主要部分和基于Windows环境的一种数据库访问接口标准ODBS被异构数据库访问提供统一接口, ...
- appium(api操作)
driver.current_activity #获取当前activity driver.current_package #获取包名 driver.lock(seconds=2) #息屏 #收起虚拟键 ...
- hi cnblogs
hi cnblogs 前言: 作为一个工作好些年的it男,还没正经写过技术博客,真是太羞愧了... 正文: 先扯点儿虚的,无论从事什么行业,最重要的都是自我认知和自我定位.至今,我也有工作了小五年了, ...
- 【OpenCV开发】使用OpenCV的OpenCL(ocl)模块
参加OpenCV的OpenCL模块(以下称OCL)移植工作已经有2个月了.这里我说移植而不是开发,是因为大部分OCL模块的函数都是从已经很成熟的GPU模块移植过来的.于是目前阶段OCL模块所支持的函数 ...
- OpenGL.Qt551.问题
1.Qt551 + vs2013 + Win7x64 缘由:将“教程14:渲染到纹理.html(http://www.opengl-tutorial.org/cn/intermediate-tutor ...
- Linux安装jemalloc笔记
前言 最近研究一个工具库需要用 jemalloc 做内存分配器,但在 ubuntu 下安装过程中遇到很多问题,故记下安装过程的笔记,避免以后遇到在这上面浪费时间. 安装过程 环境:VMware Ubu ...
- kafka server.properties 配置文件详解(二)
虽然在前面一部分我们启动了kafka集群,并通过控制台的方式实现了producer和consumer,但是我们还是了解一下kafka单个节点是的配置参数属性, 也只有了解了这些参数的配置,才能将kaf ...
- 使用pycharm开发web——django2.1.5(一)入坑尝试第一步,基本搭建
首先,接触python的人应该都会用pip 来安装需要的包吧(------>>>>)默认 在运行中使用python -m django --version来检查自己的djang ...