node.h
====================================
#include<iostream>
template<class T>
class node
{
private:
node<T> *next;
public:
T data;
node(void);
node(T data1,node<T> *p=NULL);
void insertafter(node<T> *p);
void deleteafter(void);
node<T>* nextnode(void);
};
template<class T>
node<T>::node(void)
{
next=NULL;
}
template<class T>
node<T>::node(T data1,node<T> *p)
{
data=data1;
next=p;
}
template<class T>
void node<T>::insertafter(node<T> *p)
{
p->next=next;
next=p;
}
template<class T>
void node<T>::deleteafter(void)
{
node<T> *temp;
temp=next;
next=temp->next;
delete temp;
}
template<class T>
node<T>* node<T>::nextnode(void)
{
return next;
}
list.h
=====================================
#include<iostream>
#include<stdlib.h>
#include"node.h"
template<class T>
class list
{
private:
node<T> *head,*newnode,*last,*currnode,*prenode;
public:
list(void);
node<T>* setnode(T data2,node<T>* p=NULL);
void createlist(T data2,node<T>* p=NULL);
void Insertlast(T p);
void deletedata(T d);
void print(void);
void deletelist(void);
void athead(void);
T Data(void);
node<T>* Next(void);
node<T>* Currnode(void);
};
template<class T>
list<T>::list(void)
{
head=NULL;
newnode=NULL;
last=NULL;
currnode=NULL;
prenode=NULL;
}
template<class T>
node<T>* list<T>::setnode(T data2,node<T>* p)
{
newnode=new node<T>(data2);
return newnode;
}
template<class T>
void list<T>::createlist(T data2,node<T>* p=NULL)
{
newnode=new node<T>(data2);
if(head==NULL)
{
head=newnode;
}
else
{
currnode=head;
while(currnode->nextnode()!=NULL)
{
currnode=currnode->nextnode();
}
currnode->insertafter(newnode);
currnode=newnode;
}
last=newnode;
}
template<class T>
void list<T>::Insertlast(T p)
{
newnode=new node<T>(p);
if(last->nextnode()==NULL)
{
last->insertafter(newnode);
}
else
{
cout<<"there are some error in last"<<endl;
exit(0);
}
}
template<class T>
void list<T>::deletedata(T d)
{
if(head==NULL)
{
cout<<"no data in the list"<<endl;
exit(0);
}
if(head->data==d)
{
head=head->nextnode();
}
else
{
currnode=head;
while(currnode!=NULL)
{
if(currnode->data!=d)
{
prenode=currnode;
currnode=currnode->nextnode();
}
else
{
prenode->deleteafter();
currnode=prenode->nextnode();
}
}
}
}
template<class T>
void list<T>::print(void)
{
currnode=head;
if(head==NULL)
{
cout<<"no data in list"<<endl;
exit(0);
}
while(currnode!=NULL)
{
cout<<currnode->data<<" ";
currnode=currnode->nextnode();
}
cout<<endl;
}
template<class T>
void list<T>::deletelist(void)
{
node<T> *temp;
if(head==NULL)
{
cout<<"no data in list"<<endl;
exit(0);
}
while(head!=NULL)
{
temp=head;
head=head->nextnode();
delete temp;
}
}
template<class T>
void list<T>::athead(void)
{
if(head!=NULL)
{
currnode=head;
}
else
{
cout<<"no data at head"<<endl;
exit(0);
}
}
template<class T>
T list<T>::Data(void)
{
if(currnode!=NULL)
{
return currnode->data;
}
}
template<class T>
node<T>* list<T>::Next(void)
{
if(currnode!=NULL)
{
currnode=currnode->nextnode();
return currnode;
}
else
{
return NULL;
}
}
template<class T>
node<T>* list<T>::Currnode(void)
{
return currnode;
}
guanli.cpp
============================================
#include<iostream>
#include<string>
#include<fstream>
#include"list.h"
struct file // file struct;
{
string filename;
string aboutfile;
string filepath;
};
struct getfile
{
string filename;
string aboutfile;
string filepath;
};
void main(void)
{
int select;
file myfile;
string space,findvalue;
ofstream writefile;
list<getfile> mylist;
char ch,text;
int stringsize,i;
for(;;)
{
string linevalue; // jing zhi zai for(;;){} xuan huan zhong ding yi(1-3);
string openname("/home/c++/zuoping2/jiru");// 2
ifstream readfile(openname.c_str(),ios::in);//3
string::size_type pos=0,pre=0;
getfile getmyfile;
cout<<"1:add file"<<endl;
cout<<"2:find file"<<endl;
cout<<"3:watch file"<<endl;
cout<<"4:delete file"<<endl;
cout<<"5:quite"<<endl;
cin>>select;
switch(select)
{
case 1:
writefile.open("/home/c++/zuoping2/jiru",ios::out | ios::app);
if(!writefile)
{
cout<<"Don't open jiru file"<<endl;
exit(1);
}
getline(cin,space,'\n');
cout<<"please input file name"<<endl;
getline(cin,myfile.filename,'\n');
cout<<"please input file description"<<endl;
getline(cin,myfile.aboutfile,'\n');
cout<<"please input file path"<<endl;
getline(cin,myfile.filepath,'\n');
if(myfile.filepath[myfile.filepath.size()-1]=='/')
{
writefile<<myfile.filename<<";"<<myfile.aboutfile<<";"<<myfile.filepath<<";"<<'\n';
}
else
{
myfile.filepath=myfile.filepath+"/";
writefile<<myfile.filename<<";"<<myfile.aboutfile<<";"<<myfile.filepath<<";"<<'\n';
}
writefile.close();
break;
case 2:
if(!readfile)
{
cout<<"Don't open jiru file"<<endl;
exit(-1);
}
cout<<"please input file name for finding file"<<endl;
cin>>findvalue;
while(getline(readfile,linevalue,'\n'))
{
pre=0;
pos=0;
//get file name;
pos=linevalue.find_first_of(';',pos);
getmyfile.filename=linevalue.substr(pre,pos-pre); ++pos;
pre=pos;
//get file description;
pos=linevalue.find_first_of(';',pos);
getmyfile.aboutfile=linevalue.substr(pre,pos-pre);
++pos;
pre=pos;
//get file path;
pos=linevalue.find_first_of(';',pos);
getmyfile.filepath=linevalue.substr(pre,pos-pre);
++pos;
pre=pos;
//get getmylist data for create list;
mylist.createlist(getmyfile);
}
mylist.athead();
while(mylist.Currnode()!=NULL)
{
if(mylist.Data().filename==findvalue) //when find file;
{
cout<<"find file"<<endl;
cout<<"###########################################"<<endl;
cout<<"<"<<mylist.Data().aboutfile<<"<"<<endl;
cout<<"###########################################"<<endl;
cout<<"do you want to like source"<<endl;
cin>>ch;
if(ch=='y')
{
string filepath;
filepath=mylist.Data().filepath+mylist.Data().filename;
//erase char '\n';
for(i=0;i<=filepath.size();i++)
{
if(filepath[i]=='\n')
{
filepath.erase(i,1);
}
}
//open file;
ifstream openfiles;
openfiles.open(filepath.c_str(),ios::in);
if(!openfiles)
{
cerr<<"don't open file"<<endl;
exit(-1);
}
//read file context;
while(!openfiles.eof())
{
openfiles.get(text);
cout.put(text);
}
}
}
mylist.Next();
}
mylist.deletelist();
break;
case 3:
if(!readfile)
{
cerr<<"don't open the file"<<endl;
exit(-1);
}
while(getline(readfile,linevalue,'\n'))
{
//get file name;
pos=linevalue.find_first_of(';',pos);
getmyfile.filename=linevalue.substr(pre,pos-pre); ++pos;
pre=pos;
//get file description;
pos=linevalue.find_first_of(';',pos);
getmyfile.aboutfile=linevalue.substr(pre,pos-pre);
++pos;
pre=pos;
//get file path;
pos=linevalue.find_first_of(';',pos);
getmyfile.filepath=linevalue.substr(pre,pos-pre);
++pos;
pre=pos;
//get getmylist data for create list;
mylist.createlist(getmyfile);
pos=0;
pre=0;
}
mylist.athead();
while(mylist.Currnode()!=NULL)
{
string filepath,descp;
cout<<"the file description"<<endl;
cout<<mylist.Data().aboutfile<<endl;
cout<<"*****************************************************************"<<endl;
cout<<"do you want to look source"<<endl;
cin>>ch;
if(ch=='y')
{
filepath=mylist.Data().filepath+mylist.Data().filename;
pos=0;
for(i=0;i<=filepath.size();i++)
{
if(filepath[i]=='\n')
{
filepath.erase(i,1);
}
}
cout<<filepath;
cout<<endl;
ifstream openfiles;
openfiles.open(filepath.c_str(),ios::in);
if(!openfiles)
{
cerr<<"don't open file"<<endl;
exit(-1);
}
while(!openfiles.eof())
{
openfiles.get(text);
cout.put(text);
}
}
else if(ch=='q')
{
break;
}
mylist.Next();
}
mylist.deletelist();
break;
case 5:
exit(0);
}
}
}
makefile
========================================================
guanli:guanli.o list.h node.h
g++ -g -I/home/c++/zuoping2/ guanli.cpp -o guanli
all:guanli
.PHONY:clean
clean:
rm guanli.o