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

下面是一个通讯录,在C里面运行成功的,我想把它改为C++,但由于我对C++还不是很熟悉,在改的时候老是出现错误,特别是数据写入文件和打开文件,自己改了很久还是改不成功,麻烦高手帮忙改一下!~~~不胜感激~~~

#define N 100
#define SIZE 30
#include<stdio.h>
#include<string.h>
#include<conio.h>
struct student
{ char num[SIZE];
char name[SIZE];
char tel[SIZE];
};

//函数声明

void myprint(); //显示菜单
int mycreat(struct student*p,int n); //输入通讯录
void mydisplay(struct student *p,int n); //显示通讯录
void mysearch(struct student*p,int n); //查找
int myadd(struct student *p, int n); //增加通讯录
int mydelete(struct student*p,int n); //删除
void sch_num(struct student *p,int n); //按学号查找
int loadinfo(struct student *p, int n); //载入通讯录信息
int saveinfo(struct student *p,int n); //保存通讯录信息


void main()
{ //文件定义
char choose,yes_no;
struct student record[N]; //存放通讯录信息,共100条
int total=0,flag; //通讯录总数
total=loadinfo(record,N); //从文件读取记录信息,不超过100条
do
{
myprint(); //显示菜单
printf("\tPlease select:");
choose=getche();
switch(choose)
{
case'1':
total= mycreat(record,total);
break;
case'2':
mydisplay(record,total);
break;
case'3':
mysearch(record,total);
break;
case'4':
total=myadd(record,total);
break;
case'5':
total=mydelete(record,total);
break;
case '6':
flag=saveinfo(record,total);
if(flag==1)
printf("\nSave successful!\n");
else
printf("\nSave failure!\n");
break;
case'0':
printf("\n");
break;

default:
printf("\n%c is a illegal option !\n",choose);
}
if(choose=='0') break;
printf("\nCan you contiune select(Y/N)? ");
do
{ yes_no=getch();
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}

//显示菜单信息
void myprint()
{ //clrscr();
printf("\n\n");
printf("\n");
printf("请输入选项编号(0--6)\n");
printf("\t1---批量输入通讯录\n");
printf("\t2---显示通讯录\n");
printf("\t3---查询通讯录\n");
printf("\t4---添加通讯录\n");
printf("\t5---删除通讯录\n");
printf("\t6---保存通讯录\n");
printf("\t0---退出\n");
printf("\n");
}

//批量输入学生信息
int mycreat(struct student *p,int n)
{
int i=0;
int m;
//clrscr();
printf("添加前的记录,共有 <%d>个 :\n",n);
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n");
i=0;
while((i<n)&&(strcmp(p->num,"")!=0))
{
printf("%d\t%s\t\t%s\t\t%s\n",i+1, p->num,p->name,p->tel);
i++;
p++;
}

printf("\nHow many students do you want to input(<%d):",N-n);
scanf("%d",&m);
i=0;
while(i<m)
{
printf("\n");
printf("please enter the %dth record:\n",i+1);
printf("学号:");
do
{
gets(p->num);
}while(strcmp(p->num,"")==0);
printf("姓名:");
gets(p->name);
printf("电话号码:");
gets(p->tel);
p++;
i++;
}
return m+n;
}

//显示学生信息
void mydisplay(struct student *p,int n)
{
/*clrscr();*/
int i=0;
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n");
while(i<n)
{
printf("%d\t%s\t\t%s\t\t%s\n",i+1, p->num,p->name,p->tel);
p++;
i++;
}
}

void mysearch(struct student *p, int n)
{
mydisplay(p,n);
sch_num(p,n);
}

//按学号查询
void sch_num(struct student *p,int n)
{

int i,flag=0;
char nm[10];
printf("\n请输入要查询记录的学号:");
gets(nm);
for(i=0;i<n;i++)
if(strcmp(nm,p[i].num)==0)
{
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n");
printf("%d\t%s\t\t%s\t\t%s\n",i+1,p[i].num,p[i].name,p[i].tel);
flag=1;
}
if(flag==0)
printf("无此人!\n");
}

//增加学生信息
int myadd(struct student *p, int n)
{
int i=0;
char c;
struct student t,*q;
//clrscr();
printf("添加前的记录:\n");
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n"); i=0;
q=p;
while(i<n) //显示原有记录信息
{
printf("%d\t%s\t\t%s\t\t%s\n",i+1,q->num,q->name,q->tel);
i++;
q++;
}

do
{
printf("请输入新记录的学号");
do
{
gets(t.num);
} while(strcmp(t.num,"")==0); //学号不能为空

printf("请输入新记录的姓名:"); gets(t.name);
printf("请输入新记录的电话号码:"); gets(t.tel);

for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0 || strcmp(t.tel,(p+i)->tel)==0)
{ printf("学号或电话号码重复,要重新输入吗(Y/N)?");
c=getche();
putchar('\n');
break;
}

if(i==n) //找到最后,没有重复
{ *(p+i)=t;
printf("添加后的记录:\n");
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n"); i=0;
for(i=0;i<n+1;i++)
printf("%d\t%s\t\t%s\t\t%s\n",i+1,(p+i)->num,(p+i)->name,p[i].tel);
break;
}
} while(c=='y'||c=='Y');

return n+1;
}

//删除学生信息
int mydelete(struct student *p, int n)
{ int i,x;
char nm[10];
// clrscr();
printf("删除前的记录:\n");
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n"); i=0;
for(i=0;i<n;i++)
printf("%d\t%s\t\t%s\t\t%s\n",i+1,p[i].num,p[i].name,p[i].tel);
printf("\n请输入要删除记录的学号:");
gets(nm);
for(x=0; x<n; x++)
if(strcmp(nm,p[x].num)==0)
break;
if(x<n) //说明提前结束循环,找到人
{
for(i=x;i<n-1;i++)
{
p[i]=p[i+1];
}
printf("删除后的记录:\n");
printf("\n记录号\t学号\t\t姓名\t\t电话号码\n"); i=0;
for(i=0;i<n-1;i++)
printf("%d\t%s\t\t%s\t\t%s\n",i+1,p[i].num,p[i].name,p[i].tel);
}
else
printf("无此人\n");
return n-1;
}

//载入通讯录信息
int loadinfo(student *p, int n)
{
FILE *fp;
int i,all=0;
char filename[30]="txl.txt";
fp=fopen(filename,"r");
if(fp==NULL)
{
return 0;
}
fscanf(fp,"%d\t",&all); //读取记录总数
for(i=0; i<all; i++) //读取记录信息
{
fscanf(fp,"%s\t%s\t%s\n",p[i].num,p[i].name,p[i].tel);
}
fclose(fp); //关闭文件
return all;
}
int saveinfo(student *p,int n)
{
FILE *fp;
int i,all=0;
char filename[30]="txl.txt";
fp=fopen(filename,"w");
if(fp==NULL)
{
printf("\n***不能建立或打开文件%s!***",filename);
return 0;
}
fprintf(fp,"%d\t",n);
for(i=0; i<n; i++)
fprintf(fp,"%s\t%s\t%s\n",p[i].num,p[i].name,p[i].tel);
fclose(fp);
return 1;
}

搜索更多相关主题的帖子: 不胜感激 include 通讯录 
2005-12-18 19:59
MichaelRain
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
呵呵
程序有点长,要点时间哦

2005-12-19 11:23
gevin
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-12-17
收藏
得分:0 

没关系,时间不是问题,不过很想快点看到结果,再此先谢谢了~`

2005-12-22 11:56
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
,够狠,这么长的程序你让别人改,不了解c++的语法吗?

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2005-12-22 15:39
gevin
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-12-17
收藏
得分:0 

我知道是长了点,很麻烦,我不懂的主要是后面那些写入文件和从文件读取数据.但也只能整道程序发出来才改得了啊,不可能是前面改了而后面不改啊~这样你们不是更难改,毕竟这样在C程序中能成功运行,你们能看到运行后的结果,来改可能会更容易啊~~~只能麻烦大家啦~~

2005-12-22 18:36
gevin
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-12-17
收藏
得分:0 

下面是我自己改了之后的程序,不过里面还是有一个功能老是实现不了,就是在删除信息,保存的时候不能把原来存在文本里面的信息删掉然后再存,虽然在同一次运行的时候成功,但是在下一次运行的时候就读不到改了之后的信息,只能读到原来的信息~~~也就是保存的时候不能把原来的信息删掉.请高手帮忙看一下是哪出了问题?不胜感激~~`
程序如下:

#define N 100
#define SIZE 30
#include<iostream.h>
#include<string.h>
#include<conio.h>
#include<fstream.h>
struct student
{ char num[SIZE];
char name[SIZE];
char tel[SIZE];
};

//函数声明

void myprint(); //显示菜单
int mycreat(struct student*p,int n); //输入通讯录
void mydisplay(struct student *p,int n); //显示通讯录
void mysearch(struct student*p,int n); //查找
int myadd(struct student *p, int n); //增加通讯录
int mydelete(struct student*p,int n); //删除
void sch_num(struct student *p,int n); //按学号查找
int loadinfo(struct student *p, int n); //载入通讯录信息
int saveinfo(struct student *p,int n); //保存通讯录信息


void main()
{ //文件定义
char choose,yes_no;
struct student record[N]; //存放通讯录信息,共100条
int total=0,flag; //通讯录总数
total=loadinfo(record,N); //从文件读取记录信息,不超过100条
do
{
myprint(); //显示菜单
cout<<"\tPlease select:";
cin>>choose;
switch(choose)
{
case'1':
total= mycreat(record,total);
break;
case'2':
mydisplay(record,total);
break;
case'3':
mysearch(record,total);
break;
case'4':
total=myadd(record,total);
break;
case'5':
total=mydelete(record,total);
break;
case '6':
flag=saveinfo(record,total);
if(flag==1)
cout<<"\nSave successful!"<<endl;
else
cout<<"\nSave failure!"<<endl;
break;
case'0':
cout<<"\n";
break;

default:
cout<<"\n"<<choose<<" is a illegal option !"<<endl;
}
if(choose=='0') break;
cout<<"\nCan you contiune select(Y/N)? ";
do
{
cin>>yes_no;
}
while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no!='Y'||yes_no!='y');
}

//显示菜单信息
void myprint()
{
cout<<"\n\n";
cout<<"\n";
cout<<"请输入选项编号(0--6)\n";
cout<<"\t1---批量输入通讯录\n";
cout<<"\t2---显示通讯录\n";
cout<<"\t3---查询通讯录\n";
cout<<"\t4---添加通讯录\n";
cout<<"\t5---删除通讯录\n";
cout<<"\t6---保存通讯录\n";
cout<<"\t0---退出\n";
cout<<"\n";
}

//批量输入学生信息
int mycreat(struct student *p,int n)
{
int i=0;
int m;
cout<<"\n添加前的记录,共有"<<n<<"个."<<endl;
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码"<<endl;
i=0;
while((i<n)&&(strcmp(p->num,"")!=0))
{
cout<<i+1<<"\t"<<p->num<<"\t\t"<<p->name<<"\t\t"<<p->tel<<endl;
i++;
p++;
}
cout<<"\nHow many students do you want to input(<"<<N-n<<"):"<<endl;
cin>>m;
i=0;
while(i<m)
{
cout<<"\n";
cout<<"please enter the "<<i+1<<"th record:"<<endl;
cout<<"学号:";
do
{
cin>>p->num;
}while(strcmp(p->num,"")==0);
cout<<"姓名:";
cin>>p->name;
cout<<"电话号码:";
cin>>p->tel;
p++;
i++;
}
return m+n;
}

//显示学生信息
void mydisplay(struct student *p,int n)
{
int i=0;
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
while(i<n)
{
cout<<i+1<<"\t"<<p->num<<"\t\t"<<p->name<<"\t\t"<<p->tel<<endl;
p++;
i++;
}
}

void mysearch(struct student *p, int n)
{
mydisplay(p,n);
sch_num(p,n);
}

//按学号查询
void sch_num(struct student *p,int n)
{

int i,flag=0;
char nm[10];
cout<<"\n请输入要查询记录的学号:";
cin>>nm;
for(i=0;i<n;i++)
if(strcmp(nm,p[i].num)==0)
{
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
cout<<i+1<<"\t"<<p[i].num<<"\t\t"<<p[i].name<<"\t\t"<<p[i].tel<<endl;
flag=1;
}
if(flag==0)
cout<<"无此人!\n";
}

//增加学生信息
int myadd(struct student *p, int n)
{
int i=0;
char c;
struct student t,*q;
cout<<"添加前的记录:\n";
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
i=0;
q=p;
while(i<n) //显示原有记录信息
{
cout<<i+1<<"\t"<<p->num<<"\t\t"<<p->name<<"\t\t"<<p->tel<<endl;
i++;
q++;
}

do
{
cout<<"请输入新记录的学号:";
do
{
cin>>t.num;
} while(strcmp(t.num,"")==0); //学号不能为空

cout<<"请输入新记录的姓名:";
cin>>t.name;
cout<<"请输入新记录的电话号码:";
cin>>t.tel;

for(i=0;i<n;i++)
if(strcmp(t.num,(p+i)->num)==0 || strcmp(t.tel,(p+i)->tel)==0)
{
cout<<"学号或电话号码重复,要重新输入吗(Y/N)?";
cin>>c;
break;
}

if(i==n) //找到最后,没有重复
{ *(p+i)=t;
cout<<"添加后的记录:\n";
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
i=0;
for(i=0;i<n+1;i++)
cout<<i+1<<"\t"<<(p+i)->num<<"\t\t"<<(p+i)->name<<"\t\t"<<p[i].tel<<endl;
break;
}
} while(c=='y'||c=='Y');

return n+1;
}

//删除学生信息
int mydelete(struct student *p, int n)
{ int i,x;
char nm[10];
cout<<"删除前的记录:\n";
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
i=0;
for(i=0;i<n;i++)
cout<<i+1<<"\t"<<p[i].num<<"\t\t"<<p[i].name<<"\t\t"<<p[i].tel<<endl;
cout<<"\n请输入要删除记录的学号:";
cin>>nm;
for(x=0; x<n; x++)
if(strcmp(nm,p[x].num)==0)
break;
if(x<n) //说明提前结束循环,找到人
{
for(i=x;i<n-1;i++)
{
p[i]=p[i+1];
}
cout<<"删除后的记录:\n";
cout<<"\n记录号\t学号\t\t姓名\t\t电话号码\n";
i=0;
for(i=0;i<n-1;i++)
cout<<i+1<<"\t"<<p[i].num<<"\t\t"<<p[i].name<<"\t\t"<<p[i].tel<<endl;
}
else
cout<<"无此人\n";
return n-1;
}

//载入通讯录信息
int loadinfo(student *p,int n)
{
ifstream infile;
int all=0,i;
infile.open("book.txt",ios::binary);
infile>>all;
for(i=0;i<all;i++)
infile>>p[i].num>>p[i].name>>p[i].tel;
infile.close();
return all;
}


int saveinfo(student *p,int n)
{
ofstream outfile;
int i,all=0;
outfile.open("book.txt", ios::ate|ios::binary);
outfile<<n;
for(i=0; i<n; i++)
outfile<<"\t"<<p[i].num<<"\t"<<p[i].name<<"\t"<<p[i].tel<<endl;
outfile.close();
return 1;
}

2005-12-26 11:42
gevin
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2005-12-17
收藏
得分:0 
好开心啊~`嘻嘻~`终于搞定啦~`
我把outfile.open("book.txt", ios::ate|ios::binary);中的ios::ate| 删掉后就可以啦~~`不论运行多少次都能成功啦~~~
再次感谢大家~~
2005-12-26 23:31
快速回复:请高手帮忙把该C程序改为C++程序
数据加载中...
 
   



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

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