目前已完成教师管理系统部分,学生管理系统待完成:
实现效果如图:
主界面:
教师端——注册账号
进入教师管理系统
文件的保存
**
代码如下:
**
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*教师应用结构体*/
typedef struct Teacher
{
char name[10];//学生姓名
char iD[10];//学生学号
float score;//学生成绩
}teacher;
/*教师链表结点*/
typedef struct
{
teacher data;
struct Teacher* next;
}Tutor;
/*教师系统账号*/
typedef struct manager
{
char manAcc[10]; //账号
char manPassw[10]; //密码
struct manager* next;
}Manager;
Manager* managerHead;
/*函数声明*/
void mainMenu();//主菜单
void studentPort();//学生端
/*---------------------------------------------------------*/
/* 教师管理系统函数 */
/*---------------------------------------------------------*/
void showTeacherPort();//教师端
void teacherRegister();//教师端账号注册
void teacherLogin();//教师端登录
int Password_Text_Find();//密码验证
Manager* Manager_check();//账号核对
void teacherPort();//教师端
void tutorMenu();//教师管理菜单
void teacherFunction();//教师端功能应用
void insertStudentData();//学生信息录入
void showStudentData();//学生信息展示
void searchStudentData();//学生信息查询
void changeStudentData();//学生信息修改
Tutor* deleteStudentData();//学生信息删除
/*---------------------------------------------------------*/
/* 教师链表的初始化 */
/*---------------------------------------------------------*/
Tutor* initTeacherList();//链表初始化
Tutor* createNode();//创建结点
/*---------------------------------------------------------*/
/* 文件的读写操作 */
/*---------------------------------------------------------*/
void readInfoFromFile();
void writeInfoToFile();
int main(void)
{
int choice = 0;
while (1)
{
mainMenu();//主菜单
printf("\t请输入选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
teacherPort();
break;
case 2:
studentPort();
break;
case 3:
printf("您已退出系统!\n");
system("pause");
exit(0);
default:
printf("您的输入有误,请重新输入!\n");
break;
}
system("pause");
system("cls");
}
}
/*主菜单*/
void mainMenu()
{
system("color f0");
printf("-------------------------------------------------\n");
printf("*欢迎使用教务管理系统*\n");
printf("\t1.教师端\n");
printf("\t2.学生端\n");
printf("\t3.退出系统\n");
printf("-------------------------------------------------\n");
}
/*学生端*/
void studentPort()
{
system("cls");
system("color b0");
printf("\n\n\n\n\n\n\n\t\t\t\t学生端暂时未写,有兴趣可以接着写!!!\n\n\n\n\n\n\n\n");
}
/*教师端*/
void showTeacherPort()
{
system("CLS");
printf("\n\n\n\t\t\t\t 教师端");
printf("\n\t\t\t---------------------------------\n\n");
printf("\t\t\t\t1)注册\n");
printf("\t\t\t\t2)登录\n");
printf("\t\t\t\t0)返回\n");
printf("\n\t\t\t---------------------------------\n\n");
}
/*教师管理菜单*/
void tutorMenu()
{
system("cls");
system("color 70");
printf("-------------------------------------------------\n");
printf("*欢迎进入教师端*\n");
printf("\t1.学生信息录入\n");
printf("\t2.学生信息展示\n");
printf("\t3.学生信息查询\n");
printf("\t4.学生信息修改\n");
printf("\t5.学生信息删除\n");
printf("\t6.学生数据保存\n");
printf("\t0.返回主菜单\n");
printf("-------------------------------------------------\n");
}
/*教师端账号注册*/
void teacherRegister()
{
Manager* p = (Manager*)malloc(sizeof(Manager));
p->next = NULL;
printf("请输入注册账号:");
scanf("%s", p->manAcc);
printf("请输入账号密码:");
scanf("%s", p->manPassw);
if (managerHead == NULL)
{
managerHead = p;
}
else
{
p->next = managerHead;
managerHead = p;
}
printf("注册成功!\n");
}
/*核对账号*/
Manager* Manager_check(char* Manager_num)
{
Manager* t = managerHead;
while (t)
{
if (strcmp(Manager_num, t->manAcc) != 0)
{
t = t->next;
continue;
}
return t;
}
return t;
}
/*密码验证*/
int Password_Text_Find(char* Password)
{
char password_tem[20]="";
int tem = 0;
int n = 0; //检测输入次数
while (n != 3)
{
scanf("%s", password_tem);
if (strcmp(password_tem, Password) == 0) {
tem = 1;
break;
}
else
{
n++;
printf("\n\t\t输入错误,请重新输入,你还有%d次机会:", 3 - n);
}
}
return tem;
}
/*教师端登录*/
void teacherLogin()
{
char ID[10];
Manager* t;
printf("请输入账号:");
scanf("%s",ID);
t = Manager_check(ID);
if (!t)
{
printf("\t\t抱歉,账号不存在\n");
system("pause");
return;
}
printf("请输入密码:");
if (Password_Text_Find(t->manPassw) == 0)
{
printf("\n\t\t已经错误输入密码三次,将退出登录系统···\n");
system("pause");
return;
}
printf("\t\t登录成功···\n");
system("pause");
teacherFunction();
}
/*教师端*/
void teacherPort()
{
while (1)
{
showTeacherPort();
char ch = getch();
switch(ch)
{
case '1':
teacherRegister();
break;
case '2':
teacherLogin();
break;
case '0':
return;
default:
printf("\t\t输入错误,请重新输入\n");
break;
}
system("pause");
system("cls");
}
}
/*教师端应用功能*/
void teacherFunction()
{
Tutor* T = initTeacherList();
teacher data;
int choice = 0;
readInfoFromFile(T);
while (1)
{
tutorMenu();//教师菜单
printf("\t请输入选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
printf("\t1.学生信息录入\n");
printf("学生姓名:");
scanf("%s", data.name);
printf("学生学号:");
scanf("%s", data.iD);
printf("学生成绩:");
scanf("%f", &data.score);
insertStudentData(T, data);//录入学生信息
break;
case 2:
showStudentData(T);
break;
case 3:
searchStudentData(T);
break;
case 4:
changeStudentData(T);
break;
case 5:
T=deleteStudentData(T);
break;
case 6:
writeInfoToFile(T);
break;
case 0:
return;
default:
printf("您的输入有误,请重新输入!\n");
break;
}
system("pause");
system("cls");
}
}
/*教师链表初始化*/
Tutor* initTeacherList()
{
Tutor* headNode = (Tutor*)malloc(sizeof(Tutor));
headNode->next = NULL;
return headNode;
}
/*创建结点*/
Tutor* createNode(teacher data)
{
Tutor* newNode = (Tutor*)malloc(sizeof(Tutor));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
/*学生信息录入*/
void insertStudentData(Tutor* headNode,teacher data)
{
Tutor* newNode = createNode(data);
/*头接法*/
newNode->next = headNode->next;
headNode->next = newNode;
printf("\t录入成功!\n");
}
/*学生信息展示*/
void showStudentData(Tutor* headNode)
{
Tutor* P = headNode->next;
printf("姓名\t学号\t成绩\t\n");
while (P)
{
printf("%s\t%s\t%f\n", P->data.name, P->data.iD, P->data.score);
P = P->next;
}
}
/*学生信息查询-按学号*/
void searchStudentData(Tutor* headNode)
{
Tutor* P = headNode->next;
char ID[10] = " ";
printf("请输入查找的学生学号:");
scanf("%s", ID);
while (P)
{
if (strcmp(P->data.iD, ID) != 0)
{
P = P->next;
continue;
}
else
{
printf("姓名\t学号\t成绩\n");
printf("%s\t%s\t%f\n", P->data.name, P->data.iD, P->data.score);
return;
}
}
printf("\t目前不存在该学生信息!\n");
return;
}
/*学生信息修改*/
void changeStudentData(Tutor* headNode)
{
Tutor* P = headNode->next;
char ID[10] = " ";
printf("请输入修改的学生学号:");
scanf("%s", ID);
while (P)
{
if (strcmp(P->data.iD, ID) != 0)
{
P = P->next;
continue;
}
else
{
printf("\t请进行修改\n");
printf("学生姓名:");
scanf("%s", P->data.name);
printf("学生学号:");
scanf("%s", P->data.iD);
printf("学生成绩:");
scanf("%f", &P->data.score);
printf("已完成修改!\n");
return;
}
}
printf("\t目前不存在该学生信息!\n");
return;
}
/*学生信息删除*/
Tutor* deleteStudentData(Tutor* headNode)
{
Tutor* head= headNode;
Tutor* node= head->next;
char ID[10] = " ";
if (headNode->next == NULL)
{
printf("\t当前数据为空!\n");
return headNode;
}
printf("请输入要删除的学生学号:");
scanf("%s", ID);
while (node!=NULL)
{
if (strcmp(node->data.iD, ID) != 0)
{
head = node;
node = node->next;
continue;
}
else
{
head->next = node->next;
free(node);
printf("\t删除成功!\n");
return headNode;
}
}
printf("\t未找到该学生的相关信息!\n");
return headNode;
}
//文件读操作
void readInfoFromFile(Tutor* headNode)
{
FILE* fp;
struct Teacher data;
fp = fopen("1.txt", "r");
if (fp == NULL)
{
fp = fopen("1.txt", "w+");
}
//2.读文件
fscanf(fp, "姓名\t学号\t成绩\n");//fscanf--格式化读取数据
while (fscanf(fp, "%s\t%s\t%f\n", data.name, data.iD, &data.score) != EOF)
{
insertStudentData(headNode, data);
}
fclose(fp);
}
//文件写操作
void writeInfoToFile(Tutor* headNode)
{
FILE* fp;
fp = fopen("1.txt", "w");
Tutor* pMove = headNode->next;
fprintf(fp, "姓名\t学号\t成绩\n"); //fprintf--写入格式化数据
while (pMove)
{
fprintf(fp, "%s\t%s\t%f\n", pMove->data.name,pMove->data.iD, pMove->data.score);
pMove = pMove->next;
}
fclose(fp);
}