| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 393 人关注过本帖
标题:各位大神帮帮我啊~小弟是新人~
只看楼主 加入收藏
s627464610
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2011-6-8
收藏
 问题点数:0 回复次数:2 
各位大神帮帮我啊~小弟是新人~
就是下面这个程序~0错误~0报警~但是一运行就有错~VC 6环境大家行行好~帮帮忙啊~

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>
typedef struct STUDENT
{
    char studentNumber[10];//学生学号
    char studentName[20];//学生姓名
    float mark1;//英语成绩
    float mark2;//数学成绩
    float mark3;//计算机成绩
    struct STUDENT *next;
}STUDENT;
char choose;
STUDENT *headLink;//链表HEAD指针
void ReadInfoFormFile();
void CreateHeadLink();
void DesplayMenu();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void CompositorBystudentNumber();
//主函数
int main()
{
    CreateHeadLink();
    ReadInfoFormFile();
    DesplayMenu();
}
/*************************************
函数功能:从文件中读取学生信息到链表中
*************************************/
void ReadInfoFormFile()
{
    FILE *fp;
    STUDENT *p;
    fp=fopen("student.txt","r");
    if(!fp)
    {
        printf("文件不存在\n");
    }
    p=MallocNode();
    while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,&(p->mark1),&(p->mark2),&(p->mark3))>0)
    {
        InsertOneNode(p);
        p=MallocNode();
    }
    fclose(fp);
}
/*************************************
函数功能:显示菜单,根据用户的输入信息
来完成对应的功能
*************************************/
void DesplayMenu()
{
    STUDENT *p;
    printf("-------请输入选择相应功能-------\n");
    printf("1.排序 (按学号)\n");
    printf("2.插入\n");
    printf("3.查找 (输入一个学生学号,输出其各科成绩)\n");
    printf("4.删除 (从数组中按输入的学号删除该学生)\n");
    printf("5.统计\n");
    printf("请输入序号进行操作:_\b");
    scanf("%c",&choose);
    switch(choose)
    {
    case '1':CompositorBystudentNumber();;break;
    case '2':
             p=MallocNode();
             GetInformation(p);
             InsertOneNode(p);break;
    case '3':OutputInformation();break;
    case '4':DeleteNodeBystudentNumber();;break;
    case '5':OutputInformation();;break;
    }
    DesplayMenu();
}
/*************************************
函数功能:建立链表表头
*************************************/
void CreateHeadLink()
{
    STUDENT *p;
    p=(STUDENT*)malloc(sizeof(STUDENT));
    headLink=p;
    p->next=NULL;
}
/*************************************
函数功能:申请一个新结点,并将其初始化
*************************************/
STUDENT *MallocNode()
{
    STUDENT * p;
    int i;
    p=(STUDENT*)malloc(sizeof(STUDENT));
    if(p==NULL)
    {
        return NULL;
    }
    for(i=0;i<10;i++)
    {
        p->studentNumber[i]='\0';
    }
    for(i=0;i<10;i++)
    {
        p->studentName[i]='\0';
    }
    for(i=0;i<10;i++)
    {
        p->studentNumber[i]='\0';
    }
    p->mark1=0.0;
    p->mark2=0.0;
    p->mark3=0.0;
    p->next=NULL;
}
/*************************************
函数功能:取得用户输入的学生信息
*************************************/
void GetInformation(STUDENT *t)
{
    printf("请输入学生学号:\n");
    scanf("%s",t->studentNumber);
    printf("请输入学生姓名:\n");
    scanf("%s",t->studentName);
    printf("请输入学生第一门成绩:\n");
    scanf("%s",t->mark1);
    printf("请输入学生第二门成绩:\n");
    scanf("%s",t->mark2);
    printf("请输入学生第三门成绩:\n");
    scanf("%s",t->mark3);
}
/*************************************
函数功能:在链表的结尾处增加一个节点
*************************************/
void InsertOneNode(STUDENT *t)
{
    STUDENT *p;
    p=headLink;
    while(p->next)
    {
        p=p->next;
    }
    p->next=t;
}
/*************************************
函数功能:根据用户输入的学生学号显示该
学生信息
*************************************/
void DesplayInfoBystudentNumber()
{
    STUDENT *p;
    char studentNumber[10];
    char flag=0;
    p=headLink->next;
    printf("请输入学生学号");
    scanf("%s",studentNumber);
    while(p)
    {
        if(strcmp(p->studentNumber,studentNumber)==0)
        {
            printf("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
            DesplayOneNode(p);
            flag=1;
            break;
        }
        p=p->next;
    }
    if(!flag)
    {
        printf("对不起,不存在学号为%s的学生\n",studentNumber);
    }
}
/*************************************
函数功能:输出一个节点的信息
*************************************/
void DesplayOneNode(STUDENT *t)
{
    printf("%s\t",t->studentNumber);
    printf("%s\t",t->studentName);
    printf("%s\t",t->mark1);
    printf("%s\t",t->mark2);
    printf("%s\t",t->mark3);
    printf("%s\t",t->mark1+t->mark2+t->mark3);
    printf("%s\t",(t->mark1+t->mark2+t->mark3)/3);
}
/*************************************
函数功能:根据用户输入的学号删除该学生
*************************************/
void DeleteNodeBystudentNumber()
{
    char studentNumber[10];
    STUDENT *p,*q;
    char flag=0;
    printf("请输入要删除的学生学号: ");
    scanf("%s",studentNumber);
    p=headLink;
    q=headLink->next;
    while(q)
    {
        if(strcmp(q->studentNumber,studentNumber)==0)
        {
            p->next=q->next;
            free(q);
            flag=1;
            break;
        }
        p=p->next;
        q=q->next;
    }
    if(!flag)
    {
        printf("不存在该学号的学生\n");
        return;
    }
    printf("成功删除\n");
}
void CompositorBystudentNumber()
{
    STUDENT exchange,*r,*p,*q;
    r=headLink->next;
    if(r==NULL)
    {
        printf("现在还没有学生信息,请先输入学生信息\n");
        return;
    }
    while(r)
    {
        p=r;
        q=r->next;
        while(q)
        {
            if(strcmp(q->studentNumber,p->studentNumber)>0)
            {
                strcpy(exchange.studentNumber,q->studentNumber);
                strcpy(exchange.studentName,q->studentName);
                exchange.mark1=q->mark1;
                exchange.mark2=q->mark2;
                exchange.mark3=q->mark3;
                strcpy(p->studentNumber,exchange.studentNumber);
                strcpy(p->studentName,exchange.studentName);
                p->mark1=exchange.mark1;
                p->mark2=exchange.mark2;
                p->mark3=exchange.mark3;
            }
            q=q->next;
        }
        r=r->next;
    }
    OutputInformation();
}
void OutputInformation()
{
    STUDENT *p;
    p=headLink->next;
    if(p==NULL)
    {
        printf("现在没有学生信息,请先输入学生信息\n\n");
        return;
    }
    printf("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
    while(p)
    {
        DesplayOneNode(p);
        p=p->next;
    }
}
搜索更多相关主题的帖子: 英语成绩 计算机 数学 姓名 学生 
2011-07-01 05:19
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
自己调试去

帖子:1

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-07-01 06:42
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
程序代码:
// 通过编译

#include <stdio.h>
//#include <conio.h>
#include <malloc.h>
#include <string.h>

typedef struct Student {
    char studentNumber[10];    //学生学号
    char studentName[20];    //学生姓名
    float mark1;        //英语成绩
    float mark2;        //数学成绩
    float mark3;        //计算机成绩
    struct Student *next;
} Student;

Student *headLink;        //链表HEAD指针
Student *MallocNode();

char choose;
void ReadInfoFormFile();
void CreateHeadLink();
void DisplayMenu();
void GetInformation(Student * t);
void OutputInformation();
void DisplayInfoBystudentNumber();
void DisplayOneNode(Student * t);
void InsertOneNode(Student * t);
void DeleteNodeBystudentNumber();
void CompositorBystudentNumber();

//主函数
int main(void)
{
    CreateHeadLink();
    ReadInfoFormFile();
    DisplayMenu();
    return 0;
}

/*************************************
函数功能:从文件中读取学生信息到链表中
*************************************/
void ReadInfoFormFile()
{
    FILE *fp;
    Student *p;
    fp = fopen("student.txt", "r");
    if (!fp) {
        printf("文件不存在\n");
    }
    p = MallocNode();
    while (fscanf
           (fp, "%s%s%f%f%f", p->studentNumber, p->studentName,
        &(p->mark1), &(p->mark2), &(p->mark3)) > 0) {
        InsertOneNode(p);
        p = MallocNode();
    }
    fclose(fp);
}

/*************************************
函数功能:显示菜单,根据用户的输入信息
来完成对应的功能
*************************************/
void DisplayMenu()
{
    Student *p;
    printf("-------请输入选择相应功能-------\n");
    printf("1.排序 (按学号)\n");
    printf("2.插入\n");
    printf
        ("3.查找 (输入一个学生学号,输出其各科成绩)\n");
    printf
        ("4.删除 (从数组中按输入的学号删除该学生)\n");
    printf("5.统计\n");
    printf("请输入序号进行操作:_\b");
    scanf("%c", &choose);
    switch (choose) {
    case '1':
        CompositorBystudentNumber();;
        break;
    case '2':
        p = MallocNode();
        GetInformation(p);
        InsertOneNode(p);
        break;
    case '3':
        OutputInformation();
        break;
    case '4':
        DeleteNodeBystudentNumber();;
        break;
    case '5':
        OutputInformation();;
        break;
    }
    DisplayMenu();
}

/*************************************
函数功能:建立链表表头
*************************************/
void CreateHeadLink()
{
    Student *p;
    p = (Student *) malloc(sizeof(Student));
    headLink = p;
    p->next = NULL;
}

/*************************************
函数功能:申请一个新结点,并将其初始化
*************************************/
Student *MallocNode()
{
    Student *p;
    int i;
    p = (Student *) malloc(sizeof(Student));
    if (p == NULL) {
        return NULL;
    }
    for (i = 0; i < 10; i++) {
        p->studentNumber[i] = '\0';
    }
    for (i = 0; i < 10; i++) {
        p->studentName[i] = '\0';
    }
    for (i = 0; i < 10; i++) {
        p->studentNumber[i] = '\0';
    }
    p->mark1 = 0.0;
    p->mark2 = 0.0;
    p->mark3 = 0.0;
    p->next = NULL;
}

/*************************************
函数功能:取得用户输入的学生信息
*************************************/
void GetInformation(Student * t)
{
    printf("请输入学生学号:\n");
    scanf("%s", t->studentNumber);
    printf("请输入学生姓名:\n");
    scanf("%s", t->studentName);
    printf("请输入学生第一门成绩:\n");
    scanf("%f", &t->mark1);
    printf("请输入学生第二门成绩:\n");
    scanf("%f", &t->mark2);
    printf("请输入学生第三门成绩:\n");
    scanf("%f", &t->mark3);
}

/*************************************
函数功能:在链表的结尾处增加一个节点
*************************************/
void InsertOneNode(Student * t)
{
    Student *p;
    p = headLink;
    while (p->next) {
        p = p->next;
    }
    p->next = t;
}

/*************************************
函数功能:根据用户输入的学生学号显示该
学生信息
*************************************/
void DisplayInfoBystudentNumber()
{
    Student *p;
    char studentNumber[10];
    char flag = 0;
    p = headLink->next;
    printf("请输入学生学号");
    scanf("%s", studentNumber);
    while (p) {
        if (strcmp(p->studentNumber, studentNumber) == 0) {
            printf
                ("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
            DisplayOneNode(p);
            flag = 1;
            break;
        }
        p = p->next;
    }
    if (!flag) {
        printf("对不起,不存在学号为%s的学生\n",
               studentNumber);
    }
}

/*************************************
函数功能:输出一个节点的信息
*************************************/
void DisplayOneNode(Student * t)
{
    printf("%s\t", t->studentNumber);
    printf("%s\t", t->studentName);
    printf("%f\t", t->mark1);
    printf("%f\t", t->mark2);
    printf("%f\t", t->mark3);
    printf("%f\t", t->mark1 + t->mark2 + t->mark3);
    printf("%f\t", (t->mark1 + t->mark2 + t->mark3) / 3);
}

/*************************************
函数功能:根据用户输入的学号删除该学生
*************************************/
void DeleteNodeBystudentNumber()
{
    char studentNumber[10];
    Student *p, *q;
    char flag = 0;
    printf("请输入要删除的学生学号: ");
    scanf("%s", studentNumber);
    p = headLink;
    q = headLink->next;
    while (q) {
        if (strcmp(q->studentNumber, studentNumber) == 0) {
            p->next = q->next;
            free(q);
            flag = 1;
            break;
        }
        p = p->next;
        q = q->next;
    }
    if (!flag) {
        printf("不存在该学号的学生\n");
        return;
    }
    printf("成功删除\n");
}

void CompositorBystudentNumber()
{
    Student exchange, *r, *p, *q;
    r = headLink->next;
    if (r == NULL) {
        printf
            ("现在还没有学生信息,请先输入学生信息\n");
        return;
    }
    while (r) {
        p = r;
        q = r->next;
        while (q) {
            if (strcmp(q->studentNumber, p->studentNumber) > 0) {
                strcpy(exchange.studentNumber,
                       q->studentNumber);
                strcpy(exchange.studentName,
                       q->studentName);
                exchange.mark1 = q->mark1;
                exchange.mark2 = q->mark2;
                exchange.mark3 = q->mark3;
                strcpy(p->studentNumber,
                       exchange.studentNumber);
                strcpy(p->studentName,
                       exchange.studentName);
                p->mark1 = exchange.mark1;
                p->mark2 = exchange.mark2;
                p->mark3 = exchange.mark3;
            }
            q = q->next;
        }
        r = r->next;
    }
    OutputInformation();
}

void OutputInformation()
{
    Student *p;
    p = headLink->next;
    if (p == NULL) {
        printf
            ("现在没有学生信息,请先输入学生信息\n\n");
        return;
    }
    printf
        ("学号\t姓名\t英语\t数学\t计算机\t总成绩\t平均成绩\n\n");
    while (p) {
        DisplayOneNode(p);
        p = p->next;
    }
}

—>〉Sun〈<—
2011-07-01 18:15
快速回复:各位大神帮帮我啊~小弟是新人~
数据加载中...
 
   



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

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