学生成绩管理系统(实训周)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{
    char sclass[10];
    char scourse[10];
    char sno[10];
    char sname[10];
    char ssex[2];
    int score;
    struct node *next;
}student;
typedef student *linklist;
student *head;
void display();                  //函数声明

student *init()            //建立一个空的单链表
{
    return NULL;
}

void shuru()                //输入学生信息函数
{    
    linklist p,q;
    int count=0;
    char flag='1';
    q=(linklist)malloc(sizeof(student));
    p=head=NULL;
    while(flag=='1')
        {
            printf("\n");
            printf("请输入学生的学号: ");
            scanf("%s",&q->sno);
            printf("请输入学生的班级: ");
            scanf("%s",&q->sclass);
            printf("请输入学生的课程: ");
            scanf("%s",&q->scourse);
            printf("请输入学生的姓名: ");
            scanf("%s",&q->sname);
            printf("请输入学生的性别: ");
            scanf("%s",&q->ssex);
            printf("请输入学生的成绩: ");
            scanf("%d",&q->score);
            setbuf(stdin,NULL);
            if(head==NULL) 
            {
                head=q;
                p=head;
            }
            else 
            {
                p->next=q;
                p=q;
            }
            q=(linklist)malloc(sizeof(student));
            printf("按1继续输入,否则退出\n");
            flag=getch();
            setbuf(stdin,NULL);
        }
    free(q);
    printf("输入完毕!\n ");
    p->next=NULL;
}
void charu()                      //插入学生信息函数        
{
    int j=0,i;
    linklist p,q;
    p=head;
    printf("请输入要插入的位置: ");
    scanf("%d",&i);
    if(i<0) printf("输入位置不正确!\n");
    else 
    {
        while (p&&i!=j)
        {
            p=p->next;j++;
        }
        if(!p&&i!=0)  printf("未找到该结点不能插入!\n");
        else
        {
            q=(linklist)malloc(sizeof(student));
            printf("请输入学生的学号: ");
            scanf("%s",&q->sno);
            printf("请输入学生的班级: ");
            scanf("%s",&q->sclass);
            printf("请输入学生的课程: ");
            scanf("%s",&q->scourse);
            printf("请输入学生的姓名: ");
            scanf("%s",&q->sname);
            printf("请输入学生的性别: ");
            scanf("%s",&q->ssex);
            printf("请输入学生的成绩: ");
            scanf("%d",&q->score);
            if(i==0)
            {
                q->next=head;
                head=q;
            }
            else 
            {
                q->next=p->next;
                p->next=q;
            }
        }
    }
}
void xiugai()                         //修改学生信息函数
{
    linklist q;
    int m=0;
    char sno[15];
    q=head;
    printf("请输入要修改的学生学号:");
    scanf("%s",&sno);
    if(!q)  printf("修改失败,没有学生信息!\n");
    else 
    {
        while(q!=NULL)
        {
            if(strcmp(q->sno,sno)==0)
            {
                printf("请输入学生的班级: ");
                scanf("%s",&q->sclass);
                printf("请输入学生的课程: ");
                scanf("%s",&q->scourse);
                printf("请输入学生的学号: ");
                scanf("%s",&q->sno);
                printf("请输入学生的姓名: ");
                scanf("%s",&q->sname);
                printf("请输入学生的性别: ");
                scanf("%s",&q->ssex);
                printf("请输入学生的成绩: ");
                scanf("%d",&q->score);
                setbuf(stdin,NULL);
                m=1;
                printf("修改成功!\n\n");
                break;
            }
            else
                q=q->next;    
        }
        if(m==0) printf("修改失败,没有该学生信息!\n\n");
    }
}

void shanchu()                       //删除学生信息函数
{
    linklist pre,q;
    char sno[12];
    pre=head;
    q=head;
    printf("请输入要删除的学生学号:");
    scanf("%s",&sno);
    if(!q) printf("没有学生信息,无法删除!\n\n");
    else
    {
        while(q)
        {
            if(strcmp(q->sno,sno)==0) 
            {
                if(q==head)
                {
                head=q->next;
                free(q);
                }
                else 
                {
                pre->next=q->next;
                free(q);
                }
                printf("删除成功!\n");
                break;
            }
            else
            {
                pre=q;
                q=q->next;
            }
        }
    }    
}

void chaxun()                           //查询学生信息函数
{
    linklist p;
    int m=0;
    char sno[15];
    p=head;
    printf("请输入需查询的学生学号:");
    scanf("%s",&sno);
    if(!p) printf("没有学生信息,无法查询!\n\n");
    else
    {
        while(p)
        {
            if(strcmp(p->sno,sno)==0) 
            {
                printf("班级:%s\n",p->sclass);
                printf("课程:%s\n",p->scourse);
                printf("学号:%s\n",p->sno);
                printf("姓名:%s\n",p->sname);
                printf("性别:%s\n",p->ssex);
                printf("成绩:%d\n",p->score);
                m=1;
                break;
            }
            else
                p=p->next;
        }
        if(m==0) printf("查询失败,没有该生信息!\n");
    }
}
void paixu()     //对学生成绩排序 
{
    linklist p,q,r;
    student temp;
    r=head;
    if(r==NULL) printf("没有学生成绩,请先添加学生成绩!\n");
    else
    {
    while(r)
    {
        p=r;
        q=r->next;
        while(q)
        {
            if(p->score < q->score)
            {
                strcpy(temp.sclass,p->sclass);
                strcpy(temp.scourse,p->scourse);
                strcpy(temp.sno,p->sno);
                strcpy(temp.sname,p->sname);
                strcpy(temp.ssex,p->ssex);
                temp.score=p->score;
                strcpy(p->sclass,q->sclass);
                strcpy(p->scourse,q->scourse);
                strcpy(p->sno,q->sno);
                strcpy(p->sname,q->sname);
                strcpy(p->ssex,q->ssex);
                p->score=q->score;
                strcpy(q->sclass,temp.sclass);
                strcpy(q->scourse,temp.scourse);
                strcpy(q->sno,temp.sno);
                strcpy(q->sname,temp.sname);
                strcpy(q->ssex,temp.ssex);
                q->score=temp.score;
            }
            q=q->next;
        }
        r=r->next;
    }
    printf("****排序完毕,按由大到小的成绩排序!");
    display();
    }
}

void display()                   //输出学生信息函数
{
    student *p;
    p=head;
    if(!p) printf("暂无学生成绩!\n");
    else
    {
        printf("学生成绩为:\n");
        while(p)
        {
                printf("班级:%s    ",p->sclass);
                printf("课程:%s    ",p->scourse);
                printf("学号:%s    ",p->sno);
                printf("姓名:%s    ",p->sname);
                printf("性别:%s    ",p->ssex);
                printf("成绩:%d    ",p->score);
            p=p->next;
        }
    }
}

void baocun(){//保存当前学生信息(清除文件信息写入函数)
        FILE *fp1;
        student *p;
        int i;
        if((fp1=fopen("D:\\a.txt","w"))==NULL) return ;
        for(i=0; i<10; i++) {
            fprintf(fp1,"%s %s %s %s %s %d",p->sclass, p->scourse,p->sno,p->sname,p->ssex,p->score);
        }
        fclose(fp1);
        printf("保存成功\n");
} 

void menu()
{
    int choose;
    printf("**************学生信息管理系统*****************\n");
    printf("*                                             *\n");
    printf("*----------- 1.输入学生资料 ------------------*\n");
    printf("*----------- 2.插入学生资料 ------------------*\n");
    printf("*----------- 3.修改学生资料 ------------------*\n");
    printf("*----------- 4.删除学生资料 ------------------*\n");
    printf("*----------- 5.查询学生资料 ------------------*\n");
    printf("*----------- 6.对学生资料进行排序 ------------*\n");
    printf("*----------- 7.显示学生资料 ------------------*\n");
    printf("*----------- 8.保存学生资料 ------------------*\n");
    printf("*----------- 0.退出系统-----------------------*\n");
    printf("***********************************************\n");
    printf("\n");
    printf("请输入你的选择:");
    scanf("%d",&choose);
    switch(choose)
    {
    case 1:shuru();break;
    case 2:charu();break;
    case 3:xiugai();break;
    case 4:shanchu();break;
    case 5:chaxun();break;
    case 6:paixu();break;
    case 7:display();break;
    case 8:baocun();break;
    case 0:exit(0);break;
    default:printf("请输入正确数字!\n");
    }
    menu();
}
int main()
{
    head=init();
    menu();
    return 0;
}

 

posted on 2019-06-17 16:09  周橙梓  阅读(316)  评论(0编辑  收藏  举报

导航