标题:通讯录中存在的种种问题,困扰我很久了,求各位同仁帮忙!!!!!(对不起 ...
只看楼主
Storm0305
Rank: 1
等 级:新手上路
帖 子:16
专家分:1
注 册:2011-3-5
结帖率:50%
 问题点数:0 回复次数:12 
通讯录中存在的种种问题,困扰我很久了,求各位同仁帮忙!!!!!(对不起大家我没分了,帮帮新人吧,感激)
#include<stdio.h>
#include<cstdlib>               /*主要存在的问题:存储,读取结束的问题,删除,排序无法实现*/
#include<string.h>
#define SIZE 10
#define L sizeof(struct student)
void save();
void read();
void seek();
void del();
void order();
struct student
{   
    char sex[4];
    int num;
    char name[10];
    char phone[11];
}stu[SIZE];

int i,temp;
FILE*fp;

void main()
{
    int n,j=1,l=2;

while(1)
{
menu:
    printf("菜单:(请输入编号)\n1.存入数据\n2.读取数据\n3.查找数据\n4.插入数据\n5.删除数据\n您的选项:");
    scanf("%d",&n);
    switch (n)
    {
    case 1:save();break;
    case 2:read();break;
    case 3:seek();break;
    case 4:save();break;
    case 5:del();break;
    default:printf("错误!请重新输入\n");goto menu;
    }
}
}
         
void save()                                  /*存储函数*/
{
    system("CLS");
    printf("请输入数据:\n");
    printf("性别 学号 姓名 电话\n");
    for(i=0;i<SIZE;i++)
    {
        scanf("%s %d %s %s",stu[i].sex,&stu[i].num,stu[i].name,stu[i].phone);   
        if(strcmp(stu[i].sex,"end")==0)break;  /*希望以此结束输入,但是无法实现 */
    }   
    if((fp=fopen("file1.txt","a"))==NULL)
            fp=fopen("file1.txt","w");
    for(i=0; i<SIZE;i++)
        fwrite(&stu[i],L,1,fp);
        fclose(fp);
        system ("pause");
    }
void read()                                     /*读取函数*/
{
    system("CLS");
    fp=fopen("file1.txt","r");
    printf("性别  学号  姓名  电话\n");
    for(i=0;i<SIZE;i++)
    {
        fread(&stu[i],L,1,fp);
        if(strcmp(stu[i].sex,"end")==0)break;  /*但是同样的结束方式在此函数中却可以实现*/
    }
    order();
    for(i=0;i<SIZE;i++)        
    printf("%s %d %s %s\n",stu[i].sex,stu[i].num,
            stu[i].name,stu[i].phone);
    fclose(fp);
system ("pause");
}
void seek()                                    /*查询函数,无问题*/
{
    system("CLS");
    int a;
    if((fp=fopen("file1.txt","r"))==NULL)
    {
        printf("can't open file\n");
        return;
    }
    printf("请输入所查找学生的4位学号:\n");
    scanf("%d",&a);
    for(i=0;i<SIZE;i++)
    {
        fread(&stu[i],L,1,fp);
        if (stu[i].num==a)
        {
            printf("%s %d %s %s\n",stu[i].sex,stu[i].num,
            stu[i].name,stu[i].phone);
            break;
        }
        else {printf("无此数据\n");break;}   
    }
    fclose(fp);
system ("pause");
}

void del()                                                    /*删除函数*/
{
    system("CLS");
    int a;
    if((fp=fopen("file1.txt","a+"))==NULL)
    {
        printf("can't open file\n");
        return;
    }
    printf("请输入所删除学生的4位学号:\n");
    scanf("%d",&a);
    for(i=0;i<SIZE;i++)
    {
        fread(&stu[i],L,1,fp);                             
        if(stu[i].num==a)              /*无法实现*/
        {
           for(;i<SIZE;i++)
              stu[i]=stu[i+1];
           break;
        }
    }
    for(i=0;i<SIZE;i++)
    fwrite(&stu,L,1,fp);
    system ("pause");
}

 
void order()                          /*排序同样无法实现*/
{
    int j;
    struct student a[SIZE],temp2;
     for(i=0;i<SIZE;i++)
        a[i]=stu[i];                    /*结构体是否能整体赋值?*/
        for(i=0;i<SIZE;i++)
        for(j=0;j<SIZE-1;j++)
        {
            if(stu[i].num>stu[i+1].num)
            {temp2=stu[i];stu[i]=stu[i+1],stu[i+1]=temp2;}
        }
        for(i=0;i<SIZE;i++)
            stu[i]=a[i];
}
搜索更多相关主题的帖子: 通讯录 phone 同仁 
2011-05-14 12:05
Storm0305
Rank: 1
等 级:新手上路
帖 子:16
专家分:1
注 册:2011-3-5
得分:0 
大家帮帮我吧...折腾我2,3周了,总是没有进展啊
2011-05-14 12:19
紫色吉娃娃鱼
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-9
得分:0 
。。。。。。那个。。。。。我懒得看这么长的程序哦    我们刚刚作业做了一个  之前刚刚做了一个通讯录程序  要吗
2011-05-14 13:18
Heart→M鹏
Rank: 2
等 级:论坛游民
帖 子:80
专家分:94
注 册:2011-5-13
得分:0 
哎,c语言后面快忘光了都~~研究一下你的代码当复习了~~不知道会不会有结果!
2011-05-14 13:22
Storm0305
Rank: 1
等 级:新手上路
帖 子:16
专家分:1
注 册:2011-3-5
得分:0 
回复 3楼 紫色吉娃娃鱼
也行,哥们辛苦了,给我发来我研究研究吧~  storm0305@ 感激
2011-05-14 13:58
Storm0305
Rank: 1
等 级:新手上路
帖 子:16
专家分:1
注 册:2011-3-5
得分:0 
回复 4楼 Heart→M鹏
谢谢谢谢,希望能帮我找到错误额...太纠结了
2011-05-14 13:59
紫色吉娃娃鱼
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-5-9
得分:0 
回复 5楼 Storm0305
我发你了哦,不知道有没有发错  发给你的能用否?
2011-05-14 18:16
songtosong
Rank: 2
来 自:仙女座星云&pound;&micro;伴星
等 级:论坛游民
帖 子:25
专家分:52
注 册:2010-8-29
得分:0 
我很愿意帮你,但是,我水平比你还差,呵呵
2011-05-14 20:05
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
得分:0 
用fread读写有个问题,那就是以“流”方式读入的时候未必如你所想的那样精确的读入。
比如说:你的数据是 “man 4 xiaoming 12345678”,然后读出来在stu[0]里是这样存储的
stu[0].sex里的是“man ”,num里的就是“69782034”就是“4 xi”的ascii码的倒序。所以你以
num判断是永远不可能实现的,换个思路吧。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-05-14 21:07
没有注册过的
Rank: 2
来 自:广西
等 级:论坛游民
帖 子:22
专家分:42
注 册:2011-4-16
得分:0 
哥们精神上支持你~!

就是想学~!
2011-05-15 12:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-339833-1-1.html




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

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