| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:编写信息管理系统-系统时间添加的问题
取消只看楼主 加入收藏
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
编写信息管理系统-系统时间添加的问题
仿一位前辈的电话簿程序~在准备增加录入时间的显示及存储时出现了些许问题~语法上貌似没有错误~但是运行时有错~
程序代码:
#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
x_tacet
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-8-7
收藏
得分:0 
回复 2楼 小小程序猿
其实暂时就我说那块有问题~在加上时间部分后就出问题了~~代码是长了点~麻烦了吖~~~
2013-08-07 20:09
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_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.028020 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved