📄 guanli.cpp
字号:
#include<string>
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cmath>
#include<string>
#include<stdio.h>
using namespace std;
struct linknode { //节点的定义
char spec[20]; //专业
int number; //学号
int sex; //性别
char phone[20]; //电话
char name[20]; //名字
linknode *link;
linknode(linknode *ptr=NULL){link=ptr;}
};
class list{ //链表
public:
list(){first=new linknode;} //构造函数
~list(){makeempty();} //析构函数
void makeempty();
linknode *gethead()const{return first;}
bool search1(int x); //搜索
bool search2(char l[20]); //搜索
linknode *locate(int i); //寻找地址
bool insert(char sp[20],int x,char y[20],int s,char p[20],fstream & l);//插入
bool remove(int i);//删除
bool isempty()const //使空
{return first->link==NULL? true:false;}
bool isfull()const{return false;} //判断是否为满
void input(fstream & l ); //将文件内容输入链表
void output(); //输出
int in(fstream & l);
protected:
linknode *first;
};
void list::makeempty(){
linknode *q;
while(first->link!=NULL){
q=first->link;
first->link=q->link;
delete q;
}
};
bool list::search1(int x){
linknode *current=first->link;
while(current !=NULL){
if(current->sex==x || current->number==x){cout<<current->spec<<" "<<current->number<<" ";
cout<<current->name<<" "<<current->sex<<" "<<current->phone;
}
current=current->link;
}
return true;
};
bool list::search2(char l[20]){
linknode *current=first->link;
while(current !=NULL){
if(strcmp(current->spec,l)==0 || strcmp(current->name,l)==0 ||
strcmp(current->phone,l)==0){cout<<current->spec<<" "<<current->number<<" ";
cout<<current->name<<" "<<current->sex<<" "<<current->phone;
}
current=current->link;
}
return true;
};
linknode *list::locate(int i){
if(i<0)return NULL;
linknode *current=first;int k=0;
while(current !=NULL && k<i)
{current=current->link;k++;}
return current;
}
bool list::insert(char sp[20],int x,char y[20],int s,char p[20],fstream & l){
linknode *current=first->link;
while(current !=NULL){
if(current->number==(x-1))break;
else current=current->link;
}
linknode *newnode=new linknode;
for(int ii=0;ii<=19;ii++)newnode->spec[ii]=sp[ii];
newnode->number=x;
for(int j=0;j<=19;j++)newnode->name[j]=y[j];
newnode->sex=s;
for(int ll=0;ll<=19;ll++)newnode->phone[ll]=p[ll];
l.open("file.txt",ios::out|ios::app);
if(! l)
{cout<<"cannot open output file!\n";
return 1;
}
l<<" "<<sp<<" "<<x<<" "<<y<<" "<<s<<" "<<p;
l.close();
if(newnode==NULL){cerr<<"存储分配错误"<<endl;exit(1);}
newnode->link=current->link;
current->link=newnode;
return true;
};
bool list::remove(int i){
linknode *current=first->link;
while(current !=NULL)
{if(current->number==(i-1))break;
else current=current->link;
}
if(current==NULL || current->link==NULL)return false;
linknode *del=current->link;
current->link=del->link;
delete del;
return true;
};
void list::input(fstream & l ){
linknode *newnode, *last;
first=new linknode;
if(first==NULL){cerr<<"存储分配错误"<<endl;exit(1);}
last=first;
l.open("file.txt",ios::in);
while(! l.eof()){
newnode=new linknode;
if(newnode==NULL){cerr<<"存储分配错误"<<endl;exit(1);}
l>>newnode->spec>>newnode->number>>newnode->name>>newnode->sex>>newnode->phone;
last->link=newnode;last=newnode;
}
l.close();
last->link=NULL;
};
void list::output(){
linknode *current=first->link;
while(current !=NULL){
cout<<current->spec<<" "<<current->number<<" "<<current->name<<" "<<current->phone<<" ";
if(current->sex==0)cout<<"男"<<endl;
else cout<<"女"<<endl;
current=current->link;
}
};
int list::in(fstream & l){
l.open("file.txt",ios::out|ios::trunc);
if(! l)
{cout<<"cannot open output file!\n";
return 1;
}
linknode *current=first->link;
while(current!=NULL){
l<<" "<<current->spec<<" "<<current->number<<" "<<current->name<<" "<<current->sex<<" "<<current->phone;
current=current->link;
}
l.close();
}
int main()
{
int i,d,a;
char b,c[20],spe[20],s[20],m,n;
list ss;
fstream stumib;
cout<<"如果需要对链表进行初始化,请输入1,否则请输入任何字符"<<endl;
cin>>m;
if(m=='1'){
struct student
{
char spec[20];
int number;
char name[20];
int sex;
char phone[20];
};
student stu[3]={{"计算机",1101,"jim",1,"3786013"},
{"计算机",1102,"tom",0,"3797654"},
{"计算机",1103,"lucy",1,"3765489"}};
stumib.open("file.txt",ios::out);
if(! stumib)
{cout<<"cannot open output file!\n";
return 1;
}
for(int l=0;l<=2;l++)
stumib<<" "<<stu[l].spec<<" "<<stu[l].number<<" "<<stu[l].name<<" "<<stu[l].sex<<" "<<stu[l].phone;
stumib.close();
}
cout<<"请分别输入元素以建立的链表"<<endl;
b='c';
fstream stumib2;
fstream stumib3;
ss.input(stumib);
ss.output();
while(b!='e'){
cout<<"需要插入请输入i,需要删除请输入r,需要搜索请输入s,需要退出请输入e"<<endl;
cin>>b;
switch(b){
case 'i':cout<<"请分别输入需要插入学生的专业,学号,名字,性别(0表示男,1表示女),电话";
cin>>spe>>a>>c>>d>>s;ss.insert(spe,a,c,d,s,stumib2);ss.output();break;
case 'r':cout<<"请输入要删除学生的学号";cin>>a;ss.remove(a);ss.output();ss.in(stumib3);break;
case 's':b='c';
while(b!='l'){
cout<<"按学号搜索请输入i"<<endl<<"按性别搜索请输入a"<<endl<<"按电话搜请输入d"<<endl<<"按名字搜索请输入c"<<endl;
cout<<"按专业搜索请输入n"<<endl<<"需要退出请输入l:"<<endl;
cin>>b;
switch(b){
case 'i':cout<<"请输入学号"<<endl;cin>>a;ss.search1(a);cout<<endl;break;
case 'a':cout<<"请输入性别:"<<endl;cin>>d;ss.search1(d);cout<<endl;break;
case 'd':cout<<"请输入电话:"<<endl;cin>>s;ss.search2(s);cout<<endl;break;
case 'c':cout<<"请输入名字:"<<endl;cin>>c;ss.search2(c);cout<<endl;break;
case 'n':cout<<"请输入专业:"<<endl;cin>>spe;ss.search2(spe);cout<<endl;break;
}
};
break;
}
};
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -