+ -
当前位置:首页 → 问答吧 → 新手的作业!求指导

新手的作业!求指导

时间:2011-12-14

来源:互联网

#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;

struct Person
{
  string name;
  string identity;
  int telephone;
  string email;
  string address;
};
struct Person array[200];

void txt()//新建通讯录文件
{
  ofstream output;
  output.open("contactPerson.txt");
  output.close();
}
void newBuild()//新建联系人
{
  fstream output;
  output.open("contactPerson.txt",ios::out |ios::app);
  for(int i=0;i<200;++i){
  if(array[i].name.empty()){
  cout<<"姓名"<<endl;
  cin>>array[i].name;
  output<<setw(10)<<array[i].name;
  cout<<"身份"<<endl;
  cin>>array[i].identity;
  output<<setw(15)<<array[i].identity;
  cout<<"电话"<<endl;
  cin>>array[i].telephone;
  output<<setw(15)<<array[i].telephone;
  cout<<"电子邮箱"<<endl;
  cin>>array[i].email;
  output<<setw(20)<<array[i].email;
  cout<<"地址"<<endl;
  cin>>array[i].address;
  output<<setw(20)<<array[i].address;
  cout<<"新建成功"<<endl;
  output.close();
  return;
  }
  }
  output.close();
  cout<<"通讯录存储空间已满";
}

void Delete1()//删除联系人
{
  cout<<"输入删除人的姓名";
  string nameToDelete;
  cin>>nameToDelete;
  ifstream input;
  input.open("contactPerson.txt");
  for(int i=0;i<200;++i){
  if(array[i].name==nameToDelete){
  array[i].name.clear();
  array[i].identity.clear();
  array[i].telephone=-1;
  array[i].email.clear();
  array[i].address.clear();
  input.close();
  return;
  }
  }
  input.close();
  cout<<"该联系人不存在";
}

void Delete2()//删除联系人的某一信息类型
{
  cout<<"输入删除人的姓名";
  string nameToDelete;
  cin>>nameToDelete;
  ifstream fin("contactPerson.txt");
  for(int i=0;i<200;++i){
  if(array[i].name==nameToDelete){
  cout<<"要删除的信息类型:0:姓名;1:身份;2:电话;3:电子邮件;4:地址";
  int type;
  cin>>type;
  switch(type)
  {
  case 0: array[i].name.clear();
  break;
  case 1: array[i].identity.clear();
  break;
  case 2: array[i].telephone=-1;
  break;
  case 3:array[i].email.clear();
  break;
  case 4:array[i].address.clear();
  break;
  }
  fin.close();
  return;
  }
  }
  fin.close();
  cout<<"该联系人不存在";
}

void display1()//显示全部联系人信息
{
  ifstream fin("contactPerson.txt");
  for(int i=0;i<200;++i)
  {
  if(array[i].name.empty())
  continue;
  fin>>array[i].name>>array[i].identity>>array[i].telephone>>array[i].email>>array[i].address;
  cout<<"姓名:"<<array[i].name<<endl<<"身份:"<<array[i].identity<<endl<<"电话:";
  if(array[i].telephone==-1)
  cout<<endl;
  else
  cout<<array[i].telephone<<endl;
  cout<<"电子邮件:"<<array[i].email<<endl<<"地址:"<<array[i].address;
  }
  fin.close();
}

void display2()//显示指定联系人的全部信息
{
  cout<<"要显示的联系人姓名";
  string nameToDisplay;
  cin>>nameToDisplay;
  ifstream fin("contactPerson.txt");
  for(int i=0;i<200;++i){
  if((array[i].name==nameToDisplay)&&!(array[i].name.empty())){
  fin>>array[i].name>>array[i].identity>>array[i].telephone>>array[i].email>>array[i].address;
  cout<<array[i].name<<endl;
  cout<<array[i].identity<<endl;
  if(array[i].telephone==-1)
  cout<<" "<<endl;
  else
  cout<<array[i].telephone<<endl;
  cout<<array[i].email<<endl;
  cout<<array[i].address;
  fin.close();
  return;
  }
  }
  fin.close();
  cout<<"该联系人不存在";

}

void display3()//显示所有联系人的给定信息
{
  cout<<"需要显示的信息类型 0:姓名;1:身份;2:电话;3:邮箱;4:地址"<<endl;
  int type;
  cin>>type;
  ifstream fin("contactPerson.txt");
  switch(type)
  {
  case 0:{
  for(int i=0;i<200;i++){
  if(array[i].name.empty())
  continue;
  fin>>array[i].name;
  cout<<array[i].name<<endl;
  }
  break;
  }
  case 1:{
  for(int i=0;i<200;i++){
  if(array[i].name.empty())
  continue;
  fin>>array[i].identity;
  cout<<array[i].identity<<endl;
  }
  break;
  }
  case 2:{
  for(int i=0;i<200;i++){
  if(array[i].name.empty())
  continue;
  fin>>array[i].telephone;
  if(array[i].telephone==-1)
  cout<<" ";
  else
  cout<<array[i].telephone<<endl;
  }
  break;
  }
  case 3:{
  for(int i=0;i<200;i++){
  if(array[i].name.empty())
  continue;
  fin>>array[i].email;
  cout<<array[i].email<<endl;
  }
  break;
  }
  case 4:{
  for(int i=0;i<200;i++){
  if(array[i].name.empty())
  continue;
  fin>>array[i].address;
  cout<<array[i].address<<endl;
  }
  break;
  }
  }
  fin.close();
}

void revise()//修改联系人或联系人信息
{
  cout<<"输入需要修改的联系人姓名";
  string nameToRevise;
  cin>>nameToRevise;
  ifstream fin("contactPerson.txt");
  for(int i =0;i<200;++i){
  if(array[i].name==nameToRevise){
  cout<<"修改的类型 0:姓名;1:身份;2:电话;3:邮箱;4:地址"<<endl;
  int type;
  cin>>type;
  while(type!=-1){
  switch(type)
  {
  case 0:{
  string newName;
  cin>>newName;
  array[i].name=newName;
  break;
  }
  case 1: {
  string newIdentity;
  cin>>newIdentity;
  array[i].identity=newIdentity;
  break;
  }
  case 2: {
  int newTelephone;
  cin>>newTelephone;
  array[i].telephone=newTelephone;
  break;
  }
  case 3: {
  string newEmail;
  cin>>newEmail;
  array[i].email=newEmail;
  break;
  }
  case 4: {
  string newAddress;
  cin>>newAddress;
  array[i].address=newAddress;
  break;
  }
  }
  cin>>type;
  }
  fin.close();
  return;
  }
  }
  fin.close();
  cout<<"该联系人不存在"<<endl;
}

int main(){
  cout<<"0:新建"<<endl<<"1:删除"<<endl<<"2:显示"<<endl<<"3:修改"<<endl;
  int status;
  cin>>status;
  while(status!=-1){
  switch(status)
  {
  case 0:newBuild();
  break;
  case 1:{
  cout<<"0:删除联系人"<<endl<<"1:删除联系人的信息"<<endl;
  int style;
  cin>>style;
  switch(style)
  {
  case 0: Delete1();
  break;
  case 1: Delete2();
  break;
  }
  break;
  }
  case 2:{
  cout<<"0:显示全部联系人信息; 1:显示指定联系人的全部信息;2:显示所有联系人的给定信息";
  int style;
  cin>>style;
  switch(style)
  {
  case 0: display1();
  break;
  case 1: display2();
  break;
  case 3: display3();
  break;
  }
  break;
  }
  case 3:revise();
  break;
  }
  cin>>status;
  }
  return 0;
}

没学面向对象要做的大作业啊!
不懂显示功能为什么有错!
各位大神路过帮我看一下吧!

作者: T_Tbread   发布时间: 2011-12-14

这么长的代码,看死人了。

作者: wjl19890711   发布时间: 2011-12-14

我的理解,结构体好像不是用来进行对象操作的吧?把结构体改成类吧,C++中用类比较多,把结构体定义的人的属性设为类的私有属性,把对结构体对象的操作变成类的成员函数。至于显示,你说的显示是哪个显示,建议看看教科书上得I/O输入输入流那一块,在文件读入时用cout,干什么?

作者: qwe670330320   发布时间: 2011-12-14

单步调试和设断点调试是程序员必须掌握的技能之一。

作者: zhao4zhong1   发布时间: 2011-12-14