宿舍管理,没什么好玩的,就是繁琐,很多东西需要你细化,而且一般要求为交互式平台,而且选项多,出错处较多,排错就是一个相当大的工程。我写的这个里面没有太多的排错功能,因为那东西就是烦而已,多几个if 判断下而已,因为烦的慌,觉得也没啥意思,就没细细的写,粗略的写了几个。 查询也是只写了按学号查询,是用的折半查找。排序是用的快速排序,因为时间消耗比较小,喏,那是上个排序综合里有的,所以写这个就用的那个里的快速排序,很简单,就是对copy下而已,改下结构体,complete!呵呵,程序如下:头文件里的:struct student{char name[10];int num;int dormin;};cpp文件:// 宿舍管理.cpp : 定义控制台应用程序的入口点。//////////////////////////////////////////////////////////////////////////*8、宿舍管理查询软件(**)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:(1)采用交互工作方式(2)可以增加、删除、修改信息(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)(4) 查询 : a.按姓名查询 ;b.按学号查询 ;c按房号查询(5) 打印任一查询结果(可以连续操作)*//////////////////////////////////////////////////////////////////////#include "stdafx.h"#include<fstream>#include<stdlib.h>#include<iostream>using namespace std;#define max 10int _tmain(int argc, _TCHAR* argv[]){void input(student *,int);void display(student *,int);void add(student *,int &,int);<br>void qsort(student *,int,int);void del(student *,char *,int &);void change(student *,char *,int );<br>void search(student *,int,int,int);</p><p>int stunum,choose;<br>ifstream infile("stunum.txt");<br>if(!infile) cout<<"文件中尚未创建信息!"<<endl;<br>else infile>>stunum;<br>infile.close();</p><p>char name[10];<br>cout<<"****************************************************"<<endl;<br>cout<<endl<<endl;<br>cout<<" 欢迎进入学生宿舍管理系统!!"<<endl;<br>cout<<endl<<endl;<br>cout<<"****************************************************"<<endl;<br>while(1){<br>cout<<"1.输入学生宿舍信息"<<endl;<br>cout<<"2.显示已输入信息"<<endl;<br>cout<<"3.信息修改"<<endl;<br>cout<<"4.信息查询"<<endl;<br>cout<<"5.信息排序"<<endl;<br>cout<<"6.退出系统"<<endl;<br>cout<<"请输入需要执行的任务:";<br>cin>>choose;<br>student *S;S=new student[max];<br>switch(choose){<br> case 1:{cout<<"输入数据将使原来数据丢失,确定这样做吗?(y/n)"<<endl;<br>bool yn=0;char temp;<br>cin>>temp;<br>if(temp=='y') yn=1;<br>if(yn){cout<<"请输入学生数目:";<br> cin>>stunum;<br> input(S,stunum);<br>ofstream outfile("stunum.txt");<br>outfile<<stunum;<br>outfile.close();break;}}case 2:display(S,stunum);break;case 3: {int cchoose;cout<<"1.修改信息"<<endl;<br> cout<<"2.添加信息"<<endl;cout<<"3.删除信息"<<endl;cout<<"请输入要执行的任务:"<<endl;<br> cin>>cchoose;<br> switch(cchoose)<br> {case 1:{cout<<"请输入修改的信息人名"<<endl;cin>>name;change(S,name,stunum);break;} case 2:{int ad;cout<<"请输入添加人数:";cin>>ad;add(S,stunum,ad);break;} case 3:{cout<<"请输入删除信息的人名"<<endl;cin>>name;del(S,name,stunum);break;} break;}break;}case 4:{cout<<"请输入学号:";<br> int cchoose;cin>>cchoose;search(S,0,stunum,cchoose);<br> break;}case 5:{ifstream infile("stuinfor.txt",ios::in);<br> for(int i=0;i<stunum;i++)<br> infile>>S[i].name>>S[i].num>>S[i].dormin;<br> qsort(S,0,stunum-1);<br> ofstream outfile("sorted_infor.txt");<br> for(int i=0;i<stunum;i++) {outfile<<S[i].name<<' '<<S[i].num<<' '<<S[i].dormin<<endl;<br> cout<<S[i].name<<' '<<S[i].num<<' '<<S[i].dormin<<endl;} outfile.close();infile.close();break;}case 6:cout<<" 谢谢使用!"<<endl;exit(1);}}ofstream outfile("stunum.txt");outfile<<stunum;outfile.close();return 0;}void input(student *stu,int all){ofstream outfile("stuinfor.txt");<br>for(int i=0;i<all;i++)<br>{cout<<"请输入第"<<i+1<<"个学生的姓名 学号 宿舍号:";<br> cin>>stu[i].name>>stu[i].num>>stu[i].dormin;<br> outfile<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].dormin<<endl;<br>}outfile.close();}void display(student *stu,int all){ifstream infile("stuinfor.txt",ios::in);if(!infile) cerr<<"文件打开失败!"<<endl;else{ for(int i=0;i<all;i++){cout<<"输入的第"<<i+1<<"个学生的姓名 学号 宿舍号分别为:";<br> infile>>stu[i].name>>stu[i].num>>stu[i].dormin;<br> cout<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].dormin<<endl;<br>} infile.close();}}void add(student *stu,int &all,int add){ofstream outfile("stuinfor.txt",ios::app);for(int i=0;i<add;i++){ cout<<"请输入第"<<all+i+1<<"个学生的姓名 学号 宿舍号:";cin>>stu[all+i].name>>stu[all+i].num>>stu[all+i].dormin; outfile<<stu[all+i].name<<" "<<stu[all+i].num<<" "<<stu[all+i].dormin<<endl;}all+=add;outfile.close();}//快速排序int partition(student *a,int low,int high){student tem;int piv=a[low].num;while(high>low){ while(high>low&&a[high].num>=piv) high--; tem=a[high];a[high]=a[low];a[low]=tem; while(high>low&&a[low].num<=piv) low++; tem=a[high];a[high]=a[low];a[low]=tem;}return low;}void qsort(student *a,int low,int high){int pivotloc;<br>if(low<high)<br>{<br> pivotloc=partition(a,low,high);<br> qsort(a,low,pivotloc-1);<br> qsort(a,pivotloc+1,high);<br>}}void del(student *stu,char *name,int &num){int delper;char check;<br>ifstream infile("stuinfor.txt");<br> for(int i=0;i<num;i++) <br> {<br> infile>>stu[i].name>>stu[i].num>>stu[i].dormin;<br> if(strcmp(name,stu[i].name)==0) delper=i;} cout<<"您要删除的信息如下:"<<endl; cout<<stu[delper].name<<" "<<stu[delper].num<<" "<<stu[delper].dormin<<endl; cout<<"您确定要删除吗?(y/n)"<<endl; cin>>check; ofstream outfile("stuinfor.txt"); if(check=='y'||'Y') { for(int i=delper;i<num;i++) stu[i]=stu[i+1]; num--; for(int i=0;i<num;i++) outfile<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].dormin<<endl; cout<<"信息已删除!"<<endl;} infile.close(); outfile.close();}void change(student *stu,char *name,int num){int change;char check,nam[10];<br>int cn,cd;<br>ifstream infile("stuinfor.txt");<br> for(int i=0;i<num;i++) <br> {<br> infile>>stu[i].name>>stu[i].num>>stu[i].dormin;<br> if(strcmp(name,stu[i].name)==0) change=i;<br> } cout<<"您要修改的信息如下:"<<endl; cout<<stu[change].name<<" "<<stu[change].num<<" "<<stu[change].dormin<<endl; cout<<"您确定要修改吗?(y/n)"<<endl; cin>>check; ofstream outfile("stuinfor.txt"); if(check=='y'||'Y') { cout<<"请依次输入姓名 学号 宿舍号"<<endl; cin>>nam>>cn>>cd; strcpy(stu[change].name,nam);stu[change].num=cn;stu[change].dormin=cd; for(int i=0;i<num;i++) outfile<<stu[i].name<<" "<<stu[i].num<<" "<<stu[i].dormin<<endl; cout<<"信息已修改!"<<endl;} infile.close(); outfile.close();}void search(student *stu,int low,int high,int check){int mid=(low+high)/2;<br>ifstream infile("sorted_infor.txt");<br>if(!infile) cerr<<"文件打开失败!"<<endl;<br>else <br>{for(int i=0;i<high;i++) infile>>stu[i].name>>stu[i].num>>stu[i].dormin;<br>while(stu[mid].num!=check&&high>=low) {mid=(low+high)/2;if(stu[mid].num>check) high=mid-1;<br>else low=mid+1;}//折半查找}if(stu[mid].num==check){cout<<"您要查询的信息如下:"<<endl;<br>cout<<stu[mid].name<<" "<<stu[mid].num<<" "<<stu[mid].dormin<<endl;}else cout<<"未能查到您所要查询信息!"<<endl;}