zoukankan      html  css  js  c++  java
  • c语言数据与算法学生管理系统 可运行

    #include "stdio.h"
    #define MAX_SIZE 11
    #include "stdlib.h"
    #include "malloc.h" 
    #include "string.h" 
    typedef struct 
     {
         int id;
         char name[10];
         char sex;
         float math_score;
         float chinese_score;
         float other_score;
         char address[30];
         char contact[20];
     }Student;
     typedef struct
     {
         Student data[MAX_SIZE];
         int last;
     }SeqList; 
    
    int getNo(SeqList *SL)
     { 
         int i ,ch=1,j;    
          int no; 
          while(1) 
        { 
            
            printf("请输入学号1000-9999:");
               scanf("%d",&no); 
            for(i=1;i<=SL->last;i++)
            {      
                if(no==SL->data[i].id||no<1000||no>9999)
                    {
                     printf("输入错误或学号重复!
    ");ch=0;break;
                    }
                    else
                    {
                        ch=1;
                    }
    
            }
            if(ch==1)return no;    
        } 
    
    }
    
    char getSex()
    
    {  
      char sex;
      while(1)
      {
        fflush(stdin);
        printf("请输入性别(M或F):");
        scanf("%c",&sex);  
        if(sex=='M'||sex=='F'||sex=='m'||sex=='f')
           break;
        else
          printf("输入错误,您只能输入字符M(男)或者F(女)!
    ");       
      }
      return sex;
     } 
     float get_math(SeqList *SL)
     {
         float math;
        while(1)
        {
            printf("请输入数学成绩0-100:");
            scanf("%f",&math);
            if(math>=0.0&&math<=100)break;
            printf("输入错误,请重新输入!
    ");
        }
        return math;
     }
     float get_chinese(SeqList *SL)
     {
         float math;
        while(1)
        {
            printf("请输入语文成绩0-100:");
            scanf("%f",&math);
            if(math>=0.0&&math<=100)break;
            printf("输入错误,请重新输入!
    ");
        }
        return math;
     }
     float get_other(SeqList *SL)
     {
         float math;
        while(1)
        {
            printf("请输入其他成绩0-100:");
            scanf("%f",&math);
            if(math>=0.0&&math<=100)break;
            printf("输入错误,请重新输入!
    ");
        }
        return math;
     }
    Student getStudent(SeqList *SL) // 顺序表的输入 
    {
        Student s1;
        s1.id = getNo(SL);
        printf("请输入姓名:");
        scanf("%s",s1.name);
        s1.math_score=get_math(SL);
        s1.chinese_score=get_chinese(SL); 
        s1.other_score=get_other(SL); 
        s1.sex = getSex();
        printf("请输入地址:");
        scanf("%s",s1.address);
        printf("请输入联系方式:");
        scanf("%s",s1.contact);
        return s1;
    } 
     menu()     //菜单 
     {
             system("cls");
             printf("*******************************************************************************
    
    ");
             printf("***********************************学生管理************************************
    
    ");
             printf("*******************************************************************************
    
    ");
    
             printf("			      1.输入学生信息
    ");
             printf("			      2.输出学生信息
    ");
             printf("			      3.删除学生信息
    ");
             printf("			      4.插入学生信息
    ");
             printf("			     5.查找学生信息
    ");
             printf("			     6.修改学生信息
    ");
             printf("			     7.保存学生信息
    ");
             printf("			     8.退出学生信息
    ");
             
    
     }
     SeqList  * init_SeqList() //初始化 
    { 
        SeqList   *L;
       L = (SeqList  *) malloc (sizeof(SeqList));//申请空间 
       L ->last =0; 
       return  L; 
    }
    int  isFull(SeqList *SL)//是否为满 
     { 
        if(SL->last == MAX_SIZE)
        {  printf("满了,加不了啦!
    "); 
           return 1; 
        } 
        return 0;
    }
     add_SeqList(SeqList *SL)//输入学生信息 
     {
        if(isFull(SL)) 
        {
            printf("抱歉没有空间添加!");
            return ;
        }
        else
        { 
            SL->last++;
            SL->data[SL->last]=getStudent(SL);  
            printf("添加成功");
        }
     }
     show_SeqList(SeqList *SL)//输出学生信息 
     {
        int i;
        Student *L;
        char s[4],ch_[30];    
        if(SL->last==0)  //是否为空
        {
            printf("没有数据!");
            return;
        }  
        else
        for(i=1;i<=SL->last;i++)
        {   
            printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
        }                                                                                                                                                                                  
        
     }
     delet_SeqList(SeqList *SL) // 删除学生信息 
     {
         int i,ch,id=0;
         char ch_;
         char ch_id[30];
             printf("			请输入您要删除方式:
    ");
             printf("		1.学号删除:
    ");
             printf("		2.姓名删除:
    ");
             printf("		3.地址删除:
    ");
             printf("		4.手机号删除:
    ");
             printf("		5.返回
    ");
             scanf("%d",&ch);
             if(ch==1)
            {
                printf("请输入您要删除信息的学号:");
                scanf("%d",&ch);
             for(i=1;i<=SL->last;i++)
                 {
                     if(ch==SL->data[i].id)
                     {
                         system("cls");
                         fflush(stdin);
                         printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                        printf("确定删除y/n?
    ");
                        scanf("%c",&ch_);
                        if(ch_=='y'||ch_=='Y')
                        {
                            SL->data[i]=SL->data[i+1];
                            SL->last--;
                             printf("删除成功!");
                         }
                         id++;
                    }  
                }
                if(id==0)printf("没有该学生信息!");
            }
            else if(ch==2)
            {
                printf("请输入您要删除信息的姓名:");
                scanf("%s",ch_id);
                for(i=1;i<=SL->last;i++)
                {        
                    if(strcmp(ch_id,SL->data[i].name)==0)
                    {
                        system("cls");
                         fflush(stdin);
                         printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                        printf("确定删除y/n?
    ");
                        scanf("%c",&ch_);
                        if(ch_=='y'||ch_=='Y')
                        {
                            SL->data[i]=SL->data[i+1];
                            SL->last--;
                             printf("删除成功!");
                         }
                         id++;
                     }
                         
                } 
                    if(id==0)printf("没有该学生信息!"); 
            }
            else if(ch==3)
            {
                printf("请输入您要删除信息的地址:");
                scanf("%s",ch_id);
             for(i=1;i<=SL->last;i++)
                 {
                     if(strcmp(ch_id,SL->data[i].address)==0)
                     {
                         system("cls");
                         fflush(stdin);
                         printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                        printf("确定删除y/n?
    ");
                        scanf("%c",&ch_);
                        if(ch_=='y'||ch_=='Y')
                        {
                            SL->data[i]=SL->data[i+1];
                            SL->last--;
                             printf("删除成功!");
                         }
                         id++;
                    }  
                }
                if(id==0)printf("没有该学生信息!");
            }
            else if(ch==4)
            {
                printf("请输入您要删除信息的手机号:");
                scanf("%s",ch_id);
             for(i=1;i<=SL->last;i++)
                 {
                 if(strcmp(ch_id,SL->data[i].contact)==0)
                     {
                         system("cls");
                         fflush(stdin);
                         printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                        printf("确定删除y/n?
    ");
                        scanf("%c",&ch_);
                        if(ch_=='y'||ch_=='Y')
                        {
                            SL->data[i]=SL->data[i+1];
                            SL->last--;
                             printf("删除成功!");
                         }
                         id++;
                    }  
                }
                if(id==0)printf("没有该学生信息!");
            }
                else
        {
            printf("按任意键返回");return; 
        } 
        
    
             return 1;
     } 
     insert_SeqList(SeqList *SL,int i )//插入学生信息 
     {
            printf("输入你要插入的位置:");
            scanf("%d",&i);
            int j;
            if(i<1||i>SL->last)
            {
                printf("插入的序号有错");
                return 0;}
            for(j=i;j<SL->last;j++)
                SL->data[j+1]=SL->data[j];
            SL->data[i]=getStudent(SL);
            printf("插入成功");
            SL->last++;  
            return 1;
     }
     find_SeqList(SeqList *SL) //查找学生信息 
     {
         int i,ch ,id=0;
         char ch_[10]; 
         if(SL->last==0) 
        {
            printf("没有数据!查找不了!");
            return;
        }  
         printf("			请输入您要查找的学生的方式:
    ");
         printf("		1.学号查找:
    ");
         printf("		2.姓名查找:
    ");
         printf("		3.地址查找:
    ");
         printf("		4.手机号查找:
    ");
         printf("		5.返回
    ");
        scanf("%d",&ch);
        if(ch==1)
        {
            
            printf("请输入学号:
    ");
            scanf("%d",&ch);
             for(i=1;i<=SL->last;i++)
                if(ch==SL->data[i].id)
                    {
                        printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                         id++;
                    }
                if(id==0)printf("无法查到!"); 
                    
            
            
        }
        else if(ch==2)
        {
            printf("请输入姓名:
    ");
            scanf("%s",ch_);
            for(i=1;i<=SL->last;i++)
                if(strcmp(SL->data[i].name,ch_)==0)
                    {
                        printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                         id++;
                }
            if(id==0)printf("无法查到!"); 
        
        }
        else if(ch==3)
        {
            printf("请输入地址:
    ");
            scanf("%s",ch_);
            for(i=1;i<=SL->last;i++)
                if(strcmp(SL->data[i].address,ch_)==0)
                    {
                        printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                         id++;
                    }
            if(id==0)printf("无法查到!"); 
        }
        else if(ch==4)
        {
            printf("请输入手机号:
    ");
            scanf("%s",ch_);
            for(i=1;i<=SL->last;i++)
                if(strcmp(SL->data[i].contact,ch_)==0)
                    {
                        printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                         id++; 
                    }
            if(id==0)printf("无法查到!");                                                                                                                                                                                                                                                                   
            
        }
        else
        {
            printf("按任意键返回");return; 
        } 
        
        
    
     }
    isEmpty(SeqList *SL)
    {
        if(SL->last == 0)
        {
            printf("没有数据!");
            return 1;
        }
        else return 0;
    }
    int opan_file(SeqList *SL)   //读取学生信息 
    {
        FILE *fp;
        if((fp=fopen("student.txt","rb"))==NULL)
        {
            printf("打开文件失败!
    ");
            system("pause");
            exit(1);
        }
        do
        {
            SL->last++;
        }while(fread(&SL->data[SL->last],sizeof(Student),1,fp)==1);
        SL->last--;
        fclose(fp);    
    }
    int save_file(SeqList *SL)         //保存学生信息 
    {
           FILE *fp;
           int i;
           if((fp=fopen("student.txt","wb"))==NULL)
           {
               printf("打开文件失败
    ");
               exit(1);
           }
           for(i=1;i<=SL->last;i++)
           {
               if(fwrite(&SL->data[i],sizeof(Student),1,fp))
                    printf("第%d组信息保存成功
    ",i);    
           }
           fclose(fp);
    }
    
    amend(SeqList *SL)               //修改学生信息 
    {
            Student s1;
             int no,i,d=0,flag,ch;
             char name[10],address[10],contact[10]; 
             printf("请输入您要修改的学生信息学号:");
             scanf("%d",&no) ;
             for(i=1;i<=SL->last;i++)
                    if(no==SL->data[i].id)
                        {   
                            system("cls");
                            printf("			学号:%d
    			姓名:%s 
    			性别:%c  
    			数学分数:%.2f
    			语文分数:%.2f
    			其他分数:%.2f 
    			地址:%s
    			联系方式%s
    
    
    ",SL->data[i].id,SL->data[i].name,SL->data[i].sex,SL->data[i].math_score,SL->data[i].chinese_score,SL->data[i].other_score,SL->data[i].address,SL->data[i].contact);
                             d++; 
                             flag=i;
                             
                        }
            if(d==0)
            {
                printf("没有该学生信息!");
                return 0; 
            }   
            printf("		1.学号修改:
    ");
            printf("		2.姓名修改:
    ");
            printf("		3.地址修改:
    ");
            printf("		4.手机号修改:
    ");
            printf("		5.性别修改:
    ");
            printf("		6.语文分数修改:
    ");
            printf("		7.数学分数修改:
    ");
            printf("		8.其他分数修改:
    ");
            printf("		9.返回
    "); 
            printf("			请输入您要修改的内容:
    ");
            scanf("%d",&ch);
            fflush(stdin);
            if(ch==1)
            {
                 SL->data[flag].id=getNo(SL);
                 printf("修改成功 ") ;
            }
            else if(ch==2)
            {
                printf("请输入姓名:");
                scanf("%s",name);
                strcpy(SL->data[flag].name,name);
                printf("修改成功 ") ;
            }
            else if(ch==3)
            {
                  printf("请输入地址:");
                    scanf("%s",address);
                  strcpy(SL->data[flag].address,address);
                  printf("修改成功 ") ;
            }
            else if(ch==4)
            {
                printf("请输入联系方式:");
                scanf("%s",contact);
                strcpy(SL->data[flag].contact,contact);
                printf("修改成功 ") ;
            }
            else if(ch==5)
            {
                SL->data[flag].sex=getSex();
                printf("修改成功 ") ;
                
            }
            else if(ch==6)
            {
                 SL->data[flag].chinese_score=get_chinese(SL); 
                 printf("修改成功 ") ;
            }
            else if(ch==7)
            {
                 SL->data[flag].math_score=get_math(SL); 
                 printf("修改成功 ") ;
            }
            else if(ch==8)
            {
                 SL->data[flag].other_score=get_other(SL); 
                 printf("修改成功 ") ;
            }
            else
            {
                return 0;
                
            } 
            
    }
     
     main()
     {      
         SeqList *SL;
         int a,i;
         int id;
         SL=init_SeqList();
         opan_file(SL);
         while(1)
         {
             menu();
             scanf("%d",&a);
             
             if(a==1)
             {
                  add_SeqList(SL);
             } 
             else if(a==2)
             {
                   show_SeqList(SL);
                    
             }
             else if(a==3)
             {    
                  system("cls");
                 delet_SeqList(SL);
             }
             else if(a==4)
             {
                 insert_SeqList(SL, i);
             }
             else if(a==5)
             {
                  system("cls") ;
                find_SeqList(SL);
             }
             else if(a==6)
             {
                    amend(SL); 
             }
              else if(a==7)
             {
                  
                 save_file(SL);
             }  
             else return 0;
             getch();  
         }
         
         
     }
  • 相关阅读:
    18、【opencv入门】形态学图像处理(一):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
    17、【opencv入门】形态学图像处理(一):膨胀与腐蚀
    16、【opencv入门】创建Trackbar & 图像对比度、亮度值调整
    c++ 售货员的难题
    c++ 火柴棒等式
    c++ 素数圈
    c++ 分解数
    c++ 走迷宫
    c++ 二叉树遍历
    c++ n皇后问题
  • 原文地址:https://www.cnblogs.com/doublekai/p/6555847.html
Copyright © 2011-2022 走看看