| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 500 人关注过本帖
标题:关于文件输入输出问题,一个小问题
只看楼主 加入收藏
我是胖子
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2013-5-12
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:8 
关于文件输入输出问题,一个小问题
# include <stdio.h>
# include <windows.h>
# include <stdlib.h>
# include <string.h>
struct book
{
    int book_number;
    char book_name[30];
    float book_price;
    char book_class[20];
    int book_sign;
}book[30];
void InformationSearch();
void BackStage();
bool Login();
void Initialize();
void AddItem();
void ChangeItem();
void DeletItem();
void ScanItem();
void ChangePassword();
void save(FILE * fp, int i);
void main()//主函数登陆
{
    printf("--------请输入登陆状态-------\n");
    printf("1.游客登录\n");
    printf("2.管理员登陆\n");
 
    int i;
    scanf("%d", &i);
    switch(i)
    {
    case 1:
        {
            system("cls");
            Sleep(800);
            InformationSearch();break;
        }
    case 2:
        {
            system("cls");
            Sleep(800);
            BackStage();break;
        }
    }
}
void InformationSearch()//信息查询系统
{
}
void BackStage()//后台系统
{
    if(Login())
    {
        return;
    }
    while(1)
    {
        printf("--------欢迎登陆图书后台管理系统--------\n");
        printf("1.初始化 所有信息\n");
        printf("2.添加 图书信息\n");
        printf("3.修改 图书信息\n");
        printf("4.删除 图书信息\n");
        printf("5.查看 图书信息\n");
        printf("6.管理员密码修改\n");
 
        int i;
        scanf("%d", &i);
        switch(i)
        {
        case 1:
            {
                system("cls");
                Sleep(800);
                Initialize();
                break;
            }
        case 2:
            {
                system("cls");
                Sleep(800);
                AddItem();
                break;
            }
        case 3:
            {
                system("cls");
                Sleep(800);
                ChangeItem();
                break;
            }
        case 4:
            {
                system("cls");
                Sleep(800);
                DeletItem();
                break;
            }
        case 5:
            {
                system("cls");
                Sleep(800);
                ScanItem();
                break;
            }
        case 6:
            {
                system("cls");
                Sleep(800);
                ChangePassword();
                break;
            }
        }
    }
}
bool Login()//打开保存密码的文件,并验证
{
    FILE * fp;
    int count;
    char filename[] = "password";
    char ch[] = "admin";
    char stringIn[10];
    char stringOut[10];
 
}
    while ((fp = fopen(filename, "rb+")) == NULL)
     {
         printf("这是您首次使用本系统\n默认密码为admin\n");
         fp = fopen(filename, "wb+") ;
         fprintf(fp, "admin");
         fclose(fp);
     }
    fscanf(fp, "%s", stringOut);
    printf("请输入密码: ");
    scanf("%s", stringIn);
    count = strcmp(stringIn, stringOut);
    if(count==0)
        return false;
    else
        return true;
}
void Initialize()
{
    char ch;
    int i = 0;
    FILE * fp;
    fp = fopen("Data", "wb+");
    do
    {
        printf("=================================\n");
        printf("请输入第%d项图书信息\n", i+1);
        printf("图书编号: ");
        scanf("%d", &book[i].book_number);
        ch = getchar();
        printf("图书名称: ");
        scanf("%s", book[i].book_name);
        ch = getchar();
        printf("图书价格: ");
        scanf("%f", &book[i].book_price);
        ch = getchar();
        printf("图书类别: ");
        scanf("%s", book[i].book_class);
        ch = getchar();
        book[i].book_sign = 1;
        printf("=================================\n");
        ++i;
        printf("是否继续录入?(Y/N)");
        ch = getchar();
    }while(ch=='y'&&'Y');
    save(fp, i);
    fclose(fp);
}
void AddItem()
{
    char ch;
    int i ;
    FILE * fp;
    if((fp = fopen("Data", "ab+"))==NULL)
    {
        printf("cannot open file!\n");
        return;
    }
 
    for(i=0;i<30;i++)
    {
        fread(&book[i], sizeof(struct book), 1, fp);
        if(book[i].book_number==0)
        {
            break;
        }
    }
    do
    {
        printf("=================================\n");
        printf("请输入第%d项图书信息\n", i+1);
        printf("图书编号: ");
        scanf("%d", &book[i].book_number);
        ch = getchar();
        printf("图书名称: ");
        scanf("%s", book[i].book_name);
        ch = getchar();
        printf("图书价格: ");
        scanf("%f", &book[i].book_price);
        ch = getchar();
        printf("图书类别: ");
        scanf("%s", book[i].book_class);
        ch = getchar();
        book[i].book_sign = 1;
        printf("=================================\n");
   
        printf("是否继续录入?(Y/N)");
        ch = getchar();
        if(fwrite(&book[i], sizeof(struct book), 1, fp)!=1)//这里的问题,为什么我添加新记录的时候总是Error!?
        {
            printf("Error!\n");
            break;
        }

        ++i;
    }while(ch=='y'&&'Y');
 
    fclose(fp);
}
void ChangeItem()
{
}
void DeletItem()
{
}
void ScanItem()
{
    FILE * fp;
    int siz, j, count = 0, i = 0;
    char ch;
    if((fp=fopen("Data", "rb+"))==NULL)
    {
        printf("打开数据文件Data错误!\n");
        exit(0);
    }
 
    printf("编号   名称   价格(元)  类别\n");
    for(i=0;i<30;i++)
    {
        fread(&book[i], sizeof(struct book), 1, fp);
        if(book[i].book_number==0)
        {
            break;
        }
        printf("%2d%8s%9.2f%9s", book[i].book_number, book[i].book_name, book[i].book_price, book[i].book_class);
        printf("\n");
    }
 
}
void ChangePassword()
{
}
void save(FILE * fp, int i)
{
//    fprintf(fp, "%d%10s%6.2f%10s", book[i].book_number, book[i].book_name, book[i].book_price, book[i].book_class);
//    fprintf(fp, "\n");
    int j;
    for(j=0;j<=i;j++)
    {
        if(fwrite(&book[j], sizeof(struct book), 1, fp)!=1)
        {
            printf("error!");
            break;
        }
    }
}

[ 本帖最后由 我是胖子 于 2013-5-15 16:52 编辑 ]
搜索更多相关主题的帖子: include 
2013-05-15 12:26
我是胖子
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2013-5-12
收藏
得分:0 
程序写的不是很完整,求高手指点啊,我一直在写这个程序,只有void AddItem()函数里有点问题~

为啥 fwrite函数返回的不是1  而是0

就是标红位置  有问题

[ 本帖最后由 我是胖子 于 2013-5-15 16:52 编辑 ]
2013-05-15 12:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:20 
没找到原因,全局变量不用book就行,还有些疑惑


[fly]存在即是合理[/fly]
2013-05-15 17:03
我是胖子
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2013-5-12
收藏
得分:0 
回复 3楼 azzbcc
就是说  我写的没啥问题呗……

求高手给个解决方法~


2013-05-15 17:08
ytiantian
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2013-5-7
收藏
得分:0 
以后这种长代码分段开来、最后实现时候再link
2013-05-15 17:10
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:0 
添加的时候总是ERROR..

可能是打开文件的方式有问题吧..换个模式试试.
2013-05-15 17:23
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
以下是引用我是胖子在2013-5-15 17:08:00的发言:

就是说  我写的没啥问题呗……

求高手给个解决方法~



真的有点搞不懂啊,变量名和类型名不可以一样,但是我把类型名改掉也不行,改变量名就行,有点无奈


[fly]存在即是合理[/fly]
2013-05-15 17:25
我是胖子
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2013-5-12
收藏
得分:0 
回复 7楼 azzbcc
这个是我写完的时候才注意到的    待会改了,这是个大问题,好像跟定义变量 int int = 2;一样

这个程序我差不多写完了   就差个密码修改了  ,先谢谢你哈  学到了好多~
2013-05-15 17:39
我是胖子
Rank: 1
等 级:新手上路
帖 子:20
专家分:4
注 册:2013-5-12
收藏
得分:0 
回复 7楼 azzbcc
我把变量名改了  也不行~~
2013-05-15 18:16
快速回复:关于文件输入输出问题,一个小问题
数据加载中...
 
   



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

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