| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1299 人关注过本帖
标题:学生成绩管理系统第一个函数就卡住了,,大家帮看看
只看楼主 加入收藏
不是不可能
Rank: 2
等 级:论坛游民
帖 子:20
专家分:23
注 册:2011-9-1
收藏
得分:0 
struct student *p;
每使(输入)用一次要申请开辟空间 p = (struct student *)malloc(sizeof(struct student));
最后在free(p)
2011-09-30 23:24
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我看楼主的这个程序是抄出来的。不说你不会接收键盘选择菜单,就那个学生数组就不该那样写,已强制为定长数组,还弄成链表结构干嘛,显见不是自己设计出来的。麻烦还在后头呢,嘿嘿~

[ 本帖最后由 TonyDeng 于 2011-10-1 01:45 编辑 ]

授人以渔,不授人以鱼。
2011-10-01 01:44
鸿飞冥冥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2011-8-14
收藏
得分:0 
回复 12楼 TonyDeng
是我一个字一个字打出来的,不是抄的.结构体里用设个链表只是想尝试下用链表这种方法处理一样的问题,至于那个指针不是在定义结构体的时候,成员大小个数和结构体数组个数都已经给出了吗,,干吗还每用一次都要开辟新空间呢,,望指教
最后补一句:我显然是个激进派的

Sickcat
2011-10-01 08:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
定义了数组,就已经预先分配了空间,数组的每个元素都是那个结构体的大小,不用再分配空间。要动态分配空间,应定义指针数组,数组中每个元素是指向那个结构体类型的指针。

[ 本帖最后由 TonyDeng 于 2011-10-1 09:02 编辑 ]

授人以渔,不授人以鱼。
2011-10-01 08:44
鸿飞冥冥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2011-8-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 50             /***定义有50个学生***/
struct student
{ 
    char num[10];
    char name[20];
    float score[4];
    float aver;
}stu[N];
void input(void)
{
    int j,i,q=0;
    char c;
    struct student *p;
    p=stu;
    for(i=0;i<N;i++,p++)
    {
        printf("请输入%d学生的成绩:\n",i+1);
         printf("请输入学号:\n");
        scanf("%s",p->num);
        printf("请输入姓名:\n");
        scanf("%s",p->name);
        for(j=0;j<4;j++)
        {
            printf("请输入第%d科成绩:\n",j+1);
             scanf("%f",&p->score[j]);
        }
        p->aver=aver(p);
        printf("是否继续输入(Y/N)?");
        getchar();
        c=getchar();
        if(c=='N'||c=='n')break;
     }
}
void name_s(struct student *p,char name)
{
    char q=1;
    for(p=stu;p<p+N;p++)
    {
    if(strcmp(name,p->name)==0)
    {    
        printf("%s  %s  %3.2f  %3.2f  %3.2f  %3.2f  %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
        q=0;
    }
    }
    if(q==1)puts("查找不到这个姓名!\n");
}
void num_s(void)
{
    int q=0;
    struct student *p;
    char num[10];
    printf("请输入要查询学号:\n");
    scanf("%s",num);
    for(p=stu;p<p+N;p++)
    {
    if(strcmp(num,p->num)==0)
    printf("%s  %s  %3.2f  %3.2f  %3.2f  %3.2f  %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
    q=1;break;
     }
    if(q!=1)printf("查找不到这个学号!\n");
}
float aver(struct student *p)
{
    float s=0.0;
    int i;
    for(i=0;i<4;i++)
    s+=p->score[i];
    return(s/4);
}
void dysc(void)
{
    int i=1;
    struct student *p;
    printf("输出的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n");
    for(p=stu;p<p+N;p++)
    printf("%s  %s  %3.2f  %3.2f  %3.2f  %3.2f  %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
}    
void main()
{
    int n;
    char name[20],num[10];
     do
     {     
          printf(" 主菜单\n");
          printf("======================\n");
          printf(" 1.输入学生成绩\n"); 
          printf(" 2.按姓名查询学生成绩\n");
          printf(" 3.按学号查询学生成绩\n");
          printf(" 4.打印输出成绩\n");
          printf(" 0.退出系统\n");
          printf("======================\n");
          printf(" 请选择(0~4):\n");
          scanf("%d",&n);  
          switch(n)
          {
               case 0:break;
               case 1:system("cls");
                          input();
                    break;
               case 2:system("cls");
                      printf("请输入要查询姓名:\n");
                         scanf("%s",name);
                      name_s(stu,name);
                      break;
               case 3:num_s();break;
               case 4:dysc();break;
              default:printf("输入错误,请重新输入\n");break;
          }
     }
     while(n!=0);
     printf("谢谢使用\n");
} 

帮看看那个按姓名查询的函数就是用不了是个神马情况

Sickcat
2011-10-01 08:59
鸿飞冥冥
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:48
专家分:124
注 册:2011-8-14
收藏
得分:0 
总算搞完了,,哈哈,,
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 50             /***定义有50个学生***/
struct student
{ 
    char num[10];
    char name[20];
    float score[4];
    float aver;
}stu[N];
void scan(void)
{
    int j,i,q=0;
    char c;
    struct student *p;
    p=stu;
    for(i=0;i<N;i++,p++)
    {
        printf("请输入%d学生的成绩:\n",i+1);
         printf("请输入学号:\n");
        scanf("%s",p->num);
        printf("请输入姓名:\n");
        scanf("%s",p->name);
        for(j=0;j<4;j++)
        {
            printf("请输入第%d科成绩:\n",j+1);
            scanf("%f",&p->score[j]);
        }
        p->aver=avero(p);
        printf("是否继续输入(Y/N)?");
        getchar();
        c=getchar();
        if(c=='N'||c=='n')break;
     }
}
void name_s(struct student *p,char *name)
{
    int i;
    char q=1;
    p=stu;
    for(i=0;i<N;i++,p++)
    {
    if(strcmp(name,p->name)==0)
    {    
        printf("该生的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n");
        printf("      %s   %s     %3.2f      %3.2f      %3.2f      %3.2f     %3.2f\n",
            p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
        q=0;
    }
    }
    if(q==1)puts("查找不到这个姓名!\n");
}
void num_s(struct student *p,char *num)
{
    int i;
    char q=1;
    p=stu;
    for(i=0;i<N;i++,p++)
    {
    if(strcmp(num,p->num)==0)
    {
        printf("该生的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n");
        printf("     %s    %s   %3.2f      %3.2f      %3.2f      %3.2f      %3.2f\n",
            p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
    q=0;
    }
     }
    if(q==1)puts("查找不到这个学号!\n");
}
float avero(struct student *p)
{
    float s=0.0;
    int i;
    for(i=0;i<4;i++)
    s+=p->score[i];
    return(s/4.0);
}
void input(void)
{
    int i=0;
    struct student *p;
    p=stu;
    printf("No.:学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n");
    for(i=0;i<N;i++,p++)
    {
        if(p->aver==0)break;
        printf("%d  %s   %s   %3.2f      %3.2f       %3.2f     %3.2f      %3.2f\n",i+1,
    p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver);
    }
}    
void main()
{
    int n;
    char name[20],num[10];
     do
     {     
          printf(" 主菜单\n");
          printf("======================\n");
          printf(" 1.输入学生成绩\n"); 
          printf(" 2.按姓名查询学生成绩\n");
          printf(" 3.按学号查询学生成绩\n");
          printf(" 4.打印输出成绩\n");
          printf(" 0.退出系统\n");
          printf("======================\n");
          printf(" 请选择(0~4):\n");
          scanf("%d",&n);  
          switch(n)
          {
               case 0:break;
               case 1:system("cls");
                          scan();
                    break;
               case 2:system("cls");
                      printf("请输入要查询姓名:\n");
                      scanf("%s",name);
                      name_s(stu,name);
                      break;
               case 3:system("cls");
                      printf("请输入要查询学号:\n");
                      scanf("%s",num);
                      num_s(stu,num);
                      break;
               case 4:system("cls");
                      input();
                      break;
              default:printf("输入错误,请重新输入\n");break;
          }
     }
     while(n!=0);
     printf("谢谢使用\n");
} 

Sickcat
2011-10-01 09:53
快速回复:学生成绩管理系统第一个函数就卡住了,,大家帮看看
数据加载中...
 
   



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

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