| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 437 人关注过本帖
标题:用C++做我的程序
只看楼主 加入收藏
撒旦
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-6-1
收藏
 问题点数:0 回复次数:0 
用C++做我的程序

请各位看一下,我的#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
struct tele{
int num;
char name[20];
char tel_no[15];
char sim_no;
char arch;
char e_addr[20];
struct tele *next;
};
FILE *fp;
struct tele *head;
struct tele *p;
struct tele *q;
struct tele *ptr;
void creatlink()
{
char fn[40];
char * fileName;
char ch;
fileName=fn;

for(;;)
{
cout<<"输入你要打开的文件名和路径:";
cin>>fileName;

fstream fin(fileName,ios::in|ios::nocreate)

int a=1;
do
{
q=new struct tele[15];
q->next=NULL;
if(a)
{
head=q;
p=q;
a=0;
}
else
{
p->next=q;
p=q;
}

}while((ch=fileName.get())!=EOF);
fileName.close();
}
}
void mainmenu()
{
cout<<"***电话簿管理***"<<endl;
cout<<"***1.office***"<<endl;
cout<<"***2.person***"<<endl;
cout<<"***3.business***"<<endl;
cout<<"***0.exit****"<<endl;
cout<<"请输入(0~3):"<<endl;
}
void submenu()
{
cout<<"****************"<<endl;
cout<<"**1.添加电话簿**"<<endl;
cout<<"**2.修改电话簿**"<<endl;
cout<<"**3.删除电话簿**"<<endl;
cout<<"*****4.拨号*****"<<endl;
cout<<"*0.返回上级菜单*"<<endl;
cout<<"请输入(0~4):"<<endl;
}
void deletel(tele *&head,char name)//这里如果参数换成tele *head,意义就完全不同了,head变成了复制而不是原有链上操作了,特别注意,很多书上都不对这里
{
tele *point;//判断链表是否为空
creatlink();
if(head==NULL)
{
cout<<"链表为空,不能进行删除工作!";
return;
}
int derror=1;//设置找不到的情况的条件,预先设置为真
tele *check=head;
while(check)//利用循环进行查找
{
if (strcmp(check->name,name)==0)
{
derror=0;//条件转为假
}
check=check->next;
}
if(derror)//如果为假就跳出函数
{
return;
}

if(strcmp(head->name,name)==0)//判删除的节点是否为首节点
{
point=head;
cout<<"删除点是链表第一个节点位置!";
head=head->next;//重新设置引导指针
delete point;
return;
}
tele *fp=head;//保存连首指针
for(tele *&mp=head;mp->next;mp=mp->next)
{
if(strcmp(mp->next->name,name)==0)
{
point=mp->next;
mp->next=point->next;
delete point;
head=fp;//由于head的不断移动丢失了head,把进入循环前的head指针恢复!
return;
}
}
}
void insterl(char name)
{
tele *point=new tele;
creatlink();
cout<<"请输入结点num、结点name、结点tel_nol、结点sim_no、结点arch与结点e_addr"<<endl;
cin>>point->num>>point->name>>point->tel_no>>point->sim_no>>point->arch>>point->e_addr;

if(head==NULL)//链表为空的情况下插入
{
head=point;
point->next=NULL;
return;
}

int ierror=1;//设置找不到的情况的条件,预先设置为真
tele *le;
tele *check=head;
while(check)//利用循环进行查找
{
if (strcmp(check->name,name)==0)
{
ierror=0;//条件转为假
}
le=check;
check=check->next;
}
if(ierror)
{
cout<<le->name;
le->next=point;
point->next=NULL;
return;
}

if(strcmp(head->name,name)==0)//检测是否是在第一个节点处插入
{
point->next=head;
head=point;
return;
}

for(tele *&mp=head;mp->next;mp=mp->next)//在链表中间插入
{
if(strcmp(mp->next->name,name)==0)
{
point->next=mp->next;
mp->next=point;
return;
}
}
}
void change(tele *&head,char name)//这里如果参数换成tele *head,意义就完全不同了,head变成了复制而不是原有链上操作了,特别注意,很多书上都不对这里
{
tele *point;//判断链表是否为空
creatlink();
if(head==NULL)
{
cout<<"链表为空,不能进行修改工作!";
return;
}
int derror=1,i;//设置找不到的情况的条件,预先设置为真
tele *check=head;
while(check)//利用循环进行查找
{
if (strcmp(check->name,name)==0)
{
derror=0;//条件转为假
}
check=check->next;
}
if(derror)//如果为假就跳出函数
{
return;
}
for(tele *&mp=head;mp->next;mp=mp->next)
{
if(strcmp(mp->next->name,name)==0)
{
cout<<"找到结点"<<endl;
cin>>point->num>>point->name>>point->tel_no>>point->sim_no>>point->arch>>point->e_addr;
return;
}
}
}
void call(tele *&head,char name)
{
int derror=1,i;//设置找不到的情况的条件,预先设置为真
creatlink();
tele *check=head;
tele *r;
while(check)//利用循环进行查找
{
if (strcmp(check->name,name)==0)
{
derror=0;//条件转为假
}
check=check->next;
}
if(derror)//如果为假就跳出函数
{
return;
}

for(tele *&r=head;r->next;r=r->next)
{
if(strcmp(r->next->name,name)==0)
{
cout<<"you are calling...."<<endl;
for(i=0;i<=15;i++)
{
cout<<r->tel_no[i];
Sleep(1000);
}
return;
}
cout<<"please enter your choice :"<<endl;
creatlink();
if(r->arch->next->sim_no=sim_no)
{
cout<<"you are calling....."<<endl;
cout<<r->name<<' '<<r->tel_no;
}
}
}
void main()
{
static int menu=1;
int i=1;
char m,n,c;
while(i);
{
switch(menu)
{
case 1:
{
mainmenu();
cout<<n;
switch(n)
{
case '1':
{
creatlink();
menu=2;
}
break;
case '2':
{
creatlink();
menu=2;
}
break;
case '3':
{
creatlink();
menu=2;
}
break;
default:
{
cout<<"Are you sure exit?(Y/N)"<<endl;

cin>>c;
if(c=='Y')
exit (0);
}
}
}
case 2:
{
submenu();

cin>>m;
switch(m)
{
case'1':
{
insterl();
}
break;
case'2':
{
change();
}
break;
case'3':
{
deletel();
}
break;
case'4':
{
call();
}
break;
case'0':
exit (0);
}
}break;
}
}
}
程序究竟哪里出错了,谢谢

2007-06-09 16:46
快速回复:用C++做我的程序
数据加载中...
 
   



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

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