栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学籍管理系统

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学籍管理系统

#include
#include
#include
#include
#include
#include


//学生
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]='';
                    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]='';
                    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]='';
        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("登陆成功!nn");
    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("登陆成功!nn");
    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("登陆成功!nn");
    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%st",add.name);
        printf("请输入教师ID:");
        scanf("%s",add.ID);
        fprintf(fp,"%st",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("%st%st%sn",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,"%st",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;istdID)==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]='';
    }
    printf("请输入原密码:");
    scanf("%s",incry);
    
    if(strcmp(incry,head->cryptogram)==0){
        printf("请输入新密码:");
        //for(int i=0;i<17;i++){
        //    head->cryptogram[i]='';
        //}
        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("%st%st",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;jstdID)==0){
            printf("成功");
            break;
        }
        head=head->next;
    }
    
    printf("你的详细信息如下:n");
    printf("姓名:%sn学号:%sn班级:%sn性别:%sn入学时间:%sn所在学院:",head->namee,head->stdID,head->classs,head->sex,head->data);
    int length=strlen(head->college);
    for(int i=0;icollege[i]);
    }
}
void ChooseCourses()//学生选课 传入学生的学号和姓名
{

    printf("请输入学号:");
                    char ID[10];
                    scanf("%s",ID);
                    ID[10]='';
                    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;inext;
        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,"%st%st%st%st%st%st%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.%sn",sum,fileinfo.name);
        length=strlen(fileinfo.name);
        for(int i=0;inext){
        fprintf(fp,"n%st%st%st",head->namee,head->stdID,head->classs);
        fprintf(fp,"%st%st",head->sex,head->data);
        fprintf(fp,"%st",head->college);
        fprintf(fp,"%st",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%st%st%dt",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()
{

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/920796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号