| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6063 人关注过本帖
标题:这个程序功能1运行一遍就出错了,是什么问题?这个是老师给的实验作业,急着 ...
只看楼主 加入收藏
q2344652
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-5-2
收藏
 问题点数:0 回复次数:0 
这个程序功能1运行一遍就出错了,是什么问题?这个是老师给的实验作业,急着交。。求大神帮帮忙
#include<stdio.h>
#include<malloc.h>
#include<iostream>
#include<string.h>
#define OK 1;
#define ERROR -1;
#define ZERO 0;
using namespace std;
typedef struct student
{
  char num[11];
  char name[20];
  float score;
};
typedef struct NODE
{
    student elem;
    NODE *next;
};
typedef struct LINK_LIST
{
    NODE *head;
};

//单链表的建立
int InitList(LINK_LIST *L)
{
    L->head=(NODE*)malloc(sizeof(NODE));
    if(L->head)    {L->head->next=NULL;
    return OK;}
    else return ERROR;
}

//销毁链表
void DestoryList(LINK_LIST *L)
{
    NODE *p;
    while(L->head)
    {
            p=L->head;L->head=L->head->next;
            free(p);
    }
}
 //清空链表
void ClearList(LINK_LIST *L)
{
    NODE *p;
    while(L->head->next)
    {
        p=L->head->next;
        L->head->next=p->next;
        free(p);   
    }
}
//求链表的长度
int ListLength(LINK_LIST L)
{
    NODE*p;
    int len=0;
    for(p=L.head;p->next!=0;p=p->next)
    {   
        len++;
   
   
   
    }
    return(len);

}
//通过e返回链表L中第i个元素的内容
void GetElem(LINK_LIST *L,int i,student *e)
{    NODE*p;int j;
if(i<1||i>ListLength(*L))
   exit(-1);
p=L->head;
for(j=0;j<i;j++)
{
    p=p->next;}
    *e=p->elem;

}


//在链表中检索值为e的数据元素           按姓名查找
NODE *locatnum(LINK_LIST L,student e)
{
        NODE *p;
        for(p=L.head->next;p&&strcmp(p->elem.name,e.name)!=0;p=p->next)
        return(p);
}


//在链表中检索值为e的数据元素//             //按学号查找
NODE *LocatName(LINK_LIST L,student e)
{
            NODE*p;
            for(p=L.head->next;p&&strcmp(p->elem.num,e.num)!=0;p=p->next)
            return(p);
}


//在链表L中第i个数据元素之前插入数据元素e
int ListInsert(LINK_LIST *L,int i,student e)
{
    NODE *p,*s;
    if(i<1||i>ListLength(*L)+1) return ERROR;
    p=L->head;
    for(int j=0;j<i-1;j++)
    p=p->next;
    s=(NODE *)malloc(sizeof(NODE));
    if(s=NULL)return ERROR;
    s->elem=e;
    s->next=p->next;
    p->next=s;
    return OK;
}
//将链表L中第i个数据元素删除,并将其内容保存在e中。
int ListDelete(LINK_LIST *L,int i,student *e)
{
    NODE *p, *s;
    if (i<1||i>ListLength(*L)) return ERROR; //检查i值的合理性
    p=L->head;
    for(int j=0;j<i-1;j++) //寻找第i-1个结点
        p=p->next;
    s=p->next; //用s指向将要删除的结点
    p->next=s->next; //删除s指针所指向的结点
    *e=s->elem;
    free(s);
    return OK;
}

/************导入学生信息****************/
int dao_ru(LINK_LIST *L)                                                                                                
{NODE *r;
    FILE *fp=NULL;
    NODE *p=L->head->next;                                                                        
    if(!(fp=fopen("C:\\学生信息.txt","r"))){cout<<"不存在该文件\n";return ERROR;}               
    if(ferror(fp))return ERROR;
    if(fgetc(fp)==EOF){cout<<"文件为空\n";return ERROR;}
    while(!feof(fp))
    {
        p=new NODE;
        fscanf(fp,"%s",p->elem.num);
        fscanf(fp,"%s",p->elem.name);
        fscanf(fp,"%d",&p->elem.score);
        p->next=NULL;
        r->next=p;
        r=p;
    }
    fclose(fp);
    return OK;
}
/***********输入学生的数据**************/
int shu_ru(LINK_LIST *NL)
{
    student e;int sum;
    cout<<"请输入学生的数量:";
    cin>>sum;
    for(int i=1;i<=sum;i++)
    {
        cout<<"依次输入学号,姓名,成绩:";
        cin>>e.num>>e.name>>e.score;
        ListInsert(&*NL,i+ListLength(*NL),e);
    }
    if(ListLength(*NL)==sum)return OK;
}
/**************显示学生的信息*****************/
void xianshi(LINK_LIST NL)
{
    student e;int i;
    cout<<"学生信息如下:\n";
    for(i=1;i<=ListLength(NL);i++)
    {GetElem(&NL,i,&e);cout<<"-----------------------\n"<<e.num<<"     "<<e.name<<"     "<<e.score<<"\n----------------------\n"<<endl;}
}
/*************查找学生的信息****************/
void cha_zhao(LINK_LIST L)
{
    student s;NODE *p;
    cout<<"请输入将要查找学生的姓名:";
    scanf("%s",s.name);
    p=locatnum(L,s);
    if(p)cout<<s.name<<"的学号和成绩如下:\n"<<p->elem.num<<"       "<<p->elem.score<<endl<<endl;
    else cout<<"文件不存在该学生\n";   
}
/*************查询学生的信息*************/
void cha_xun(LINK_LIST L)
{
    int i;
    student e;
    cout<<"请输入要查询的学生的序号:";
    cin>>i;
    GetElem(&L,i,&e);
    if(e.num)cout<<"序号为"<<i<<"的学生信息如下\n"<<e.name<<"       "<<e.num<<"       "<<e.score<<endl<<endl;
    else cout<<"文件不存在该学生\n";
}
/**************插入学生的信息*************/
int cha_ru(LINK_LIST *L)
{
    student s;int len;
    cout<<"请依次输入学生的学号,姓名,成绩:";
    cin>>s.num>>s.name>>s.score;
    len=ListLength(*L);
    ListInsert(&*L,len+1,s);
    return OK;   
}
/**************删除学生的信息**************/
int shang_chu(LINK_LIST *L)
{
    student e;
    int place;
    cout<<"请输入将要删除的学生的序号:";
    cin>>place;
    ListDelete(&*L,place,&e);
    return OK;
}
/***************统计学生的信息**************/
void tong_ji(LINK_LIST L)
{
    if(L.head)cout<<"总共有"<<ListLength(L)<<"个学生\n\n";
    else cout<<"不存在学生信息\n\n";
}
/***************保存并退出*************/
int chun_pan(LINK_LIST L)
{
    FILE *fp;
    NODE *p;
    p=L.head->next;
    if(!(fp=fopen("C:\\学生信息.txt","w")))cout<<"打开文件错误\n";
    for(;p;p=p->next){
        fprintf(fp," %s",p->elem.num);
        fprintf(fp," %s",p->elem.name);
        fprintf(fp," %d",p->elem.score);
    }
    fclose(fp);
    return OK;
}
int qing_kong(LINK_LIST *NL)
{
    ClearList(NL);
    return OK;
}
int main()
{
    LINK_LIST NL;
    int a,c=1;
    InitList(&NL);
cout<<"                            学生管理系统                                  \n";
        cout<<"*****************************************************************************\n";
        cout<<"*           (1)根据指定学生个数,逐个输入学生数据                        *\n";
        cout<<"*           (2)逐个显示学生表中所有学生的相关信息                        *\n";                  
        cout<<"*           (3)根据姓名进行查找,返回此学生的学号和成绩                  *\n";            
        cout<<"*           (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩)    *\n";
        cout<<"*           (5)给定一个学生信息,插入到表中指定的位置                    *\n";              
        cout<<"*           (6)删除指定位置的学生记录                                    *\n";                              
        cout<<"*           (7)统计表中学生个数                                          *\n";
        cout<<"*           (8)导入学生信息                                              *\n";
        cout<<"*           (0)保存学生信息并退出                                        *\n";
        cout<<"*           (9)清空学生信息                                              *\n";                           
        cout<<"*****************************************************************************\n";
        cout<<"                         按数字键选择对应的功能[0~9]\n";
        cin>>a;   
        while(a)
    {
        
        if(a<0||a>9){cout<<"输入错误!请重新输入:";cin>>a;}
        switch(a)
        {
            case 1:cout<<"                      "<<"(1)输入学生数据\n";if(shu_ru(&NL))cout<<"数据输入成功\n";else cout<<"数据输入失败\n";break;
            case 2:cout<<"                      "<<"(2)显示学生信息\n";xianshi(NL);break;
            case 3:cout<<"                      "<<"(3)姓名查找\n";cha_zhao(NL);break;
            case 4:cout<<"                      "<<"(4)指定学生信息";cha_xun(NL);break;
            case 5:cout<<"                      "<<"(5)插入学生信息";if(cha_ru(&NL))cout<<"数据插入成功\n";else cout<<"数据插入失败\n";break;
        }
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include return 
2016-05-02 22:45
快速回复:这个程序功能1运行一遍就出错了,是什么问题?这个是老师给的实验作业 ...
数据加载中...
 
   



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

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