| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6751 人关注过本帖, 1 人收藏
标题:(5)C语言问题之人员管理系统
只看楼主 加入收藏
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
是不是需要用到书上的一种“按数据块读写文件”的方法?
2015-12-12 23:57
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
以下是引用武伟在2015-12-12 23:41:49的发言:


感觉用gets()的话好像在导入文件的时候也会出问题,我试试看


用scanf("%[^\n]", name)也行。

我们都在路上。。。。。
2015-12-13 00:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
文本和二进制,各有各的烦恼,都要处理。相对来说,二进制好做点,不过正如以前说了,他的可移植性差点。

授人以渔,不授人以鱼。
2015-12-13 00:18
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
或许你可以从这里找到另一种思路
https://bbs.bccn.net/thread-460169-1-1.html

我们都在路上。。。。。
2015-12-13 00:18
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
头大了木有?呵.呵,反正解决的办法还是不少,休息去了,你们继续

我们都在路上。。。。。
2015-12-13 00:27
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
抱歉,昨天没打招呼就睡下了。二进制文件的相关内容只是稍微看了一下,给我最直观的一个大问题就是,通过修改二进制文件中的内容然后导入数据好像不容易实现。
2015-12-13 09:35
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用hellovfp在2015-12-13 00:18:24的发言:

或许你可以从这里找到另一种思路
https://bbs.bccn.net/thread-460169-1-1.html

按照这个思路,我修改了了下代码:
程序代码:
/***************************文件导出***************************/
void Save(struct Personnel stu[],int Max)
{
    int i;
    FILE*fp;
    if((fp=fopen(DATA_FILENAME,"a"))!=NULL)
    {
        for(i=0;i<Max;i++)
            fprintf(fp,"%s\t|%s\t|%d\t|%s\t|%s\n",stu[i].name,
            stu[i].sex,
            stu[i].age,
            stu[i].IDcard,
            stu[i].profile);
        fclose(fp);
    }
    else
        printf("cannot open files!\n");
}


[此贴子已经被作者于2020-3-23 13:11编辑过]

2015-12-13 09:38
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
额,说明一下,前四行的数据是我把\t删了后的效果,怎么看怎么觉得变扭,后来又加上了。
按照这个思路来的话,以"|"为分界线,名字之间加空格的问题应该可以解决了吧,可是sscanf语句又看不懂了
格式1:fred|30|18677442345   对应语句:"%[^|]|%ld|%s"
格式2:fred|30|18677442345|990|009    对应语句:"%[^|]|%d|%[^|]|%d|%s"
看了好久都不理解,只知道[^|]代表读取到不为|的字符串。

[此贴子已经被作者于2015-12-13 09:47编辑过]

2015-12-13 09:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用武伟在2015-12-13 09:35:56的发言:

抱歉,昨天没打招呼就睡下了。二进制文件的相关内容只是稍微看了一下,给我最直观的一个大问题就是,通过修改二进制文件中的内容然后导入数据好像不容易实现。

你回看我之前主题帖回复是怎么说的

授人以渔,不授人以鱼。
2015-12-13 10:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 47楼 武伟
学那些奇怪又没绝对作用的东西干嘛。用文本数据最关键的一点诀窍是定长,不用分隔符也可以。用分隔符要看数据内容是否也用了你的分隔符。另一种有效的办法是用xml协议。

授人以渔,不授人以鱼。
2015-12-13 10:37
快速回复:(5)C语言问题之人员管理系统
数据加载中...
 
   



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

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