| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 464 人关注过本帖
标题:看一下有什么问题
取消只看楼主 加入收藏
日出地平线
Rank: 2
等 级:论坛游民
帖 子:20
专家分:16
注 册:2011-11-15
结帖率:66.67%
收藏
已结贴  问题点数:16 回复次数:1 
看一下有什么问题
#include
#include
#include
char top[50];                     //成绩文件顶部的标题用top保存
typedef struct student            //单个学生成绩的记录
{
char name[10];                         //姓名
int number;                            //学号
int chinese;                           //语 文
int math;                              //数学
int english;                           //英语
struct student *next;
}student,*gradelist;
gradelist fileread(const char *adress)           //读取成绩文件
{
FILE *fp=fopen(adress,"r");
if(fp==NULL)                                //打开文件
{
   printf("文件打开出错");
   exit(0);
}
gradelist file=(student *)malloc(sizeof(student));              //申请空间
file->next=NULL;
student *p=file;                                               //操作指针
int n=0;                                                        //循环标记,具体作用是在第一次循环时方便处理标题
while(!feof(fp))
{
   if(n==0)
   {
    fgets(top,50,fp);                                       //处理标题,并且文件指针移到第二行
   }
   if(n==1)                                                    //申请空间
   {
    (p->next)=(student *)malloc(sizeof(student));
    p=p->next;
    p->next=NULL;
   }
   fscanf(fp,"%s%d%d%d%d",p->name,&p->number,&p->chinese,&p->math,&p->english);           //将文件的数据输入到链表中
   n=1;
}
if(fclose(fp))                                                  //关闭文件
{
   printf("文件关闭失败");
   exit(0);
}
return file;
}
void FilePrint(gradelist file)                                     //将成绩文件打印到屏幕上
{
student *p=file;
printf("%s\n",top);                                            //打印标题
while(p->next!=NULL)
{
   printf("%6s %2d     %d     %d      %d\n",p->name,p->number,p->chinese,p->math,p->english);              //循环打印
   p=p->next;
}
}
void merger()                                                    //合并文件
{
gradelist file1=fileread("1.txt"),file2=fileread("2.txt");
FILE *fp=fopen("3.txt","w+");
if(fp==NULL)                             //先新建一个3.txt,然后将1.txt和2.txt的内容输入到里面
{
   printf("合并成绩文档失败,原因:建立文档出错");
   exit(0);
}
student *p1=file1,*p2=file2;
fprintf(fp,"%s",top);                                          //先输入标题
while(p1->next!=NULL)
{
   fprintf(fp,"%6s %2d     %d     %d      %d\n",p1->name,p1->number,p1->chinese,p1->math,p1->english);          //输入1.txt
   p1=p1->next;
}
while(p2->next!=NULL)
{
   fprintf(fp,"%6s %2d     %d     %d      %d\n",p2->name,p2->number,p2->chinese,p2->math,p2->english);          //输入2.txt
   p2=p2->next;
}
if(fclose(fp))
{
   printf("文件关闭失败");
   exit(0);
}
}
void extract()                           //抽取补考的成绩记录
{

FILE *fp=fopen("4.txt","w+");
if(fp==NULL)                          //新建文件4.txt
{
   printf("抽取补考学生成绩记录建立新文件失败");
   exit(0);
}
gradelist file3=fileread("3.txt");
student *p=file3;
fprintf(fp,"%s",top);                                      //先输入标题
while(p->next!=NULL)
{
   if((p->chinese)<60||(p->math)<60||(p->english)<60)                  //补考条件
   {
    fprintf(fp,"%6s %2d     %d     %d      %d\n",p->name,p->number,p->chinese,p->math,p->english);
   }
   p=p->next;
}
if(fclose(fp))
{
   printf("文件关闭失败");
   exit(0);
}
}
void sort(int i)
{
gradelist file3=fileread("3.txt");                    //先将3.txt读入链表
student *p=file3;
if(remove("3.txt"))                                    //由于排序后的内容也要保存到3.txt,故删除3.txt
{
   printf("删除文件出错");
   exit(0);
}
int n=0;             //学生个数
FILE *fp;
if((fp=fopen("3.txt","w+"))==NULL)                     //新建一个空的3.txt
{
   printf("新建文件出错");
   exit(0);
}
fprintf(fp,"%s",top);                                  //标题先输入
while(p->next!=NULL)
{
   n++;
   p=p->next;
}
typedef struct                                         //链表不容易操作,故而新建一个结构数组
{
   int totalgrade;
     char name[10];
     int number;
     int chinese;
     int math;
     int english;
}gradenote;              //成绩记录
typedef struct
{
   gradenote r[100];    //初始化了100了空间
}grade_list;             //待排序成绩表
grade_list L;
p=file3;
for(int t=1;t<=n;t++,p=p->next)                     //将链表的内容复制到结构数组里
{
   strcpy(L.r[t].name,p->name);
   L.r[t].number=p->number;
   L.r[t].chinese=p->chinese;
   L.r[t].math=p->math;
   L.r[t].english=p->english;
   L.r[t].totalgrade=p->chinese+p->math+p->english;
}
if(i==1)                 //直接插入排序,具体思想参考《数据结构》,严蔚敏主编
{
   for(int k=2;k<=n;++k)
   {
    if(L.r[k].totalgrade
搜索更多相关主题的帖子: top include number 
2012-07-13 21:05
日出地平线
Rank: 2
等 级:论坛游民
帖 子:20
专家分:16
注 册:2011-11-15
收藏
得分:0 
回复 2楼 peach5460
打开文件有错误,是不是文件的地址不可以被调用
2012-07-13 22:23
快速回复:看一下有什么问题
数据加载中...
 
   



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

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