| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:图书信息管理系统的一些问题
只看楼主 加入收藏
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:18 
图书信息管理系统的一些问题
我定义了一个结构体数组来存储图书信息。图书信息的录入功能代码如下。
问题1:想请问数据的存储方式是如何的,为什么我将它从文件读出的时候只能读出第一个呢(已经写了一个循环,待会将那段代码放到下面,希望大家能指正)
问题2:为什么我在调试的时候查看不到到图书的名字之类(就是字符类型的数据)的信息呢

诚心请教,谢谢!(在线等,挺急的。。)

图书信息录入功能的代码:
程序代码:
void book_login()
{
    void adm_list();
    int i=0;
    FILE *fp;
    char a;
    printf("\n\n\n\t        ---Please enter book's information---\n\n");
    printf("\tLogin ID:");
    scanf("%d",&books[i].loginID);
    printf("\n\tBook name:");
    scanf("%s",&books[i].bkname);
    printf("\n\tWriter's name:");
    scanf("%s",&books[i].wname);
    printf("\n\tSort number:");
    scanf("%d",&books[i].sortnum);
    printf("\n\tPublishing company:");
    scanf("%s",&books[i].cbname);
    printf("\n\tPublishing time:");
    scanf("%ld",&books[i].time);
    printf("\n\tBook's Price:");
    scanf("%f",&books[i].price);
    system("cls");
    if((fp=fopen("book.txt","r"))==NULL)
    {
        fp=fopen("book.txt","w");
    }
    else
    {
        fclose(fp);
        fp=fopen("book.txt","a");
    }
    fprintf(fp,"%d\t%s\t%s\t%d%\t%s\t%ld\t%f\n",books[i].loginID,books[i].bkname,books[i].wname,books[i].sortnum,books[i].cbname,books[i].time,books[i].price);
    fclose(fp);
    printf("\n\n\n\n\t     The information has been stored,enter your choice to continue!\n\n");
    printf("\n");
    a=getchar();
    adm_list();
    fclose(fp);
}




将图书数据从文件读出的部分代码
程序代码:
FILE *fp;
    fp=fopen("book.txt","r");
    if(!fp)
    {
        printf ("\n\n\t\t\tThere is no file.\n\t\t\tCan not open this file!\n");
    }
    while(!feof(fp))
    {
    for(j=0;j<10;j++)
    {
        fscanf(fp,"%d",&books[i].loginID);
        fscanf(fp,"%s",&books[i].bkname);
        fscanf(fp,"%s",&books[i].wname);
        fscanf(fp,"%d",&books[i].sortnum);
        fscanf(fp,"%s",&books[i].cbname);
        fscanf(fp,"%ld",&books[i].time);
        fscanf(fp,"%f",&books[i].price);
    }
    }
    fclose(fp);




 
搜索更多相关主题的帖子: 图书 结构体 在线 如何 
2013-05-31 21:52
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
收藏
得分:0 

怎么就没人回复呢?自己帮顶
2013-05-31 22:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
问题多多,你再急也没用。

授人以渔,不授人以鱼。
2013-05-31 23:02
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
收藏
得分:0 
回复 3楼 TonyDeng
啊?!还多多啊,说几个给我看看,谢谢版主!!
2013-05-31 23:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
你上面那段代码,就只向文件输出了一条记录,但下面的代码,却企图用循环10次读入10条记录。其次,你用printf()输出的字符串难保不夹杂有空格,但须知scanf()读入的只能是没空格的一个单词,一旦对不上号,这依次读下来就错位乱了——printf()/scanf()有没有f前缀都是一样的机制。另外,你的函数分割也不清晰,这个代码不是一般的混乱。

授人以渔,不授人以鱼。
2013-05-31 23:21
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
收藏
得分:0 
回复 5楼 TonyDeng
谢谢版主。
第二点,我明白。但是你说的第一点我不能理解了,我用循环读入记录时文档里面已经有足够的数据了,这会有影响吗?
最后,函数如何才能算分割清晰呢?(这个小白真不知道)还有代码也不知道怎么才算清晰啊(让我知道哪里混乱了),谢谢版主纠正。
2013-05-31 23:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
你book_login()函数只有一个fprintf()呀,就算你连续调用10次book_login(),但你看看里面打开文件的逻辑,这10次是不断追加的吗?我没看到你生成的数据文件,不知道最后的结果是怎样的,你说有足够的数据,自己逐行调试一下读入的数据就知道怎么回事了。

写程序,每个函数只做一件事,不要夹杂不清。book_login()看名字是登录,但里面的代码包裹了很多功能,甚至包括了打开文件的判断,这是不应该放在这里的。写入数据,一个函数应该只写一条记录,你book_login()是这样了(不知道你上层是怎么调用的),但后面读入的时候,就不应该循环10次,而应该在上层循环10次调用同一个读入函数,这个函数一次只读一条记录。

授人以渔,不授人以鱼。
2013-05-31 23:37
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
收藏
得分:0 
回复 7楼 TonyDeng
额,版主,后面的话我又不懂了。读入的时候不应该循环10次而是应该在上层循环10次调用同一个读入函数,这怎么理解呢?
还有就是其实我这个函数就是录入图书信息的,所以有打开文件的判断不算是函数切割混乱吧。。
谢谢版主的解答!
2013-05-31 23:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
在主函数用合适的方式打开文件,无论读还是写,都传递这个已经打开的文件的指针即可,不要在读写函数中做打开文件的操作,那不是它们的应该做的事。读和写,各一个函数,都只处理一条记录,如何使用这些函数,是主函数的事,不是像你现在这样写是一条、读是10条那样的,你想当然能够读入10条,这是硬编码出来的魔数,文件中没有10条记录可读你咋办?更多的你不读啦?记录的条数是打开文件后想办法测试出来的,不是写在代码中的。你这代码怎么不是函数切割混乱,程序员就相当于管理者,管理代码,你这种安排就是管理不善、混乱,让你当领导设计组织架构就完蛋了。

授人以渔,不授人以鱼。
2013-05-31 23:59
猪自轻
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2012-12-11
收藏
得分:0 
回复 9楼 TonyDeng
嗯,版主说的是,就是说每个函数的分工要十分明确,只需做一件事就够了,不要夹杂其他的功能吗?
版主,那有关代码风格和一些格式的知识,版主有什么资料或网站给推荐一下吗?(或者有关编程的也行啊~
打扰版主这么久,麻烦了。谢谢版主不厌其烦地回答。
2013-06-01 00:09
快速回复:图书信息管理系统的一些问题
数据加载中...
 
   



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

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