C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下C++用指针实现读取,load()方法一直不行,麻烦看下
3条回答 默认 最新
- Bee_YG 2015-06-11 02:41关注
// 通讯录管理系统,主要用动态链表实现
include //I/O函数
include //字符串函数,提供字符串处理的原函数
include //标准库函数,提供malloc,system,exit等函数
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 ("\t\t\t请按enter键返回主菜单\n");
getchar ();
system ("CLS");
}
return 0;
}//主菜单函数,函数返回值为整数,代表所选的菜单项
int menu()
{
char s[20];
int num;
printf("*************************欢迎进入X-X-X通讯录管理系统*************************\n");
printf("-----------------------------------主菜单-------------------------------------\n\n");
printf ("\t\t\t\t0.添加信息\n");
printf ("\t\t\t\t1.修改信息\n");
printf ("\t\t\t\t2.删除信息\n");
printf ("\t\t\t\t3.查找信息\n");
printf ("\t\t\t\t4.存储信息\n");
printf ("\t\t\t\t5.读入信息\n");
printf ("\t\t\t\t6.退出系统\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("------------------------此目录下可创建并添加联系人信息------------------------\n\n");
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("--------------------------此目录下可修改联系人信息----------------------------\n\n");
printf("请输入您要修改的联系人姓名:\n");
gets(name);
printf("此联系人的所有信息如下:\n");
printf ("联系人年龄:%s\n", p->age);
printf ("联系人电话号码:%s\n", p->tele);
printf ("联系人邮编号码:%s\n", p->postcode);
printf ("联系人单位地址:%s\n", p->addr);
printf ("联系人邮箱:%s\n", 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 ("对不起,通讯录系统没有此联系人信息!\n\n");
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("----------------------------------联系人信息表--------------------------------\n\n");
if (NULL != p)
{
for (i = 0; i < len; ++i, p = p->pnext)
{
printf ("联系人姓名:%s\n", p->name);
printf ("联系人年龄:%s\n", p->age);
printf ("联系人电话号码:%s\n", p->tele);
printf ("联系人邮编号码:%s\n", p->postcode);
printf ("联系人单位地址:%s\n", p->addr);
printf ("联系人邮箱:%s\n", p->email);
printf ("\n**********************************感谢使用************************************\n");
if (i + 1 < len)
{
system ("pause");
}
}
}
else
{
printf ("对不起,通讯录系统没有任何联系人信息!\n\n");
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("----------------------------联系人信息查询功能操作----------------------------\n\n");
printf ("请输入您要查找的联系人姓名:");
gets (name);
if (NULL != p)
{
for (i = a; i < len; ++i, p = p->pnext)
{
if (strcmp (name, p->name) == 0)
{
printf ("\n\t\t\t以下是您查找的联系人信息\n");
printf ("联系人姓名:%s\n", p->name);
printf ("联系人年龄:%s\n", p->age);
printf ("联系人电话号码:%s\n", p->tele);
printf ("联系人邮编号码:%s\n", p->postcode);
printf ("联系人单位地址:%s\n", p->addr);
printf ("联系人邮箱:%s\n", p->email);
printf ("\n**********************************感谢使用************************************\n");
++mark;
if (i + 1 < len)
{
system ("pause");
}
}
}
if (0 == mark)
{
printf ("对不起,通讯录系统没有此联系人信息!\n\n");
printf ("\n**********************************感谢使用************************************\n");
}
}
else
{
printf ("对不起,通讯录系统没有任何联系人信息!\n\n");
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("-----------------------------联系人信息删除功能操作---------------------------\n\n");
printf ("请输入您要删除的联系人姓名:");
gets (name);
if (NULL != p)
{
for (i = 1; i <= len; ++i, p = p->pnext)
{
if (strcmp (name, p->name) == 0)
{
printf ("\n\t\t\t以下是您要删除的联系人信息\n");
printf ("num:%d\n", mark+1);
printf ("联系人姓名:%s\n", p->name);
printf ("联系人年龄:%s\n", p->age);
printf ("联系人电话号码:%s\n", p->tele);
printf ("联系人邮编号码:%s\n", p->postcode);
printf ("联系人单位地址:%s\n", p->addr);
printf ("联系人邮箱:%s\n", p->email);
printf ("\n**********************************感谢使用************************************\n");
pos = i;
++mark;
}} if (1 == mark ) { printf ("\n\t\t是否确定删除此联系人信息?(y/n)"); if (getchar () =='y' || getchar () =='Y') { delete_list(phead, pos); printf ("\n\t\t删除联系人信息成功!\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 ("\n\t\t此联系人信息删除成功!\n"); system ("pause"); } else { printf ("对不起,通讯录系统没有此联系人信息!\n\n"); printf ("\n**********************************感谢使用************************************\n"); } } else { printf ("对不起,通讯录系统没有任何联系人信息!\n\n"); 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,"***************所有联系人信息表***************\n\n");
while (NULL != p)
{
fprintf(fp,"===============================================\n");
fprintf (fp, "\t\t姓名:%s\n", p->name);
fprintf (fp, "\t\t年龄:%s\n", p->age);
fprintf (fp, "\t\t电话号码:%s\n", p->tele);
fprintf (fp, "\t\t邮编号码:%s\n", p->postcode);
fprintf (fp, "\t\t单位地址:%s\n", p->addr);
fprintf (fp, "\t\t邮箱:%s\n\n", p->email);
p = p->pnext;
}
fprintf(fp,"===============================================\n");
fprintf (fp, "********来自X-X-X通讯录系统,欢迎使用!*******\n");
fclose (fp);
printf ("\n\t\t联系人信息存储成功,存储在contact.txt文档中!\n");
return;
}
void load(pcontact phead)//读入联系人信息
{
int i,n;
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->name,p->age,p->tele,p->postcode,p->addr,p->email); //按格式读入记录
fclose(fp);
printf("您已成功读入contact.txt文档中联系人信息!\n");
return ;
}解决 无用评论 打赏 举报
悬赏问题
- ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的