学籍管理系统

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<direct.h>
#include<dirent.h>
#include<io.h>


//学生
struct student{
    char stdID[10];//学号
    char namee[10];//姓名
    char sex[4];//性别
    char classs[20];//班级
    char cryptogram[17];//密码
    char data[8];//入学时间
    char college[30];//学院
};
struct Student{
    char stdID[10];
    char namee[10];
    char sex[4];
    char classs[20];
    char cryptogram[17];
    char data[10];
    char college[30];
    struct Student * next;
};
//记录成绩
struct CoursesStd{
    char name[20];
    char stdID[10];
    int sorce;
    struct CoursesStd* next;
};

//教师
struct teacher{
    char name[10];
    char ID[9];
    char cryptogram[17];
};
struct Teacher{
    char name[10];
    char ID[9];
    char cryptogram[17];
    struct teacher *next;
};

int Begin();
int intendentShow();
int teacherShow();
int studentshow();
void AddTeacher();
void AddStudent();
void CreateTheCollege();
void SetupCourses();
void tchangeStd(const char* stdID);//教师删除该学号学生信息
void changeCry(const char* stdID);//学生修改该学号学生信息
void ChooseCourses();//学生选课  
void entersorce();//录入学生成绩
void ChecksorceT();//教师查询成绩
void ChecksorceS();//学生查询成绩
void checkourself();//查看自己信息

void changesorceT();//教师修改成绩/
void changecollege();//修改学院///
///怎么限制选课学院?????
//学生修改自己的信息。。可直接复制粘贴



struct Teacher* extractionT(const char *name);//将文件中的老师信息存取到链表中
struct Student* extractionS(const char *name);//将文件中的学生信息存取到链表中
struct CoursesStd* extractionC(const char* name);//将文件中的学生课程信息存取到链表中
void releaseT(struct Teacher *head);//释放动态分配的内存
void releaseS(struct Student *head);//释放动态分配的内存
void releaseC(struct CoursesStd *head);//释放动态分配的内存
int filequantity(const char *name);//获取文件夹下文件的个数
int peoplequality(const char *name);//获取文件中存储的人数
char* ChooseCollege();//选择学院
char* ChooseCourse();//选择课程
void writeS(const char*name,struct Student* add);//将学生信息写入文件
void writes(const char*name,struct CoursesStd* add);//将链表中的学生成绩信息写入到新的文件中
int cmp(const void* a,const void*b);



int main()
{
    
    system("cls");
    
    int answer=Begin();
    if(answer==1){
        int count=0;
        int num=1;
        while(num){
            count++;
            if(count==1){
                num=intendentShow();
            }else{
                system("cls");
                printf("****************************************************\n");
                printf("========================菜单========================\n");
                printf("*    1.创建学院                                   *\n");
                printf("*    2.教师信息录入                                *\n");
                printf("*    3.退出系统                                    *\n");
                printf("*                                                  *\n");
                printf("****************************************************\n");
                printf("请选择你的操作:");
                scanf("%d",&num);
                while(1){
                    if(num>3||num<1){
                    printf("输入错误,请重新输入有效数字!");
                }else{
                    break;
                }
                }
            }
            switch(num){
                case -1:num=0;break;
                case 1:CreateTheCollege();break;
                case 2:AddTeacher();break;
                case 3:num=0;break;
            }
        }
    }else if(answer==2){
        int jishu=0;
        int num=1;
        while(num){
            jishu++;
            int count=1;
            if(jishu==1){
                num=teacherShow();
            }else{
                int i=0;
                printf("输入1继续");
                scanf("%d",&i);
                if(i==1){
                    system("cls");
                    printf("****************************************************\n");
                    printf("========================菜单========================\n");
                    printf("*                                                  *\n");
                    printf("*    1.录入学生信息                                *\n");
                    printf("*    2.删除学生信息                                *\n");
                    printf("*    3.开设课程                                    *\n");
                    printf("*    4.录入成绩                                    *\n");
                    printf("*    5.查询成绩                                    *\n");
                    printf("*    6.退出系统                                    *\n");
                    printf("*                                                  *\n");
                    printf("****************************************************\n");
                    printf("请选择你的操作:");
                    scanf("%d",&num);
                    while(1){
                        if(num>6||num<1){
                            printf("输入错误,请重新输入有效数字!");
                        }else{
                            break;
                        }
                    }
                }else{
                    num=0;
                }
            }
            switch(num){
                case -1:{
                    num=0;
                    break;
                }
                case 1:AddStudent();break;
                case 2:{
                    printf("请输入要删除学生的学号:");
                    char ID[10];
                    scanf("%s",ID);
                    ID[8]='\0';
                    tchangeStd(ID);
                    break;
                }
                case 3:SetupCourses();break;
                case 4:entersorce();break;
                case 5:ChecksorceT();break;
                case 6:num=0;break;
            }
        }
    }else if(answer==3){
        int num=1;
        int count=0;
        while(num){
            count++;
            if(count==1){
                num=studentshow();
            }else{
                int i=0;
                printf("输入1继续");
                scanf("%d",&i);
                if(i==1){
                system("cls");
                printf("****************************************************\n");
                printf("========================菜单========================\n");
                printf("*                                                  *\n");
                printf("*    1.查看个人信息                                *\n");
                printf("*    2.选课                                        *\n");
                printf("*    3.修改密码                                    *\n");
                printf("*    4.查询成绩                                    *\n");
                printf("*    5.退出系统                                    *\n");
                printf("*                                                  *\n");
                printf("****************************************************\n");
                printf("请选择你的操作:");
                scanf("%d",&num);
                while(1){
                    if(num>5||num<1){
                        printf("输入错误,请重新输入有效数字!");
                    }else{
                        break;
                    }
                }
            }else{
                num=0;
            }
            }
            switch(num){
                case -1:{
                    num=0;
                    break;
                }
                case 1:checkourself();break;
                case 2:ChooseCourses();break;
                case 3:{
                    printf("请输入学号:");
                    char ID[10];
                    scanf("%s",ID);
                    ID[8]='\0';
                    changeCry(ID);
                    break;
                }
                case 4:ChecksorceS();break;
                case 5:num=0;break;
            }
        }
    }
    
    //ChooseCourses();
    //checkourself();
    return 0;
}
int Begin()
{
    int num;
    system("cls");
    printf("************************************************************************\n");
    printf("*======================================================================*\n");
    printf("*                                                                      *\n");
    printf("*                     西安邮电大学学籍管理系统                         *\n");
    printf("*                                                                      *\n");
    printf("*======================================================================*\n");
    printf("*                                                                      *\n");
    printf("*                                                                      *\n");
    printf("*            1.我是管理员                                              *\n");
    printf("*            2.我是教师                                                *\n");
    printf("*            3.我是学生                                                *\n");
    printf("*                                                                      *\n");
    printf("*                                                                      *\n");
    printf("************************************************************************\n");
    printf("   请根据以上序号选择您的信息:");
    scanf("%d",&num);
    while(1){
        if(num>3&&num<1){
            printf("输入错误,请重新输入有效数字!");
        }else{
            break;
        }
    }
    return num;
}
int intendentShow()//管理员登陆(唯一)账号4211100   密码165417
{
    int num,answer=1,count=0;
    system("cls");
    char myid="4211100";
    char cryptogram="165417";
    char inid[10];
    char incryptogram[16];
    while(1){
        system("cls");
        if(count==3){
            return -1;
        }
        printf("请输入您的账号:");
        if(count>0){
            printf("(输入错误,你还有%d次机会)",3-count);
        }
        count++;
        scanf("%s",inid);
        inid[7]='\0';
        answer=strcmp("4211100",inid);
        if(answer==0){
            break;
        }
    }
    count=0;
    while(1){
        system("cls");
        if(count==3){
            return -1;
        }
        printf("请输入您的密码:");
        if(count>0){
            printf("(输入错误,你还有%d次机会)",3-count);
        }
        count++;
        scanf("%s",incryptogram);
        answer=strcmp("165417",incryptogram);
        if(answer==0){
            break;
        }
    }
    
    
    system("cls");
    printf("登陆成功!\n\n");
    printf("****************************************************\n");
    printf("========================菜单========================\n");
    printf("*    1.创建学院                                   *\n");
    printf("*    2.教师信息录入                                *\n");
    printf("*    3.退出系统                                    *\n");
    printf("*                                                  *\n");
    printf("****************************************************\n");
    printf("请选择你的操作:");
    scanf("%d",&num);
    while(1){
        if(num>3||num<1){
            printf("输入错误,请重新输入有效数字!");
        }else{
            break;
        }
    }
    return num;
}
int teacherShow()
{
    int ret;
    struct teacher in;
    int answer,count=3;
    struct Teacher *head,*p;
    head=extractionT("Teacher.txt");/
    p=head;
    while(count){
        system("cls");
        if(count!=3){
            printf("该账号不存在!请重新输入\n");
            head=extractionT("Teacher.txt");
            printf("你还有%d次机会。",count);
        }
        printf("请输入您的账号:");
        scanf("%s",in.ID);
        
        
        while(head){
            answer=strcmp(in.ID,head->ID);
            if(answer==0){
                break;
            }
            head=head->next;
        }
        if(answer==0){
            break;
        }
        if(head==NULL){
            count--;
            
        }
        if(count==0){
            return -1;
        }
    }
    count=3;
    while(count){
        if(count!=3){
            printf("密码不正确!请重新输入\n");
            printf("你还有%d次机会。",count);
        }
        printf("请输入密码:");
        scanf("%s",in.cryptogram);
        answer=strcmp(in.cryptogram,head->cryptogram);
        if(answer!=0){
            printf("密码错误!");
            count--;
        }else{
            break;
        }
        if(count==0){
            return -1;
        }
    }
    releaseT(p);/
    
    system("cls");
    printf("登陆成功!\n\n");
    printf("****************************************************\n");
    printf("========================菜单========================\n");
    printf("*                                                  *\n");
    printf("*    1.录入学生信息                                *\n");
    printf("*    2.删除学生信息                                *\n");
    printf("*    3.开设课程                                    *\n");
    printf("*    4.录入成绩                                    *\n");
    printf("*    5.查询成绩                                    *\n");
    printf("*    6.退出系统                                    *\n");
    printf("*                                                  *\n");
    printf("****************************************************\n");
    printf("请选择你的操作:");
    scanf("%d",&ret);
    while(1){
        if(ret>6||ret<1){
            printf("输入错误,请重新输入有效数字!");
        }else{
            break;
        }
    }
    return ret;
}
int studentshow()
{
    system("cls");
    //获取学生信息所在的文件位置
    printf("请选择你所在的学院:\n");
    char* name=ChooseCollege();/
    
    char file[100];//记录文件详细位置
    sprintf(file,"%s\\%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息",name);
    
    //登陆
    int ret,count=3;
    int answer;
    struct student in;
    struct Student *head,*p,*q;
    while(count){
        if(count!=3){
            printf("请重新输入学号!");
            printf("你还有%d次机会",count);
        }
        printf("请输入学号:");
        scanf("%s",in.stdID);
        head=extractionS(file);
        
        p=head;
        while(head){
            answer=strcmp(in.stdID,head->stdID);
            if(answer==0){
                break;
            }
            head=head->next;
        }
        if(answer==0){
            break;
        }
        if(head==NULL){
            printf("该账号不存在!");
            count--;
        }
    }
    count=3;
    while(count){
        if(count!=3){
            printf("请重新输入密码!");
            printf("你还有%d次机会",count);
        }
        printf("请输入密码:");
        scanf("%s",in.cryptogram);
        answer=strcmp(in.cryptogram,head->cryptogram);
        if(answer==0){
            break;
        }
        //printf("%d",answer);
        if(answer!=0){
            printf("密码错误!");
            count--;
        }
    }
    releaseS(p);
    system("cls");
    printf("登陆成功!\n\n");
    printf("****************************************************\n");
    printf("========================菜单========================\n");
    printf("*                                                  *\n");
    printf("*    1.查看个人信息                                *\n");
    printf("*    2.选课                                        *\n");
    printf("*    3.修改密码                                    *\n");
    printf("*    4.查询成绩                                    *\n");
    printf("*    5.退出系统                                    *\n");
    printf("*                                                  *\n");
    printf("****************************************************\n");
    printf("请选择你的操作:");
    scanf("%d",&ret);
    while(1){
        if(ret>5||ret<1){
            printf("输入错误,请重新输入有效数字!");
        }else{
            break;
        }
    }
    return ret;    
}
void AddTeacher()
{
    FILE * fp;
    int caozuo=1;
    fp = fopen("Teacher.txt","a");
    struct teacher add;
    while(caozuo==1){
        printf("请输入教师的姓名:");
        scanf("%s",add.name);
        fprintf(fp,"\n%s\t",add.name);
        printf("请输入教师ID:");
        scanf("%s",add.ID);
        fprintf(fp,"%s\t",add.ID);
        printf("请输入密码:");
        scanf("%s",add.cryptogram);
        fprintf(fp,"%s",add.cryptogram);
        printf("是否要继续添加教师? 是请输入1,否则请输入0:");
        scanf("%d",&caozuo);
    }
    //刷新缓冲区,将缓冲区的内容写入文件
    fflush(fp);
    //重置文件内部位置指针,让位置指针指向文件开头
    rewind(fp);
    fclose(fp);
    
    printf("\n当前所有老师信息为:\n");
    
    //输出文件第一行
    char title[100];
    fp=fopen("Teacher.txt","r");
    fgets(title,100,fp);
    printf("%s",title);
    fclose(fp);
    
    struct Teacher * head,*p;
    head=extractionT("Teacher.txt");
    p=head;
    while(p){
        printf("%s\t%s\t%s\n",p->name,p->ID,p->cryptogram);
        p=p->next;
    }
    releaseT(head);
}
void CreateTheCollege()//创建学院
{
    char name[100];
    printf("请输入要添加学院名称:");
    scanf("%s",name);
    FILE * fp;
    char*str=name;
    char file[100];
    sprintf(file,"%s/%s.txt","学生信息",str);
    fp=fopen(file,"w");
    fprintf(fp,"姓名    学号        班级       性别 入学时间    学院              密码");
    if(fp==NULL){
        printf("创建学院错误。");
    }else{
        printf("创建成功。");
    }
    fclose (fp);
    
}
void SetupCourses()//开设课程
{
    char name[100];
    printf("请输入要添加课程名称:");
    scanf("%s",name);
    FILE * fp;
    char*str=name;
    char file[100];
    sprintf(file,"%s/%s.txt","课程明细",str);
    fp=fopen(file,"w");
    fprintf(fp,"姓名      学号       成绩");
    if(fp==NULL){
        printf("开设课程错误。\n");
    }else{
        printf("开设课程成功。\n");
    }
    fclose (fp);
    //限制可选学院(暂时没有)
    //int caozuo=1;
    //while(caozuo==1){
    //    printf("请输入可学习该课程的学院:\n");
    //   
    //    char* college=ChooseCollege();//获取可学习该课程学院
    //    FILE * fp;
    //    fp=fopen(file,"a");
    //    fprintf(fp,"%s\t",college);
    //    fclose (fp);
    //    printf("是否添加可选该课程的学院:是请输入1否则输入0:");
    //   scanf("%d",&caozuo);
    //}
}
void AddStudent()
{
    printf("请选择学生所在学院:\n");
    char *name=ChooseCollege();/用函数获取学院
    int length=strlen(name);
    char arr[length+1];
    for(int i=0;i<length;i++){
        arr[i]=name[i];
    }
    arr[length]='\0';
    char file[100];
    sprintf(file,"%s/%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息",name);
    FILE * fp;
    int caozuo=1;
    fp = fopen(file,"a");
    struct student add;
    while(caozuo==1){
        printf("请输入添加学生姓名:");
        scanf("%s",add.namee);
        fprintf(fp,"\n%s\t",add.namee);
        printf("请输入添加学生ID:");
        scanf("%s",add.stdID);
        fprintf(fp,"%s\t",add.stdID);
        printf("请输入学生班级:");
        scanf("%s",add.classs);
        fprintf(fp,"%s\t",add.classs);
        printf("请输入学生性别:");
        scanf("%s",add.sex);
        fprintf(fp,"%s\t",add.sex);
        printf("请输入学生入学时间:");
        scanf("%s",add.data);
        fprintf(fp,"%s\t",add.data);
        fprintf(fp,"%s\t",arr);
        int length=strlen(add.stdID);
        for(int i=0;i<length;i++){
            add.cryptogram[i]=add.stdID[i];
        }
        add.cryptogram[length+1]='\0';
        fprintf(fp,"%s\t",add.cryptogram);
        
        printf("是否需要继续添加\?是请输入1否则输入0:");
        scanf("%d",&caozuo);
    }
    
    fclose(fp);
    
}
void tchangeStd(const char* stdID)//删除该学号学生信息
{
    printf("请选择你所在的学院:\n");
    char* name=ChooseCollege();
    char file[100];//记录文件详细位置
    sprintf(file,"%s\\%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息",name);
    struct Student*p,*ret,*head=extractionS(file);
    ret=head;
    p=head;
    if(strcmp(stdID,head->stdID)==0){
            p=head->next;
            free(head);
        }
    head=head->next;
    while(head){
        if(strcmp(stdID,head->stdID)==0){
            ret->next=head->next;
            free(head);
            break;
        }
        head=head->next;
        ret=ret->next;
    }
    writeS(file,p);//将学生信息重新写入文件
    releaseS(p);//释放内存

}
void changeCry(const char* stdID)//学生修改密码
{
    printf("请选择你所在的学院:\n");
    char* name=ChooseCollege();
    char file[100];//记录文件详细位置
    sprintf(file,"%s\\%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息",name);

    struct Student*ret,*head=extractionS(file);
    ret=head;
    while(head){
        if(strcmp(stdID,head->stdID)==0){
            break;
        }
        head=head->next;
    }
    //char*temp=head->data;
    char incry[17];
    for(int i=0;i<17;i++){
        incry[i]='\0';
    }
    printf("请输入原密码:");
    scanf("%s",incry);
    
    if(strcmp(incry,head->cryptogram)==0){
        printf("请输入新密码:");
        //for(int i=0;i<17;i++){
        //    head->cryptogram[i]='\0';
        //}
        scanf("%s",head->cryptogram);
        printf("修改密码成功!");
    }else{
        printf("原密码错误!");
        return;
    }
    //for(int i=0;i<7;i++){
    //    head->data[i]=temp[i];
    //}
    writeS(file,ret);
    releaseS(ret);
}
void entersorce()//录入成绩 
{
    printf("请选择需要录入成绩的课程:\n");
    char* name=ChooseCourse();
    char file[100];
    
    sprintf(file,"%s/%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细",name);
    struct CoursesStd*p,*head=extractionC(file);
    p=head;
    printf("请依次输入学生的成绩:\n");
    while(head->next){
        printf("%s\t%s\t",head->name,head->stdID);
        printf("请输入该学生成绩:");
        scanf("%d",&head->sorce);
        head=head->next;
    }
    writes(file,p);
    releaseC(p);

}
void ChecksorceT()//教师查询成绩,按排名
{
    printf("请选择需要查询成绩的课程:");
    printf("\n");
    char* name=ChooseCourse();
    char file[100];
    sprintf(file,"%s/%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细",name);
    int sum=peoplequality(file)+1;
    struct CoursesStd arr[sum];

    FILE * fp;
    fp=fopen(file,"r");
    char title[100];
    if((fp=fopen(file,"r"))==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    fgets(title,100,fp);
    int i=0;
    while(!feof(fp)){
        fscanf(fp,"%s%s%d",arr[i].name,arr[i].stdID,&arr[i].sorce);
        i++;
    }
    
    fclose(fp);
    
    //排序
    qsort(arr,sum,sizeof(struct CoursesStd),cmp);
    printf("成绩排名由高到底依次为:\n");
    printf("      %s",title);
    for(int j=0;j<sum;j++){
        printf("第%d名:",j+1);
        printf("%s\t%s\t%d\n",arr[j].name,arr[j].stdID,arr[j].sorce);
    }

}
void ChecksorceS()//学生查询成绩
{
    printf("请选择查询成绩的课程:\n");
    char *name=ChooseCourse();
    char file[100];//记录文件详细位置
    sprintf(file,"%s\\%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细",name);
    int sum=peoplequality(file)+1;
    struct CoursesStd arr[sum];
    
    FILE * fp;
    fp=fopen(file,"r");
    char title[100];
    if((fp=fopen(file,"r"))==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    fgets(title,100,fp);
    int i=0;
    while(!feof(fp)){
        fscanf(fp,"%s%s%d",arr[i].name,arr[i].stdID,&arr[i].sorce);
        i++;
    }
    
    fclose(fp);
    printf("请输入学号:");
    char in[10];
    int count=0;
    scanf("%s",in);
    for(int j=0;j<sum;j++){
        if(strcmp(in,arr[j].stdID)==0){
            count++;
            printf("%s",title);
            printf("%s\t%s\t%d",arr[j].name,arr[j].stdID,arr[j].sorce);
            break;
        }
    }
    if(count==0){
        printf("你没有学习该课程,成绩不存在!");
    }
}
void checkourself()//输出学生个人信息
{
    printf("请选择你所在的学院:\n");
    char* name=ChooseCollege();
    char file[100];//记录文件详细位置
    sprintf(file,"%s\\%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息",name);
    printf("请输入学号:");
    char stdID[10];
    stdID[8]='\0';
    scanf("%s",stdID);
    struct Student*ret,*head=extractionS(file);
    ret=head;
    
    
    while(head){
    
        if(strcmp(stdID,head->stdID)==0){
            printf("成功");
            break;
        }
        head=head->next;
    }
    
    printf("你的详细信息如下:\n");
    printf("姓名:%s\n学号:%s\n班级:%s\n性别:%s\n入学时间:%s\n所在学院:",head->namee,head->stdID,head->classs,head->sex,head->data);
    int length=strlen(head->college);
    for(int i=0;i<length-4;i++){
        printf("%c",head->college[i]);
    }
}
void ChooseCourses()//学生选课 传入学生的学号和姓名
{

    printf("请输入学号:");
                    char ID[10];
                    scanf("%s",ID);
                    ID[10]='\0';
                    char nameee[12];
                    printf("请输入姓名:");
                    scanf("%s",nameee);
                    char*stdID=ID;
                    char*namee=nameee;
    int caozuo=1;
    while(caozuo){
        printf("请选择你要选择的课程:\n");
        char *name=ChooseCourse();
        printf("%s",name);
        int length=strlen(name);
        char arr[length+1];
        for(int i=0;i<length;i++){
            arr[i]=name[i];
        }
        arr[length]='\0';
        char file[100];
        sprintf(file,"%s/%s","C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细",name);
        FILE * fp;

        fp = fopen(file,"a");
        struct CoursesStd add;
    
        fprintf(fp,"\n%s\t",namee);
        fprintf(fp,"%s\t",stdID);
        printf("是否需要继续选\?是请输入1否则输入0:");
        scanf("%d",&caozuo);
    }
    
}
int filequantity(const char *name)//获取文件夹下文件的个数 
{

    int sum=0;
    const char *path = "学生信息\\*.txt"; // 输出这个目录下所有csv文件名
    long handle;    //用于查找的句柄
    struct _finddata_t fileinfo;    // io.h
    
    handle = _findfirst(path, &fileinfo);   // 第一次查找
    if(handle == -1){
        //printf("%d.%s\n",sum,fileinfo.name);
        return -1;
    }else{
        sum++;
    }
    
    while(!_findnext(handle, &fileinfo)){   //循环查找其他符合的文件,直到找不到其他的为止
        //printf("%d.%s\n",sum,fileinfo.name);
        sum++;
    }
    
    _findclose(handle);
    return sum;
}
int peoplequality(const char *name)//获取文件中学生的数量
{
    int ret=0;
    FILE * fp;
    char ch;
    fp = fopen(name, "r");
    if(fp == NULL)
    {
        printf("fopen failed!\n");
        return -1;
    }
    
    while((ch=fgetc(fp))!=EOF)
    {
        if(ch=='\n'){
            ret++;
        }
    }
    
    fclose (fp);
    return ret-1;
}
void releaseT(struct Teacher *head)
{
    struct Teacher *p;
    while(head){
        p=head->next;
        free(head);
        head=p;
    }
}
void releaseS(struct Student *head)
{
    struct Student *q;
    while(head){
        q=head->next;
        free(head);
        head=q;
    }
}
void releaseC(struct CoursesStd *head)
{
    struct CoursesStd *q;
    while(head){
        q=head->next;
        free(head);
        head=q;
    }
}
struct Teacher* extractionT(const char *name)//将文件中的老师信息存取到链表中
{
    FILE * fp;
    char title[200];
    struct Teacher *head,*p,*q;
    p=(struct Teacher*)malloc(sizeof(struct Teacher));
    
    if((fp=fopen(name,"r"))==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    fgets(title,100,fp);
    
    head=p;
    fscanf(fp,"%s%s%s",p->name,p->ID,p->cryptogram);
    p->next=NULL;
    
    while(!feof(fp)){
        q=(struct Teacher*)malloc(sizeof(struct Teacher));
        fscanf(fp,"%s%s%s",q->name,q->ID,q->cryptogram);
        p->next=q;
        q->next=NULL;
        p=q;
    }
    fclose(fp);
    return head;
}
struct Student* extractionS(const char *name)//将文件中的学生信息存取到链表中

{
    FILE * fp;
    char title[200];
    struct Student *head,*p,*q;
    p=(struct Student*)malloc(sizeof(struct Student));
    
    if((fp=fopen(name,"r"))==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    fgets(title,100,fp);
    //printf("%s",title);
    head=p;
    
    fscanf(fp,"%s%s%s",p->namee,p->stdID,p->classs);
    
    fscanf(fp,"%s%s%s%s",p->sex,p->data,p->college,p->cryptogram);
    
    p->next=NULL;
    while(!feof(fp)){
        q=(struct Student*)malloc(sizeof(struct Student));
        fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s",q->namee,q->stdID,q->classs,q->sex,q->data,q->college,q->cryptogram);
        p->next=q;
        q->next=NULL;
        p=q;
    }
    fclose(fp);
    return head;
}
struct CoursesStd* extractionC(const char* name)//将文件中的学生课程信息存取到链表中
{
    FILE * fp;
    char title[200];
    struct CoursesStd *head,*p,*q;
    p=(struct CoursesStd*)malloc(sizeof(struct CoursesStd));
    if((fp=fopen(name,"r"))==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    fgets(title,100,fp);
    //printf("%s",title);
    head=p;
    
    fscanf(fp,"%s%s",p->name,p->stdID);
    p->next=NULL;
    while(!feof(fp)){
        q=(struct CoursesStd*)malloc(sizeof(struct CoursesStd));
        fscanf(fp,"%s%s",q->name,q->stdID);
        p->next=q;
        q->next=NULL;
        p=q;
    }
    fclose(fp);
    return head;
}
char * ChooseCollege()//获取学院
{
    int answer,length,sum=filequantity("C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息");
    char College[sum][30];
    sum=0;
    const char *path = "C:\\Users\\hhy\\Desktop\\学籍管理系统\\学生信息\\*.txt"; // 输出这个目录下所有csv文件名
    long handle;    //用于查找的句柄
    struct _finddata_t fileinfo;    // io.h
    handle = _findfirst(path, &fileinfo);   // 第一次查找
    if(handle == -1){
        return;
    }else{
        sum++;
        printf("%d.%s\n",sum,fileinfo.name);
        length=strlen(fileinfo.name);
        for(int i=0;i<length;i++){
            College[sum-1][i]=fileinfo.name[i];
        }
        College[sum-1][length]='\0';
    }
    while(!_findnext(handle, &fileinfo)){   //循环查找其他符合的文件,直到找不到其他的为止
        sum++;
        printf("%d.%s\n",sum,fileinfo.name);
        length=strlen(fileinfo.name);
        for(int i=0;i<length;i++){
            College[sum-1][i]=fileinfo.name[i];
        }
        College[sum-1][length]='\0';
    }
    
    _findclose(handle);
    
    scanf("%d",&answer);
    
    for(length=0;College[answer-1][length]!='\0';length++){
        
    }
    char namee[length+1];
    for(int i=0;i<length;i++){
        namee[i]=College[answer-1][i];
        
    }
    namee[length]='\0';
    char *ret=namee;
    return ret;
}
char * ChooseCourse()//选择课程
{
    int answer,length,sum=filequantity("C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细");
    char College[sum][30];
    sum=0;
    const char *path = "C:\\Users\\hhy\\Desktop\\学籍管理系统\\课程明细\\*.txt"; // 输出这个目录下所有csv文件名
    long handle;    //用于查找的句柄
    struct _finddata_t fileinfo;    // io.h
    handle = _findfirst(path, &fileinfo);   // 第一次查找
    if(handle == -1){
        return;
    }else{
        sum++;
        printf("%d.%s\n",sum,fileinfo.name);
        length=strlen(fileinfo.name);
        for(int i=0;i<length;i++){
            College[sum-1][i]=fileinfo.name[i];
        }
        College[sum-1][length]='\0';
    }
    while(!_findnext(handle, &fileinfo)){   //循环查找其他符合的文件,直到找不到其他的为止
        sum++;
        printf("%d.%s\n",sum,fileinfo.name);
        length=strlen(fileinfo.name);
        for(int i=0;i<length;i++){
            College[sum-1][i]=fileinfo.name[i];
        }
        College[sum-1][length]='\0';
    }
    
    _findclose(handle);
    
    scanf("%d",&answer);
    for(length=0;College[answer-1][length]!='\0';length++){
        
    }
    char namee[length+1];
    for(int i=0;i<length;i++){
        namee[i]=College[answer-1][i];
        
    }
    namee[length]='\0';
    char *ret=namee;
    return ret;
}
void writeS(const char*name,struct Student* add)//将链表中的学生信息写入到新的文件中
{
    FILE * fp;
    fp=fopen(name,"w");
    struct Student * head=add;
    fprintf(fp,"姓名    学号        班级       性别 入学时间    学院              密码");
    while(head->next){
        fprintf(fp,"\n%s\t%s\t%s\t",head->namee,head->stdID,head->classs);
        fprintf(fp,"%s\t%s\t",head->sex,head->data);
        fprintf(fp,"%s\t",head->college);
        fprintf(fp,"%s\t",head->cryptogram);
        head=head->next;
    }
    fclose(fp);
}
void writes(const char*name,struct CoursesStd* add)
{
    FILE * fp;
    fp=fopen(name,"w");
    struct CoursesStd * head=add;
    fprintf(fp,"姓名      学号       成绩");
    while(head->next){
        fprintf(fp,"\n%s\t%s\t%d\t",head->name,head->stdID,head->sorce);
        head=head->next;
    }
    fclose(fp);
}
int cmp(const void* a,const void*b){

    int c,d;
    c=((struct CoursesStd *)a)->sorce;
    d=((struct CoursesStd *)b)->sorce;
    return d-c;
}
void changesorceT()
{

}
void changecollege()
{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ω²R

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值