C语言教务管理系统
「已注销」 人气:0目前已完成教师管理系统部分,学生管理系统待完成:
实现效果如图:
主界面:
教师端——注册账号
进入教师管理系统
文件的保存
代码如下:
#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); }
加载全部内容