对于这个项目是每一个刚学编程的必备入门项目,今天就由我来给各位详细介绍下,该项目基于双向循环链表编写,主要分为管理员和学生两个系统界面,还有一个主界面用于选择管理员还是学生。

学生界面可以查看c语言成绩排名查看自己的信息,管理员界面可以添加学生信息,查找学生,删除学生,修改学生信息,根据学生id进行升序排序,根据学生成绩降序排序,修改管理员登录密码等等,

前半部分为项目详解(源码见文章最后);代码注释超级详细!!!

注意:首先做任何项目之前需要先构思,确定项目的内容及怎么实现,确定一个大概的框架,做到事半功倍的效果,项目构思图片如下

ios学生管理系统 学生管理系统在哪里_数据结构

1,让我们进入项目分段解析;首先编译过后会弹出主界面,用于选择身份

选择管理员之后需要输入密码才能进入,初始密码12345678,输入错误会提示两秒后重试

ios学生管理系统 学生管理系统在哪里_数据结构_02

输入正确之后进入管理员界面如下输入选项实现功能

ios学生管理系统 学生管理系统在哪里_数据结构_03

选择学生界面如下

ios学生管理系统 学生管理系统在哪里_ios学生管理系统_04

ui界面介绍完毕让我们来看看源码吧,

首先任何代码都是由main函数进入,main文件如下

#include"linkend.h"
#include"ui.h"
#include"mainaff.h"
/******************使用说明****************************/
/*一.各文件说明
     studentmain.c是主函数
     mainaff.c是主函数的功能实现文件,为了主函数更加简介
     mainaff.h上一个文件内所使用函数的说明
     linkend.c是链表文件,将本文件看作一个工具箱,提供给mainaff.c使用!
     linkend.h是上一个文件内所使用的函数说明
     ui.c是界面实现的函数,运用了大量颜色转变及底色,运行后查看效果
     ui.h是上一个文件内所使用的函数说明         
 二.运行逻辑
        程序从主函数进入,遇到do-while循环,switch阻塞等待用户选择,
     选择执行某个功功能,执行完成后退回 重新选择下一个功能,主函数内函数命名均为中文拼音形式
 三.个文件运行流程
        主函数文件(studentmain)>>界面文件(ui.c)>>主函数的功能实现文件(mainaff.c)>>
     >>>链表文件(linkend.c)>>>界面文件(ui.c)............往复执行
***************/
int main(int argc,char* argv[])
{
     int sum=12345678;//管理员密码
    pnode phead=create();//创建头节点
      int num=0;//主界面选择管理员还是学生的变量
      int ass=0;//管理员的功能变量
      int we=0;//学生功能选择变量
AAA://跳转主界面的标志位
    hshshs();//主界面函数
 do
 {
       scanf("%d",&num);//输入主界面选择变量
       switch(num)//管理员和学生的选择
        {
            
          case 1://选择管理员 
                  admlogin(sum);//管理员密码判断
                 do
                 {                   
                      adm();//管理员界面
                      scanf("%d",&ass);//输入管理员选择变量     
                    switch(ass)//管理员界面选择
                    {
                        case 1:
                              /******添加学生信息******/
                                  system("clear");
                                 tianjia(phead);
                               break;            
                        case 2:
                             /********查找学生********/
                             system("clear");
                                chazhao(phead);
                              break;                          
                       case 3:
                             /******修改学生信息*******/
                                 system("clear");
                                xiugai(phead);
                              break;                           
                       case 4:
                            /***********删除学生*******/
                                 system("clear");
                                shanchu(phead);
                              break;
                       case 5:
                              /********显示学生信息*****/
                                 system("clear");
                                dayin(phead);
                              break;                          
                       case 6:
                            /*********比较学生信息*******/
                                  system("clear");
                                 paixu(phead);
                               break;
                        case 7:
                             /*******管理员密码********/
                                system("clear");
                               srand(time(NULL));//
                               int yanzhen=rand()%100000;//随即生成验证码(最大99999)
                                 int shuyan;//输入验证码匹配
                               int xinmi;//新密码
                               printf("\n");
                               printf("等待系统发送验证码>>>>>\n");
                               sleep(3);
                               printf("您的验证码是:%d\n",yanzhen);
                             ppp:  
                               sleep(1);
                                 printf("\033[33m\033[37m请输入系统发送的验证码:");scanf("%d",&shuyan);
                                 printf("\n\033[0;42m正在验证.............\033[0m\n");
                               sleep(2);
                               if(shuyan==yanzhen)
                               {
                                 sleep(1);
                                 printf("\n\033[33m\033[37m验证码正确,请输入新的密码:");
                                 scanf("%d",&xinmi);
                                     sum=xinmi;//新密码覆盖旧密码
                                     sleep(2);
                                     printf("密码修改成功哦\n");
                                     printf("修改密码后请重新登陆!\n");
                               }
                               else 
                               {
                                 sleep(2);
                                 printf("\033[33m\033[31m\n验证码错误,请重新输入验证码!\n\n");
                                 goto ppp;
                               }
                                 
                       case 0:printf("感谢使用 ===管理员系统=== 已退出\n");goto AAA;//跳转到主界面
          
                       default : printf("没有此选项,请重新输入您的选项\n");break; 
                     }//管理员switch下括号
                 }while(ass);//管理员选项的循环 
                                 
          case 2://选择学生系统
                        /*******学生界面*****/ 
                        do
                        {  
                              StuDesk();//学生界面
                              scanf("%d",&we);//输入学生选择变量
                              switch(we)
                              {
                                case 1: 
                                        /***********查看自己的信息******/
                                             system("clear");
                                            printf("请记住自己的id\n\n");
                                            chazhao(phead);
                                           break;
                                case 2: 
                                          /**********查看C语言成绩排名*****/
                                             system("clear");
                                            Cpaixu(phead);
                                           break; 

                                case 0: printf("感谢使用 ===学生系统=== 已退出\n");goto AAA;//跳转到主界面
          
                                default: printf("没有此选项,请重新输入您的选项\n");break; 
                              }
                        }while(we);//学生系统选项循环
   
            case 0: printf("感谢使用====学生管理系统==== 已退出\n");break;
          
            default :printf("没有此选项,请重新输入您的选项\n");break; 

        }//选择管理员还是学生的switch下括
   }while(num);//外层系统循环    

return 0;
}//main函数的下括号

mainaff.c文件

#include"mainaff.h"

//添加学生信息(头节点插入)
void tianjia(pnode phead)
{
                printf("****************************\n");
                printf("*********录入学生信息*********\n");
                       //定义个结构体变量
                       stu huaqin;
                                 //输入信息到huaqin
                                 printf("学号:");scanf("%d",&huaqin.id);
                                     printf("年龄:");scanf("%d",&huaqin.age);
                                 printf("C语言成绩:");scanf("%d",&huaqin.program);
                                     printf("姓名:");scanf("%s",huaqin.name);
                                 printf("性别:");scanf("%s",huaqin.sex);
                                 //调用头插入法
                                 insert_head(phead,&huaqin,sizeof(stu));//stu是32字节
                                 printf("添加成功哦\n");
}
//查找学生信息
void chazhao(pnode phead)
{ 
                       printf("请输入学生学号查找\n");
                             stu pte;//定义pte变量
                             printf("学号:");      
                             scanf("%d",&pte.id);
                             pnode ptemp=node_find(phead,&pte,stuCmp);//查找函数
                              if(!ptemp)//查找函数的返回值为空
                              {
                                 printf("找不到,可能是以下原因\n\n" );
                                 printf("  已经删除了\n\n");
                                 printf("  已经修改了,原来信息不存在\n\n");
                                 printf("  没有添加该学生\n\n");
                              }
                              else//不为空就打印
                              {
                                  printf("找到了,信息如下\n" );
                                  printf("\n");
                                  printf("学号:%d\n年龄:%d\n姓名:%s\n性别:%s\nC成绩:%d\n",ptemp->data->id,ptemp->data->age,ptemp->data->name,ptemp->data->sex,ptemp->data->program);
                              }
}
//修改学生信息
void xiugai(pnode phead)
{
                    QQQ:
                        printf("请输入要修改学生的学号\n\n");
                         printf("学号:");  
                                stu pte;//定义结构体变量
                                scanf("%d",&pte.id);
                                    //先调用查找函数找到,查找函数调用了id比较函数
                                 pnode ptemp=node_find(phead,&pte,stuCmp);
                                   //查找函数的返回值为空
                                 if(ptemp==NULL)
                                 {
                                    printf("没有该id的学生;重新输入>>>>>\n\n");
                                    goto QQQ;
                                 }
                                 else
                                 {
                                       //定义p指向查找函数的找到的节点
                                       pnode p=ptemp;
                                       int  id;                //id
                                       int  age;               //年龄
                                       int  program;           //c语言成绩
                                       char name[10];               //姓名
                                       char sex[10];               //性别
                                       printf("\n请输入要修改的学号:\n");//给p赋值
                                          scanf("%d",&id);
                                          p->data->id=id;
                                       printf("请输修改学生年龄:\n");
                                          scanf("%d",&age);
                                          p->data->age=age;
                                       printf("请输入学生的C语言成绩:\n");
                                          scanf("%d",&program);
                                          p->data->program=program;
                                       printf("请输修改学生名字:\n");
                                          scanf("%s",name);
                                       printf("请输入学生的性别:\n");
                                          scanf("%s",sex);
                                       //名字性别是字符串需要拷贝进去
                                       strcpy(p->data->name,name);
                                       strcpy(p->data->sex,sex);  
                                 updata(phead,ptemp,p->data,sizeof(stu));//调用修改函数
                              }
}
//删除函数
void shanchu(pnode phead)
{ 
                            stu pte;//定义结构体变量
                              SSS:
                              printf("请输入要删除学生的学号\n");
                              printf("学号:");     
                              scanf("%d",&pte.id);
                               //调用查找函数,查找函数调用了id比较函数
                               pnode ptemp=node_find(phead,&pte,stuCmp);
                              if(!ptemp)//查找函数没找到
                              {
                                    printf("没有这个学号的相关信息,重新输入\n\n");
                                    goto SSS;
                              }
                              else
                              {
                                 //调用删除函数,传入找到学生的id
                                 delete(phead,ptemp->data->id);
                              }
}
//打印所有学生信息
void dayin(pnode phead)
{     
      //打印函数 调用了 单个打印函数
      node_Show(phead,StuShow);
}
//按要求给学生排序
void paixu(pnode phead)
{
                          int qaz=0;//switch变量
                              printf("如果需要id从小到大排序就按  1;\n\n");
                              printf("如果需要成绩从高到低排序就按   2;\n\n");
                              printf("退出按0;\n\n");
                              printf("请选择>>>>>");
                                do
                                 {
                                    scanf("%d",&qaz);
                                    switch(qaz)
                                    {
                                        case 1:
                                            printf("按照id排序\n");
                                              //id冒泡排序函数 调用id比较函数
                                            node_sort(phead,stuCmp);
                                              //输出所有学生信息 调用了单个输出函数
                                            node_Show(phead,StuShow);
                                            break;
                                        case 2:
                                            printf("按照成绩排序\n");
                                               //成绩冒泡排序函数 调用成绩比较函数
                                            node_chenji(phead,stuwsx);
                                               //输出所有学生信息 调用了单个输出函数
                                            node_Show(phead,StuShow);
                                            break;
                                        default :printf("退出\n");
                                            break;
                                     }
                                }while(qaz);
}

//C语言成绩排序
void Cpaixu(pnode phead)
{
       printf("按照成绩从高到低排序\n");
        //成绩冒泡排序函数 调用成绩比较函数
       node_chenji(phead,stuwsx);
       //输出所有学生信息 调用了单个输出函数
       node_Show(phead,StuShow);
}

mainaff.h函数

#ifndef _UI_HHHH__
#define _UI_HHHH__
//调用链表头文件
#include"linkend.h"

//添加学生信息
   void tianjia(pnode phead);

//查找学生信息
   void chazhao(pnode phead);

//修改学生信息
    void xiugai(pnode phead);

//删除学生信息
    void shanchu(pnode phead);

//打印所有学生信息
    void dayin(pnode phead);

//按照要求给学生排序
    void paixu(pnode phead);

//C语言成绩排序
    void Cpaixu(pnode phead);

#endif

linkend.c文件

#include"linkend.h"
 /*功能:管理员登陆密码对比
  * 参数:传入管理员密码
  * 返回值:无
  **/
 int admlogin(int add)
 {
      int num;
      AA:
      printf("请输入管理员密码\n");
      scanf("%d",&num);
     if(add!=num)//输入的密码和传入的密码不一样
     {
         printf("密码错误,请等两秒输入\n");
         sleep(2);
         goto AA;
      }
     if(add==num)
      {
          printf("密码正确,稍等\n");
          sleep(2);
      }
 return 0;
 }
/*功能:创建头节点
  * 参数:无
  * 返回值:返回头节点指针
  **/
 pnode create()
{
    pnode phead=(pnode)malloc(sizeof(node));//申请节点
    if(phead==NULL)//容错
    {
        perror("mallocphead!\n");
        exit(-1);
    }//头节点赋值
    phead->data=NULL;
    phead->next=phead;
    phead->prve=phead;
    return phead; 
}
/***功能:头节点插入
  * 参数:1:头节点指针
  *      2:需要存入链表的数据
  *      3:需要存放的数据大小
  * 返回值:无
  **/
void insert_head(pnode phead,stu* data,int size)
{
    pnode pnew=(pnode)malloc(sizeof(node));//申请新节点
    if(pnew==NULL)//容错
    {
        perror("mallocpnew!!\n");
        exit(-1);
    }
    pnew->prve=NULL;//给新节点赋值
    pnew->next=NULL;
    pnew->data=malloc(size);//可做容错
    memcpy(pnew->data,data,size);//将申请的
    if(phead->next == phead) //如果没有数据节点的情况
   {
        pnew->prve = phead;
        phead->next = pnew;
        phead->prve = pnew;
        pnew->next = phead;
   }
      else//有数据节点的情况
   {
        pnew->next = phead->next;
        pnew->prve = phead;
        phead->next->prve = pnew;
        phead->next = pnew;
   }
}
/***功能:打印所有信息
  * 参数:1:头节点指针
  *      2:单个打印的函数
  * 返回值:无
  **/
void node_Show(pnode phead,void(*show)(void* pdata))
{
    //创建p指针保存第一个数据节点
     pnode p = phead->next;
    if(p->data==NULL)//判断空
     {
        printf("现在还没有学生信息,请输入后重试\n\n");
     }

    while (p !=phead)//第一个数据节点不等于头节点循环
    {
      //调用单个打印函数循环打印
       StuShow(p->data);
       printf("\n");
       p = p->next;//循环自加
    }
}
/***功能:打印单个学生信息
  * 参数:1:需要打印的数据
  * 返回值:无
  **/
void StuShow(void* pdata)
{
    if(!pdata)//容错
    {
        return ;
    }
       //强转赋给p1
    stu * p1 = (stu *)pdata;
    printf("学号:%d\t年龄:%d\t姓名:%s\t性别:%s\tC成绩:%d\t",p1->id,p1->age,p1->name,p1->sex,p1->program);
}
/***功能:查找学生信息
  * 参数:1:头节点指针
  *      2:需要查找的学生数据(id)
  *      3:查找id的函数(stuCmp)
  * 返回值:找到的节点指针
  **/
pnode node_find(pnode phead,void *data,int(*cmp)( void* pa, void* pb))
{
      if(phead == NULL||data==NULL) //容错
         {
           printf("头为空 或 数据不存在\n");
           return NULL;
         }
        //创建ptemp指针保存第一个数据节点
    pnode  ptemp = phead->next;
    while (ptemp != phead)//循环
    {
        //查找id的函数如果返回值等于0,找到了
        if(cmp(ptemp->data,data)==0)
        {
             return ptemp;
        }
        ptemp = ptemp->next;//循环自加
    }
      return NULL;
}
/***功能:修改学生信息
  * 参数:1: 头节点指针
  *      2:需要修改的节点(把ptemp位置的数据修改为传入的数据)
  *      3: 外部传入的数据(以写好)
  *      4:数据大小(stu型)
  * 返回值:
  **/
void updata(pnode phead,pnode ptemp,stu* data,int size)
{
    if(phead==NULL||ptemp==NULL)//容错
    {
        return ;
    }
    if(ptemp->data==NULL)//释放数据
    {
        free(ptemp->data);
    }
    //申请空间强转化类型
      ptemp->data=(stu*)malloc(size);
     if(ptemp->data==NULL)//新数据空间容错
      {
        return ;
      }
       //拷贝数据到新数据空间
      memcpy(ptemp->data,data,size);
        printf("修改成功\n");
   
}
/***功能:删除学生信息
  * 参数:1: 头节点指针
  *      2:需要删除的学生id
  * 返回值:
  **/
void delete(pnode phead,int id)
{
      pnode ptemp=phead;//定义指针
    while(ptemp->next!=phead)//不等于头循环
    {
         ptemp=ptemp->next;//循环自加
         //如果传入的id有
        if(ptemp->data->id==id)
        {   
            //链接与断开
            ptemp->prve->next = ptemp->next; 
            ptemp->next->prve = ptemp->prve;
            printf("\n删除成功!\n");
            free(ptemp->data);
            free(ptemp); //释放内存并置空
            ptemp = NULL;
            return ;
        }
    }
}
//id比较函数
int stuCmp( void* pa, void* pb)
 {
    //比较学生id的信息
    struct student* p1 = (stu*)pa;//强转
    struct student* p2 = (stu*)pb;
    //相同说明找到了
    if(p1->id == p2->id)
    {  
       return 0;
    }
    else if(p1->id > p2->id)
    {    //返回值大于0
        return 1;
    }
    else if(p1->id < p2->id)
    {    //返回值小于0
        return -1;
    }
 }
 //成绩排序函数
 int stuwsx(void* pa,void* pb)
 {
     //比较学生成绩
     stu* p1=(stu*)pa;//强转
     stu* p2=(stu*)pb;
     if(p1->program == p2->program)
     {
         return 0;
     }
     else if(p1->program > p2->program)
     {   //返回值大于0
         return 1;
     }
     else if(p1->program < p2->program)
    {   //返回值小于1
         return -1;
     }
 }
/***功能:id冒泡排序
  * 参数:1: 头节点指针
  *      2:id比较函数
  * 返回值:无
  **/
 void node_sort(pnode phead,int (*cmp)( void* pa, void* pb))//排序
{
    //用来遍历数据
    pnode temp_q = phead->next;//指向第一个数据节点
    pnode temp_end = phead->prve;//找到最后末尾的节点
    
    void* tempData=NULL;//中间变量
    while(temp_end != phead->next) //外循环次数处理,最后一个不等于第一个
    {
        temp_q = phead->next;//将第一个节点数据给i
        while(temp_q!= temp_end)//如果第一个节点不等于最后一个节点
        {
            //拿第一个和 第一个的下一个 在传入函数里比较
            //如果返回值大于0,说明第一个比第二个大
            //id大的排后面
            if(cmp(temp_q->data ,temp_q->next->data)>0)
            {
                tempData = temp_q->data;//进行数据交换
                temp_q->data = temp_q->next->data;
                temp_q->next->data = tempData;
            }
            temp_q = temp_q->next;//向后循环跑起来
        }
        temp_end = temp_end->prve;//外层循环向前跑起来
    }
    
}
/***功能:成绩冒泡排序
  * 参数:1: 头节点指针
  *      2:成绩比较函数
  * 返回值:无
  **/
 void node_chenji(pnode phead,int (*cmp)( void* pa, void* pb))//排序
{
    //用来遍历数据
    pnode temp_q = phead->next;//指向第一个数据节点
    pnode temp_end = phead->prve;//找到最后末尾的节点
    
    void* tempData=NULL;//中间变量
    while(temp_end != phead->next) //外循环次数处理,最后一个不等于第一个
    {
        temp_q = phead->next;//将第一个节点数据给i
        while(temp_q!= temp_end)//如果第一个节点不等于最后一个节点
        {
            //拿第一个和 第一个的下一个 在传入函数里比较
            //如果返回值小于0,说明第一个比第二个小
            //成绩小排到后面
            if(cmp(temp_q->data ,temp_q->next->data)<0)
            {
                tempData = temp_q->data;//进行数据交换
                temp_q->data = temp_q->next->data;
                temp_q->next->data = tempData;
            }
            temp_q = temp_q->next;//向后循环跑起来
        }
        temp_end = temp_end->prve;//外层循环向前跑起来
    }
    
}

linkend.h文件

#ifndef __LINKEND__HH__
#define __LINKEND__HH__
//头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<strings.h>
#include<unistd.h>
#include<time.h>

/*学生结构体*/
typedef struct student
{
    int  id;                //id
    int  age;               //年龄
    int  program;           //c语言成绩
    char sex[10];            //性别
    char name[10];            //姓名
}stu;//别名

/*链表结构体*/
typedef struct Node
{
    stu* data;//学生数据
    struct Node* prve;//前指针域
    struct Node* next;//后指针域
}node,*pnode;//结构体指针别名

//管理员界面功能
//输入管理员和密码完成登陆
     int admlogin(int add);
//创建头节点
     pnode create();
//添加学生信息
     void insert_head(pnode phead,stu* data,int size);
//删除学生信息
     void delete(pnode phead,int id);
//查找学生信息
     pnode node_find(pnode phead,void* data,int (*cmp)( void* pa, void* pb));
//修改学生信息
     void updata(pnode phead,pnode pnew,stu* data,int size);
//打印单个学生信息
     void StuShow(void* pdata);
//打印所有学生信息
     void node_Show(pnode phead,void(*show)(void* pdata));
//id比较函数
     int stuCmp( void* pa, void* pb);
//id冒泡排序
     void node_sort(pnode phead,int (*cmp)( void* pa, void* pb));
//成绩比较函数
     int stuwsx(void* pa,void* pb);
//成绩冒泡排序
     void node_chenji(pnode phead,int (*cmp)( void* pa, void* pb));
#endif

ui.c文件(该文件中涉及代码颜色修改,所以子啊代码中看到界面比较杂乱,但实际运行效果如图2)

#include "ui.h"
#include "linkend.h"
 /*主界面*/
void hshshs()
{ 
    printf("\033[0;46m**************************************************************\033[0m\n");
    printf("\033[0;46m**************************************************************\033[0m\n");
    printf("\033[0;46m**************************************************************\033[0m\n");
    printf("\033[33m\033[31m##                                                          #\n");
    printf("##\033[33m\033[37m                                                          #\n");
    printf("##                 欢迎使用学生管理系统                     # \n");
    printf("##                再次欢迎使用学生管理系统                  # \n");
    printf("##                                                          # \n");
    printf("##                     [1]管理员登录                        #\n");
    printf("##                                                          #\n");
    printf("##                     [2]学生信息                          # \n");
    printf("##                                                          #\n");
    printf("##                      [0]退出                             # \n");
    printf("##                                                          #\n");
    printf("\033[0;46m**************************************************************\033[0m\n");
    printf("\033[0;46m**************************************************************\033[0m\n");
    printf("\033[33m\033[37m请输入你的选择:\n");    
    printf(">>>>>>");
}
 /*管理管理员界面*/
void adm()
{   
    printf("\033[33m\033[32m*****************************************************************\n");
    printf("*****************************************************************\n");
    printf("*                ========管理员界面========                     *\n");
    printf("*                                                               *\n");
    printf("*\033[33m\033[37m             [1]添加学生信息       [2]查找学生信息             *\n");
    printf("*                                                               *\n");
    printf("*             [3]修改学生信息       [4]删除学生信息             *\n");
    printf("*                                                               *\n");
    printf("*             [5]打印所有学生信息    [6]排序选项                *\n");
    printf("*                                                               *\n ");
    printf("             [7]修改管理员密码      [0]退出                        \n");
    printf("\033[33m\033[32m*****************************************************************\n");
    printf("*****************************************************************\n");
    printf("\033[33m\033[37m请输入你的选择:\n");
    printf(">>>>>>");
 
}
/*学生界面*/
void StuDesk()
{ 
    printf("\033[33m\033[33m*************************************************************\n");
    printf("*************************************************************\n");
    printf("*                       ==学生界面==                        *\n");
    printf("*            =========好好学习,天天向上============        *\n");
    printf("*                                                           *\n");
    printf("*\033[33m\033[37m                       [1]查看自己信息                     *\n");
    printf("*                                                           *\n");
    printf("*                       [2]查看自己C语言排行耪              *\n");
    printf("*                                                           *\n");
    printf("*                                                           *\n");
    printf("*                       [0]退出                             *\n");
    printf("*                                                           *\n");
    printf("\033[33m\033[33m*************************************************************\n");
    printf("*************************************************************\n");
    printf("\033[33m\033[37m请输入你的选择:\n");
    printf(">>>>");
 
}

ui.h文件

#ifndef _UI_H__
#define _UI_H__
 
 
#include <stdio.h>
#include <time.h>
 
 
/*主界面*/
void hshshs();
 /*管理管理员界面*/
void adm();
/*学生界面*/
void StuDesk();
#endif

到这里所有的源码都已经开放出来了,如果理不清楚每个文件是干嘛的,请到主函数文件开头中查看,相信聪明的你一定能看懂!!具体项目效果各位亲自动手演示噢,截图的话太多了,快动手敲代码吧😁