LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5174|回复: 15

a small program

[复制链接]
发表于 2002-11-7 10:39:44 | 显示全部楼层 |阅读模式
//tel_book.h
#include<string>
#include<vector>
class tel_number
{
public:
  string getname(void);
  string get_tel_num(void);
  void writename(string);
  void write_tel_num(string);
private:
  string _name;
  string _tel_num;
};

void insert(void);
void del(void);
void deleteall(void);
void display(void);



//tel_book1.c
#include<string>
#include<vector>
#include<fstream>
#include"tel_book.h"
#include<algorithm>
#include<functional>
#include<iterator>
#include<stdio.h>
string tel_number::getname(void)
{return _name;};
string tel_number::get_tel_num(void)
{return _tel_num;};
void tel_number::writename(string name)
{_name=name;};
void tel_number::write_tel_num(string tel_num)
{_tel_num=tel_num;};

static vector<tel_number>* get_book(void)
{
  ifstream infile("my_telephone_book");
  string book_line;
  string::size_type pos=0;
  vector<tel_number>*plist=new vector<tel_number>;
  tel_number current;
  while(getline(infile,book_line))
  {
    pos=book_line.find_first_of(' ');
    string::size_type pos1=book_line.size();
    current.writename(book_line.substr(0,pos));
    current.write_tel_num(book_line.substr(pos+1,pos1));
    plist->push_back(current);
  };
  return plist;
};         

void insert(void)
{
  vector<tel_number>*plist=get_book();
  int new_friend;
  cout<<"How many new friend you want to add telebook?"<<endl;
  cin>>new_friend;
  vector<tel_number>*list=new vector<tel_number>(new_friend);
  ofstream outfile("my_telephone_book");
  if(!outfile)
    {
      cerr<<"Can't open the file!"<<endl;
      exit(1);
    }
  vector<tel_number>::iterator iter=list->begin(),iter_end=list->end();
  string name;
  string tel_num;
  for(;iter<iter_end;++iter)
    {
      cout<<"please input the new friend's name."<<endl;
      cin>>name;
      cout<<"lease input his(her) number."<<endl;
      cin>>tel_num;
      
      (*iter).writename(name);
      (*iter).write_tel_num(tel_num);
      
      cout<<"lease input the next friend"<<endl;
      
    };
  cout<<"Here are the new friends:"<<endl;
  for(iter=list->begin();iter!=iter_end;iter++)
    {
      cout<<"name: "<<(*iter).getname()<<"\t\tnumber:\t"<<(*iter).get_tel_num()<<endl;  
    };
  vector<tel_number>qlist;
  copy(plist->begin(),plist->end(),back_inserter(qlist));
  copy(list->begin(),list->end(),back_inserter(qlist));
  vector<tel_number>::iterator qiter,qiter_end;
  cout<<"\n\nHere are the all your frineds now:"<<endl;
  for(qiter=qlist.begin(),qiter_end=qlist.end();qiter<qiter_end;++qiter)
    {
     
      cout<<"name: "<<(*qiter).getname()<<"\t\tnumber:\t"<<(*qiter).get_tel_num()<<endl;
      outfile<<(*qiter).getname()<<" "<<(*qiter).get_tel_num()<<endl;
    };
  delete plist;
  delete list;

};

void display(void)
{
  cout<<"Here is your telephone book: "<<endl;
  vector<tel_number>*list=get_book();
  vector<tel_number>::iterator iter,iter_end;
  for(iter=list->begin(),iter_end=list->end();iter<iter_end;++iter)
    cout<<"name: "<<(*iter).getname()<<"\t\tnumber:\t"<<(*iter).get_tel_num()<<endl;
  delete list;
}

void del()
{
  vector<tel_number>*plist=get_book();
  vector<tel_number>::iterator piter;
  cout<<"Which one do yo want to delete? Tell me his(her) name."<<endl;
  string name;
  cin>>name;
  vector<tel_number>qlist;
  for(piter=plist->begin();piter!=plist->end();piter++)
    {
      if((*piter).getname().compare(name)==0)
        {
          copy(plist->begin(),piter,back_inserter(qlist));
          copy(piter+1,plist->end(),back_inserter(qlist));
          break;
        };
    };
  cout<<"Now your telephone book is:"<<endl;
  ofstream outfile("my_telephone_book");
  for(piter=qlist.begin();piter!=qlist.end();piter++)
    {
      cout<<"name: "<<(*piter).getname()<<"\t\tnumber:\t"<<(*piter).get_tel_num()<<endl;
      outfile<<(*piter).getname()<<" "<<(*piter).get_tel_num()<<endl;
    };
  delete plist;
};
void deleteall(void)
{
  cout<<"You want to delete all the number in your book,don't you?(y/n)";
  while(getchar()!='\n')
    continue;
  char i=getchar();
  if(i=='y')
    {
      ofstream outfile("my_telephone_book");
      
      cout<<"Now all your firends number have been lost!!!"<<endl;
    }
  else
    cout<<"Bye"<<endl;
};



//tel_book.c
#include<iostream>
#include<string>
#include<stdio.h>
#include"tel_book.h"
int main(void)
{
  cout<<"What do you want to do?\n";
  cout<<"(1)insert a new friend telephone numbers (2)delete one's number\n";
  cout<<"(3)list the telephone book               (4)delete all numbers\n";
  cout<<"(0)nothing to do\n";
  int choice=0;
  switch(choice=getchar())
    {
    case'1':
      insert();
    break;
    case'2':
      del();
    break;
    case'3':
      display();
    break;
    case'4':
      deleteall();
    break;
    case'0':
    cout<<"Nothing you wang to do.\nThank you for your use!\n";
    break;
    default:
    cout<<"wrong number you select.\n";
    };
  return 0;
}


blue
 楼主| 发表于 2002-11-7 10:52:11 | 显示全部楼层

上面是一个电话簿程序

刚开始学c++,相通过一两个这样的小程序熟练运用一些c++中常用的函数,泛型算法。
编的不好,让大家见笑了。希望大家提点意见,也好有所改进提高。
也希望大家把程序传上,互相帮助借鉴吗!
一共3个文件:文件名已标明。
编译命令:g++ tel_book.c tel_book1.c -o tel_book
发表于 2002-11-7 12:40:13 | 显示全部楼层
Good!支持!
我这里也提供过一些CPP教学用的源代码,都是可以用g++编译的。
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=5706
 楼主| 发表于 2002-11-11 15:51:12 | 显示全部楼层

没有人给点建议吗

里边还是有不少漏洞的,比如当名字相同时,用删除只能删除第一个成员
发表于 2003-6-11 17:23:23 | 显示全部楼层
跟文本打交道,非c++的长处。
建议后台用mysql试试吧
发表于 2003-6-12 08:57:37 | 显示全部楼层
建议用缩进的方式贴出代码,否则别人看起来很累。
发表于 2003-6-12 21:07:50 | 显示全部楼层
版主说的很重要。
发表于 2003-6-14 11:18:14 | 显示全部楼层

现在正在用STL。

那个程序并不复杂,不过注释还是要加吧?如果是高手,他不用看这个,如果是新手,注释对他们来说是很重要的。

在标准的C++学习方面,我还是倾向于外国人的书,有一个表面的区别就是:国内作者写的书中的例子,在Windows中编译没有问题,但用gcc来编译,就要经过修改了。也就说是,他们写的不是标准的C/C++!

gcc是一个非常好的编译器,我的室友已经在看SGI的STL源码了(看候捷的《STL源码剖析》),他装Linux是为了这个学习目的!
发表于 2003-6-17 17:21:11 | 显示全部楼层

我这里怎么总是编译不成功

原来的代码没有任何改动。
rh8,
用g++ tel_book.c tel_book1.c -o tel_book编译
总是有n多的错
(新手)
发表于 2003-10-21 17:01:20 | 显示全部楼层

不知道为什么??

同样一个程序我使用gcc 编译很轻易就获得成功,但是不知道为什么使用kdevelop
3.0编译的时候就是一大堆的问题
很郁闷!!
总是说“cout函数是第一次使用”
翻译成汉语大概就是这个意思了
或者是main的函数类型不对!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表