| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4991 人关注过本帖
标题:怎么将文件中的信息放入单链表中并显示出来
只看楼主 加入收藏
白浪
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-20
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:2 
怎么将文件中的信息放入单链表中并显示出来
想弄个简单的学生成绩管理系统  

发现弄不出  


代码如下:
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define FORMAT  "        |    %-10s |%-15s|%4d|%4d|%4d| %4d   | %.2f |%4d |\n"
#define DATA  p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci
typedef struct student      /*标记为student*/
{
char num[10];   /*学号*/
char name[15];  /*姓名*/
int cgrade;     /*C语言成绩*/
int mgrade;     /*数学成绩*/
int egrade;     /*英语成绩*/
int total;      /*总分*/
float ave;      /*平均分*/
int mingci;     /*名次*/
};

typedef struct node
{
   struct student data;
   struct node *next;
        }Node,*Link;


int main(int argc,char *argv[])
{

 Link l;      //链表
 FILE *fp;

 Node *p,*r;

 l=(Node*)malloc(sizeof(Node));

 l->next=NULL;

 r=l;

 fp=fopen("C:\\STUDENT","ab+");               //追加读写二进制文件
 if(fp==NULL)

 {
   printf("\n=====>can not open file");
   exit(0);

 while(!feof(fp))

 {

 p=(Node*)malloc(sizeof(Node));

 if(fread(p,sizeof(Node),1,fp)==1)

 {
                                 
                                 
                                  }
}

 fclose(fp);
             }
    
     }


搜索更多相关主题的帖子: 信息 管理系统 
2011-05-20 16:04
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:8 

                                         
===========深入<----------------->浅出============
2011-05-20 19:08
卢金洋21
Rank: 1
等 级:新手上路
帖 子:11
专家分:2
注 册:2011-5-15
收藏
得分:2 
我这有图书管理系统,估计和你的差不多吧  链表做的
# include <stdio.h>
# include <stdlib.h>
#include<malloc.h>
#include <string.h>
f1();f2();f3();f4();f5();f6();f7();f7_price();f7_page();output();foutput();//函数申明;
struct book
{
    char name[20];//书名;
    int page;//页数;
    int price;//价格;
    int total;//数量库存;
    struct book *next;
};
struct book *head,*end,*p,*head2,*end2,*p2,*q1,*q2;//全局变量,方便后面的使用;
main()
{
    int n;
    n=1;
    printf("\t  欢迎使用金洋家庭图书管理系统\n\n");
    while(n!=0)
    {
        printf("\t    家庭图书管理系统程序\n\n");
        printf("================我的菜单====================\n");
        printf("\t  1.图书信息批量录入\n");
        printf("\t  2.图书信息修改\n");
        printf("\t  3.图书损坏、遗失\n");
        printf("\t  4.图书出借\n");
        printf("\t  5.图书归还\n");
        printf("\t  6.单个图书信息插入\n");
        printf("\t  7.排序输出\n");
        printf("\t  0.退出\n");
        printf("============================================\n");
        printf("\t\t请选择:");
        scanf("%d",&n);
        switch(n)
        {
            case 1:f1();break;
            case 2:f2();break;
            case 3:f3();break;
            case 4:f4();break;
            case 5:f5();break;
            case 6:f6();break;
            case 7:f7();break;
            case 0:break;
            default :printf("选择错误!!!");
        }
        printf("\n\n");
    }
    printf("感谢您的使用!!!\n\n");
}
//------------------------------------ 图书信息批量录入 ------------------------------
output(struct book *head1)
{
    struct book *q;
    printf("书名\t\t页数\t\t价格\t\t库存\n\n");
    q=head1->next;
    while(q!=NULL&&(q->price!=1000)&&(q->page!=1000))
    {
        printf("%s\t\t%d\t\t%d\t\t%d\n",q->name,q->page,q->price,q->total);
        q=q->next;
    }
    printf("\n");
}
foutput(struct book *head1)
{
    FILE *fp1;
    struct book *q;
    fp1=fopen("家庭图书信息.txt","w");
    if(fp1==NULL)
    {
        printf("无法打开文件!\n");
        exit(0);
    }
    q=head->next;
    while(q!=NULL)
    {
        fprintf(fp1,"%s\t\t%d\t\t%d\t\t%d\n",q->name,q->page,q->price,q->total);
        q=q->next;
    }
    fclose(fp1);
}                  
f1()
{
    FILE *fp;
    fp=fopen("家庭图书信息.txt","r"); //以只读方式打开当前目录下的家庭图书信息.txt
    if(fp==NULL)
    {
        printf("无法打开文件");
        exit(0);    //-------- 终止程序 ---------
    }
    head=(struct book *)malloc(sizeof(struct book));
    end=head;
    end->next=NULL;
    while(!feof(fp)) //------!feof(fp)值为0,不在执行循环语句  ------
    {
        p=(struct book *)malloc(sizeof(struct book));
        fscanf(fp,"%s%d%d%d\n",&p->name,&p->page,&p->price,&p->total);
        p->next=NULL;
        end->next=p;
        end=p;
    }
    output(head);
    fclose(fp);    //----关闭文件-----
}
//--------------------------------------  图书信息修改 --------------------------
f2()
{
    char name[20];
    int m;
    m=0;
    f1();
    printf("请输入您要修改的书名");
    scanf("%s",name);
    p=head->next;
    while(p!=NULL)
    {
        if(strcmp(name,p->name)==0)//比较两个字符串是否相同
        {
            printf("请输入你要修改后的书名:");
            scanf("%s",p->name);
            printf("请输入你要修改后的页数:");
            scanf("%d",&p->page);
            printf("请输入你要修改后的书价:");
            scanf("%d",&p->price);
            printf("请输入你要修改后的数量:");
            scanf("%d",&p->total);
            m++;
        }
        p=p->next;
    }
    if(m==0)printf("\n没有找到所要修改的书!请重新输入!\n\n");
    else foutput(head);
    output(head);
}
//------------------------------------- 图书损坏遗失-------------------------
f3()
{

    int m;                              
    char name[20];
    struct book *q;
    f1();
    m=0;
    printf("请输入你损坏或遗失的书名");
    scanf("%s",name);
    q=head;
    p=q->next;
    while(q!=NULL)
    {
        if(strcmp(name,p->name)==0)//比较两个字符串是否相同
        {
            q->next=p->next;
            free(p);
            p=q->next;
            m++;   
        }
        q=q->next;
    }
    if(m==0)    printf("\n图书库内没有您损坏或遗失的书\n");
    else foutput(head);
    output(head);
}
//-------------------------------------- 图书出借--- ---------------------------
f4()
{
    int m,n;                                    
    char name[20];                                    
    m=0;
    f1();
    printf("请您输入您要借阅的书名");
    scanf("%s",name);
    p=head->next;
    while(p!=NULL)
    {
        if(strcmp(name,p->name)==0)
        {
            printf("请问您要借几本?请输入:");
            scanf("%d",&n);
            if(p->total==0)    printf("\n您要的书已经借光\n");
            if(n>p->total)        printf("\n您要借的书籍库存不够\n");
            else
            {
                p->total=p->total-n;
                printf("\n欢迎您的借阅\n");
            }
            m++;
        }
        p=p->next;
    }
    if(m==0) printf("\n对不起,图书库内没有您要借阅的书\n");
    else foutput(head);
    output(head);
}
//-------------------------------- 图书归还 -------------------------
f5()
{
    int m,n;                                    
    char name[20];
    f1();
    m=0;
    printf("请输入您要归还的书名:");
    scanf("%s",name);
    p=head->next;
    while(p!=NULL)
    {
        if(strcmp(name,p->name)==0)
        {
            printf("请输入您要归还的数量:");
            scanf("%d",&n);
            p->total=p->total+n;
            m++;
        }
        p=p->next;
    }
    if(m==0)    printf("\n对不起,此书未借出or书名错误!!!\n");
    else foutput(head);
    output(head);
}
//------------------------------ 单个图书信息插入 -----------------------
f6()
{
    f1();
    p=(struct book *)malloc(sizeof(struct book));
    printf("请输入你要增加的书名:");
    scanf("%s",&p->name);
    printf("请输入你要增加的书的页数:");
    scanf("%d",&p->page);
    printf("请输入你要增加的书的价格:");
    scanf("%d",&p->price);
    printf("请输入你要增加的书的库存:");
    scanf("%d",&p->total);
    p->next=NULL;
    end->next=p;
    end=p;
    foutput(head);
    output(head);
   
}
//-------------------------------- 排序输出 -----------------------------
f7()
{   
    int n;
    n=1;
    while(n!=0)
    {
        printf("         请选择排序方式\n");
        printf("=====================================\n");
        printf("    1、 按书的价格排序输出\n");
        printf("    2、 按书的页数排序输出\n");
        printf("    0、 返回主菜单\n");
        printf("=====================================\n");
        printf("           请选择:");
        scanf("%d",&n);
        switch(n)
        {
            case 1:f7_price();break;
            case 2:f7_page();break;
            case 0:break;
            default:printf("选择错误!!!\n");
        }
    }
}
//----------------------------- 按书的价格排序 -------------------
f7_price()
{
    printf("排序之前:\n");
    f1();
    //----------------------头结点---------------------
    head2=(struct book *)malloc(sizeof(struct book));
    head2->price=0;
    end2=head2;
    end2->next=NULL;
    //---------------------尾结点----------------------
    p2=(struct book *)malloc(sizeof(struct book));
    p2->price=1000;
    p2->next=NULL;
    end2->next=p2;
    end2=p2;   
    p=head->next;
    while(p!=NULL)
    {
        q1=head2;
        while(q1!=NULL)
        {
            q2=q1->next;
            p2=(struct book *)malloc(sizeof(struct book));
            p2->price=p->price;
            p2->total=p->total;
            p2->page=p->page;
            strcpy(p2->name,p->name);//strcpy函数:字符串的复制;
            p2->next=NULL;
            if((p2->price)>=(q1->price)&&(p2->price)<=(q2->price)&&(q2!=NULL))
            {
                q1->next=p2;
                p2->next=q2;
                break;
            }
            else    q1=q1->next;
        }
        p=p->next;
    }
    printf("按书的价格排序:\n");
    output(head2);
}   
//------------------------------ 按书的页数排序 -----------------------
f7_page()
{  
    printf("排序之前:\n");
    f1();
    //----------------------头结点---------------------
    head2=(struct book *)malloc(sizeof(struct book));
    head2->page=0;
    end2=head2;
    end2->next=NULL;
    //---------------------尾结点----------------------
    p2=(struct book *)malloc(sizeof(struct book));
    p2->page=1000;
    p2->next=NULL;
    end2->next=p2;
    end2=p2;   
    p=head->next;
    while(p!=NULL)
    {
        q1=head2;
        while(q1!=NULL)
        {
            q2=q1->next;
            p2=(struct book *)malloc(sizeof(struct book));
            p2->price=p->price;
            p2->total=p->total;
            p2->page=p->page;
            strcpy(p2->name,p->name);//strcpy函数:字符串的复制;
            p2->next=NULL;
            if((p2->page)>=(q1->page)&&(p2->page)<=(q2->page)&&(q2!=NULL))
            {
                q1->next=p2;
                p2->next=q2;
                break;
            }
            else    q1=q1->next;
        }
        p=p->next;
    }
    printf("按书的页数排序:\n");
    output(head2);
}
 
2011-05-20 22:43
快速回复:怎么将文件中的信息放入单链表中并显示出来
数据加载中...
 
   



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

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