C語言實現(xiàn)教務(wù)管理系統(tǒng)
更新時間:2022年03月17日 17:29:55 作者:「已注銷」
這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)教務(wù)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)教務(wù)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
目前已完成教師管理系統(tǒng)部分,學(xué)生管理系統(tǒng)待完成:
實現(xiàn)效果如圖:
主界面:
教師端——注冊賬號
進(jìn)入教師管理系統(tǒng)
文件的保存
代碼如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> /*教師應(yīng)用結(jié)構(gòu)體*/ typedef struct Teacher { ?? ?char name[10];//學(xué)生姓名 ?? ?char iD[10];//學(xué)生學(xué)號 ?? ?float score;//學(xué)生成績 }teacher; /*教師鏈表結(jié)點*/ typedef struct { ?? ?teacher data; ?? ?struct Teacher* next; }Tutor; /*教師系統(tǒng)賬號*/ typedef struct manager { ?? ?char manAcc[10];?? ?//賬號 ?? ?char manPassw[10];?? ?//密碼 ?? ?struct manager* next; }Manager; Manager* managerHead; /*函數(shù)聲明*/ void mainMenu();//主菜單 void studentPort();//學(xué)生端 /*---------------------------------------------------------*/ /* ? ? ? ? ? ? ? ? 教師管理系統(tǒng)函數(shù) ? ? ? ? ? ? ? ? ? ? ? */ /*---------------------------------------------------------*/ void showTeacherPort();//教師端 void teacherRegister();//教師端賬號注冊 void teacherLogin();//教師端登錄 int Password_Text_Find();//密碼驗證 Manager* Manager_check();//賬號核對 void teacherPort();//教師端 void tutorMenu();//教師管理菜單 void teacherFunction();//教師端功能應(yīng)用 void insertStudentData();//學(xué)生信息錄入 void showStudentData();//學(xué)生信息展示 void searchStudentData();//學(xué)生信息查詢 void changeStudentData();//學(xué)生信息修改 Tutor* deleteStudentData();//學(xué)生信息刪除 /*---------------------------------------------------------*/ /* ? ? ? ? ? ? ? ? 教師鏈表的初始化 ? ? ? ? ? ? ? ? ? ? ? ?*/ /*---------------------------------------------------------*/ Tutor* initTeacherList();//鏈表初始化 Tutor* createNode();//創(chuàng)建結(jié)點 /*---------------------------------------------------------*/ /* ? ? ? ? ? ? ? ? 文件的讀寫操作 ? ? ? ? ? ? ? ? ? ? ? ? ?*/ /*---------------------------------------------------------*/ 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("您已退出系統(tǒng)!\n"); ?? ??? ??? ?system("pause"); ?? ??? ??? ?exit(0); ?? ??? ?default: ?? ??? ??? ?printf("您的輸入有誤,請重新輸入!\n"); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?system("pause"); ?? ??? ?system("cls"); ?? ?} } /*主菜單*/ void mainMenu() { ?? ?system("color f0"); ?? ?printf("-------------------------------------------------\n"); ?? ?printf("*歡迎使用教務(wù)管理系統(tǒng)*\n"); ?? ?printf("\t1.教師端\n"); ?? ?printf("\t2.學(xué)生端\n"); ?? ?printf("\t3.退出系統(tǒng)\n"); ?? ?printf("-------------------------------------------------\n"); } /*學(xué)生端*/ void studentPort() { ?? ?system("cls"); ?? ?system("color b0"); ?? ?printf("\n\n\n\n\n\n\n\t\t\t\t學(xué)生端暫時未寫,有興趣可以接著寫?。?!\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("*歡迎進(jìn)入教師端*\n"); ?? ?printf("\t1.學(xué)生信息錄入\n"); ?? ?printf("\t2.學(xué)生信息展示\n"); ?? ?printf("\t3.學(xué)生信息查詢\n"); ?? ?printf("\t4.學(xué)生信息修改\n"); ?? ?printf("\t5.學(xué)生信息刪除\n"); ?? ?printf("\t6.學(xué)生數(shù)據(jù)保存\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; ? ?//檢測輸入次數(shù) ?? ?while (n != 3)? ?? ?{ ?? ??? ?scanf("%s", password_tem); ?? ??? ?if (strcmp(password_tem, Password) == 0) { ?? ??? ??? ?tem = 1; ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?else? ?? ??? ?{ ?? ??? ??? ?n++; ?? ??? ??? ?printf("\n\t\t輸入錯誤,請重新輸入,你還有%d次機(jī)會:", 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已經(jīng)錯誤輸入密碼三次,將退出登錄系統(tǒng)···\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"); ?? ?} } /*教師端應(yīng)用功能*/ 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.學(xué)生信息錄入\n"); ?? ??? ??? ?printf("學(xué)生姓名:"); ?? ??? ??? ?scanf("%s", data.name); ?? ??? ??? ?printf("學(xué)生學(xué)號:"); ?? ??? ??? ?scanf("%s", data.iD); ?? ??? ??? ?printf("學(xué)生成績:"); ?? ??? ??? ?scanf("%f", &data.score); ?? ??? ??? ?insertStudentData(T, data);//錄入學(xué)生信息?? ??? ??? ? ?? ??? ??? ?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; } /*創(chuàng)建結(jié)點*/ Tutor* createNode(teacher data) { ?? ?Tutor* newNode = (Tutor*)malloc(sizeof(Tutor)); ?? ?newNode->data = data; ?? ?newNode->next = NULL; ?? ?return newNode; } /*學(xué)生信息錄入*/ void insertStudentData(Tutor* headNode,teacher data) { ?? ?Tutor* newNode = createNode(data); ?? ?/*頭接法*/ ?? ?newNode->next = headNode->next; ?? ?headNode->next = newNode; ?? ?printf("\t錄入成功!\n"); } /*學(xué)生信息展示*/ void showStudentData(Tutor* headNode) { ?? ?Tutor* P = headNode->next; ?? ?printf("姓名\t學(xué)號\t成績\t\n"); ?? ?while (P) ?? ?{ ?? ??? ?printf("%s\t%s\t%f\n", P->data.name, P->data.iD, P->data.score); ?? ??? ?P = P->next; ?? ?} } /*學(xué)生信息查詢-按學(xué)號*/ void searchStudentData(Tutor* headNode) { ?? ?Tutor* P = headNode->next; ?? ?char ID[10] = " "; ?? ?printf("請輸入查找的學(xué)生學(xué)號:"); ?? ?scanf("%s", ID); ?? ?while (P) ?? ?{ ?? ??? ?if (strcmp(P->data.iD, ID) != 0) ?? ??? ?{ ?? ??? ??? ?P = P->next; ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?else ?? ??? ?{ ?? ??? ??? ?printf("姓名\t學(xué)號\t成績\n"); ?? ??? ??? ?printf("%s\t%s\t%f\n", P->data.name, P->data.iD, P->data.score); ?? ??? ??? ?return; ?? ??? ?} ?? ?} ?? ?printf("\t目前不存在該學(xué)生信息!\n"); ?? ?return; } /*學(xué)生信息修改*/ void changeStudentData(Tutor* headNode) { ?? ?Tutor* P = headNode->next; ?? ?char ID[10] = " "; ?? ?printf("請輸入修改的學(xué)生學(xué)號:"); ?? ?scanf("%s", ID); ?? ?while (P) ?? ?{ ?? ??? ?if (strcmp(P->data.iD, ID) != 0) ?? ??? ?{ ?? ??? ??? ?P = P->next; ?? ??? ??? ?continue; ?? ??? ?} ?? ??? ?else ?? ??? ?{?? ??? ? ?? ??? ??? ?printf("\t請進(jìn)行修改\n"); ?? ??? ??? ?printf("學(xué)生姓名:"); ?? ??? ??? ?scanf("%s", P->data.name); ?? ??? ??? ?printf("學(xué)生學(xué)號:"); ?? ??? ??? ?scanf("%s", P->data.iD); ?? ??? ??? ?printf("學(xué)生成績:"); ?? ??? ??? ?scanf("%f", &P->data.score); ?? ??? ??? ?printf("已完成修改!\n"); ?? ??? ??? ?return; ?? ??? ?} ?? ?} ?? ?printf("\t目前不存在該學(xué)生信息!\n"); ?? ?return; } /*學(xué)生信息刪除*/ Tutor* deleteStudentData(Tutor* headNode) { ?? ?Tutor* head= headNode; ?? ?Tutor* node= head->next; ?? ?char ID[10] = " "; ?? ? ?? ?if (headNode->next == NULL) ?? ?{ ?? ??? ?printf("\t當(dāng)前數(shù)據(jù)為空!\n"); ?? ??? ?return headNode; ?? ?}?? ? ?? ?printf("請輸入要刪除的學(xué)生學(xué)號:"); ?? ?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未找到該學(xué)生的相關(guān)信息!\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學(xué)號\t成績\n");//fscanf--格式化讀取數(shù)據(jù) ?? ?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學(xué)號\t成績\n"); //fprintf--寫入格式化數(shù)據(jù) ?? ?while (pMove) ?? ?{ ?? ??? ?fprintf(fp, "%s\t%s\t%f\n", ?pMove->data.name,pMove->data.iD, pMove->data.score); ?? ??? ?pMove = pMove->next; ?? ?} ?? ?fclose(fp); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用C++實現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點
利用C++實現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點。需要的朋友可以過來參考下,希望對大家有所幫助2013-10-10