| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 665 人关注过本帖
标题:帮忙修改下read()函数,谢谢
取消只看楼主 加入收藏
易冷兮
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-8
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
帮忙修改下read()函数,谢谢
程序代码:
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <conio.h>
int num=0;
FILE *fp;
typedef struct node_s{    //typedef:定义别名,作用:定义一个结构体,该结构体的别名为PNode 
    
    char name[10];
    char date[13];
    char earning[10];
    char remarks[100];

    struct node_s *pnext;
}Node,*PNode;

PNode createNode(){//创建节点,返回一个指针 
    PNode head = NULL;//指针初始化。
    head = (PNode)malloc(sizeof(Node));//创建节点。 
    head->pnext=NULL;
    strcpy(head->name,"\0");//首项仅初始化,不保存数据!~ 
    strcpy(head->date,"\0");
    strcpy(head->earning,"\0");
    strcpy(head->remarks,"\0");//首项仅初始化,不保存数据!~ 
    return head;
}
int split(char dst[][1000], char* str, const char* spl){/*分割文本*/ 
    int n = 0;
    char *result = NULL;
    result = strtok(str, spl);
    while( result != NULL ){
        strcpy(dst[n++], result);
        result = strtok(NULL, spl);
    }
    return n;
}

void save(PNode head){
    PNode temp = head->pnext;//默认非初始化项目开始。 
    fp=fopen("1.txt","wb");
    while(temp!=NULL)
    {
        fwrite(temp,sizeof(struct node_s),1,fp);
        temp=temp->pnext;
    }
    fclose(fp);
}


int read(PNode head){
    int i=0,ReadNumFlag=0;
    PNode temp = head->pnext;//默认非初始化项目开始。 
    fp=fopen("1.txt","rb");
    
    while(fread(temp,sizeof(struct node_s),1,fp)==1)
    {
        i++;
        puts(temp->name);
        if(ReadNumFlag==0){
            PNode head = NULL;
            head = createNode();
            ReadNumFlag=1;
        }
        head->pnext=temp;
        temp->pnext=NULL;
        num++;
        
    }
    num=i;
    head = (PNode)malloc(sizeof(Node));
    
    printf("这是 本地读取的条数!:%d\n",i);
    return(num);
}

void printUI(){
    int i,j,k;
    system("cls");
    system("color 75");
    printf("\t\t\t**********************家庭财务管理系统*********************\n");
    char str[]={"1:添加信息\n2:删除信息\n3:修改信息\n4:查询信息\n5:显示信息\n6:信息排序\n7:统计信息\n8:多项操作\n0:退出程序\n"}; 
    char ModeName[10][1000];
    int cnt=split(ModeName,str,"\n"); 
    for(i=9;i>=1;i--){
        printf("\t\t\t ");//初始化_每段 
        for(k=1;k<=9-i;k++){
            printf("  "); 
        }
        for(j=1;j<=i;j++){
            printf("* ");
        }
        printf("\t");
        printf("%s",ModeName[9-i]);
        printf("\t");
        for(j=1;j<=i;j++){
            printf("* ");
        }
        printf("\n");//尾端换行 
    }
} 

void add_new(PNode head){
    PNode node = NULL,temp = NULL;
    if(NULL==head)return;//这个情况基本不存在 
    node=(PNode)malloc(sizeof(Node));
    printf("请输入姓名,第%d测试\n",num+1); 
    scanf("%s",&node->name);
    printf("请输入时间,第%d项测试\n",num+1);
    scanf("%s",&node->date);
    printf("请输入收入,第%d项测试\n",num+1);
    scanf("%s",&node->earning);
    printf("请输入备注,第%d项测试\n",num+1);
    scanf("%s",&node->remarks);
    node->pnext=NULL;//尾部置NULL
    for(temp=head;temp->pnext!=NULL;temp=temp->pnext);//寻找最后节点,最后把temp作为最后一个节点 
    temp->pnext=node;//链接下一跳的头部
    save(head);
    printf("\n\t\t\t\t    是否继续添加?[输入Y/N]:");
    num++;
    //save(head);
    if (getch()=='y')
        add_new(head); 
    else{
        system("pause");/*跳出*/
    }         
}

void show_all(PNode head){
    if(NULL==head)return;//这个情况基本不存在 
    PNode temp = head->pnext;//无法添加到for循环初始化中,除非用c99编译器【从非初始化项目,作为第一项!】 
    for(;temp!=NULL;temp=temp->pnext){
        
        printf("【共%d条】姓名:%s,日期:%s,收入:%s,备注:%s\n",num,temp->name,temp->date,temp->earning,temp->remarks);
    } 
system("pause");
}

void del_test(PNode *head,int n){//调用 del(&head,n); 
    int i=0;
    PNode temp = NULL;
    if(NULL==head)return;//这个情况基本不存在 
    
    
    if(n==1){
        temp=*head;//保存欲删除内存
        *head=(*head)->pnext;
        num--;
        free(temp);
    } 
    
    for(temp=*head,i=1;temp!=NULL;temp=temp->pnext,++i){
        if(n==i+1){
            PNode t = temp->pnext;
            temp->pnext = temp->pnext->pnext;
            free(t);
            num--;
            break;
        }
    }
    
}

void CheckMode(int icheckmode){//作用,当用户按下选项之后提示用户当前所选功能 
    switch(icheckmode){
            case 1:printf("\t\t\t\t\t       [添加信息]\n");break; 
            case 2:printf("\t\t\t\t\t       [删除信息]\n");break;
            case 3:printf("\t\t\t\t\t       [修改信息]\n");break;
            case 4:printf("\t\t\t\t\t       [查询信息]\n");break;
            case 5:printf("\t\t\t\t\t       [显示信息]\n");break;
            case 6:printf("\t\t\t\t\t       [信息排序]\n");break;
            case 7:printf("\t\t\t\t\t       [统计信息]\n");break;
            case 8:printf("\t\t\t\t\t       [多项操作]\n");break;
            case 0:printf("\t\t\t\t\t       [退出程序]\n");break;
            default:{}
    }            
} 

main(){
    int imode;
    PNode head = NULL;
    head = createNode();
    
    for(;;){
        printUI();
        printf("\n\n\t\t===========================[%d]请输入您的选择[%d]=============================\n\n\t\t\t\t\t\t   ",read(head),read(head)); 
        scanf("%d",&imode);
        CheckMode(imode);
        switch(imode){
            case 1:add_new(head);break; 
            //case 2:del();break;
            //case 3:update();break;
            //case 4:search();break;
            case 5:show_all(head);break;
            //case 6:sort();break;
            //case 7:countitem();break;
            //case 8:more();break;
            case 0:printf("\n\t\t\t         [ Honey,I have always been with you ]\n");exit(0);
            default:{
            printf("重新输入!\n");
            system("pause");
            getchar();
            }
        }    
    }
}
搜索更多相关主题的帖子: 结构体 
2017-04-08 15:27
易冷兮
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-8
收藏
得分:0 
save()函数是没什么问题的,但是read()函数一直有问题,第一次的时候是没问题的。第二次打开,就无法将本地数据读入到链表中!~求大神帮忙修改下
2017-04-08 15:28
易冷兮
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-4-8
收藏
得分:0 
回复 3楼 吹水佬
不是这个原因。。
2017-04-08 15:57
快速回复:帮忙修改下read()函数,谢谢
数据加载中...
 
   



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

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