| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1222 人关注过本帖
标题:写了一个系统,文件读写出了问题,求帮助
只看楼主 加入收藏
qq175101845
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2013-10-11
结帖率:25%
收藏
已结贴  问题点数:10 回复次数:20 
写了一个系统,文件读写出了问题,求帮助
我写了两个cpp  一个cpp是登陆的  一个是系统主程序的
然后写着写着,发现文件读写不能用,而且写出来的文件还是乱码
最后实在搞不懂了,求帮助
谢谢!
程序代码:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
void xxx();
char yonghuming[50]="admin";  //用户名密码为admin
char mima[50]="admin";
void login()
{
    char a[50];
    char b[50];

    while(1)
    {
        printf("默认用户名密码均为admin\n");
        printf("用户名:");
        scanf("%s",&a);
        getchar();
        printf("密码:");
        scanf("%s",&b);
        getchar();
        if(!strcmp(yonghuming,a)&&!strcmp(mima,b))
            xxx();
        else
            printf("error!\n");
    }
}
void xiugai()
{
    printf("请输入新的用户名:");
    scanf("%s",&yonghuming);
    printf("请输入新的密码:");
    scanf("%s",&mima);
    login();

}
void main()
{
    system("color 0A");
    login();
}

程序代码:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define N 1000
#define M 5
void xiugai();

/*定义学生结构体*/

struct stu
{
    int num;          //学号
    char name[20];    //姓名
    char sex[20];     //性别
    float mark[M];    //分数
}
;
struct stu students[N];
int i=0;

/*添加学生信息*/

void students_message()
{
    char pan;
    int j;
    while(1)
    {
        printf("请输入学号:");
        scanf("%d",&students[i].num);
        printf("请输入姓名:");
        scanf("%s",&students[i].name);
        printf("请输入性别:");
        scanf("%s",&students[i].sex);
        for(j=0;j<M;j++)
        {
            printf("请输入分数%d:",j+1);
            scanf("%f",&(students[i].mark[j]));
        }
        i++;
        while(1)
        {
            printf("是否继续输入?(Y/N)");
            scanf("%s",&pan);
            getchar(); 
            switch(pan)
            {
            case 'N':
            case 'n':
                return;
            case 'Y':
            case 'y':
                break;
            default:
                printf("错误,请重新输入!\n");
                continue;
            }
            break;
        }
    }
}

/*修改学生信息*/

void students_recover()
{
    int j,k,t;
    char xiu[50];
    int xiu1;
    char choise;
    printf("请选择修改类型:姓名查询(a)/学号查询(b)");
    scanf("%s",&choise);
    switch(choise)
    {
    case 'a':
        printf("请输入姓名:");
        scanf("%s",&xiu);
        for(j=0,k=0;j<N;j++)
            if(strcmp((const char *)xiu,students[j].name)==0)     //查询是否存在该姓名
            {
                printf("请输入新的学号:");
                scanf("%d",&students[j].num);
                printf("请输入新的姓名:");
                scanf("%s",&students[j].name);
                printf("请输入新的性别:");
                scanf("%s",&students[j].sex);
                for(t=0;t<M;t++)
                {
                    printf("请输入分数%d:",t+1);
                    scanf("%f",&(students[j].mark[t]));
                }
                k=1;
            }
        if(k)
            break;
        else
            printf("该学生不存在!\n");
        system("pause");
        break;
    case 'b':
        printf("请输入学号:");
        scanf("%d",&xiu1);
        for(j=0,k=0;j<N;j++)
            if(xiu1==students[j].num)     //查询是否存在该学号
            {
                printf("请输入新的学号:");
                scanf("%d",&students[j].num);
                printf("请输入新的姓名:");
                scanf("%s",&students[j].name);
                printf("请输入新的性别:");
                scanf("%s",&students[j].sex);
                for(t=0;t<M;t++)
                {
                    printf("请输入分数%d:",t+1);
                    scanf("%f",&(students[j].mark[t]));
                }
                k=1;
            }
        if(k)
            break;
        else
            printf("该学生不存在!\n");
        system("pause");
        break;
    default:
        printf("输入错误!\n");
        break;
    }
}

/*查询学生信息*/

void students_chaxun1()
{
    char choise;
    int j,k,t;
    int cha1;
    char cha[50];
    printf("请选择查询类型:姓名查询(a)/学号查询(b)");
    scanf("%s",&choise);
    switch(choise)
    {
    case 'a':
        printf("请输入姓名:");     //输入姓名查询
        scanf("%s",&cha);
        for(j=0,k=0;j<N;j++)
            if(strcmp((const char *)cha,students[j].name)==0)
            {
                printf("\n\n");
                printf("--------------------------------------------------------------------\n");    
                printf("%10s%10s%8s%8s%8s%8s%8s%8s\n","学号","姓名","性别","成绩1","成绩2","成绩3","成绩4","成绩5");
                printf("--------------------------------------------------------------------\n");    
                printf("%10d%10s%8s",students[j].num,students[j].name,students[j].sex);
                for(t=0;t<M;t++)
                    printf("%8.2f",students[j].mark[t]);
                printf("\n");
                printf("--------------------------------------------------------------------\n");    
                printf("\n\n");
                system("pause");
                k=1;
            }
        if(k)
            break;
        else
            printf("不存在\n");
        system("pause");
        break;
    case 'b':
        printf("请输入学号:");     //输入学号查询
        scanf("%d",&cha1);
        for(j=0,k=0;j<N;j++)
            if(cha1==students[j].num)
            {
                printf("\n\n");
                printf("--------------------------------------------------------------------\n");    
                printf("%10s%10s%8s%8s%8s%8s%8s\n","学号","姓名","性别","成绩1","成绩2","成绩3","成绩4","成绩5");
                printf("--------------------------------------------------------------------\n");    
                printf("%10d%10s%8s",students[j].num,students[j].name,students[j].sex);
                for(t=0;t<M;t++)
                    printf("%8.2f",students[j].mark[t]);
                printf("\n");
                printf("--------------------------------------------------------------------\n");    
                printf("\n\n");
                system("pause");
                k=1;
            }
        if(k)
            break;
        else
            printf("不存在\n");
        system("pause");
    default:
        printf("输入错误!\n");
        break;
    }
}

/*输出学生信息*/

void students_shuchu()
{
    int    j,k;
    printf("\n\n");
    printf("--------------------------------------------------------------------\n");    
    printf("%10s%10s%8s%8s%8s%8s%8s%8s\n","学号","姓名","性别","成绩1","成绩2","成绩3","成绩4","成绩5");
    printf("--------------------------------------------------------------------\n");    
        for(j=0;j<i;j++)
        {
            printf("%10d%10s%8s",students[j].num,students[j].name,students[j].sex);
            for(k=0;k<M;k++)
                printf("%8.2f",students[j].mark[k]);
            printf("\n");
        }
    printf("--------------------------------------------------------------------\n");    
    printf("\n\n");
    system("pause");
}

/*删除学生信息*/

void students_delete()
{
    int j,k,l;
    int del;
    char del1[50];
    printf("请输入学号:");
    scanf("%d",&del);
    printf("请输入姓名:");
    scanf("%s",&del1);
    for(j=0;j<N;j++)
        if(del==students[j].num)
        {
            if(strcmp((const char *)del1,students[j].name)==0)    //验证学号以及姓名
            {
                printf("学生信息核对成功!\n");
                for(k=j;k<N;k++)
                {
                    strcpy(students[k].name,students[k+1].name);
                    strcpy(students[k].sex,students[k+1].sex);
                    students[k].num=students[k+1].num;
                    for(l=0;l<M;l++)
                        students[k].mark[l]=students[k+1].mark[l];
                }
                printf("该学生已删除!\n");
                i--;
            }
        }
        else
        {
            printf("学生信息核对出错或不存在!\n");
            break;
        }
    system("pause");
}

/*读取文件*/

void read_txt()
{
    FILE *fp;
    int t;
    if((fp=fopen("message.txt","a+"))==NULL)
    {
        printf("不能打开文件!\n");
        return;
    }
    if(fwrite(&i,sizeof(int),1,fp)!=1)
        printf("写入文件错误!\n");
    for(t=0;t<i;t++)
    {
        if (fwrite(&students[t],sizeof(struct stu),1,fp)!=1)
            printf("写入文件错误!\n");
    }
    fclose(fp);  
}

/*写入文件*/

void write_txt()
{
    FILE *fp;
    int t;
    if((fp=fopen("message.txt","w+"))==NULL)
    {
        printf("不能打开文件!\n");
        return;
    }
    if(fwrite(&i,sizeof(int),1,fp)!=1)
        printf("写入文件错误!\n");
    for(t=0;t<i;t++)
    {
        if(fwrite(&students[t],sizeof(struct stu),1,fp)!=1)
            printf("写入文件错误!\n");
    }
    fclose(fp);
}

/*主函数*/

void xxx()
{
    int choice;
    read_txt();
    while(1)
    {
        system("cls");
        printf("欢迎进入学生管理系统!\n");
        printf("---------------------\n");
        printf("   1.添加学生信息\n");
        printf("   2.修改学生信息\n");
        printf("   3.查询学生信息\n");
        printf("   4.输出学生信息\n");
        printf("   5.删除学生信息\n");
        printf("   6.修改系统密码\n");
        printf("   7.退出学生系统\n");
        printf("---------------------\n");
        printf("请选择1-7:");
        scanf("%d",&choice);
        switch(choice)
        {
        case 1:
            students_message();
            break;
        case 2:
            students_recover();
            break;
        case 3:
            students_chaxun1();
            break;
        case 4:
            students_shuchu();
            break;
        case 5:
            students_delete();
            break;
        case 6:
            xiugai();
            break;
        case 7:
            printf("已成功退出学生管理系统\n");
            exit(0);
            break;
        default:
            printf("错误\n");
            getchar();
            system("pause");
        }
        write_txt();
    }
}
搜索更多相关主题的帖子: 主程序 color 而且 
2014-04-25 10:59
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
太长的代码啊

告诉你一个小窍门  你的读写函数都分别独立  这符合这个窍门的

另开一个应用程序   单独测试文件读写部分代码(函数) 直至这个函数完全能达到自己的目的,
如果把这个通过测试的函数再还原到你的程序中时,如果还是达不到目的,那可能问题出在其他模块

DO IT YOURSELF !
2014-04-25 11:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
 if(fwrite(&i,sizeof(int),1,fp)!=1)


fwrite的第一参数应该是一个buffer吧 你这个是啥呢  没看懂

DO IT YOURSELF !
2014-04-25 11:07
qq175101845
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2013-10-11
收藏
得分:0 
以下是引用wp231957在2014-4-25 11:07:31的发言:

 if(fwrite(&i,sizeof(int),1,fp)!=1)

fwrite的第一参数应该是一个buffer吧 你这个是啥呢  没看懂

是这样的啊  我看书上就是这么写的啊
2014-04-25 11:32
qq175101845
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2013-10-11
收藏
得分:0 
以下是引用wp231957在2014-4-25 11:05:11的发言:

太长的代码啊

告诉你一个小窍门  你的读写函数都分别独立  这符合这个窍门的

另开一个应用程序   单独测试文件读写部分代码(函数) 直至这个函数完全能达到自己的目的,
如果把这个通过测试的函数再还原到你的程序中时,如果还是达不到目的,那可能问题出在其他模块

这个窍门我还真没想到  我先去试试  
不行在来问问你  谢谢啦
2014-04-25 11:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
你原本根本就沒測試過自己的讀寫模塊是否正確!用a+方式打開的讀文件,你拚命往裡寫數據幹嘛?而且你確認這裡應該是a+嗎?

授人以渔,不授人以鱼。
2014-04-25 11:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
說來說去,仍然是我年年月月天天都強調的遞增開發思維問題,從小(少)搭起,確保每一次都是正確的,然後再往後寫,千萬不要一氣把整個程序的代碼寫全了再回頭調試,總不見有幾人聽得進耳,結果所問的問題,又絕大多數歸結到沒遵守這個習慣上,都沒法敎得明白的,意識形態不同之故。整天去弄那些單一性的小題目,當然是一個程序一個功能,寫完了再調試不遟,但系統的組合不是簡單的元件叠加,它是隨著元件的增加而增加相互影響關係的,平時就不注意積累這種相互影響的關係,自以爲有做了很多小題目的經驗,就可以應付(稍)大系統的作業,必定碰得頭破血流。

一開始就應該做中小型系統,選定了,也衹做這一個,一直做到畢業,期間不需去做別的什麽課題,學到什麽新知識就把它用到本項目中,幾年下來,實踐中該用到的都一定會遇到,而若總是做小題目,則永遠也遇不到真實系統中會遇到的問題,也就沒實際經驗,真以爲靠幾個算法可以出去闖江湖了麽。

授人以渔,不授人以鱼。
2014-04-25 12:04
fragileeye
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:107
专家分:387
注 册:2011-5-21
收藏
得分:2 
ls说得对,我就不明白当初自己自学的时候都是从一个个模块实现起来,我觉得这是很正常的思维啊。没有好砖块和好结构,哪来稳固的房子。
有几点得给lz提个建议:
1、既然是用汇编或c写代码,最基本最重要的一点,不要写自己不明白或不理解或不清楚的代码
2、测试再测试,首先自己要对这个模块满意
3、如果对框架的思维不够清晰,写个简单的文档,写出大方向的逻辑,对着所写文档来写
就lz这个程序,说几处,
1、用户登录,密码怎么能存储在程序中?!
2、数组不初始化,容易导致产生乱码,没调试过吧?
3、全局变量用起来很方便吗?能不用就不用
4、什么时候用数组方便,什么时候用指针灵活?班上成员固定么?数据格式固定么?仔细想清楚再用。
2014-04-25 12:24
qq175101845
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2013-10-11
收藏
得分:0 
以下是引用TonyDeng在2014-4-25 12:04:51的发言:

說來說去,仍然是我年年月月天天都強調的遞增開發思維問題,從小(少)搭起,確保每一次都是正確的,然後再往後寫,千萬不要一氣把整個程序的代碼寫全了再回頭調試,總不見有幾人聽得進耳,結果所問的問題,又絕大多數歸結到沒遵守這個習慣上,都沒法敎得明白的,意識形態不同之故。整天去弄那些單一性的小題目,當然是一個程序一個功能,寫完了再調試不遟,但系統的組合不是簡單的元件叠加,它是隨著元件的增加而增加相互影響關係的,平時就不注意積累這種相互影響的關係,自以爲有做了很多小題目的經驗,就可以應付(稍)大系統的作業,必定碰得頭破血流。

一開始就應該做中小型系統,選定了,也衹做這一個,一直做到畢業,期間不需去做別的什麽課題,學到什麽新知識就把它用到本項目中,幾年下來,實踐中該用到的都一定會遇到,而若總是做小題目,則永遠也遇不到真實系統中會遇到的問題,也就沒實際經驗,真以爲靠幾個算法可以出去闖江湖了麽。

也没有啊,我只是在我的系统里面加上了文件的读写,也是最近才自学的文件读写,不懂才来问问的,而且我的系统没有问题,
2014-04-25 13:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
沒問題就得了,算我多嘴吧。

授人以渔,不授人以鱼。
2014-04-25 13:19
快速回复:写了一个系统,文件读写出了问题,求帮助
数据加载中...
 
   



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

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