您的位置:首页 > 其它

宿舍信息管理系统

2016-06-23 15:33 274 查看
随便写的,没有数据结构算法的核心,是函数的拼凑。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<windows.h>
using namespace std;
#define MAX 100
int Total;
int domes[MAX][MAX];
struct edg{ //构造结构体,创建学生信息的结构体数组,其中的信息包含名字,宿舍房号以及学号 。
string name;
int domenumber;
int number;
}student[MAX];

void menu() //主菜单的函数包含3个功能(新建,排序,查询)。
{
cout<<"\t\t *** "<<endl;
cout<<"\t\t ** ** "<<endl;
cout<<"\t\t *** *** "<<endl;
cout<<"\t\t *** *** "<<endl;
cout<<"\t\t *** *** "<<endl;
cout<<"\t\t *** *** "<<endl;
cout<<"\t\t *** 欢迎进入宿舍管理系统 ***"<<endl;
cout<<"\t\t **************************************"<<endl;
cout<<"\t\t * 制作人:计算机1503 谢俊宏 *"<<endl;
cout<<"\t\t **************************************"<<endl;
cout<<"\t\t * 1. 新建宿舍名单 *"<<endl;
cout<<"\t\t * 2. 排序宿舍信息 *"<<endl;
cout<<"\t\t * 3. 查询宿舍信息 *"<<endl;
cout<<"\t\t * 4. 删除宿舍信息 *"<<endl;
cout<<"\t\t * 0. 退出系统 *"<<endl;
cout<<"\t\t **************************************"<<endl;
cout<<endl<<endl;
cout<<"请输入你想要进行操作的代号:";
}

void build() //新建学生信息
{
int i;
string a;
int c,b;
system("cls");

cout<<"请输入要录入的人数:"<<endl; //录入的人数为Total
cin>>Total;

cout<<"请分别输入他们的信息:"<<endl;

for(i=1;i<=Total;i++) //为每个同学输入信息
{
cout<<"输入第"<<i<<"个学生的姓名:" ;
cin>>a;
student[i].name=a;
cout<<"输入第"<<i<<"个学生的学号:" ;
cin>>b;
student[i].number=b;
cout<<"输入第"<<i<<"个学生的宿舍号:" ;
cin>>c;
student[i].domenumber=c;
cout<<endl;
}
return ;
}

int binarynum(int left,int right,int key) // 用递归二分的方法求出学号在结构体数组中的位置
{
if(left>right) return -1;
int mid=(left+right)<<1; //使用位运算<<1 让计算更有效率
if(student[mid].number==key) return mid;
else if(student[mid].number<key) return binarynum(mid+1,right,key);
else return binarynum(left,mid,key);
}

void paixumenu() //排序函数
{
string choice;
int i,m,j;
system("cls");
cout<<"请输入排序的方式(1:按学号排序,2:按房号排序,3:按名字排序):"<<endl; //三个排序方法
while(1) //对输入的信息进行容错处理,防止出现输入字母的情况
{
m=0;
cin>>choice;
if(strlen(choice.c_str())>1)
{
m=1;
cout<<"输入错误,请重新输入";
}
if(choice[0]>'3'||choice[0]<'1')
{
cout<<"输入数字没有此选项请重新输入"<<endl;
m=1;
}
if(m==0)
break;
}

if(choice[0]=='1') //进行以学号为关键字的排序
{
for(i=1;i<=Total;i++) //用冒泡排序法进行排序
for(j=1;j<Total-i+1; j++)
if(student[j].number>=student[j+1].number)
{
edg temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}
cout<<"姓名\t\t学号\t\t宿舍号"<<endl;
for(i=1;i<=Total;i++)
{
cout<<student[i].name<<"\t\t"<<student[i].number<<"\t\t"<<student[i].domenumber<<endl;
}
cout<<endl;
}

if(choice[0]=='2') //以按宿舍号的关键字进行排序
{
for(i=1;i<=Total;i++) //用冒泡排序法进行排序
for(j=1;j<Total-i+1; j++)
if(student[j].domenumber>=student[j+1].domenumber)
{
edg temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}

cout<<"姓名\t\t学号\t\t宿舍号"<<endl;
for(i=1;i<=Total;i++)
{
cout<<student[i].name<<"\t\t"<<student[i].number<<"\t\t"<<student[i].domenumber<<endl;
}
cout<<endl;
}

if(choice[0]=='3') //以按学生姓名的关键字进行排序
{
for(i=1;i<=Total;i++)
for(j=1;j<Total-i+1; j++) //用冒泡排序法进行排序
if(strcmp(student[j].name.c_str(),student[j+1].name.c_str())>=0)
{
edg temp=student[j];
student[j]=student[j+1];
student[j+1]=temp;
}

cout<<"姓名\t\t学号\t\t宿舍号"<<endl;
for(i=1;i<=Total;i++)
{
cout<<student[i].name<<"\t\t"<<student[i].number<<"\t\t"<<student[i].domenumber<<endl;
}
cout<<endl;
}

return ;
}

void query() //查询函数
{
string choice;
int m,i,j;
string a,choice1;
string b,c;
system("cls");
cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl; //三个关键字进行查找
while(1)
{
while(1) //对输入的信息进行容错处理,防止出现输入字母的情况
{
m=0;
cin>>choice;
if(strlen(choice.c_str())>1)
{
m=1;
cout<<"输入错误,请重新输入";
}
if(choice[0]>'3'||choice[0]<'1')
{
cout<<"输入数字没有此选项请重新输入"<<endl;
m=1;
}
if(m==0)
break;
}

if(choice[0]=='1') //以 名字为关键字进行查询
{
cout<<"输入你想要查找学生的名字:";
cin>>a;

for(i=1;i<=Total;i++)
{
if(strcmp(student[i].name.c_str(),a.c_str())==0) //使用strcmp及.c_str进行比较
break;
}

if(i!=Total+1)
{
cout<<"目标学生的学号为:"<<student[i].number<<" 宿舍号为"<<student[i].domenumber<<endl;
cout<<"是否继续进行此操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl; continue;}
else break;
}
else
{cout<<"你想要查找的学生没有记录入系统中,是否继续进行此操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl<<endl; continue;}
else break;
}
}

if(choice[0]=='2') //以按照学号的关键字进行查询
{
cout<<"输入你想要查找学生的学号:";
cin>>b;
int sss=0,k=1; //对输入的信息进行容错处理,防止出现输入字母的情况
int len=b.size();
for(int j=len-1;j>=0;j--)
{
sss+=((int)b[j]-48)*k;
k*=10;
}
if(binarynum(1,Total,sss)!=-1)
4000
//使用二分的方法来找到位置,若return结果为-1则表示学号没有录入系统中
{
cout<<"目标学生姓名为:"<<student[binarynum(1,Total,sss)].name
<<"学号为:"<<student[binarynum(1,Total,sss)].number<<" 宿舍号为"<<student[binarynum(1,Total,sss)].domenumber<<endl<<endl;
cout<<"是否继续进行此操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl<<endl; continue;}
else break;
}
else
{cout<<"你想要查找的学号没有记录入系统中,是否继续进行此查询操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl<<endl; continue;}
else break;
}
}
int flag=0;
if(choice[0]=='3') //以按 宿舍号为关键字进行查找
{
cout<<"输入你要查询的宿舍号:";
cin>>c;
int sss=0,k=1; //对输入的信息进行容错处理,防止出现输入字母的情况
int len=c.size();
for(int j=len-1;j>=0;j--)
{
sss+=((int)c[j]-48)*k;
k*=10;
}
for(i=1;i<=Total;i++)
{
if(sss==student[i].domenumber&&flag==1)
{
cout<<student[i].name<<"\t"<<student[i].number<<"\t"<<student[i].domenumber<<endl;
}
if(sss==student[i].domenumber&&flag==0)
{
flag=1;
cout<<"姓名\t学号\t房号"<<endl;
cout<<student[i].name<<"\t"<<student[i].number<<"\t"<<student[i].domenumber<<endl;
}
cout<<endl;
cout<<"是否继续进行此查询操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl<<endl; continue;}
else break;
}
if(flag==0)
{
cout<<"你想要查找宿舍没有记录入系统中或者宿舍没有人进行登记,是否继续进行此查询操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):"<<endl; continue;}
else break;
}
}
}
return ;
}
void Delete() //删除函数
{
string choice;
int m,i,j;
string a,choice1;
string b,c;
system("cls");
cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl; //三个关键字进行删除
while(1)
{
while(1) //对输入的信息进行容错处理,防止出现输入字母的情况
{
m=0;
cin>>choice;
if(strlen(choice.c_str())>1)
{
m=1;
cout<<"输入错误,请重新输入";
}
if(choice[0]>'3'||choice[0]<'1')
{
cout<<"输入数字没有此选项请重新输入"<<endl;
m=1;
}
if(m==0)
break;
}

if(choice[0]=='1') //以名字为关键字进行查询 并删除
{
cout<<"输入你想要删除学生的名字:";
cin>>a;

for(i=1;i<=Total;i++)
{
if(strcmp(student[i].name.c_str(),a.c_str())==0) //使用strcmp及.c_str进行比较
break;
}

if(i!=Total+1)
{
for(j=i;j<Total;j++)
{
student[j]=student[j+1];
}
Total--;
cout<<"删除成功"<<endl<<endl;
cout<<"是否继续进行此删除操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl; continue;}
else break;
}
else
{cout<<"你想要删除的学生没有记录入系统中,是否继续进行此操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl<<endl; continue;}
else break;
}
}

if(choice[0]=='2') //以按照学号的关键字进行删除
{
cout<<"输入你想要删除学生的学号:";
cin>>b;
int sss=0,k=1; //对输入的信息进行容错处理,防止出现输入字母的情况
int len=b.size();
for(int j=len-1;j>=0;j--)
{
sss+=((int)b[j]-48)*k;
k*=10;
}
if(binarynum(1,Total,sss)!=-1) //使用二分的方法来找到位置,若return结果为-1则表示学号没有录入系统中
{
int ii= binarynum(1,Total,sss);
for(j=ii;j<Total;j++)
{
student[j]=student[j+1];
}
Total--;
cout<<"删除成功"<<endl<<endl;
cout<<"是否继续进行此删除操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl<<endl; continue;}
else break;
}
else
{cout<<"你想要删除的学号没有记录入系统中,是否继续进行此查询操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl<<endl; continue;}
else break;
}
}
int flag=0;
if(choice[0]=='3') //以按 宿舍号为关键字进行删除
{
cout<<"输入你要删除的宿舍号:";
cin>>c;
int sss=0,k=1; //对输入的信息进行容错处理,防止出现输入字母的情况
int len=c.size();
for(int j=len-1;j>=0;j--)
{
sss+=((int)c[j]-48)*k;
k*=10;
}
for(i=1;i<=Total;i++)
{
if(sss==student[i].domenumber&&flag==0)
{
flag=1;
for(j=i;j<Total;j++)
{
student[j]=student[j+1];
}
Total--;
}
}
cout<<"删除成功!"<<endl;
cout<<endl;
cout<<"是否继续进行此删除操作(是为y,不是为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl<<endl; continue;}
else break;

if(flag==0)
{
cout<<"你想要查找宿舍没有记录入系统中或者宿舍没有人进行登记,是否继续进行此删除操作(继续为y,不继续进行操作为n):";
cin>>choice1;
if(choice1[0]=='y'){cout<<"请输入删除的方式(1:按名字删除,2:按学号删除,3:按房号删除):"<<endl; continue;}
else break;
}
}
}
return ;
}
int main()
{
menu();
int j,k,n,m;
memset(domes,0,sizeof(domes));
string choice,i;
while(1)
{
while(1)
{
m=0;
cin>>choice;
if(strlen(choice.c_str())>1)
{
m=1;
cout<<"输入错误,请重新输入";
}
if(choice[0]>'4'||choice[0]<'1')
{
cout<<"输入数字没有此选项请重新输入"<<endl;
m=1;
}
if(m==0)
break;
}

if(choice[0]=='1')
{
build();
cout<<"新建完毕,是否进行下一步操作(返回菜单为y,退出系统为n):";
cin>>choice;
if(choice[0]=='y')
{
system("cls");
menu();
}
else break;
}

else if(choice[0]=='2')
{
paixumenu();
cout<<"排序完毕,是否进行下一步操作(返回菜单为y,退出系统为n):";
cin>>choice;
if(choice[0]=='y')
{
system("cls");
menu();
}
else break;
}

else if(choice[0]=='3')
{
query();
cout<<"排序完毕,是否进行下一步操作(返回菜单为y,退出系统为n):";
cin>>choice;
if(choice[0]=='y')
{
system("cls");
menu();
}
else break;
}

else if(choice[0]=='4')
{
Delete();
cout<<"删除完毕,是否进行下一步操作(返回菜单为y,退出系统为n):";
cin>>choice;
if(choice[0]=='y')
{
system("cls");
menu();
}
else break;
}

else if(choice[0]=='0') break;
}
cout<<"退出系统"<<endl;
system("pause");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数