欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++/学生信息管理系统

程序员文章站 2022-03-09 19:23:09
...

设计一个学生信息管理系统,实现常见的学生基本信息的基本管理:
1. 有交互式方式
即用户可以根据提示进行操作学生信息如修改、删除、查找学生信息等操作
2. 有文件操作
学生信息存放在文件中,文件具体的地址不限制
3. 有链表结构
学生信息的基本单元存在链表中,可以进行链表的常用操作
4. 学生基本信息
学生学号(9位数字串)、姓名、性别、年龄
5. 将应用程序与存储做到有效分离: 如将应用操作用类表示,学生负责学生基本信息,链表类负责信息管理,程序类负责界面与交互

#include<iostream>
#include<string.h>
#include<fstream>
#include<stdlib.h>
using namespace std;

class Node 
{
	public:
		int number;
		char name[20];
		char sex[4];
		int age;
		Node * next;
};

class Operator
{
	public:
		void CreateSort();
		void HeadSortAdd();
	//	void TailSortAdd();
		char searchPrint();
		Node* searchReturn();
		void print();
		void PutToFile();
		void InFromFile(); 
		void del(Node* a);
		void Modify(Node* a);
		void sort();
		int length=0;
	private:
		Node * head;
		Node * tail;
		
};

//---------------------------------------------------------------------------- 
void Operator::sort()
{
	
	Node *h=head;
	//int len=length; 
	Node * t;
	Node * x;
	t=h->next;
	x=h->next;
	while(t->next!=NULL)
	{
		while(x!=NULL)
		{
			if(t->number>x->number)
			{
				//
				int e;
				e=t->number;
				t->number=x->number;
				x->number=e;
				//
				char a[20];
				strcpy(a,t->name);
				strcpy(t->name,x->name);
				strcpy(x->name,a);
				
				//
				char b[4];
				strcpy(b,t->sex);
				strcpy(t->sex,x->sex);
				strcpy(x->sex,b);
				//
				int c;
				c=t->age;
				t->age=x->age;
				x->age=c;
				
			}
			x=x->next;
		}
		
		t=t->next;
		x=t->next;


	}
}

void Operator::Modify(Node* a)
{
	    int x=0;
		Node* p;
		p=a->next;
		cout<<endl;
		cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
		cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl<<endl;
		while(x!=1&&x!=2&&x!=3&&x!=4)
		{
			cout<<"输入修改信息"<<endl<<"1.修改学号"<<endl<<"2.修改姓名"<<endl<<"3.修改性别"<<endl<<"4.修改年龄"<<endl;
			cin>>x;
			if(x==1)
			{
				cout<<"学号修改为:";
				cin>>p->number;
			}
			if(x==2)
			{
				cout<<"姓名修改为:";
				cin>>p->name;
			}
			if(x==3)
			{
				cout<<"性别修改为:";
				cin>>p->sex;
			}
			if(x==4)
			{
				cout<<"修改年龄:";
				cin>>p->age;
			}
			else
			cout<<"输入错误!"<<endl;
		}
} 

void Operator::del(Node* a)
{
	Node* p;
	Node* b;
	b=a->next;
	p=b->next;
	a->next=p;
	free(b);
	length--;
} 

Node* Operator::searchReturn()
{
	Node* p;
	Node* c;
	c=head;
	p=head->next;
	int se=0;
	int i=0;
	while(se!=1&&se!=2)
	{
		cout<<"输入查找信息"<<endl<<"1.查找学号"<<endl<<"2.查找姓名"<<endl;
		cin>>se;
		if(se==1)
		{
			int xue;
			cout<<"输入学生的学号:";
			cin>>xue;
			while(p!=NULL)
			{
				if(xue==p->number)	
				{
					if(i==1);
					return c;
				}
				else
				p=p->next;	
				c=c->next;
			}
		}
		else if(se==2)
		{
			char sname[20];
			cout<<"输入学生姓名:";
			cin>>sname;
			while(p!=NULL)
			{
				if(strcmp(sname,p->name)==0)
				{
					if(i==1);
					return c;
				}
				else
				p=p->next;
				c=c->next;
			}
		}
		else
		{
			cout<<"输入错误,请重新输入";	
		}
		if(i!=1)
		{
			cout<<"未找到"<<endl;
			exit(0);
		}
	}
}

void Operator::InFromFile()
{
	tail=head; 
	ifstream infile("实验四.txt");
	if(!infile)
	{
		cout<<"open error";
		exit(1);
	}
	Node *p;
	//int i=1;
	p=head->next;
	while(infile.peek()!=EOF)
	{
		p=new Node;
		infile>>p->number>>p->name>>p->sex>>p->age;
		//i++;
		tail->next=p;
		p->next=NULL;
		tail=p;
		length++;
	}
	
}

void Operator::PutToFile()
{
	ofstream outfile("实验四.txt");
	if(!outfile)
	{
		cout<<"open error";
		exit(1);
	}
	Node *p;
	p=head->next;
	while(p!=NULL)
	{
		outfile<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
		p=p->next;
	}
	cout<<"已输出到文件“实验四.txt”"<<endl;
}
//
char Operator::searchPrint()
{
	Node* p;
	p=head->next;
	int se=0;
	int i=0;
	while(se!=1||se!=2)
	{
		cout<<"输入"<<endl<<"1.查找学号"<<endl<<"2.查找姓名"<<endl;
		cin>>se;
		if(se==1)
		{
			int xue;
			cout<<"输入查找学生的学号:";
			cin>>xue;
			while(p!=NULL)
			{
				if(xue==p->number)	
				{
					cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
					cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
					if(i==1);
					return 0;
				}
				else
				p=p->next;	
			}
		}
		else if(se==2)
		{
			char sname[20];
			cout<<"输入查找学生姓名:";
			cin>>sname;
			while(p!=NULL)
			{
				if(strcmp(sname,p->name)==0)
				{
					cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
					cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl;
					if(i==1);
					return 0;
				}
				else
				p=p->next;
			}
		}
		else
		{
			cout<<"输入错误,请重新输入";	
		}
		if(i!=1)
		{
			cout<<"未找到"<<endl;
			exit(0);
		}
	}
	return 0;
} 
//
void Operator::print()
{
	Node *p;
	p=head->next;
	for(int i=0;i<length;i++)
	{
		cout<<"学号\t\t姓名\t性别\t年龄"<<endl;
		cout<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->age<<endl<<endl;
		p=p->next; 
	}
	cout<<endl;
}
//
void Operator::CreateSort()
{
	head = new Node;
	head->next=NULL;
	tail=head;
	length=0;
}

void Operator::HeadSortAdd()
{
	Node *p;
	int n;
	cout<<"输入你要“头插法”增加的学生数目:";
	cin>>n;
	for(int i=0;i<n;i++)
	{
		p=new Node;
		cout<<"请以此输入学号、姓名、性别、年龄"<<endl;
		cin>>p->number>>p->name>>p->sex>>p->age;
		p->next=head->next;
		head->next=p;
		length++;
		cout<<endl;
	}
}






void menu(Operator A)
{
	system("cls");
	cout<<"\t\t\t\tMENU\t\t"<<endl;
	cout<<"\t\t\t|---------------------------|\t\t"<<endl;
	cout<<endl;
	cout<<"\t\t\t|   [1]  建立数据/继续输入  |"<<endl;
	cout<<"\t\t\t|   [2]     查 找 数 据     |"<<endl;
	cout<<"\t\t\t|   [3]     添 加 数 据     |"<<endl;
	cout<<"\t\t\t|   [4]     删 除 数 据     |"<<endl;
	cout<<"\t\t\t|   [5]    输 出 到 文 件   |"<<endl;
	cout<<"\t\t\t|   [6]     排 序 数 据     |"<<endl;
	cout<<"\t\t\t|   [7]     修 改 数 据     |"<<endl;
	cout<<"\t\t\t|   [8]       退   出       |"<<endl;
	cout<<endl;
	cout<<"\t\t\t|---------------------------|\t\t"<<endl;	
	if(A.length!=0)
	{
		cout<<"已存数据为:"<<endl;
		A.print();
	} 
}



//------------------------
int main()
{
	Operator A;
	Node* searchpoint;
	int choose;
	while(choose!=8)
	{
		menu(A);
		cin>>choose;
		switch(choose)
		{
			case 1:
				A.CreateSort();
				A.InFromFile();
				A.print();
				cout<<endl; 
				system("pause");
				break;
			case 2:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				A.searchPrint();
				cout<<endl; 
				system("pause");
				break;
			case 3:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				A.HeadSortAdd();
				cout<<endl;
				system("pause");
				break;
			case 4:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				cout<<"删除数据!"<<endl;
				searchpoint=A.searchReturn();
				A.del(searchpoint);
				cout<<endl;
				system("pause");
				break;
			case 5:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				A.PutToFile();
				cout<<endl;
				system("pause");
				break;
			case 6:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				A.sort();
				cout<<endl;
				system("pause");
				break;
			case 7:
				if(A.length==0)
				{
					cout<<"目前无数据:"<<endl;
					system("pause");
					break;
				}
				cout<<"修改数据!"<<endl;
				searchpoint=A.searchReturn();
				A.Modify(searchpoint);
				cout<<endl;
				system("pause");
				break;
			case 8:
				
				exit(0);
				cout<<endl;
				system("pause");
				break;
			default:
			cout<<"你使用了非法字符!"<<endl;
			cout<<endl;
			system("pause");
			break;
		}
			
		
	}
	return 0;
}


运行结果:
C++/学生信息管理系统
文件输入文件格式:
C++/学生信息管理系统