动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.将位图旋转90度.
.JAVA与C++::关于JNI中文字符串操.
.2000年9月基础知识知识和C语言程.
.自定义类_string类.
.C++习题与解析(类和对象-07).
.孔明棋,你玩过吗.
.集合类:VBA集合对象的安全包装.
.永远的C++,永远的追求.
.VC++中的Progress控件的使用.
.C语言基础教程(二)数据类型、变.
.C++中数组和指针类型的关系浅议.
.多维数组.
.用Delphi4的QReport部件生成报表.
.给datagrid的按钮列添加css.
.动态汉化Windows技术的分析.
.C++数据结构学习:递归(2.2).
.C++类的分解,抽象类与纯虚函数的.
.C++习题与解析(类和对象-04).
.巧妙保证程序只有一个实例打开.
.链表的C语言实现之单链表的实现.

留言簿程序的编写

发表日期:2008-3-8 |




1、构造留言簿的结构
    一个留言必不可少的是内容、其次是留言的日期和时间。和们就按这两点定义留言记录的结构。
strUCt record
{
    struct date t_date;        /*留言日期*/
    struct time t_time;        /*留言时间*/
    char event[100];           /*留言内容*/
    struct record *next;       /*指向下一个节点的指针*/
};
在上结构的定义中,用字符串event[100]存放留言内容,结构成员t_date存放留言的日期,t_time存放留言的时间。结构data和time的定义是Turbo C提供的。它们的定义分别如下所示:
struct date
{
    int da_year;
    char da_day;
    char da_mon;
};
struct time
{
    unsigned char ti_min;
    unsigned char ti_hour;
    unsigned char ti_hund;
    unsigned char ti_sec;
};
2、入队操作
    入队操作比较简单,只要能找到队列的最后一个节点(即尾节点)修改尾节点的指针域,让其指针指向新增加的节点即可。于是问题的要害就在于如何找到尾节点,或是找到尾节点的指针域。
    这里采用设置头节点和尾指针的方法来完成入队操作。
    队列在还没有任何一条记录时称为队空。此时我们在队列中设置一个不存放任何记录的节点,称为“头节点”(采用头节点的好处在以后会体现出来),由于并无记录,我们设置的指向队尾的尾指针也指向这个头节点。
    一旦需要添加记录,就让尾指针指向新节点(称为节点1),而后把节点1的指针域赋给尾指针。由于尾指针为头节点的指针域,这样含头节点就链接了节点1,即头节点的指针指向节点1,形成了链的初始模型。当增加第二个节点(称为节点2)时,仍然修改尾指针,让其指向节点2,而后把节点2的指针域赋给尾指针。由于原来尾指针为节点1的指针域,因此节点1和节点2又链接在一起。现在的队列由头节点、节点1和节点2相互链接而成。依此类推,链队就通过修改尾指针的值形成了。
    入队操作的基本算法如下所示:
void queue_add(struct element *rear,struct element *p)
{
    p->next=NULL;
    rear->next=p;
    rear=p;
}
    其中rear即为尾指针,而指针p指向新增的节点。算法的流程和上述完全一样。
录入留言记录的函数代码如下所示:
void Data_Input(struct record *p)
{
    struct data *d;
    struct time *t;
    front++;
    getdate(t);        /*取系统时间*/
    p->t_time.ti_hour=ti_hour;
    p->t_time.ti_min=ti_min;
    p->time.ti_sec=ti_sec;
    printf("\n\n\nDate:%4d %2d %2d",p->t_date.da_year,p->t_date.da_mon,p->t_date.da_day);
    printf("\nTime: %2d: %2d: %2d",p->t_time.ti_hour,p->t_time.ti_min,p->t_time.ti_sec);
    printf("\n\n\tPlease input record:");
    gets(p->event);      /*输入留言内容*/
    p->next=NULL;
}
    上述函数中,采用了getdate()和gettime()两个函数用来获取系统的日期和时间。这两个函数只返回指向当前日期和时间的两个指针,还需要将值立即赋给留言记录中的结构成员。
3、出队操作---留言记录的删除
    和入队操作相反的是出队操作,即在队头将记录删除,这也是符合“先进先出”的原则的。
    由于设置了头节点,因此出队操作显得非常简单。只需要修改头节点的指针域,让其指向第二个节点即可。而第一个节点则将其释放掉。其余节点,包括尾指针都不必做任何修改操作。
    例如一个队列原本由头节点、节点1和节点2相链而成,执行出队操作时,相当于将头节点和节点1、节点1和节点2之间的两条链断开,而用断链将头节点和节点2链上,多出来的节点1将其释放掉。
    典型的出队操作算法如下:
void queue_delete(struct element head)
{
    struct element *temp;
    temp=head.next->next;
    head.next=temp;
}
    在执行出队操作时,一定要记住需要将出队的节点释放。由于采用链式存储,事先无法估计需要多大的存销售市场空间,也不必去估计。每次新增一个节点时,都是调用内存分配函数为新节点申请一块内存,如下所示:
    p=malloc(sizeof(struct record)
    函数malloc开辟了一块大小为record 结构元素的内存区域,把掻向该区域的指针赋给指针p,这块内存单元的所有权就从系统转移到了指针p。当p指向的数据元素被删除(出队)时,一定要用如下方式将内存单 所有权还给系统:
    free(p);
    函数free()的作用和malloc()刚好相反,它将指定的内存单元还给了系统。因为系统的内存单元是有限的,假如不及时释放占用的内存,会造成内存资源耗尽或由于内存的减少导致程序执行速度下降。
4、记录的存取的读取
void Data_Save(struct record *p)      /*记录文件的存取*/
{
    int j;
    fp=fopen(tele_rec.txt","w");      /*以可写方式打开记录文件*/
    while(p!=NULL)        /*若未到队尾,徨将记录存储到文件中*/
    {
        fwrite(p.sizeof(struct record),1,fp);
        p=p->next;
    }
    fclose(fp);        /*关闭指定的文件*/
}
struct event *Data_Load()        /*从记录文件中读取记录*/
{
    long k;
    struct record *p,*q;
    p=event_head.next;
    fp=fopen("tele_rec.txt","r+t");        /*以读方式打开记录文件*/
    if(fp!=NULL)
    {
        while(!feof(fp))        /*依次读取记录并执行入队操作*/
        {
            fread(q,sizeof(struct record),1,fp);
            p->next=q;        /*这里p为尾指针,q为指向新节点的指针*/
            p=q;
        }
        p->next=NULL;
        event_end=p;
    }
    else
    {
        fp=fopen("tele_rec.txt","w");    /*若文件不存在,创建指定文件名的新文件*/
        event_head.next=NULL;
        event_end=event_head.next;
    }
}


/*-------------留言簿代码如下-------------*/
#include<stdio.h>
#include<conio.h>
#include<dos.h>
struct record
{
    struct date t_date;        /*定义留言日期*/
    struct time t_time;        /*定义留言时间*/
    char event[100];           /*定义电话内容*/
    struct record *next;       /*指向下一个节点的指针*/
}event_head;

struct record *event_end;
int front;
FILE *fp;

void Data_Save(struct record *p)        /*记录文件的存储*/
{
    int j;
    fp=fopen("tele_rec.txt","w");       /*以可写方式打开记录文件*/
    while(p!=NULL)  

上一篇:罗云彬VxD教程--DeviceIoControl接口 人气:483
下一篇:灵活运用c语言实现高级功能 人气:394
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成