首頁 > 軟體

C語言實現教務管理系統

2022-03-17 19:00:25

本文範例為大家分享了C語言實現教務管理系統的具體程式碼,供大家參考,具體內容如下

目前已完成教師管理系統部分,學生管理系統待完成:

實現效果如圖:

主介面:

教師端——註冊賬號

進入教師管理系統

檔案的儲存

程式碼如下:

#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("nnnnnnntttt學生端暫時未寫,有興趣可以接著寫!!!nnnnnnnn");
}
/*教師端*/
void showTeacherPort()
{
    system("CLS");
    printf("nnntttt 教師端");
    printf("nttt---------------------------------nn");
    printf("tttt1)註冊n");
    printf("tttt2)登入n");
    printf("tttt0)返回n");
    printf("nttt---------------------------------nn");
}
/*教師管理選單*/
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("ntt輸入錯誤,請重新輸入,你還有%d次機會:", 3 - n);
        }
    }
    return tem;
}
/*教師端登入*/
void teacherLogin()
{
    char ID[10];
    Manager* t;
    printf("請輸入賬號:");
    scanf("%s",ID);
    t = Manager_check(ID);
    if (!t)
    {
        printf("tt抱歉,賬號不存在n");
        system("pause");
        return;
    }
    printf("請輸入密碼:");
    if (Password_Text_Find(t->manPassw) == 0)
    {
        printf("ntt已經錯誤輸入密碼三次,將退出登入系統···n");
        system("pause");
        return;
    }    
    printf("tt登入成功···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("tt輸入錯誤,請重新輸入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成績tn");
    while (P)
    {
        printf("%st%st%fn", 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("%st%st%fn", 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, "%st%st%fn", 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, "%st%st%fn",  pMove->data.name,pMove->data.iD, pMove->data.score);
        pMove = pMove->next;
    }

    fclose(fp);
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com