📄 note.cpp
字号:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include<iomanip.h>
typedef int Status;
typedef struct lnode *LinkList;
struct ElemType //----------定义结构体数组用于缓存数据----------
{
char name[20];
char phnum[20];
};
struct lnode
{ //----------通讯录结构中结点的定义----------
ElemType data;
LinkList next;
};
class File //----------定义文件的类----------
{
public:
char Filename[20];
manu(); //程序表头
opFile(); //打开旧文件
opFile2(); //打开旧文件
opFile3(); //默认文件赋值
NewFile(); //新建文件
New2File(); //新建打开失败后的文件
New3File(); //覆盖原有文件
FileCopy(); //文件copy
};
File::opFile() //----------打开旧文件
{
char t;
cout<<"请输入打开文件名称:";
cin>>Filename;
fstream out(Filename,ios::nocreate|ios::app);
if(!out)
{
cout<<"没有此文件!!!"<<endl<<"(1)重新输入打开文件 (2)新建"<<Filename<<"文件"<<endl<<"选择:";
cin>>t;
switch (t)
{
case '1':
opFile();
break;
case '2':
New2File();
break;
}
}
out.close();
}//----------opFile----------
File::opFile2()
{
fstream out(Filename,ios::nocreate|ios::app);
out.close();
}//----------opFile2----------
File::opFile3() //-----------默认文件赋值
{
char Cat[20]={'C','a','t','.','t','x','t'};
strcpy(Filename,Cat);
fstream out(Filename,ios::nocreate|ios::app);
out.close();
}//----------opFile3----------
File::New3File()
{
fstream out(Filename,ios::trunc);
out.close();
}//----------New3File----------
File::New2File() //-----------新建文件
{
fstream out(Filename,ios::app);
}//----------New2File----------
File::NewFile()//新建文件
{
cout<<"输入新建文件名:";
cin>>Filename;
fstream out(Filename,ios::nocreate|ios::app);
if(!out)
{
cout<<"OK!"<<endl;
}
else
{
cout<<"文件已存在!!"<<endl;
cout<<"(1)重新输入 (2)覆盖原文件 (3)打开"<<Filename<<"文件 (4)返回主菜单"<<endl;
cout<<"选择: ";
int c;cin>>c;
switch (c)
{
case 1:
NewFile();break;
case 2:
cout<<"覆盖成功!!!"<<endl;
New3File();break;
case 3:
opFile2();break;
case 4:
manu();
int e;
cin>>e;
switch (e)
{
case 1:
opFile();break;
case 2:
NewFile();break;
}break;
}
}out.close();
}//----------NewFile----------
File::FileCopy()//----------文件的复制-------------------
{
char ch,TFile1[20],TFile2[20];
cout<<"输入原文件:";
cin>>TFile1;
cout<<"把"<<TFile1<<"文件拷贝到::";
cin>>TFile2;
ifstream f1(TFile1);
ofstream f2(TFile2);
while(f2&&f1.get(ch)) f2.put(ch);
f1.close();
f2.close();
}//------------FileCopy-------------------
File::manu()//---------程序表头---------------
{ cout<<"Made By CatCat.cod@Wong..."<<endl;
cout<<"thanks for useing...."<<endl;
cout<<" ━━━━━━━━━━━. .━━━━━━━━━━"<<endl;
cout<<" ━━━━━━ \ / ━━━━━"<<endl;
cout<<" ━━━━ \ ★ ★ / ━━━━"<<endl;
cout<<" ━━━ . \/ . ━━━"<<endl;
cout<<" ____; ;____ "<<endl;
cout<<" /'/ \'\"<<endl;
cout<<" ┏━━━━━━━━UU━━━UU━━━━━━━━━┓"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ WelCome To CatCat Program ┃"<<endl;
cout<<" ┃ ┃"<<endl;
cout<<" ┃ Cherrylim ┃"<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
cout<<"━━━━━━━━━━━━━━━━━━通讯录━━━━━━━━━━━━━━━━━━━"<<endl;
cout<<"(1)打开文件..."<<endl<<"(2)新建文件..."<<endl<<"(3)默认文件..."<<endl<<endl;
cout<<"选择: ";
}//----------manu---------------
class T_list: public File //-----定义链表的类,用于暂时储存文件中的数据以及进行操作--------
{ //-----File类的派生----------------------------------------------
int N; //计算链表的长度,用于确定数据个数与打印。
public:
Getelem_L(LinkList L);//数据查找,姓名与电话查找合并。
ListInsert_L(LinkList &L,int i,ElemType e);//数据插入。
ListDelete_L(LinkList &L,ElemType &e);//数据删除,删除数据位置。
CreatList_L(LinkList &L);//创建链表并把文件数据读入链表。
AddFileToList(LinkList &L,int i,ElemType e);//从另外的文件添加数据到链表中。
printlist(LinkList L);//打印操作的数据。
Save(LinkList L);//数据保存到正在操作的文件,文件保存。
Save2(LinkList L);//数据另存到用户定义的文件,文件另存为。
};
T_list::Getelem_L(LinkList L)//---------数据查找------
{
LinkList p;
char temp[20];
int i=0,j=0,k=0,m=0;
cout<<"输入查找数据:";
cin>>temp; p=L->next;
for (i=0;i<N;i++){
if (strcmp(temp,p->data.name)==0)//--------先对数据中的姓名进行查找
{
cout<<"找到数据在第"<<i+1<<"位置上"<<endl;
cout<<"("<<i+1<<")"<<setw(5)<<"姓名:"<<setw(10)<<p->data.name<<setw(20);
cout<<"电话:"<<setw(10)<<p->data.phnum<<endl;
}
else//--------K,用于判断是否没有找到记录
k++;
if (strcmp(temp,p->data.phnum)==0)//--------再对数据中的电话进行查找
{
cout<<"找到数据在第"<<i+1<<"位置上"<<endl;
cout<<"("<<i+1<<")"<<setw(5)<<"姓名:"<<setw(10)<<p->data.name<<setw(20);
cout<<"电话:"<<setw(10)<<p->data.phnum<<endl;
}
else//--------M,用于判断是否没有找到记录
m++;
p=p->next;
}
if(k==N&&m==N)
cout<<"没有"<<temp<<"此记录"<<"\n\n";
return 0;
}//--------------------Getelem_L
T_list::ListInsert_L(LinkList &L,int i,ElemType e)//-------数据插入------
{
LinkList p,s;
int j;p=L;j=0;
cout<<"输入姓名:"; cin>>e.name;
cout<<"输入电话:"; cin>>e.phnum;
N++;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1) return 0;
s=(LinkList)malloc(sizeof(lnode));
s->data=e;s->next=p->next;
p->next=s;
return 1;
}//------------------ListInsert_L
T_list::ListDelete_L(LinkList &L,ElemType &e)//-------数据删除-------
{
int i,j=0;LinkList p,q;p=L;
cout<<"输入删除位置:"; cin>>i;
if(i>N) cout<<"错误操作!"<<endl;
while(p->next&&j<i-1){p=p->next;++j;};
if(!(p->next)||j>i-1)return 0;
q=p->next;p->next=q->next;
e=q->data;
cout<<"输入数据:"<<endl;//-------打印出被删除的数据-------
cout<<"姓名:"<<setw(10)<<e.name<<setw(20);
cout<<"电话:"<<setw(10)<<e.phnum<<endl;
free(q); N--;
return 1;
}//--------------------ListDelete_L
T_list::printlist(LinkList L)//-------打印链表数据-------
{
int i;
LinkList p=L->next;
if(N==0)
{
cout<<"文件没有资料!"<<endl;
}
for(i=0;i<N;i++)
{
cout<<setw(2)<<"("<<setw(2)<<i+1<<")"<<setw(3);
cout<<" "<<"姓名:"<<setw(14)<<p->data.name<<setw(14);
cout<<"电话:"<<setw(10)<<p->data.phnum;
cout<<"\n";
p=p->next;
}
}//--------------------printlist
T_list::CreatList_L(LinkList &L)//------创建链表并把文件数据读入链表
{
LinkList p;
L=(LinkList)malloc(sizeof(lnode));
L->next=NULL;
p=L->next=NULL;
ifstream inf(Filename);
N=0;
while(inf.eof()==0)//--------文件读取 ------
{
p=(LinkList)malloc(sizeof(lnode));
inf.getline(p->data.name,20);
inf.getline(p->data.phnum,20);
p->next=L->next;L->next=p;
N++;
}
}//--------------CreatList_L
T_list::AddFileToList(LinkList &L,int i,ElemType e)//------文件添加
{
LinkList p,s;
int j;char TFN[20];
p=L;j=0;
cout<<"输入添加的文件名:";
cin>>TFN;
ifstream inf(TFN);
while(inf.eof()==0)
{
inf.getline(e.name,20);
inf.getline(e.phnum,20);
N++;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1) return 0;
s=(LinkList)malloc(sizeof(lnode));
s->data=e;s->next=p->next;
p->next=s;
}
return 1;
}//--------------AddFileToList
T_list::Save(LinkList L)//--------数据保存-------
{
fstream out(Filename,ios::trunc);
int i;
LinkList p=L->next;
for(i=0;i<N;i++)
{
out<<p->data.name<<endl;
out<<p->data.phnum;
if(i!=N-1)
{
out<<endl;
}
p=p->next;
}
out.close();
}//-----------Save-----------
T_list::Save2(LinkList L)//-----------另存为-----------
{
char tempFile[20];
int i;
LinkList p=L->next;
cout<<"请输入另存为的文件名称:";
cin>>tempFile;
fstream wrt(tempFile,ios::trunc);
for(i=0;i<N;i++)
{
wrt<<p->data.name<<endl;
wrt<<p->data.phnum;
if(i!=N-1)
{
wrt<<endl;
}
p=p->next;
}
wrt.close();
}//-----------Save-----------
main()//--------主程序--------
{
T_list get;
LinkList L;
ElemType e;
char a,b,c,d,f;//--------各个循环的控制定义
do{
get.manu();
cin>>a;
switch (a)
{
case '1':
get.opFile();
break;
case '2':
get.NewFile();
break;
case '3':
get.opFile3();
break;
default:
cout<<"错误操作!"<<endl;
break;
}
}while (a!='1'&&a!='2'&&a!='3');
get.CreatList_L(L);//--------确定文件名称后读取文件
get.printlist(L);
cout<<"-------------------文件操作------------------------"<<endl;
do{
cout<<endl<<"(1)添加资料 (2)删除资料 (3)查找资料 (4)浏览通讯录";
cout<<endl<<"(5)保存操作 (6)其他文件操作 (7)退出程序"<<endl;
cout<<"选择:";
cin>>b;
switch (b)
{
case '1':
get.ListInsert_L(L,1,e);
break;
case '2':
get.ListDelete_L(L,e);
break;
case '3':
get.Getelem_L(L);
break;
case '4':
get.printlist(L);
break;
case '5':
cout<<"是否保存操作?(y/n):";
cin>>d;
if(d=='y'||c=='Y')
{
get.Save(L);
cout<<"文件储存!!"<<endl;
}
else
cout<<"放弃储存!!"<<endl;
break;
case '6':
do{
cout<<endl<<"(1)另存为... (2)文件的拷贝 (3)添加别的文件到此文件中";
cout<<" (4)返回"<<endl;
cout<<"选择:";
cin>>f;
switch (f)
{
case '1':
get.Save2(L);
cout<<"操作完成!"<<endl;
break;
case '2':
get.FileCopy();
break;
case '3':
get.AddFileToList(L,1,e);
cout<<"添加成功!!";
break;
case '4':
break;
default:
cout<<"错误输入!!"<<endl;
break;
}
}while (f!='4');
break;
case '7':
cout<<"---------提示!!!---------"<<endl;
cout<<"是否保存操作?(y/n):";
cin>>c;
if(c=='y'||c=='Y')
{
get.Save(L);
cout<<"文件储存!!"<<endl;
}
else
cout<<"放弃储存!!"<<endl;
break;
default:
cout<<"错误输入!!"<<endl;
break;
}
}
while (b!='7');
}
//------------------------程序完毕!!----------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -