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();  
     }
     
     
 }
原文地址:https://www.cnblogs.com/doublekai/p/6555847.html