学生宿舍管理系统C++
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
typedef struct student//学生信息
{
char name[20];
int studentnum;
int roomnum;
}student;
typedef struct//顺序表储存结构
{
student *elem;
int length;
}stulist;
struct node//哈希表储存结构
{
student info;
node *next;
};
void SelectSortid(stulist stu)
{
int k;
for(int i=0;i
k=i;
for(int j=i+1;j
if(stu.elem[j].studentnum
{
student t;
t=stu.elem[i];
stu.elem[i]=stu.elem[k];
stu.elem[k]=t;
}
}
}
}
void SelectSortroom ( stulist stu) //按房间号选择排序
{
int i,j,k;
for ( i = 1; i < stu.length; ++i ) // 选择第i个小的记录,并交换到位
{
k = i;
for ( j = i+1; j <=stu.length; ++j ) // 在 L.r[i..length] 中选择 id 最小的记录
if ( stu.elem[j].roomnum
{
student t;
t = stu.elem[i];
stu.elem[i] = stu.elem[k];
stu.elem[k] = t;
}
}
}
void inint(stulist& stu)
{
cout<<"请输入学生数目:";cin>>stu.length;
for(int i=1;i<=stu.length;i++)
{
cout<<"请输入第"<cout<<"姓名:"; cin>>stu.elem[i].name;
cout<<"学号:"; cin>>stu.elem[i].studentnum;
cout<<"房间号:"; cin>>stu.elem[i].roomnum;
}
SelectSortid( stu );
}
int Idcheck(stulist stu,int num) //按学号查找(若找到则返回位置,否则返回0)(折半查找)
{
SelectSortid ( stu);
int low=1,high=stu.length;
while(low<=high)
{
int mid=(low+high)/2;
if(num==stu.elem[mid].studentnum)
return mid;
else if(num
else
low=mid+1;
}
return 0;
}
int Roomcheck(stulist stu,int roomnum) //按房间号查找
{
int low=1,high=stu.length;
while(low<=high)
{
int mid=(low+high)/2;
if(roomnum==stu.elem[mid].roomnum)
return mid;
else if(roomnum
else
low=mid+1;
}
return 0;
}
void CreathHash(stulist stu,node num[27]) //建哈希表(链地址法解决冲突)
{
for(int i=1;i<=26;i++)
num[i].next=NULL;
for(i=1;i<=stu.length;i++)
{
int a=stu.elem[i].name[0]-96;
node *p=(node *)malloc(sizeof(node));
strcpy(p->,stu.elem[i].name);
p->info.studentnum=stu.elem[i].studentnum;
p->info.roomnum=stu.elem[i].roomnum;
p->next=num[a].next;
num[a].next=p;
}
}
void Namefind(stulist stu,node num[27],char na[20]) //按姓名查找
{
CreathHash(stu,num);
for(int i=1;i<=26;i++)
{
node *p=num[i].next;
while(p!=NULL)
{
if(strcmp(p->,na)==0)
{
cout<<"该用户的信息为:"<
cout<
cout<
房间号:";
cout<
}
else
p=p->next;
}
}
cout<<"没有该学生!"<
void Deleinfo(stulist stu) //删除信息
{
cout<<"请输入您要删除的学生的房间号:";
int room;cin>>room;
if(!Roomcheck(stu,room))
cout<<"没有该学生!"<
{
int a=Roomcheck(stu,room);
for(int i=stu.length;i>0;i--)//后序遍历,边遍历边移动
{
if(stu.elem[i].roomnum==room)
cout<<"删除成功";
else
{
stu.elem[i+1]=stu.elem[i-1];
stu.elem[i-1]=stu.elem[i];
}
}
stu.length--;
}
}
void Modifyinfo(stulist stu) //修改信息
{
cout<<"请输入您要修改的的学生的学号:";
int id;cin>>id;int i;
if(!Idcheck(stu,id))
cout<<"没有该学生!"<
{
i=Idcheck(stu,id);
cout<<"请输入修改后的学生信息:"<
cout<<"学号:"; cin>>stu.elem[i].studentnum;
cout<<"房间号:"; cin>>stu.elem[i].roomnum;
SelectSortroom(stu);
}
}
void output(stulist stu,int k)
{
cout<<"该学生信息为:"<
void display(stulist &stu,int n)
{
cout<<"学生姓名"<<" "<<"学号"<<" "<<"房间号"<
cout<
void main()
{
stulist stu;
stu.elem=(student *)malloc(10000*sizeof(student));
stu.length=0;
cout<<"********宿舍管理查询软件********"<
int i; cin>>i;
do
{
if(i<1||i>8)
{
cout<<"输入有误,请重新输入:";
cin>>i;
}
else
{
switch(i)
{
case 1:inint(stu);break;
case 2:Deleinfo(stu);break;
case 3:Modifyinfo(stu);break;
case 4:
node num[27];
cout<<"请输入您要查找的学生的姓名:";
char na[20];cin>>na;
Namefind(stu,num,na);break;
case 5:
cout<<"请输入您要查找的学生的学号:";
int id;cin>>id;
if(Idcheck(stu,id))
{
int k=Idcheck(stu,id);
output(stu,k);
}
else
cout<<"没有找到该学生!"<
case 6:
cout<<"请输入您要查找的学生的房间号:";
int roomnum;cin>>roomnum;
if(Roomcheck(stu,roomnum))
{
int k=Roomcheck(stu,roomnum);
output(stu,k);
}
else
cout<<"没有找到该学生!"<
case 7:display(stu,stu.length);break;
case 8:exit(1);break;
}
cout<<"请选择您的操作:";
cin>>i;
}
}while(i!=8);
}