| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1258 人关注过本帖
标题:求助求助求助
只看楼主 加入收藏
瘦不了噜er
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:135
注 册:2016-6-14
结帖率:91.67%
收藏
已结贴  问题点数:10 回复次数:5 
求助求助求助
程序代码:
#include<stdio.h>
#include<conio.h>





 typedef struct student {    
    char id[8];          /*学号*/  
    char name[8];         /*姓名*/ 
    char sex[2];          /*性别*/   
    int  yuwen ;          /*语文成绩*/  
    int  shuxue;          /*数学成绩*/ 
    int  yingyu;          /*英语成绩 */  
    float sum;            /*个人总成绩*/   
    float ave;            /*个人平均成绩*/ 
};


 /*声明数组及学生数量*/

 struct student s[30];

 int num=0;


void choose();  /*选择菜单*/ 
void creat(); /* 创建学生的资料 */ 
void add();   /*追加学生的资料*/ 
void search();   /*查询学生的成绩*/ 
void alter();  /*修改学生的资料*/ 
void del();  /*删除学生的资料*/  
void statistics();  /*统计学生的成绩*/ 
void sort();  /*对学生资料进行排序*/ 
void print();   /* 输出显示学生的资料 */ 
void student_information();
int SearchByName(char name[]) ;
void WriteInfo();
void ReadInfo() ;


void main(){

    int x;

 
    printf("欢迎登陆学生管理系统\n");

    printf("\n\n\n\n欢迎使用学生管理系统!\n");
  

   ReadInfo(); 


     while(1)
     {


        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("9. 退出\n"); 


 

        printf("请输入您要选择的功能(1-9):\n");
        
        scanf("%d",&x);


        getchar();
        
         switch(x) 

         { 

         case 1: 

            printf("选中了1.创建学生的资料\n");
            creat(); break; 
         
         case 2: 

 
             printf("选中了2.追加学生的资料\n");
             add();break; 

  
         case 3:  
             
             printf("选中了3.修改学生的资料\n");
             alter();  break; 

  
         case 4: 
    
             printf("选中了4.查询学生的成绩\n");
             search();break;

  

         case 5: 

            printf("选中了5.删除学生的资料\n");
            del();break;

 
  

         case 6: 

             printf("选中了6.统计学生的成绩\n");
             statistics();break;

  
         case 7: 

              printf("选中了7.对学生平均成绩进行排序\n");
              sort();break;

         case 8: 

              printf("选中了8.输出显示学生的资料\n");
              print();break;
        
        
         case 9:
            printf("退出\n");
            exit(0);
            break;
        }
      WriteInfo();
    }

     

}
    void creat()  /* 创建学生的资料 */ 
    {
        while(1)
        {
            printf("请输入学号:\n");
            scanf("%d",&s[num].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s",s[num].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s",s[num].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d",&s[num].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d",&s[num].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d",&s[num].yingyu);
            getchar();

            num++;


            printf("是否继续输入学生信息(y/n):\n");
            if(getchar()=='n')
            {
                break;

            }

        }
    }

    void add()/*追加学生的资料*/ 
    {   
        
        while(1)
        {
            char Name[20];
            int i=0;    

            printf("请输入要追加学生信息的姓名:\n");
            scanf("%s",&Name);

 
            getchar();
            i=SearchByName(Name);
        
            if(i==-1)
    
            {
            printf("该学生不存在!\n");
        
            }
            else
            {
            printf("您要追加的学生信息为:\n");
            student_information(i);


            printf("请输入您要追加的学生信息为:\n");


            printf("请输入学号:\n");
            scanf("%d",&s[i].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s",s[i].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s",s[i].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d",&s[i].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d",&s[i].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d",&s[i].yingyu);
            getchar();
            }

            printf("是否继续追加学生信息(y/n):\n");
            
            if(getchar()=='n')
            {
                break;

            }

        }
    }


    void search()   /*查询学生的成绩*/ 
    {

        while(1)
        {

        char Name[20];
        int i=0;

        printf("请输入您要查询的学生姓名:\n");
        scanf("%s",&Name);
        
        getchar();

        i=SearchByName(Name);
        if(i==-1)
        {
            printf("该学生不存在!\n");
        }
        else
        {
            printf("您要查询的信息为:\n");
            student_information(i);
        }

    
        printf("是否继续查询?(y/n):\n");
        if(getchar()=='n')
        {
            break;
        }
        }
    
    }


    void alter()  /*修改学生的资料*/ 
    {
        while(1)
        {
            char Name[20];
            int i;

            printf("请输入您要查询的学生姓名:\n");
            scanf("%s",&Name);
        
            getchar();

            i=SearchByName(Name);
            if(i==-1)
            {
            printf("该学生不存在!\n");
            }
            else
            {
            printf("请输入您要修改的信息:\n");

            printf("请输入学号:\n");
            scanf("%s",&s[i].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s",s[i].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s",s[i].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d",&s[i].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d",&s[i].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d",&s[i].yingyu);
            getchar();
            }

            printf("是否继续修改学生信息(y/n):\n");
            
            if(getchar()=='n')
            {
                break;

            }

        }
    }

    void del()  /*删除学生的资料*/  
    {
        int j;
        while(1)
        {

        char Name[20];
        int i=0;

        printf("请输入您要删除的学生姓名:\n");
        scanf("%s",&Name);
        
        getchar();

        i=SearchByName(Name);
        if(i==-1)
        {
            printf("该学生不存在!\n");
        }
        else
        {
            printf("您要删除的信息为:\n");
            student_information(i);
        }

    
        printf("是否确认删除?(y/n):\n");

        if(getchar()=='y')
        {
            for(j=i;j<sizeof(s)-1;j++)
                s[i]=s[i+1];
        }


        else{

        printf("是否继续删除?(y/n)\n");

        if(getchar()=='n')
        {
                break;

        }
        
        }
    }
    }


 void student_information() 

  

  { 
        printf("学号:%d\n", s[num].id);
        printf("姓名:%s\n", s[num].name);
        printf("性别:%s\n", s[num].sex);
        printf("高数成绩:%d\n",s[num].shuxue);
        printf("英语成绩:%d\n", s[num].yingyu);
        printf("语文成绩:%d\n", s[num].yuwen);
        printf("平均成绩:%f\n", s[num].ave);

  

} 

  


    void statistics() /*统计学生的成绩*/ 
    {
        int i;
        for (i = 0; i<sizeof(s); i++)
         {
             s[i].ave = (float)(s[i].shuxue+s[i].yingyu+s[i].yuwen)/ 4;
             printf("输出第%d个同学的平均成绩:%f\n", i+1, s[i].ave);
         }
     }


    void sort() /*对学生资料进行排序*/ 
    {
         int i,j; 

         struct student tmp={0}; 

     for (i=0;i<sizeof(s);i++) 

     { 
         for (j=0;j<sizeof(s);j++) 

         { 
              if (s[j].ave<s[j+1].ave) 

              {
                  tmp=s[j]; s[j]=s[j+1]; s[j+1]=tmp;     } 

         } 

     }
    
    }




    void print()   /* 输出显示学生的资料 */ 
    {
   
        int i;
         for (i = 0; i < sizeof(s); i++) {
             printf("学号:%d\n", s[i].id);
             printf("姓名:%s\n", s[i].name);
             printf("性别:%s\n", s[i].sex);
             printf("数学成绩:%d\n", s[i].shuxue);
             printf("英语成绩:%d\n",s[i].yingyu);
             printf("语文成绩:%d\n", s[i].yuwen);
             printf("平均成绩:%f\n", s[i].ave);


         }

     }

    int SearchByName(char Name[]) 
{ 
     int i; 
     for (i=0;i<sizeof(s);i++) 
     { 
          if (strcmp(s[i].name,Name)==0) 
         { 
             return i;
         } 
     }   
             return -1; 

} 

  
/*将学生信息从文件读出*/ 

  

void ReadInfo() 

{ 
     FILE *fp; 

     int i; 

     if ((fp=fopen("Database.txt","rb"))==NULL) 

     { 
         printf("不能打开文件!\n"); 

         return; 
     } 
     if (fread(&i,sizeof(int),1,fp)!=1) 

     { 

         i=-1; 

     } 

     else 
     { 
         for(i=0;i<sizeof(s);i++) 

         { 
             fread(&s[i],sizeof(struct student),1,fp); 
         } 
     } 

     fclose(fp); 

} 

  

   

  

/*将学生信息写入文件*/ 

  

void WriteInfo() 

{ 

     FILE *fp; 
     int i; 

     if ((fp=fopen("Database.txt","wb"))==NULL) 

     { 
         printf("不能打开文件!\n"); 
         return; 
     } 

     if (fwrite(&num,sizeof(int),1,fp)!=1) 

     { 
         printf("写入文件错误!\n"); 

     } 

     for (i=0;i<num;i++) 

     { 
        if (fwrite(&s[i],sizeof(struct student),1,fp)!=1) 

         { 
              printf("写入文件错误!\n"); 
         } 

     }     


 
     fclose(fp); 
} 

  




好像查询功能有问题,
然后也创建的学生信息没有保存。

还有 如果想输多少存多少个该怎么定义数组,我用8查看所有学生的信息是输出30个成员信息。。。如果只创建一个怎么样才能只显示一个?
2016-06-22 17:09
寂兮廖兮
Rank: 2
等 级:论坛游民
帖 子:22
专家分:27
注 册:2016-6-13
收藏
得分:0 
好多行啊。。。。
不过你求助什么
2016-06-22 17:32
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:10 
程序代码:
#include<stdio.h>
#include<conio.h>
#include<string.h>



typedef struct student {
    char id[8];          /*学号*/
    char name[8];         /*姓名*/
    char sex[2];          /*性别*/
    int  yuwen;          /*语文成绩*/
    int  shuxue;          /*数学成绩*/
    int  yingyu;          /*英语成绩 */
    float sum;            /*个人总成绩*/
    float ave;            /*个人平均成绩*/
};

/*声明数组及学生数量*/
struct student s[30];
int num = 0;


void choose();  /*选择菜单*/
void creat(); /* 创建学生的资料 */
void add();   /*追加学生的资料*/
void search();   /*查询学生的成绩*/
void alter();  /*修改学生的资料*/
void del();  /*删除学生的资料*/
void statistics();  /*统计学生的成绩*/
void sort();  /*对学生资料进行排序*/
void print();   /* 输出显示学生的资料 */
void student_information();
int SearchByName(char name[]);
void WriteInfo();
void ReadInfo();


void main() {

    int x;

    printf("欢迎登陆学生管理系统\n");

    printf("\n\n\n\n欢迎使用学生管理系统!\n");


    ReadInfo();


    while (1)
    {


        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("9. 退出\n");



        printf("请输入您要选择的功能(1-9):\n");

        scanf("%d", &x);


        getchar();

        switch (x)

        {

        case 1:

            printf("选中了1.创建学生的资料\n");
            creat(); 
            WriteInfo();
            break;

        case 2:

            printf("选中了2.追加学生的资料\n");
            add(); 
            WriteInfo();
            break;


        case 3:

            printf("选中了3.修改学生的资料\n");
            alter();  
            WriteInfo();
            break;


        case 4:

            printf("选中了4.查询学生的成绩\n");
            search(); break;



        case 5:

            printf("选中了5.删除学生的资料\n");
            del(); 
            WriteInfo();
            break;



        case 6:

            printf("选中了6.统计学生的成绩\n");
            statistics(); break;


        case 7:

            printf("选中了7.对学生平均成绩进行排序\n");
            sort(); 
            WriteInfo();
            break;

        case 8:

            printf("选中了8.输出显示学生的资料\n");
            print(); break;


        case 9:
            printf("退出\n");
            exit(0);
            break;
        }
        
    }



}
void creat()  /* 创建学生的资料 */
{
    while (1)
    {
        printf("请输入学号:\n");
        scanf("%s", &s[num].id);
        getchar();

        printf("请输入姓名:\n");
        scanf("%s", s[num].name);
        getchar();

        printf("请输入性别:\n");
        scanf("%s", s[num].sex);
        getchar();

        printf("请输入数学成绩:\n");
        scanf("%d", &s[num].shuxue);
        getchar();

        printf("请输入语文成绩:\n");
        scanf("%d", &s[num].yuwen);
        getchar();

        printf("请输入英语成绩:\n");
        scanf("%d", &s[num].yingyu);
        getchar();

        num++;


        printf("是否继续输入学生信息(y/n):\n");
        if (getchar() == 'n')
        {
            break;

        }

    }
}

void add()/*追加学生的资料*/
{

    while (1)
    {
        char Name[20];
        int i = 0;

        printf("请输入要追加学生信息的姓名:\n");
        scanf("%s", &Name);

        getchar();
        i = SearchByName(Name);

        if (i == -1)

        {
            printf("该学生不存在!\n");

        }
        else
        {
            printf("您要追加的学生信息为:\n");
            student_information(i);


            printf("请输入您要追加的学生信息为:\n");


            printf("请输入学号:\n");
            scanf("%s", &s[i].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s", s[i].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s", s[i].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d", &s[i].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d", &s[i].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d", &s[i].yingyu);
            getchar();
        }

        printf("是否继续追加学生信息(y/n):\n");

        if (getchar() == 'n')
        {
            break;

        }

    }
}


void search()   /*查询学生的成绩*/
{

    while (1)
    {

        char Name[20];
        int i = 0;

        printf("请输入您要查询的学生姓名:\n");
        scanf("%s", &Name);

        getchar();

        i = SearchByName(Name);
        if (i == -1)
        {
            printf("该学生不存在!\n");
        }
        else
        {
            printf("您要查询的信息为:\n");
            student_information(i);
        }


        printf("是否继续查询?(y/n):\n");
        if (getchar() == 'n')
        {
            break;
        }
    }

}


void alter()  /*修改学生的资料*/
{
    while (1)
    {
        char Name[20];
        int i;

        printf("请输入您要查询的学生姓名:\n");
        scanf("%s", &Name);

        getchar();

        i = SearchByName(Name);
        if (i == -1)
        {
            printf("该学生不存在!\n");
        }
        else
        {
            printf("请输入您要修改的信息:\n");

            printf("请输入学号:\n");
            scanf("%s", &s[i].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s", s[i].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s", s[i].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d", &s[i].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d", &s[i].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d", &s[i].yingyu);
            getchar();
        }

        printf("是否继续修改学生信息(y/n):\n");

        if (getchar() == 'n')
        {
            break;

        }

    }
}

void del()  /*删除学生的资料*/
{
    int j;
    while (1)
    {

        char Name[20];
        int i = 0;

        printf("请输入您要删除的学生姓名:\n");
        scanf("%s", &Name);

        getchar();

        i = SearchByName(Name);
        if (i == -1)
        {
            printf("该学生不存在!\n");
        }
        else
        {
            printf("您要删除的信息为:\n");
            student_information(i);
        }


        printf("是否确认删除?(y/n):\n");

        if (getchar() == 'y')
        {
            for (j = i; j<sizeof(s) / sizeof(struct student) - 1; j++)
                s[i] = s[i + 1];
        }


        else {

            printf("是否继续删除?(y/n)\n");

            if (getchar() == 'n')
            {
                break;

            }

        }
    }
}

void student_information(int i)



{
    printf("学号:%s\n", s[i].id);
    printf("姓名:%s\n", s[i].name);
    printf("性别:%s\n", s[i].sex);
    printf("高数成绩:%d\n", s[i].shuxue);
    printf("英语成绩:%d\n", s[i].yingyu);
    printf("语文成绩:%d\n", s[i].yuwen);
    printf("平均成绩:%f\n", s[i].ave);



}




void statistics() /*统计学生的成绩*/
{
    int i;
    for (i = 0; i<sizeof(s)/sizeof(struct student); i++)
    {
        s[i].ave = (float)(s[i].shuxue + s[i].yingyu + s[i].yuwen) / 3;
        printf("输出第%d个同学的平均成绩:%f\n", i + 1, s[i].ave);
    }
}


void sort() /*对学生资料进行排序*/
{
    int i, j;

    struct student tmp = { 0 };

    for (i = 0; i<sizeof(s) / sizeof(struct student); i++)

    {
        for (j = 0; j<sizeof(s) / sizeof(struct student); j++)

        {
            if (s[j].ave<s[j + 1].ave)

            {
                tmp = s[j]; s[j] = s[j + 1]; s[j + 1] = tmp;
            }

        }

    }

}




void print()   /* 输出显示学生的资料 */
{

    int i;
    for (i = 0; i < num; i++) {
        printf("学号:%s\n", s[i].id);
        printf("姓名:%s\n", s[i].name);
        printf("性别:%s\n", s[i].sex);
        printf("数学成绩:%d\n", s[i].shuxue);
        printf("英语成绩:%d\n", s[i].yingyu);
        printf("语文成绩:%d\n", s[i].yuwen);
        printf("平均成绩:%f\n", s[i].ave);


    }

}

int SearchByName(char Name[])
{
    int i;
    for (i = 0; i<sizeof(s) / sizeof(struct student); i++)
    {
        if (strcmp(s[i].name, Name) == 0)
        {
            return i;
        }
    }
    return -1;

}


/*将学生信息从文件读出*/



void ReadInfo()

{
    FILE *fp;

    int i;

    if ((fp = fopen("Database.txt", "rb")) == NULL)

    {
        printf("不能打开文件!\n");

        return;
    }
    if (fread(&num, sizeof(int), 1, fp) != 1)

    {

        num = 0;

    }

    else
    {
        for (i = 0; i<sizeof(s) / sizeof(struct student); i++)

        {
            if (fread(&s[i], sizeof(struct student), 1, fp)== 0)
            {
                break;
            }
        }
    }

    fclose(fp);

}







/*将学生信息写入文件*/



void WriteInfo()

{

    FILE *fp;
    int i;

    if ((fp = fopen("Database.txt", "wb")) == NULL)

    {
        printf("不能打开文件!\n");
        return;
    }

    if (fwrite(&num, sizeof(int), 1, fp) != 1)

    {
        printf("写入文件错误!\n");

    }

    for (i = 0; i<num; i++)

    {
        if (fwrite(&s[i], sizeof(struct student), 1, fp) != 1)

        {
            printf("写入文件错误!\n");
        }

    }


    fclose(fp);
}
2016-06-22 17:38
瘦不了噜er
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:135
注 册:2016-6-14
收藏
得分:0 
回复 3楼 grmmylbs
sizeof(s)/sizeof(struct student)


这个是什么意思。。。
2016-06-23 00:24
瘦不了噜er
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:135
注 册:2016-6-14
收藏
得分:0 
回复 3楼 grmmylbs
程序代码:
    void add()/*追加学生的资料*/ 
    {   
        int i;
        
        while(1)
        {
        

            FILE *fp;

            
            fp=fopen("Database.txt","a");
        
            i=num+1;

            printf("请输入您要追加的学生信息:\n");


            printf("请输入学号:\n");
            scanf("%d",&s[i].id);
            getchar();

            printf("请输入姓名:\n");
            scanf("%s",s[i].name);
            getchar();

            printf("请输入性别:\n");
            scanf("%s",s[i].sex);
            getchar();

            printf("请输入数学成绩:\n");
            scanf("%d",&s[i].shuxue);
            getchar();

            printf("请输入语文成绩:\n");
            scanf("%d",&s[i].yuwen);
            getchar();

            printf("请输入英语成绩:\n");
            scanf("%d",&s[i].yingyu);
            getchar();

            i++;

        
            fclose(fp);
            printf("是否继续追加学生信息(y/n):\n");
            if(getchar()=='n')
            {
            break;
            }
        
        }
    
    }

    



能不能看看我的追加有什么问题吗

是想在后面补充新的学生信息。。可是发现没有保存
2016-06-24 01:01
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
需要调用void WriteInfo()写入吧。你只是打开了文件,没有往里写。调用void WriteInfo()的话就没必要在这里打开文件了。
2016-06-24 09:05
快速回复:求助求助求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047641 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved