• C语言学生管理系统


    #include <stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define PRINT_ERROR_FILE(e)
    do
    {
        if(e==NULL)
        {
            printf("打开文件失败!
    ");
            exit(-1);
        }
    }while(0)
    
    typedef struct _Grade
    {
        int id; //课程编号
        char name[20]; //课程名称
        double score;//学分
    }Grade;
    
    typedef struct _Stu
    {
        Grade gb;
        int xuehao;
        char name[20];
        char  sex[5];
        int Su_se;
       char  dian_hua[12];
        double normal_score;
        double lab_score;
        double shijuan_score;
        double sum_score;
        double result_xuefen;
    }Stu;
    
    typedef struct _Node
    {
        Stu  s;
        struct _Node* next;
    }Node;
    
    Node* head=NULL;
    
    
    void Input_Message()
    {
        Node* cur=head;
        while(cur->next)
        {
            cur=cur->next;
        }
    
        if(head->next==NULL)
        {
            head->next=(Node*)malloc(sizeof(Node));
            head->next->next=NULL;
            cur=head->next;
        }
        else {
            Node* temp=(Node*)malloc(sizeof(Node));
            temp->next=NULL;
            cur->next=temp;
            cur=temp;
        }
        printf("请输入课程编号:");
        scanf("%d",&cur->s.gb.id);
        printf("请输入课程名称:");
        scanf("%s",cur->s.gb.name);
        printf("请输入课程学分:");
        scanf("%lf",&cur->s.gb.score);
        printf("请输入学生姓名:");
        scanf("%s",cur->s.name);
        printf("请输入学生学号:");
        scanf("%d",&cur->s.xuehao);
        printf("请输入学生性别:");
       scanf("%s",cur->s.sex);
       printf("请输入学生宿舍号码:");
       scanf("%d",&cur->s.Su_se);
       printf("请输入学生电话:");
       scanf("%s",cur->s.dian_hua);
       printf("请输入学生平时成绩:");
       scanf("%lf",&cur->s.normal_score);
       printf("请输入学生实验成绩:");
       scanf("%lf",&cur->s.lab_score);
       printf("请输入学生卷面成绩:");
       scanf("%lf",&cur->s.shijuan_score);
    
       if(cur->s.lab_score==-1)
       {
           cur->s.sum_score=(cur->s.normal_score)*0.30+(cur->s.shijuan_score)*0.70;
       }
       else {
            cur->s.sum_score=(cur->s.normal_score)*0.15+(cur->s.lab_score)*0.15+(cur->s.shijuan_score)*0.7;
       }
       double t=cur->s.sum_score;
       if((t>=90)&&(t<=100))
       {
           cur->s.result_xuefen=t;
       }
       else if ((t>=80)&&(t<90)) {
           cur->s.result_xuefen=t*0.8;
       }
       else if ((t>=70)&&(t<80)) {
           cur->s.result_xuefen=t*0.7;
       }
       else if ((t>=60)&&(t<70)) {
            cur->s.result_xuefen=t*0.6;
       }
       else if (t<60) {
             cur->s.result_xuefen=0.0;
       }
    
    }
    
    void Print_Info()
    {
        printf("课程编号  课程名称  课程学分  学号	姓名	性别	宿舍	电话		平时成绩  实验成绩  卷面成绩  综合成绩  最后学分
    ");
        Node* cur=head->next;
    
        while(cur)
        {
            printf("%-8d  %-8s  %-8lf  %-4d	%-4s	%-4s	%-4d	%-4s		%-8.1lf  %-8.1lf  %-8.1lf  %-8.1lf  %-8.1lf
    ",cur->s.gb.id,cur->s.gb.name,
                   cur->s.gb.score,
                   cur->s.xuehao,cur->s.name,cur->s.sex,cur->s.Su_se,
                   cur->s.dian_hua,cur->s.normal_score,cur->s.lab_score,cur->s.shijuan_score,
                   cur->s.sum_score,cur->s.sum_score);
    
            cur=cur->next;
        }
    }
    
    void Print_Single(Node* cur)
    {
         printf("课程编号  课程名称  课程学分  学号	姓名	性别	宿舍	电话		平时成绩  实验成绩  卷面成绩  综合成绩  最后学分
    ");
         printf("%-8d  %-8s  %-8lf  %-4d	%-4s	%-4s	%-4d	%-4s		%-8.1lf  %-8.1lf  %-8.1lf  %-8.1lf  %-8.1lf
    ",cur->s.gb.id,cur->s.gb.name,
                cur->s.gb.score,
                cur->s.xuehao,cur->s.name,cur->s.sex,cur->s.Su_se,
                cur->s.dian_hua,cur->s.normal_score,cur->s.lab_score,cur->s.shijuan_score,
                cur->s.sum_score,cur->s.sum_score);
    }
    
    
    void Find_Info()
    {
        Node* cur=head->next;
        printf("请输入要查询学生的姓名或者学号
    首先请选择查询方式:1.姓名. 2.学号
    ");
        int x;
        scanf("%d",&x);
        if(x==1)
        {
            printf("请输入要查询的学生姓名:");
            char name[20];
            scanf("%s",name);
             while(cur)
             {
                 if(strcmp(name,cur->s.name)==0)
                 {
                     printf("找到了该学生,接下来打印该学生信息
    ");
                     Print_Single(cur);
                    return;
                 }
                 cur=cur->next;
             }
            printf("没有找到该学生信息
    ");
            return;
        }
        else {
            printf("请输入要查询的学生学号:");
            int id;
            scanf("%d",&id);
            while(cur)
            {
                if(id==cur->s.xuehao)
                {
                    printf("找到了该学生,接下来打印该学生信息
    ");
                    Print_Single(cur);
                   return;
                }
                cur=cur->next;
            }
           printf("没有找到该学生信息
    ");
           return;
        }
    }
    
    Node* Find_By_Number(int id)
    {
            Node* cur=head->next;
            while(cur)
            {
                if(cur->s.xuehao==id)
                {
                   //Print_Single(cur);
                   return cur;
                }
                cur=cur->next;
            }
            printf("找不到这个学号对应的学生信息
    ");
            return NULL;
    }
    
    Node* Find_By_Name(char * s)
    {
        Node* cur=head->next;
        while(cur)
        {
            if(strcmp(s,cur->s.name)==0)
            {
                //Print_Single(cur);
                return cur;
            }
            cur=cur->next;
        }
        printf("没有这位学生
    ");
        return NULL;
    }
    
    
    void Del_Stu(int id)
    {
        //删除的前提是你得必须先找到该学生.
        Node* cur=Find_By_Number(id);
        if(!cur)return;
       if(cur->next==NULL)
       {
           free(cur);
           printf("删除成功
    ");
           return;
       }
    
       //找到所查找节点的前一个节点
       Node* temp=head;
       while(temp->next)
       {
           if(temp->next->s.xuehao==id)
           {
               temp->next=cur->next;
               cur->next=NULL;
               free(cur);
               printf("删除aaa成功
    ");
               return;
           }
           temp=temp->next;
       }
    }
    
    
    void Result(Node* head,int n)
    {
        Node* pre,*q,*p;
    
        for (int i=0;i<n-1;i++)
        {
            pre=head;
            p=head->next;
            q=p->next;
            for(int j=0;j<n-(i+1);j++)
            {
                if(p->s.result_xuefen>q->s.result_xuefen)
                {
                 pre->next=q;
                 p->next=q->next;
                 q->next=p;
                 pre=q;
                 q=p->next;
                 continue;
                }
                pre=pre->next;
                p=p->next;
                q=q->next;
            }
        }
    }
    
    int GetLength(Node* head)
    {
        Node* cur=head->next;
        int count=0;
        while(cur)
        {
            count++;
            cur=cur->next;
        }
        return count;
    }
    
    
    void Write_File(char * filename)
    {
        Node* cur=head->next;
        FILE* fs=fopen(filename,"w+");
        PRINT_ERROR_FILE(fs);
        while(cur)
        {
            fwrite((void*)&cur->s,sizeof(Stu),1,fs);
            cur=cur->next;
        }
        printf("写入成功
    ");
        fclose(fs);
    }
    
    Node* Read_File(char* filename)
    {
        head=(Node*)malloc(sizeof(Node));
        head->next=NULL;
        FILE* fs=fopen(filename,"r+");
        PRINT_ERROR_FILE(fs);
        Node* cur=(Node*)malloc(sizeof(Node));
    
        while(fread( ((void*)&cur->s),sizeof(Stu),1,fs )   )
        {
            cur->next=head->next;
            head->next=cur;
            cur=(Node*)malloc(sizeof(Node));
        }
        free(cur);
        return head;
    }
    
    int main()
    {
        int a;
        head=(Node*)malloc(sizeof(Node));
        head->next=NULL;
        char filename[20];
        while(1)
        {
        printf("						学生单科成绩查询系统
    ");
        printf("请先选择功能:
    ");
        printf("1.录入学生信息
    ");
        printf("2.打印学生信息
    ");
        printf("3.查询学生信息
    ");
        printf("4.删除学生
    ");
        printf("5.综合排序
    ");
        printf("6.读数据到文件
    ");
        printf("7.读文件到内存
    ");
        char ch=getch();
    
        switch(ch) {
            case '1':
              Input_Message();
         break;
            case '2':
            Print_Info();
        break;
            case '3':
            printf("请选择查询方式:1.通过学号查询.2.通过姓名查询
    ");
            int x;
            scanf("%x",&x);
            if(x==1)
            {
                int temp;
                printf("请输入学号:");
                scanf("%d",&temp);
               Node*t= Find_By_Number(temp);
               if(t==NULL)break;
               printf("该学生信息情况如下
    ");
               Print_Single(t);
            }
            else {
                char name[20];
                scanf("%s",name);
               Node*t= Find_By_Name(name);
               if(t==NULL)break;
               Print_Single(t);
            }
        break;
            case '4':
                printf("请输入要删除的学生学号:");
                int id;
                scanf("%d",&id);
                Node *cur=Find_By_Number(id);
                if(cur==NULL)break;
                Del_Stu(id);
        break;
        case '5':
            a=GetLength(head);
            Result(head,a);
            break;
        case '6':
            printf("请输入文件的名字:");
            scanf("%s",filename);
             Write_File(filename);
            break;
          case '7':
            Read_File(filename);
            Print_Info();
            break;
        }
    }
    
        return 0;
    }
  • 相关阅读:
    python __path__ 变量
    mysql-5.7.9 shutdown 语法详解
    scikit-learn随机森林调参小结
    supervisor安装部署文档和管理实例
    随机森林种类及区别--g1
    决策树算法原理--good blog
    各种排序算法的时间复杂度
    【Django2.0】python manage.py makemigrations 和 python manage.py migrate的区别
    使用Apollo做配置中心
    lock in share mode 和 select for update
  • 原文地址:https://www.cnblogs.com/SunShine-gzw/p/14018620.html
Copyright © 2020-2023  润新知