⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guanli.cpp

📁 这是一个管理系统
💻 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 + -