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

📄 宿舍管理查询软件.cpp

📁 1、任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: (1)采用交互工作方式 (2)可以增加、删除、修改信息 (3)建立数据文件
💻 CPP
字号:
#include <iostream>
#include <string>
using namespace std;
#define MAXSIZE 100 //设记录不超过20个
typedef  struct  //定义每个记录(数据元素)的结构
{              
    int      num; // 学号
    string   name;//姓名
    int      room;//房间号
}RecordType;
typedef  struct //定义顺序表的结构
{                       
  RecordType  r[ MAXSIZE +1 ]; //存储顺序表的向量       
  int length ; //顺序表的长度
}SqList;
void ciadan(SqList &ST);
void CreatList(SqList &ST)//创建学生的相关信息
{
	cout<<"输入学生个数"<<endl;
	cin>>ST.length;
	for(int i=0;i<ST.length;i++)
	{
        cout<<"输入第"<<i+1<<"学生的信息"<<endl<<endl;
		cout<<"学号"<<endl;
		cin>>ST.r[i].num;
		cout<<"姓名"<<endl;
		cin>>ST.r[i].name;
		cout<<"房间号"<<endl;
		cin>>ST.r[i].room;
	}
	cout<<"输入完毕"<<endl;
}
void printf(SqList &ST)		//打印
{
	cout<<"              学生的信息如下"<<endl<<endl;
	cout<<"姓名    学号   房间号 "<<endl;
	for(int i=0;i<ST.length;i++)
	{
		cout<<ST.r[i].name<<"        "<<ST.r[i].num<<"     "<<ST.r[i].room<<endl;
	}
}



void Add(SqList &ST)		//增加信息
{
	int n;
	cout<<"输入要插入的几个人信息:"<<endl;
	cin>>n;
	for(int i=ST.length;i<ST.length+n;i++)
	{
	    cout<<"输入第"<<i+1<<"学生的信息"<<endl<<endl;
		cout<<"学号"<<endl;
		cin>>ST.r[i].num;
		cout<<"姓名"<<endl;
		cin>>ST.r[i].name;
		cout<<"房间号"<<endl;
		cin>>ST.r[i].room;
	}
	ST.length=ST.length+n;
	printf(ST);
}


void Delete(SqList &ST)//删除信息
{

	int n;
	cout<<"输入要删除的学号"<<endl;
	cin>>n;

	for(int i=0;i<ST.length;i++)   /*数据库记录前移,完成'删除'操作*/
	{
		if(n==ST.r[i].num)
		{
			for(int j=i;j<=ST.length;j++)
			{
			
				ST.r[j].num = ST.r[j+1].num;
				ST.r[j].name=ST.r[j+1].name;
				ST.r[j].room=ST.r[j+1].room;
			}
   
		}
		
	}
		ST.length--;
		cout<<"删除完毕"<<endl;
	printf(ST);

}


void change(SqList &ST)//修改信息
{
	int n;
	int m;
	cout<<"输入要修改的学号"<<endl;
	cin>>n;
	cout<<"修改修改房间号为:"<<'\t';
	cin>>m;
	cout<<endl;
	for(int i=0;i<ST.length;i++)
	{
		if(n==ST.r[i].num)
		{  
		  ST.r[i].room=m;      
		}
	}	
        
		cout<<endl;
	   printf(ST);
}



void sort(SqList &ST)    // 排序
{
l1:	cout<<"(1)按学号排序"<<endl;
	cout<<"(2)按房间号排序"<<endl;
	cout<<"(3)按姓名号排序"<<endl;
	cout<<"(4)退出本模块"<<endl;
	cout<<"请输入要进入的模块"<<endl;
	int m;
	cin>>m;
	if(m==1)   //按学号排序,用插入排序。
	{
		cout<<"按学号排序"<<endl;
		RecordType LI;            //定义存储学号向量
		for(int i=1;i<ST.length;i++)
		for(int j=i;j>=1;j--)
		if(ST.r[j].num<ST.r[j-1].num)
		{
			LI=ST.r[j];
			ST.r[j]=ST.r[j-1];
			ST.r[j-1]=LI;
		}
		printf(ST);
		cout<<"排序完毕"<<endl;
		goto l1;
	}
		

	if(m==2)		//按房间号排序,用选择排序
	{
		cout<<"按学号排序"<<endl;
		RecordType LI;      
		for(int i=0; i<ST.length;i++)
			for (int j=i+1;j<ST.length;j++)
			{
   				if(ST.r[i].room>ST.r[j].room)
				{
					LI=ST.r[j];
					ST.r[j]=ST.r[i];
					ST.r[i]=LI;
				}
			}	
			printf(ST);
			cout<<"排序完毕"<<endl;
			goto l1;
	}

	if(m==3)		//按姓名号排序,用选择排序
	{
		cout<<"按房号排序"<<endl;
		RecordType LI;      
		for(int i=0; i<ST.length;i++)
		for (int j=i+1;j<ST.length;j++)
		{
   			if(ST.r[i].name>ST.r[j].name)
			{
				LI=ST.r[j];
				ST.r[j]=ST.r[i];
				ST.r[i]=LI;
			}
		}	
		printf(ST);
		cout<<"排序完毕"<<endl;
		goto l1;
	}
	if(m==4)
	{
		ciadan(ST);
	}

		
		
}

void Search(SqList &ST)    //查询信息
{
l1:	cout<<"(1)根据学号查找"<<endl;
	cout<<"(2)根据姓名查找"<<endl;
	cout<<"(3)根据房间号查找"<<endl;
	cout<<"(4)退出本模块"<<endl;
	int m;
	cin>>m;
	if(m==1)
	{
		int n;
    	int low,high,mid;
		cout<<"输入要查找的学号"<<endl;
		cin>>n;
	/*	for(int i=0;i<ST.length;i++)
		{
			if(n==ST.r[i].num) 
			{
				cout<<"查找的信息为:"<<endl;
				cout<<ST.r[i].name<<'\t'<<ST.r[i].num<<'\t'<<ST.r[i].room<<endl;// 找到待查元素
				break;		
			}
		}*/
		low=0;high=ST.length-1;     // 置区间初值
		while (low<=high) 
		{
			mid=(low+high)/2;
			if(n==ST.r[mid].num) 
			{
				cout<<"查找的信息为:"<<endl;
				cout<<ST.r[mid].num<<'\t'<<ST.r[mid].name<<'\t'<<ST.r[mid].room<<endl;// 找到待查元素
				goto l1;		
			}
			else  if(n<ST.r[mid].room )
			high=mid-1;       // 继续在前半区间进行查找
			else  
			low=mid+1;     // 继续在后半区间进行查找
		}
		goto l1;

	}
	if(m==2)
	{	
		string name;
		cout<<"输入要查找的姓名"<<endl;
		cin>>name;
		int low,high,mid;
		low=1;high=ST.length;     // 置区间初值
		while (low<=high) 
		{
			mid=(low+high)/2;
			if(name==ST.r[mid].name) // EQ ( (key, ST.elem[mid].key ))
			{
				cout<<"查找的信息为:"<<endl;
				cout<<ST.r[mid].num<<'\t'<<ST.r[mid].name<<'\t'<<ST.r[mid].room;// 找到待查元素
				break;		
			}
			else  if(m<ST.r[mid].room )
			high=mid-1;       // 继续在前半区间进行查找
			else  
			low=mid+1;     // 继续在后半区间进行查找
		}
		goto l1;
	}
	if(m==3)
	{
		int m;
		int low,high,mid;
		cout<<"输入要查找的房间号"<<endl;
		cin>>m;
		low=1;high=ST.length;     // 置区间初值
		while (low<=high) 
		{
			mid=(low+high)/2;
			if(m==ST.r[mid].room) // EQ ( (key, ST.elem[mid].key ))
			{
				cout<<ST.r[mid].num<<'\t'<<ST.r[mid].name<<'\t'<<ST.r[mid].room;// 找到待查元素
				break;		
			}
			else  if(m<ST.r[mid].room )
			high=mid-1;       // 继续在前半区间进行查找
			else  
			low=mid+1;     // 继续在后半区间进行查找
		}
		goto l1;
	}
	if(m==4)
	{
		ciadan(ST);
	}

}

void ciadan(SqList &ST)
{
	
l2:	cout<<"                      (1)输入信息"<<endl;
	cout<<"                      (2)增加信息"<<endl;
	cout<<"                      (3)删除信息"<<endl;
	cout<<"                      (4)修改信息"<<endl;
	cout<<"                      (5)排序信息"<<endl;
	cout<<"                      (6)查找信息"<<endl;
	cout<<"                      (7)退出系统"<<endl;
	int a;
	cin>>a;	
	if(a==1)
	{CreatList(ST);printf(ST);goto l2;}
		if(a==2)
		{Add(ST);goto l2;}
		if(a==3)
		{Delete(ST);goto l2;}
		if(a==4)
		{change(ST);goto l2;}
		if(a==5)
		{sort(ST);goto l2;}
		if(a==6)
		{Search(ST);goto l2;}
		if(a=7)
		{exit(0);}
	
	
}


void main()
{
	SqList ST;
	cout<<"###################欢迎使用宿舍管理查询软件######################"<<endl<<endl;
	cout<<endl;
	ciadan(ST);
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -