学生管理系统


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<conio.h>
struct student
{
    char id[15];             //学生学号 
    char name[20];      //学生姓名 
    char sex[5];        //学生性别 
    char major[20];     //学生专业 
    char chusheng[15];  //学生出生日期 
    char dizhi[30];        //学生家庭地址 
    int achievement;     //学生英语成绩 
    struct student *next;
};
void menu()//菜单 
{
    printf("\t\t* * * * * * * * * * * * * * * * * * * * * *\n");
    printf("\t\t*  1.增加学生信息       2.删除学生信息    *\n");
    printf("\t\t*  3.导入学生信息       4.查询学生信息    *\n");
    printf("\t\t*  5.学生信息统计       6.按英语成绩排序  *\n");
    printf("\t\t*  7.学生信息保存       8.修改学生信息    *\n");
    printf("\t\t*              0.退出程序                 *\n");
    printf("\t\t* * * * * * * * * * * * * * * * * * * * * *\n");
}
void join(struct student *head)
{
    struct student  *p1;
    FILE*in;
    in=fopen("F:\\大作业\\学生信息.txt","r");
    while(!feof(in))
    {
      p1=(struct student*)malloc(sizeof(struct student));
       fscanf(in,"%s",&p1->id);
       fscanf(in,"%s",&p1->name);
       fscanf(in,"%s",&p1->sex);
       fscanf(in,"%s",&p1->major);
       fscanf(in,"%s",&p1->chusheng);
       fscanf(in,"%s",&p1->dizhi);
       fscanf(in,"%d",&p1->achievement);
       p1->next=head->next;
       head->next=p1;
    }
    fclose(in);
    printf("导入成功!\n");
    
} 
void add(struct student *head)  //1.增加学生信息
{
    while(1)
    {
        struct student *n=head->next;
        struct student *p;
        p=(struct student *)malloc(sizeof(struct student));
        int o,v;
        char id[15]; 
        char name[20];
        char sex[5];
        char major[20];
        char chusheng[15];
        char dizhi[30];
        int achievement;
        printf("请输入学生学号:");
        scanf("%s",id);
        while(n)
        {
            if(n==NULL)
            {
                break;
            }
            if(strcmp(n->id,id)==0)
            {
                printf("学号重复请重新输入编号:");
                scanf("%s",id);
                n=head->next;
            }
            if(strcmp(n->id,id)!=0) 
            {
                n=n->next;
            }
        }
        printf("请输入学生姓名:");
        scanf("%s",name);
        
        printf("请输入学生性别:");
        scanf("%s",sex);
        printf("请输入学生专业:");
        scanf("%s",major);
        printf("请输入学生出生日期:");
        scanf("%s",chusheng);
        printf("请输入学生家庭地址:");
        scanf("%s",dizhi);
        printf("请输入学生英语成绩:");
        achievement=scanf("%d", &v);
        while(achievement!=1)
        {
            while((getchar())!='\n' );
            printf("警告只能输入数字!成绩:");
            achievement=scanf("%d", &v);    
        }
        achievement=v;
        strcpy(p->id,id);
        strcpy(p->name,name);
        strcpy(p->sex,sex);
        strcpy(p->major,major);
        strcpy(p->chusheng,chusheng);
        strcpy(p->dizhi,dizhi);
        p->achievement=achievement;
        p->next=head->next;
        head->next=p;
        printf("添加成功\n");
        printf("是否继续添加\n");
        printf("是输入'1',否输入'0'\n");
        printf("请输入数字:");
        scanf("%d",&o);
        while(o>1||o<0)
        {
            printf("输入错误,请重新输入:");
            scanf("%d",&o);
        }
        if(o==0)
        {
            break;
        }
    }
    
}
void delete(struct student *head)  //2.删除学生信息
{
    struct student *a=head;
    struct student *b=head->next;
    char name[20];
    printf("请输入删除学生姓名:");
    scanf("%s",name);
    while(b)
    {
        if(strcmp(b->name,name)==0) 
        {
            a->next=b->next;
            free(b);
            printf("删除完成\n");
            break;
        } 
        else 
        {
            a=a->next;
            b=b->next;
            if(b==NULL) 
            {
                printf("无该生信息\n");
            }
        }
    }
    
}

void query(struct student *head)//4.查询学生信息
{
    printf("开始查询学生信息\n") ;
    int i,v,a;
    
    do
    {
        char id[20];
        char name[20];
        char sex[5];
        char major[20];
        char chusheng[20];
        char dizhi[20];
        int achievement;
        int j = 0;
        struct student*s=head->next;
        s=head->next;
        printf("请选择查询方法:\n");
        printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
        printf("\t\t*     1.学生学号        2.学生名字      *\n");
        printf("\t\t*     3.学生性别        4.学生专业      *\n");
        printf("\t\t*     5.学生出生日期    6.学生家庭地址  *\n");
        printf("\t\t*     7.学生英语成绩    0.退出查询程序  *\n"); 
        printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
        printf("请输入数字:");
        i=scanf("%d", &v);
        while(i!=1)
        {
            while((getchar())!='\n' );
            printf("警告只能输入数字:");
            i=scanf("%d", &v);    
        }
        i=v;
        switch(i)
        {
            case 0: 
                printf("退出成功\n"); 
                break;
            case 1:
                
                printf("请输入查询学生学号:");
                scanf("%s",id);
                while(s)
                {
                    if(strcmp(s->id,id)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        break;
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 2:
                
                printf("请输入查询学生姓名:");
                scanf("%s",name);
                while(s)
                {
                    if(strcmp(s->name,name)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 3:
                
                printf("请输入查询学生性别:");
                scanf("%s",sex);
                while(s)
                {
                    if(strcmp(s->sex,sex)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 4:
                
                printf("请输入查询学生专业:");
                scanf("%s",major);
                while(s)
                {
                    if(strcmp(s->major,major)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 5:
                
                printf("请输入查询学生出生日期:");
                scanf("%s",chusheng);
                while(s)
                {
                    if(strcmp(s->chusheng,chusheng)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 6:
                
                printf("请输入查询学生家庭地址:");
                scanf("%s",dizhi);
                while(s)
                {
                    if(strcmp(s->dizhi,dizhi)==0)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            case 7:
                
                printf("请输入查询学生英语成绩:");
                scanf("%d", &achievement);
                while(s)
                {
                    if(s->achievement==achievement)
                    {
                        printf("学号    :%s\n",s->id);
                        printf("姓名    :%s\n",s->name);
                        printf("性别    :%s\n",s->sex);
                        printf("专业    :%s\n",s->major);
                        printf("出生日期:%s\n",s->chusheng);
                        printf("家庭地址:%s\n",s->dizhi);
                        printf("英语成绩:%d\n",s->achievement);
                        printf("\n");
                        s=s->next;
                        j++;
                        if(s==NULL) 
                        {
                            break;
                        }
                    }
                    else 
                    {
                        s=s->next;
                        if(s==NULL&&j==0) 
                        {
                            printf("查询无信息");
                            break;
                        }
                    }
                }
                break;
            default :
                printf("无效数字,请重新输入\n");
                break; 
        }
    }while(i);    

}
void show(struct student *head) //5.学生信息统计    
{
    struct student*x=head->next;
    x=head->next;
    while(x)
    {
        printf("学号    :%s\n",x->id);
        printf("姓名    :%s\n",x->name);
        printf("性别    :%s\n",x->sex);
        printf("专业    :%s\n",x->major);
        printf("出生日期:%s\n",x->chusheng);
        printf("家庭地址:%s\n",x->dizhi);
        printf("英语成绩:%d\n",x->achievement);
        printf("\n");
        x=x->next;    
    } 
    
}
void paixu(struct student *head)//按英语成绩排序 
{
    struct student*x=head->next;
    int yingyv[1000];
    int a,b;
    int i,j;
    for(i=0;i<1000;i++)
    {
        if(x==NULL)
        {
            break;
        }
        yingyv[i]=x->achievement;
        a++;
        x=x->next;
    }
    for(i=0;i<a-1;i++)
    {
        for(j=0;j<a-i-1;j++)
        {
            if(yingyv[j]<yingyv[j+1])
            {
                b=yingyv[j];
                yingyv[j]=yingyv[j+1];
                yingyv[j+1]=b;
            }
        }
    }
    for(i=0;i<a;i++)
    {
        x=head->next;
        while(x)
        {
            if(x->achievement==yingyv[i])
            {
                printf("学号    :%s\n",x->id);
                printf("姓名    :%s\n",x->name);
                printf("性别    :%s\n",x->sex);
                printf("专业    :%s\n",x->major);
                printf("出生日期:%s\n",x->chusheng);
                printf("家庭地址:%s\n",x->dizhi);
                printf("英语成绩:%d\n",x->achievement);
                printf("\n");
            }
            x=x->next;
        }
    }
    
}
void baocun(struct student *head)//保存学生信息 
{
    FILE*fp=fopen("F:\\大作业\\学生信息.txt","w");
    struct student *p;
    p=head->next;
    if(fp==NULL)
    {
        printf("打开失败");
        exit(1);//异常退出 
    } 
       while(p!=NULL)
      {
          fprintf(fp,"%s\n",p->id);
          fprintf(fp,"%s\n",p->name);
          fprintf(fp,"%s\n",p->sex);
          fprintf(fp,"%s\n",p->major);
        fprintf(fp,"%s\n",p->chusheng);
        fprintf(fp,"%s\n",p->dizhi);
        fprintf(fp,"%d\n",p->achievement);
          p=p->next;
      }
      printf("保存成功!\n");
    fclose(fp);//关闭文件 
  
}
void modify(struct student *head)//8.修改学生信息
{
    printf("开始修改学生信息\n");
    struct student*q=head->next;
    q=head->next;
    char io[20];
    printf("请输入查询学生学号:");
    scanf("%s",io);
    while(q)
    {
        if(strcmp(q->id,io)==0) 
        {
            int i,v,a; 
            char id[15];         //学生学号 
            char name[20];      //学生姓名 
            char sex[5];        //学生性别 
            char major[20];     //学生专业 
            char chusheng[15];  //学生出生日期 
            char dizhi[30];        //学生家庭地址 
            int achievement;
            do
            {
                printf("请选择修改项目:\n");
                printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
                printf("\t\t*     1.学生学号        2.学生名字      *\n");
                printf("\t\t*     3.学生性别        4.学生专业      *\n");
                printf("\t\t*     5.学生出生日期    6.学生家庭地址  *\n");
                printf("\t\t*     7.学生英语成绩    0.退出修改程序  *\n"); 
                printf("\t\t* * * * * * * * * * * * * * * * * * * * *\n");
                printf("请输入数字:");
                i=scanf("%d", &a);
                while(i!=1)
                {
                    while((getchar())!='\n' );
                    printf("\t警告只能输入数字!学号:");
                    i=scanf("%d", &a);    
                }
                i=a;
                switch(i)
                {
                    case 0: 
                        printf("退出成功"); 
                        break;
                    case 1:
                        printf("请输入修改后的学生学号:");
                        scanf("%s",id);
                        strcpy(q->id,id);
                        break;
                    case 2:
                        printf("请输入修改后的学生名字:");
                        scanf("%s",name);
                        strcpy(q->name,name);
                        break;
                    case 3:
                        printf("请输入修改后的学生性别:");
                        scanf("%s",sex);
                        strcpy(q->sex,sex);
                        break;
                    case 4:
                        printf("请输入修改后的学生专业:");
                        scanf("%s",major);
                        strcpy(q->major,major);
                        break;
                    case 5:
                        printf("请输入修改后的学生出生日期:");
                        scanf("%s",chusheng);
                        strcpy(q->chusheng,chusheng);
                        break;
                    case 6:
                        printf("请输入修改后的学生家庭住址:");
                        scanf("%s",dizhi);
                        strcpy(q->dizhi,dizhi);
                        break;
                    case 7:
                        printf("请输入修改后的学生英语成绩:");
                        achievement=scanf("%d", &v);
                        while(achievement!=1)
                        {
                            while((getchar())!='\n' );
                            printf("\t警告只能输入数字!成绩:");
                            achievement=scanf("%d", &v);    
                        }
                        achievement=v;
                        q->achievement=achievement;
                        break;
                    default :
                        printf("无效数字,请重新输入\n");
                        break; 
                }
            }while(i);
            break; 
        }
        else 
        {
            q=q->next;
            if(q==NULL) 
            {
                printf("无相关学生信息");
                break;
            }
        }
    }

}
void zhuce()
{
    char zhanghao1[10];
    char zhanghao2[10];
    char mima1[10];
    char mima2[10]; 
    while(1)
    {
        printf("\t\t-------------------------------------------------\n");
        printf("\t\t        学生信息管理系统注册页面            \n");
        printf("\t\t-------------------------------------------------\n");
        printf("\t\t注册学生通信录管理系统的账号\n");
        printf("\t\t请输入学生通信录管理系统的账号:");
        scanf("%s",zhanghao1);
        printf("\t\t请输入学生通信录管理系统的密码:");
        scanf("%s",mima1);
        system("pause");
        system("cls");
        printf("\t\t-------------------------------------------------\n");
        printf("\t\t        学生信息管理系统登录页面            \n");
        printf("\t\t-------------------------------------------------\n");
        printf("\t\t请输入学生通信录管理系统的账号:");
        scanf("%s",zhanghao2);
        printf("\t\t请输入学生通信录管理系统的密码:");
        scanf("%s",mima2);
        if(strcmp(zhanghao1,zhanghao2)!=0||strcmp(mima1,mima2)!=0)
        {
            printf("输入错误,请重新输入:");
            scanf("%s",zhanghao2);
            printf("密码:");
        }
        else
        {
            printf("成功登陆\n");
            break;
        }
        
    }
 } 
int main() 
{
    int n,v;
    struct student *head=(struct student*)malloc(sizeof(struct student));
    head->next=NULL;
    zhuce();
    system("pause");
    system("cls");
    printf("\t \t \t \t 新生基本信息系统\n");
    do
    {
        printf("请选择执行程序:\n");
        menu();
        printf("请输入数字"); 
        n=scanf("%d", &v);
        while(n!=1)
        {
            while((getchar())!='\n' );
            printf("警告只能输入数字:");
            n=scanf("%d", &v);    
        }
        n=v;
        system("pause");
        system("cls");
        switch(n)
        {
            case 0:
                printf("正在退出程序\n");
                printf("退出成功"); 
                break;
            case 1://1.增加学生信息
                add(head);
                system("pause");
                system("cls");
                break;
            case 2://2.删除学生信息
                delete(head);
                system("pause");
                system("cls");
                break;
            case 3://3.查看保存学生信息
                join(head); 
                system("pause");
                system("cls");
                break;
            case 4://4.查询学生信息
                query(head); 
                system("pause");
                system("cls");
                break;
            case 5://5.学生信息统计    
                show(head);
                system("pause");
                system("cls");
                break;
            case 6://6.按英语成绩排序
                paixu(head);
                system("pause");
                system("cls");
                break;
            case 7://7.学生信息保存    
                baocun(head);
                system("pause");
                system("cls");
                break;
            case 8://8.修改学生信息
                modify(head);
                system("pause");
                system("cls");
                break; 
            default:
                printf("输入错误,请重新输入");
                break;    
        }

    }while(n);
    return 0;
    system("pause");
    system("cls");
}
    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值