c++-C++用指针实现读取,load()方法一直不行,麻烦看下

问题描述

C++用指针实现读取,load()方法一直不行,麻烦看下
C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下

解决方案

// 通讯录管理系统,主要用动态链表实现

include //I/O函数

include //字符串函数,提供字符串处理的原函数

include //标准库函数,提供mallocsystemexit等函数

define N 50 //定义常数表示记录数

typedef struct contact//定义数据结构
{
char name[10]; //姓名
char age[3]; //年龄
char tele[11]; //电话号码
char postcode[6]; //邮编号码
char addr[50]; //单位地址
char email[30]; //邮箱
struct contact * pnext;
}contact *pcontact;

//函数的声明
int menu(); //主菜单函数
pcontact creat();

bool insert (pcontact phead int pos); //创建并添加联系人
void traverse(pcontact phead); // 显示联系人
int length(pcontact phead); //保存记录长度
void sort(pcontact phead); //按姓名拼音首字母排序联系人
void search(pcontact phead); //查找联系人
void updata(pcontact phead); //修改联系人
void delete_name(pcontact phead); //删除联系人
void delete_list(pcontact phead int pos);

void save(pcontact phead); //存储联系人
void load(pcontact phead); //从文件中读联系人
int exit(); //退出系统

//主函数
int main()
{
pcontact phead = NULL;
system (""cls""); // 清屏需要头文件stdlib.h
phead = creat();
while (1)
{
int i = 0;
switch (menu())
{
case 0: insert (phead ++i); break;
case 1: updata (phead); break;
case 2: delete_name (phead); break;
case 3: search(phead); break;
case 4: save (phead); break;
case 5: load (phead); break;
case 6: exit (0); break;
default: printf (""请输入数字0到6:n"");
}
printf (""ttt请按enter键返回主菜单n"");
getchar ();
system (""CLS"");
}
return 0;
}

//主菜单函数,函数返回值为整数,代表所选的菜单项
int menu()
{
char s[20];
int num;
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""-----------------------------------主菜单-------------------------------------nn"");
printf (""tttt0.添加信息n"");
printf (""tttt1.修改信息n"");
printf (""tttt2.删除信息n"");
printf (""tttt3.查找信息n"");
printf (""tttt4.存储信息n"");
printf (""tttt5.读入信息n"");
printf (""tttt6.退出系统n"");
printf (""n**********************************感谢使用************************************n"");
do
{
printf (""请输入您的选项(0-6):"");
gets (s);
num = atoi(s); //将字符串转换成一个整型数值
}while (num < 0 || num > 6);
return num;
}

//创建一个动态空链表
pcontact creat()
{
//分配一个不存放有效数据的头结点
pcontact phead = (pcontact)malloc( sizeof(contact) );
if (NULL == phead)
{
exit (-1); //分配内存失败,终止程序
}
phead->pnext = NULL;
return phead;
}

//创建并添加联系人信息
//在phead所指向链表的第pos个节点的前面插入一个新的结点
bool insert (pcontact phead int pos)
{
int i = 0;
pcontact p = phead;
while(NULL != p && i < pos-1)
{
p = p->pnext;
++i;
}
if (i > pos-1 || NULL == p)
return false;
//如果程序能执行到这一行说明p已经指向了第pos-1个结点但第pos-1个节点是否存在无所谓
//分配新的结点
pcontact pnew = (pcontact)malloc(sizeof(contact));
if (NULL == pnew)
{

exit(-1);//动态分配内存失败
}
system (""CLS"");
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""------------------------此目录下可创建并添加联系人信息------------------------nn"");
printf (""请输入联系人姓名:"");
gets (pnew->name);
printf (""请输入联系人年龄:"");
gets (pnew->age);
printf(""请输入联系人电话号码:"");
gets (pnew->tele);
printf(""请输入联系人邮编号码:"");
gets (pnew->postcode);
printf (""请输入联系人单位地址:"");
gets (pnew->addr);
printf (""请输入联系人邮箱:"");
gets (pnew->email);
printf (""添加联系人信息成功!"");
printf (""n**********************************感谢使用************************************n"");
//将新的结点存入p节点的后面
pcontact q = p->pnext;
p->pnext = pnew;
pnew->pnext = q;
return true;
}
//修改信息
void updata(pcontact phead)
{
char name[10];
sort(phead);
int len = length(phead);
pcontact p=phead->pnext;
int i;
system (""CLS"");
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""--------------------------此目录下可修改联系人信息----------------------------nn"");
printf(""请输入您要修改的联系人姓名:n"");
gets(name);
printf(""此联系人的所有信息如下:n"");
printf (""联系人年龄:%sn"" p->age);
printf (""联系人电话号码:%sn"" p->tele);
printf (""联系人邮编号码:%sn"" p->postcode);
printf (""联系人单位地址:%sn"" p->addr);
printf (""联系人邮箱:%sn"" p->email);
if (NULL != p)
{
for (i = 0; i < len; ++i p = p->pnext)
{
printf(""n请输入您要修改的联系人信息n"");
printf(""姓名:"");
scanf(""%s""&p->name);
printf(""年龄:"");
scanf(""%s""&p->age);
printf(""电话号码:"");
scanf(""%s""&p->tele);
printf(""邮编号码:"");
scanf(""%s""&p->postcode);
printf(""单位地址:"");
scanf(""%s""&p->addr);
printf(""邮箱:"");
scanf(""%s""&p->email);
printf(""此联系人信息修改成功!n"");
printf (""n**********************************感谢使用************************************n"");
if (i + 1 < len)
{
system (""pause"");
}
}
}
else
{
printf (""对不起通讯录系统没有此联系人信息!nn"");
printf (""n**********************************感谢使用************************************n"");
}
return;
}
//显示联系人信息
//遍历通讯录的信息,先排序,再输出
void traverse(pcontact phead)
{

sort(phead);
int len = length(phead);
pcontact p = phead->pnext;
int i;
system (""CLS"");
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""----------------------------------联系人信息表--------------------------------nn"");
if (NULL != p)
{
for (i = 0; i < len; ++i p = p->pnext)
{
printf (""联系人姓名:%sn"" p->name);
printf (""联系人年龄:%sn"" p->age);
printf (""联系人电话号码:%sn"" p->tele);
printf (""联系人邮编号码:%sn"" p->postcode);
printf (""联系人单位地址:%sn"" p->addr);
printf (""联系人邮箱:%sn"" p->email);
printf (""n**********************************感谢使用************************************n"");
if (i + 1 < len)
{
system (""pause"");
}
}
}
else
{
printf (""对不起通讯录系统没有任何联系人信息!nn"");
printf (""n**********************************感谢使用************************************n"");
}
return;
}
//有效结点的个数
int length(pcontact phead)
{
pcontact p = phead->pnext;
int len = 0;
while (NULL != p)
{
++len;
p = p->pnext;
}
return len;
}
//对通讯录进行排序,按姓名的拼音首字母顺序
void sort(pcontact phead)
{
int i j;
int len = length(phead);
char name[10];

char age[3];
char tele[11];
char postcode[6];

char email[30];
char addr[50];
pcontact p q;
//冒泡排序
for (i = 0 p = phead->pnext; i < len - 1; ++i p = p->pnext)
for (j = i + 1 q = p->pnext; j < len; ++j q = q->pnext)
if (strcmp (p->name q->name) > 0)
{
//交换姓名
strcpy (name p->name);
strcpy (p->name q->name);
strcpy (q->name name);
//交换年龄
strcpy (age p->age);
strcpy (p->age q->age);
strcpy (q->age age);
//交换电话号码
strcpy (tele p->tele);
strcpy (p->tele q->tele);
strcpy (q->tele tele);
//交换邮编号码
strcpy (postcode p->postcode);
strcpy (p->postcode q->postcode);
strcpy (q->postcode postcode);
//交换单位地址
strcpy (addr p->addr);
strcpy (p->addr q->addr);
strcpy (q->addr addr);
//交换邮箱
strcpy (email p->email);
strcpy (p->email q->email);
strcpy (q->email email);
}
return;
}

//查询联系人信息
void search(pcontact phead)
{
pcontact p = phead->pnext;
char name[20];
int len = length (phead); //记录容量的最大值
int i;
int mark = 0;
int a = 0;
system (""CLS"");
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""----------------------------联系人信息查询功能操作----------------------------nn"");
printf (""请输入您要查找的联系人姓名:"");
gets (name);
if (NULL != p)
{
for (i = a; i < len; ++i p = p->pnext)
{
if (strcmp (name p->name) == 0)
{
printf (""nttt以下是您查找的联系人信息n"");
printf (""联系人姓名:%sn"" p->name);
printf (""联系人年龄:%sn"" p->age);
printf (""联系人电话号码:%sn"" p->tele);
printf (""联系人邮编号码:%sn"" p->postcode);
printf (""联系人单位地址:%sn"" p->addr);
printf (""联系人邮箱:%sn"" p->email);
printf (""n**********************************感谢使用************************************n"");
++mark;
if (i + 1 < len)
{
system (""pause"");
}
}
}
if (0 == mark)
{
printf (""对不起通讯录系统没有此联系人信息!nn"");
printf (""n**********************************感谢使用************************************n"");
}
}
else
{
printf (""对不起,通讯录系统没有任何联系人信息!nn"");
printf (""n**********************************感谢使用************************************n"");
}

return;

}

//删除联系人信息
void delete_name(pcontact phead)
{
int i pos;
int mark = 0;
int val;
int len = length (phead);
char name[20];
pcontact p = phead->pnext;
system (""CLS"");
printf(""*************************欢迎进入X-X-X通讯录管理系统*************************n"");
printf(""-----------------------------联系人信息删除功能操作---------------------------nn"");
printf (""请输入您要删除的联系人姓名:"");
gets (name);
if (NULL != p)
{
for (i = 1; i <= len; ++i p = p->pnext)
{
if (strcmp (name p->name) == 0)
{
printf (""nttt以下是您要删除的联系人信息n"");
printf (""num:%dn"" mark+1);
printf (""联系人姓名:%sn"" p->name);
printf (""联系人年龄:%sn"" p->age);
printf (""联系人电话号码:%sn"" p->tele);

printf (""联系人邮编号码:%sn"" p->postcode);
printf (""联系人单位地址:%sn"" p->addr);
printf (""联系人邮箱:%sn"" p->email);
printf (""n**********************************感谢使用************************************n"");
pos = i;
++mark;
}

    }    if (1 == mark )    {        printf (""ntt是否确定删除此联系人信息?(y/n)"");        if (getchar () =='y' || getchar () =='Y')        {            delete_list(phead pos);             printf (""ntt删除联系人信息成功!n"");            system (""pause"");         }        else         {             printf ("""");             getchar ();             return;         }     }    else if (mark > 1)    {        printf (""这里有%d个相同的联系人!n"" mark);        printf (""您想删除第几个联系人的信息?n"");        printf (""num:"");        scanf (""%d"" &val);        pos = pos - mark + val;        delete_list(phead pos);         printf (""ntt此联系人信息删除成功!n"");        system (""pause"");     }    else    {        printf (""对不起,通讯录系统没有此联系人信息!nn"");        printf (""n**********************************感谢使用************************************n"");    }}else{    printf (""对不起,通讯录系统没有任何联系人信息!nn"");    printf (""n**********************************感谢使用************************************n"");}return;

}
//删除在phead所指向链表的第pos个结点
void delete_list (pcontact phead int pos)
{
int i = 0;
pcontact p = phead;
if (NULL == p->pnext)
{
printf (""对不起,通讯录系统没有任何联系人信息!n"");
printf (""n**********************************感谢使用************************************n"");
return;
}
while (NULL != p->pnext && i < pos - 1)
{
p = p->pnext;
++i;
}
//如果程序能执行到这一行说明p已经指向了第pos个结点,并且第pos个结点是存在的
pcontact q = p->pnext; //q指向待删除的结点
p->pnext = p->pnext->pnext; //删除p节点后面的结点
free (q); //释放q所指向的节点所占的内存
q = NULL;
return;
}
//通讯录的记录存盘操作,使用文件指针;
void save(pcontact phead)
{
FILE * fp;
pcontact p =phead->pnext;
fp = fopen (""contact.txt""w"");
fprintf(fp***************所有联系人信息表***************nn"");
while (NULL != p)
{
fprintf(fp===============================================n"");
fprintf (fptt姓名:%sn"" p->name);
fprintf (fptt年龄:%sn"" p->age);
fprintf (fptt电话号码:%sn"" p->tele);
fprintf (fptt邮编号码:%sn"" p->postcode);
fprintf (fptt单位地址:%sn"" p->addr);
fprintf (fptt邮箱:%snn"" p->email);
p = p->pnext;
}
fprintf(fp===============================================n"");
fprintf (fp********来自X-X-X通讯录系统,欢迎使用!*******n"");
fclose (fp);
printf (""ntt联系人信息存储成功存储在contact.txt文档中!n"");
return;
}
void load(pcontact phead)//读入联系人信息
{
int in;
FILE *fp; //指向文件的指针
pcontact p =phead->pnext;
if((fp=fopen(""contact.txt""rb""))==NULL)
{
printf(""对不起,打开文件失败!n"");
exit(1);
}
fscanf(fp%d""&n);
for(i=0;i fscanf(fp%s%s%s%s%s%s%s""p->namep->agep->telep->postcodep->addrp->email); //按格式读入记录
fclose(fp);
printf(""您已成功读入contact.txt文档中联系人信息!n"");
return ;
}

解决方案二:
for循环是不是有问题????还是粘贴的时候没有粘贴全???

解决方案三:
你代码好长,把load方法中for(i=0;i fscanf(fp%s%s%s%s%s%s%s""p->namep->agep->telep->postcodep->addrp->email); //按格式读入记录这一行修改成下面的

for(i=0;i < n;i++)        fscanf(fp%s%s%s%s%s%s%s""p->namep->agep->telep->postcodep->addrp->email); //按格式读入记录
时间: 2024-11-18 04:19:35

c++-C++用指针实现读取,load()方法一直不行,麻烦看下的相关文章

Hibernate学习(二)Hibernate中Session之get和load方法的真正区别

最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致. 先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接读取数据库,所以直接返回

jquery load()方法使用说明

最近网站做一些改动,需要引用另一个网站的页面,于是用到了jQuery框加中的load方法.挺方便的. load(url, [data], [callback])手册上的说明很直接明了: 载入远程 HTML 文件代码并插入至 DOM 中.默认使用 GET 方式 – 传递附加参数时自动转换为 POST 方式.jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码.语法形如 "url #some > selector". 不过

Hibernate中load方法与get方法的区别_java

主要区别在于是否延迟加载. load方法 不会立即访问数据库,当试图加载的记录不存在时,load方法返回一个未初始化的代理对象. get方法 总是立即访问数据库.当试图加载的记录不存在时,直接返回null 在hibernate中发现有2个方法很雷同.查阅后发现 Hibernate中有两个极为相似的方法get()与load(),他们都可以通过指定的实体类与ID从数据库中读取数据,并返回对应的实例,但Hibernate不会搞两个完全一样的方法的,它们间的不同在于: get是直接查询数据库,如果查不到

一口一口吃掉Hibernate(二)——别被世俗蒙蔽了双眼:Hibernate中Session之get和load方法的真正区别

      最近在学习SHH框架中的Hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入很大.主要是对get方法的说法跟实际运行的结果不一致.       先说一下观点吧: get不支持lazy,load支持lazy: 数据不存在时,get返回null,load则抛出ObjectNotFoundException异常. load方法可以返回实体的代理类实例,而get方法直接

禁止JQuery中的load方法装载IE缓存中文件的方法_jquery

使用方法如下: 复制代码 代码如下: $("#panel").load("test.asp"); //在页面装载时,在ID为#panel的DOM元素里test.asp的内容. 但是,当你修改test.asp文件的内容以后,在IE浏览器下,再利用以上方法重新装载该文件时,你会发现ID为#panel的DOM元素的内容并未发生变化,问题究竟出现在什么地方呢?原来是重新加载以后,IE浏览器并没有从服务器端重新下载修改以后的test.asp,而是直接从IE缓存中读取没有修改之

环境-FileReference 未定义的 load方法

问题描述 FileReference 未定义的 load方法 初学FLASH,编码环境:Adobe Flash CS3 Professional; 遭遇问题:FileReference未定义的load方法:大神求解啊 解决方案 有没有大神啊, 过来看一下嘛

PHP读取xml方法介绍

一,什么是xml,xml有什么用途 XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言).Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具.扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML

Win8系统更换主题后桌面鼠标指针发生变化的解决方法

  Win8系统更换主题后桌面鼠标指针发生变化的解决方法          操作步骤: 1.在桌面上右键,单击"个性化"; 2.在"个性化"里单击"更改桌面图标"; 3.在桌面图标设置里单击"允许主题更改桌面图标"复选√去掉."确定"后完成; 4.如果需要修改鼠标的指针样式,可以在"个性化"里单击"更改鼠标指针",在指针选项卡里可以修改自己需要的指针样式.

jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法

 这篇文章主要介绍了jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法,涉及jQuery中load方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法.分享给大家供大家参考.具体分析如下: jQuery通过load()方法载入另外一个网页文件内的指定标签内容到div标签,如果我们可以加载网页b.html中的id为p1的标签内容到网页a.html的