| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:编写信息管理系统-系统时间添加的问题
只看楼主 加入收藏
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:9 
编写信息管理系统-系统时间添加的问题
仿一位前辈的电话簿程序~在准备增加录入时间的显示及存储时出现了些许问题~语法上貌似没有错误~但是运行时有错~
程序代码:
#include<stdio.h>
#include<stdlib.h> 
#include<string.h> 
#include <windows.h> 
#include <winbase.h>
#include<time.h>

typedef struct node{
    char name[20];
    char address[40];
    char phone[15];
    char time[128];
    struct node *next;
}add_list;
struct person{
    char name[20];
    char address[40];
    char phone[15];
    char time[128];
};
FILE *fp;
char filename[]="phonebook.txt";
char c;
add_list *head,*tail;
add_list *load(char filename[]) //从文件载入通讯录
{
    add_list *new1,*head;
    struct person t;
    head=(add_list *)malloc(sizeof(add_list));
    tail=head=NULL;
    if((fp=fopen(filename,"rb"))==NULL)
        return head;
    else
        if(!feof(fp))//文件未结束输出0 继续往下
            if(fread(&t,sizeof(struct person),1,fp)==1)//从文件指针fp读取一个size为sizeof(struct person)的数据,存入t,if用来判断读取是否成功
            {
                new1=(add_list *)malloc(sizeof(add_list));//连入链表第一个节点
                strcpy(new1->name,t.name);
                strcpy(new1->address,t.address);
                strcpy(new1->phone,t.phone);
                strcpy(new1->time,t.time);
                head=tail=new1;
                while(!feof(fp))//连入其余节点
                {
                    if(fread(&t,sizeof(struct person),1,fp)==1)
                    {
                        new1=(add_list *)malloc(sizeof(add_list));
                          strcpy(new1->name,t.name);
                        strcpy(new1->address,t.address);
                        strcpy(new1->phone,t.phone);
                        strcpy(new1->time,t.time);
                        tail->next=new1;
                        new1->next=NULL;
                        tail=new1;
                    }
                }
            }
            fclose(fp);
            return head;
}

void insert(add_list **head)//指向指针的指针,也就是存放一个变量的地址的地址
{
    add_list *new1;
    char ch[128];
    time_t t;
    memset(ch,0x0,128);
    time(&t);
    sprintf(ch,"%s", ctime(&t));
    new1=(add_list *)malloc(sizeof(add_list));
    printf("please input the name:");getchar();gets(new1->name);
    printf("please input the address:");scanf("%s",new1->address);
    printf("please input the phone number:");scanf("%s",new1->phone);
    strcpy(ch,new1->time);
    if(*head==NULL)
    {
        *head=new1;
        new1->next=NULL;
        tail=new1;
    }
    else
    {
        tail->next=new1;
        new1->next=NULL;
        tail=new1;
    }
    getchar();
}

void save(add_list *head,char filename[])
{
    add_list *p;
    struct person t;
    if((fp==fopen(filename,"wb"))==NULL)
    {
        printf("ERROR:cannot open file %s\n",filename);
        getchar();
    }
    else
    {
        p=head;
        while(p!=NULL)
        {
            strcpy(t.name,p->name);
            strcpy(t.address,p->address);
            strcpy(t.phone,p->phone);
            strcpy(t.time,p->time);
            fwrite(&t,sizeof(struct person),1,fp);//将t指针指向的内容,写入到fp流中
            p=p->next;
        }
    }
    fclose(fp);
}

void display(add_list *head)
{
    add_list *p;
    p=head;
    if(p!=NULL)
        printf("name:\t\taddress:\t\tphone number:\t\ttime:\n");
    while(p!=NULL)
    {
        printf("%s\t\t%s\t\t%s\t\t%s\n",p->name,p->address,p->phone,p->time);
        p=p->next;
    }
    getchar();
}


int menu()
{
    while(1)
    {
        printf("===           1add a new contact         ===\n");
        printf("===           2delete a contact          ===\n");
        printf("===           3search a contact          ===\n");
        printf("===           4view the contacts         ===\n");
        printf("===           5save the contacts         ===\n");
        printf("===           6exit                      ===\n");
        printf("=====================================================\n"); 
        printf("please select a number and then input enter:");
        c=getchar();
        switch(c)
        {
        case'1':
            insert(&head);
            printf("please input enter and go ahead");
            getchar();
            system("cls");
            break;
        case'4':
            display(head);
            printf("please input enter and go ahead");
            getchar();
            system("cls");
            break;
        case'5':
            save(head,filename);
            printf("saved,please input enter and go ahead");
            getchar();
            getchar();
            system("cls");
            break;

        
        }
    }
}

void main()
{
    while(1)
    {
        head=load(filename);
        menu();
    }
}
        
         

   

问题貌似主要是74行那块~void insert(add_list **head)函数里边//指向指针的指针,也就是存放一个变量的地址的地址
    strcpy(ch,new1->time);
    if(*head==NULL)
    {
        *head=new1;
        new1->next=NULL;
        tail=new1;
    }
各位前辈~求解一下原因~调试时ch已经存入时间的字符串了,但是new1->time 存入的确实“坉坉坉坉坉。。。。”~~先行谢过

顺便再问多个问题~要是要对存入信息排序按名字首字母排的话~各位会怎么编写~?
搜索更多相关主题的帖子: 信息 电话簿 管理系统 
2013-08-07 18:05
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:10 
代码太长了吧........先留着,晚上看

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-07 18:15
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
回复 2楼 小小程序猿
其实暂时就我说那块有问题~在加上时间部分后就出问题了~~代码是长了点~麻烦了吖~~~
2013-08-07 20:09
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
头大了明天给你答复吧,对不住

[ 本帖最后由 小小程序猿 于 2013-8-7 21:29 编辑 ]

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-07 21:15
幽灵X
Rank: 5Rank: 5
等 级:职业侠客
帖 子:128
专家分:328
注 册:2013-1-28
收藏
得分:10 
问题出在这句代码上:strcpy(ch,new1->time);
strcpy函数的功能是把第二个参数所指的字符串复制到第一个参数所指的地址空间
所以应该改为strcpy(new1->time,ch);
你再试试,我这也是初步调试。
2013-08-07 21:45
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
回复 5楼 幽灵X
这。。。。坑大我了。。。~表示非常感谢!!!!!!
2013-08-07 22:16
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
回复 4楼 小小程序猿
好的。。。目前问题1已解决~问题2~~keep moving~
2013-08-07 22:17
幽灵X
Rank: 5Rank: 5
等 级:职业侠客
帖 子:128
专家分:328
注 册:2013-1-28
收藏
得分:0 
回复 6楼 x_tacet
我用的是VC6.0,运行的时候好像还有其它毛病,还没仔细测试,楼主自己再调试下,我有什么进展也会告诉楼主的。
2013-08-07 22:19
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
回复 8楼 幽灵X
我这边的没有呢~也没warning什么的~~呃呃~还是非常感谢你~~!!!
2013-08-08 12:29
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
程序代码:
void AddSort(Node *p)     //将p指向的结点按Tag指定的顺序插入到链表中
    {
        Node *p1,*p2;          //p指向的结点插在p1与p2指向的结点之间                   
            if(Head==NULL)              //插入前原始链表为空
            {   Head=p;
                Tail=p;
                p->next=NULL;
            }
            if(strcmp(Head->Name,p->Name)>0)           //插在链表首部
            {   p->next=Head;
                Head=p;
            }
            p1=Head;                               //插在链表中间或尾部
             p2=Head;
               while(p2->next&&strcmp(p2->Name,p->Name)<0)
            {   p1=p2;
                p2=p2->next;
            }
             if(strcmp(p2->Name,p->Name)<0)
            {
                p2->next=p;
                p->next=NULL;
            }
            else if(strcmp(p2->Name,p->Name)>0)
            {
                p->next=p2;
                p1->next=p;
            }
    }


参考了一位大神排序如上~~分享一下~~顺便引入问题三。。。>.<
增加默认查询方式,即查询时只输入姓名拼音的首字母,所有符合这一条件的电话资料均在屏幕上显示。
请问如何做到查询中文的首字母~~?求解~QQQ
2013-08-08 17:17
快速回复:编写信息管理系统-系统时间添加的问题
数据加载中...
 
   



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

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