| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1443 人关注过本帖
标题:学生成绩管理系统问题
只看楼主 加入收藏
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
收藏
已结贴  问题点数:20 回复次数:20 
学生成绩管理系统问题
跟论坛混这么久了 想试着写个学生成绩管理系统。写了一半就出现问题了求解答。
代码如下:
///////////////////////////////////////////////////
            //头文件 & 宏定义//
///////////////////////////////////////////////////

#include  <stdio.h>

#include  <math.h>

#include  <stdlib.h>

#include  <string.h>

#include  <malloc.h>

#include  <windows.h>

#define   N    32       //  最大学生数

int   n  = 0  ;         //  实际存放的学生数

#define   LEN     sizeof(STU)

////////////////////////////////////////////////
                 //结构体//
////////////////////////////////////////////////

typedef   struct   student  

{

    int    StuId;          //  学号

    char   StuName[10];        //  姓名
   
    char   StuSex[4];         //  性别

    float  StuScore[3];    //  三门课(高数、英语、计算机)的成绩   

    float  ScoreTotal;     //  每个学生的总成绩

    float  ScoreAve;       //  每个学生的平均成绩

    struct  student  *next;  //  结构体指针

}STU;


////////////////////////////////////////////////////////////
////////////////////子函数声明//////////////////////////////
////////////////////////////////////////////////////////////


STU   *LinkListInit();        //  链表初始化

void   Menu();                 //  主界面函数

STU   *StuInput();            //  信息录入函数
 
void  StuOutput(STU *);            //  信息输出函数

void  StuSearch(STU *);            //  信息查询函数

void  StuSave(STU *);              //  信息保存函数

STU  *StuLoad();              //  文件数据读取函数


///////////////////////////////////////////////////////////
                    // 主函数模块  //
///////////////////////////////////////////////////////////

int  main()

{   
    STU  *HEAD;

    int  i;  char ch[10];  static  count = 0;

    HEAD  = LinkListInit();     //  表头设置为空

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

    printf("%c", 2);   printf("\n\n");
   
    printf("*****欢迎登录系学生成绩管理系统***\n\n");

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

    printf("%c", 2);   printf("\n\n");

    printf("请输入密码:");      // 密码验证

    gets(ch);  

    if (strcmp(ch, "1") == 0)

        Menu(HEAD);                //  进入主界面

    else  

    {
        count++;       //  登录次数统计

        if (count >= 4)   exit(0); //  退出程序
        
        main();          //  返回主函数
        
    }
   
    return  0;
}

//////////////////  链表初始化模块  ////////////////////

STU  *LinkListInit()

{
      return   NULL;     //   返回空指针
}

////////////////////// 主界面模块  ////////////////////

void   Menu(STU *HEAD)

{
    int  i;

    system("cls");

    printf("**********************\n");
 
    printf(" ***欢迎进入主菜单***\n");

    printf("**********************\n\n\n");

    printf("本系统有如下功能-->\n\n\n0.退出系统\n");

    printf("1.信息录入\n2.信息显示\n3.信息查询\n");

    printf("4.信息修改\n5.信息删除\n6.信息添加\n");

    printf("7.信息排序\n8.信息保存\n9.数据装载\n\n\n");

    printf("请选择:");

    scanf("%d", &i);

    if (i < 0 || i > 9)

    {
        printf("请输入0--9中的一个数:");

               scanf("%d", &i);
    }


   
        switch (i)

        {

        case  0:    exit(0);    //   退出系统

        case  1:    HEAD  = StuInput();  break;  

        case  2:    StuOutput(HEAD);     break;

        case  3:    StuSearch(HEAD);     break;

        case  4:    break;

        case  5:    break;

        case  6:    break;

        case  7:    break;

        case  8:    StuSave(HEAD);       break;

        case  9:    HEAD  = StuLoad();   break;

        }

}

////////////////////// 信息录入模块 ///////////////////////

STU  *StuInput()

{     
    STU   *head, *pOne, *pTwo;      // 准备建立链表

    int  flag = 1;    //  信息录入控制开关

    int i;  float  sum = 0;  
   
    char ch; char  course[3][8] = { {"高数"}, {"英语"}, {"计算机"}};

    system("cls");

    printf("*****欢迎进入学生信息录入窗口*********\n");

    head = NULL;  

    pOne = pTwo = (STU  *)malloc(LEN);  //  开辟一个新单元

    if (pOne == NULL)

    {
        printf("申请存储空间失败\n");

        return(head) ;
    }

    while  (flag)
   
    {
       printf("\n请输入学号:");   
      
       scanf(" %d", &(pOne -> StuId));

       {
           if (pOne -> StuId < 0)

           {
               printf("\n学号必须大于零,请重新输入:");

               scanf("%d", &(pOne -> StuId));
           }
       }

       printf("\n请输入姓名:");

       scanf(" %s", pOne -> StuName);

       printf("\n请输入性别:");

       scanf(" %s", pOne -> StuSex);

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

       {
           printf("\n请输入%s成绩:", *(course + i));

           scanf(" %f", &pOne -> StuScore[i]);

           if (pOne -> StuScore[i] < 0 || pOne -> StuScore[i] > 100)

           {
               printf("错误的输入!请输入1--100的数:\n");

               scanf(" %f", &pOne -> StuScore[i]);
           }

           sum +=  pOne -> StuScore[i];
       }

       pOne -> ScoreTotal = sum;   //  学生总成绩

       pOne -> ScoreAve  = (float)sum / 3;  // 平均成绩

       sum = 0;  

       n++;         //  录入学生数增加一个

          if (n == 1)   head = pOne;  

          else
          {  
                  pTwo -> next = pOne;

                  pTwo  =  pOne;
          }

          system("cls");

       printf("\n\n是否继续录入学生信息?(Y / N):");

       getchar();

       ch = getchar();

       if (ch  == 'N' || ch == 'n')

       {
           pTwo -> next = NULL; flag = 0;
      
           printf("你总共录入了%d个学生信息。\n\n", n);

           Menu();
       }

       else   pOne = (STU  *)malloc(LEN);  // 再开辟一个新单元

                if (pOne == NULL)

             {
                 printf("申请存储空间失败\n");

                 return (head) ;
             }
        
    }

     return  (head);

}

////////////////////////// 信息输出模块 ////////////////////////////

void  StuOutput(STU *head)

{
    STU  *p;     // 自由指针

    int i;

    system("cls");

    p = head;    // 指向标头

    printf("******欢迎进入学生信息显示窗口*********\n");

    if (head == NULL)

    {
        printf("很抱歉,没有学生信息可以输出.");   //  还没有录入任何信息

        return ;     //返回主函数
    }

    else
   {

        printf("学号    姓名    性别    高数    英语    计算机     总成绩     平均成绩\n");

        printf("__________________________________________________________________\n");
        
        while (p != NULL)

    {
        printf("%-3d\t%s\t%s", p -> StuId, p -> StuName, p -> StuSex);

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

            printf("\t%-.2f", p -> StuScore[i]);

        printf("\t%-.2f\t%-.2f\n", p -> ScoreTotal, p -> ScoreAve);

        p = p -> next;
    }
    }
}

////////////////////////// 查询模块 ////////////////////////////////

void   StuSearch(STU  *head)

{
    STU  *p;   int i, id;  char name[20];

    p = head;

    system("cls");

    printf("*****欢迎进入查询窗口******\n\n");

    printf("按学号查询请输入1\n按姓名查询请按2\n请选择:");

    scanf("%d", &i);

    switch (i)
   
    {

        case 1:

        printf("请输入你要查找的学号:");

        scanf("%d", &id);

        if (p == NULL) { printf(" 很抱歉, 没有信息供您查询."); return; }

        else  while (p != NULL)

        {
             if (p -> StuId == id)

             {
                printf("找到了,你需要的信息是:\n");

                printf("学号    姓名    性别    高数    英语    计算机     总成绩     平均成绩\n");

                printf("__________________________________________________________________\n");
        
                printf("%d\t%s\t%s", p -> StuId, p -> StuName, p -> StuSex);

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

                printf("\t%f", p -> StuScore[i]);

                printf("\t%f\t%f\n", p -> ScoreTotal, p -> ScoreAve);
             }

             p = p -> next;
        }

        if (p == NULL)  printf("不存在你需要的信息!\n");

        case 2:

        printf("请输入你要查找的姓名:");

        getchar();

        scanf("%s", name);

        if (p == NULL) { printf(" 很抱歉, 没有信息供您查询."); return; }

        else  while (p != NULL)

        {
             if (strcmp((p -> StuName), name) == 0)

             {
                printf("找到了,你需要的信息是:\n");

                printf("学号    姓名    性别    高数    英语    计算机     总成绩     平均成绩\n");

                printf("__________________________________________________________________\n");
        
                printf("%d\t%s\t%s", p -> StuId, p -> StuName, p -> StuSex);

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

                printf("\t%-.2f", p -> StuScore[i]);

                printf("\t%-.2f\t%-.2f\n", p -> ScoreTotal, p -> ScoreAve);
             }

             p = p -> next;
        }

        if (p == NULL)  printf("不存在你需要的信息!\n");

        default : printf("目前只有两种查询方式。\n");
    }
}

////////////////////////////// 信息保存模块 //////////////////////////////////

void  StuSave(STU *head)

{
    FILE  *fp;

    STU  *p;

    char  filename[20];

    printf("请输入一个文件名来保存信息:");

    scanf("%s", filename);

    if ((fp = fopen(filename, "w")) == NULL)

    {
        printf("Can not open file !");

        exit(0);
    }
   
    printf("正在保存……\n");

    p = head;

    if (head == NULL)

    {
        printf("请注意要求保存的信息为空!\n");

        return ;
    }

    while (p != NULL)

    {

        if ((fwrite(p, LEN, 1, fp)) != 1)

        printf("File write error!");

        p = p -> next;
    }
   
    fclose(fp);

    printf("保存完成!\n");
}

/////////////////////////////// 文件数据读取模块 //////////////////////////////

STU  *StuLoad()

{
    FILE *fp;

    STU  *head = NULL, *pOne, *pTwo;

    char  filename[20];

    printf("******欢迎进入文件数据装载窗口******\n");

    printf("请输入你要读取的文件名:");

    scanf("%s", filename);

    if ((fp = fopen(filename, "r")) == NULL);

    {
        printf("Can not open file !");

        return  (head);
    }

    pOne = (STU *)malloc(LEN);     //  申请存储空间

      if (pOne == NULL)

    {
        printf("申请失败!\n");

        return  (head);
    }

    head = pOne;

    while (!feof(fp))
   
    {
        if ((fread(pOne, LEN, 1, fp)) != 1);

        {
            printf("读取数据失败!\n");
 
            break;
        }

        pTwo = (STU *)malloc(LEN);

        pOne -> next = pTwo;
        
        pOne = pOne -> next;
    }

    fclose(fp);

    printf("成功读取文件数据!\n");

    return  (head);
}

///////////////////////////////////////////////////////////////////////
///////////////////////////      END       ////////////////////////////
///////////////////////////////////////////////////////////////////////

就第一个录入功能可以 后面写好的几个都不成?是什么问题?
图片附件: 游客没有浏览图片的权限,请 登录注册
一堆乱码。是我的程序结构有问题?诚心求教!

[ 本帖最后由 有容就大 于 2012-1-7 09:00 编辑 ]
搜索更多相关主题的帖子: include 管理系统 大学生 
2012-01-06 22:37
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
scanf(" %f"); %前面我留了个空格,但是也不行。和没空格一样。

梅尚程荀
马谭杨奚







                                                       
2012-01-06 22:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
脑袋大了 , 找啊找啊,还没找到办法……
那位大侠给点建议。

梅尚程荀
马谭杨奚







                                                       
2012-01-07 14:12
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
           pTwo -> next = NULL; flag = 0;
      
           printf("你总共录入了%d个学生信息。\n\n", n);

           Menu();    // 我单步调试到这里 出现下面的问题
图片附件: 游客没有浏览图片的权限,请 登录注册

然后调试箭头就指向
   输出模块这里->      printf("%d\t%s\t%s", p -> StuId, p -> StuName, p -> StuSex);

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

                       printf("\t%f", p -> StuScore[i]);

                       printf("\t%f\t%f\n", p -> ScoreTotal, p -> ScoreAve);

在下愚钝领会不到什么意思,谁能给我解释下吗?

梅尚程荀
马谭杨奚







                                                       
2012-01-07 17:25
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
调试的时候出现下面一堆提示是什么意思?
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The thread 0x8A0 has exited with code 0 (0x0).
Loaded 'C:\WINDOWS\system32\apphelp.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
First-chance exception in 学生成绩管理 二.exe: 0xC0000005: Access Violation.
First-chance exception in 学生成绩管理 二.exe: 0xC0000005: Access Violation.
…………

梅尚程荀
马谭杨奚







                                                       
2012-01-07 17:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
没法看

授人以渔,不授人以鱼。
2012-01-07 23:50
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:7 
好长的代码……
2012-01-08 02:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 TonyDeng
是不是很多错误啊刚学写小小应用程序,头绪很乱啊。诚心向您求教。

梅尚程荀
马谭杨奚







                                                       
2012-01-08 08:32
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 7楼 小赵q1
才一半不到……

代码多点就搞不清方向了。

梅尚程荀
马谭杨奚







                                                       
2012-01-08 08:33
llooppzhang
Rank: 7Rank: 7Rank: 7
来 自:江苏
等 级:黑侠
威 望:5
帖 子:308
专家分:518
注 册:2009-10-18
收藏
得分:7 
我编译结果是menu()哪儿没有参数。是你写错了还是?



[ 本帖最后由 llooppzhang 于 2012-1-8 16:47 编辑 ]
2012-01-08 12:14
快速回复:学生成绩管理系统问题
数据加载中...
 
   



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

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