| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6880 人关注过本帖, 1 人收藏
标题:(5)C语言问题之人员管理系统
只看楼主 加入收藏
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
以下是引用武伟在2015-12-12 21:39:49的发言:

才发现书上的某一节——“模块化程序设计”里的猜数游戏中对输入的合法性解决办法
改了下,输入可以改成这样:

int ret,number;
printf("请输入本次录入的成员人数:");
scanf("%d",&number);
ret=scanf("%d",&number);
while(ret!=1)
{
    printf("★输入错误,请按回车返回重新输入!\n");
    while(getchar()!='\n');            //清除输入缓冲区中的错误数据
    printf("请输入本次录入的成员人数:");
    ret=scanf("%d",&number);
}


重复代码scanf

我们都在路上。。。。。
2015-12-12 22:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 20楼 武伟
是的,丢失数据,大虫。

授人以渔,不授人以鱼。
2015-12-12 22:23
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
回复 21楼 hellovfp
怪我粗心,顾下不顾上了,谢谢。
2015-12-12 22:27
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
以下是引用TonyDeng在2015-12-12 22:23:37的发言:

是的,丢失数据,大虫。


估计他想追加来解决,重复数据怎么办?呵.呵

我们都在路上。。。。。
2015-12-12 22:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 24楼 hellovfp
检测重复可以做到,但实际上是那几个导入导出文件的选项不需要,有那个才里外不是人。

授人以渔,不授人以鱼。
2015-12-12 22:32
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
回复 25楼 TonyDeng
木有看到怎么打开文件的代码。

我们都在路上。。。。。
2015-12-12 22:36
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用TonyDeng在2015-12-12 22:23:37的发言:

是的,丢失数据,大虫。

原来的:
if((fp=fopen(DATA_FILENAME,"w+"))!=NULL)

修改后:
if((fp=fopen(DATA_FILENAME,"a"))!=NULL)


这样改了以后,数据丢失的问题测试的时候表面上看是解决了,不知道是不是真的解决……
2015-12-12 22:38
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
程序代码:
/***************************文件导出***************************/
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");
}

/***************************文件导入***************************/
int Read(struct Personnel stu[])
{
    printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
    printf("\t┃                                                            ┃\n");
    printf("\t┃ **********★☆欢迎使用人员信息管理系统☆★********** ┃\n");
    printf("\t┃                                                            ┃\n");
    printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    printf("\t┃                          文件导入                          ┃\n");
    printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
    int i;
    int result=-1;
    FILE *fp;
    if((fp=fopen(DATA_FILENAME,"r"))!=NULL)
    {
        for(i=0;!feof(fp);i++)
        {
            fscanf(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);
        }
        result=i;
        fclose(fp);
    }
    else
    {
        printf("\t\t\t打开文件失败!\n");
        printf("\t\t\t*************\n");
        printf("\t\t\t请按任意键返回主菜单……");
        getch();
    }
    return result;
}


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

2015-12-12 22:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 27楼 武伟
没有,还有问题。

授人以渔,不授人以鱼。
2015-12-12 22:39
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用TonyDeng在2015-12-12 22:39:52的发言:

没有,还有问题。

要是再有数据丢失的话,就是如果先在程序中输入数据,再导入文本中的数据的话,之前输入的数据会被覆盖掉。
2015-12-12 22:50
快速回复:(5)C语言问题之人员管理系统
数据加载中...
 
   



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

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