基于贪心算法学生宿舍分配系统设计与实现

合集下载

C++实现学生住宿管理系统

C++实现学生住宿管理系统

C++实现学⽣住宿管理系统本⽂实例为⼤家分享了C++实现学⽣住宿管理系统的具体代码,供⼤家参考,具体内容如下功能(1)学⽣信息包括:姓名、学号、年龄、性别、学院、年级等(2)宿舍信息包括:宿舍编号、宿舍楼名、楼层号、宿舍类型(⼆⼈间、四⼈间、六⼈间、⼋⼈间)、收费标准等。

(3)住宿信息包括:学⽣、宿舍、⼊住时间、是否⽋费等。

(4)完成以下的操作:学⽣信息和宿舍信息的添加、修改、浏览、删除和查询。

(5)完成以下的操作:学⽣⼊住、缴费;住宿信息浏览、学⽣住宿信息查询、宿舍住宿信息浏览与查询。

提⽰:(1)增加必要的数据成员、成员函数或类;(2)对象指针(住宿信息类的对象指针成员可以指向相关的宿舍、对象指针数组成员可以表⽰该宿舍的学⽣们)代码:#include <iostream>#include <string>using namespace std;//定义学⽣和宿舍的最⼤数量#define MAXSTU 50#define MAXDOR 20//定义学⽣类class Student{private:int mXuehao; //学号char* mName; //名字int mAge; //年龄char mSex; //性别char* mPartment;//学院int mGrade; //年级public:Student(){mName = 0;mPartment = 0;}Student(int id,const char* name,int age,char sex,const char* par,int grade){mXuehao = id;mName = new char[strlen(name)+1];memcpy(mName,name,strlen(name));mName[strlen(name)] = '\0';mAge = age;mSex = toupper(sex);mPartment = new char[strlen(par)+1];memcpy(mPartment,par,strlen(par));mPartment[strlen(par)] = '\0';mGrade = grade;}~Student(){if (mName){delete[] mName;mName = 0;}if (mPartment){delete[] mPartment;void setName(const char* name){if (mName != 0){delete[] mName;mName = 0;}mName = new char[strlen(name)+1];memcpy(mName,name,strlen(name));mName[strlen(name)] = '\0';}void setSex(char sex){mSex = toupper(sex);}void setAge(int age){mAge = age;}void setPartment(const char* par){if(mPartment)delete []mPartment;mPartment = new char[strlen(par)+1];memcpy(mPartment,par,strlen(par));mPartment[strlen(par)] = '\0';}void setGrade(int g){mGrade = g;}//获取类属性int getId(){return mXuehao;}char* getName(){return mName;}char getSex(){return mSex;}int getAge(){return mAge;}char* getPartment(){return mPartment;}int getGrade(){return mGrade;}void display(){cout.setf(ios::left);//设置左对齐cout << mXuehao << " " ;cout.fill(' '); //设置不⾜位填充⽅式cout.width(10); //设置宽度,只对下⼀条有作⽤cout << mName ;cout << " " << mSex << " ";cout << mAge << " " ;cout.fill(' ');cout.width(20);cout<< mPartment ;cout<< " " << mGrade << endl;cout.unsetf(ios::left); //取消左对齐}};//定义宿舍类型enum EDomType{e_dorm_two=1,e_dorm_four,e_dorm_six,e_dorm_eight};//定义宿舍类class Dormatory{private:int mSusheId; //宿舍号char* mDorName; //宿舍楼名int mLayer; //楼层号EDomType mEtype;//类型int mPrice; //价格public:Dormatory(){mDorName = 0;}Dormatory(int id,const char* name,int layer,EDomType e,int price) {mSusheId = id;mDorName = new char[strlen(name)+1];memcpy(mDorName,name,strlen(name));mDorName[strlen(name)] = '\0';~Dormatory(){if(mDorName){delete[] mDorName;mDorName = 0;}}//设置类属性void setId(int id){mSusheId = id;}void setName(const char* name){if(mDorName) delete[] mDorName;mDorName = new char[strlen(name)+1];memcpy(mDorName,name,strlen(name));mDorName[strlen(name)] = '\0';}void setLayer(int layer){mLayer = layer;}void setDormType(EDomType e){mEtype = e;}void setPrice(int p){mPrice = p;}//获取类属性int getId(){return mSusheId;}char* getName(){return mDorName;}int getLayer(){return mLayer;}EDomType getType(){return mEtype;}int getPrice(){return mPrice;}void display(){cout.setf(ios::left);cout<< mSusheId << " ";cout.fill(' ');cout.width(10); //名字最多5个汉⼦或者10个英⽂字符 cout << mDorName;cout << " " << mLayer << " ";if(e_dorm_two == mEtype)cout << "⼆⼈间" ;else if(e_dorm_four == mEtype)cout << "四⼈间" ;else if(e_dorm_six == mEtype)cout << "六⼈间" ;elsecout << "⼋⼈间" ;cout << " " << mPrice << endl;cout.unsetf(ios::left);}};//定义时间类struct Date{int year;int month;int day;};//住宿信息class HomeInfo{private:Dormatory* mDormatory; //宿舍对象指针Student* mStu[8]; //学⽣指针数组bool mbqf[8]; //是否⽋费,true⽋费,否则不⽋费 Date mHomeDate[8]; //⼊住时间int mCurrentNmb;//当前已⼊住⼈数char mDormSex; //当前宿舍的性别public:HomeInfo(){for (int i =0;i< 8;i++){mStu[i] = 0;mDormSex = 'n'; //表⽰该宿舍尚未分配}void setDormatory(Dormatory* p){mDormatory = p;}void setSex(char sex){mDormSex = sex;}Dormatory* getDormatory(){return mDormatory;}char getSex(){return mDormSex;}int getCurrentNmb(){return mCurrentNmb;}//查看某个学⽣是否在该房间bool isIn(Student* stu){for (int i=0;i<mCurrentNmb;i++){if(mStu[i] == stu)return true;}return false;}//是否已经注满bool isFull(){if(e_dorm_eight == mDormatory->getType() && mCurrentNmb == 8)return true;else if(e_dorm_six == mDormatory->getType() && mCurrentNmb == 6)return true;else if(e_dorm_four == mDormatory->getType() && mCurrentNmb == 4)return true;else if(e_dorm_two == mDormatory->getType() && mCurrentNmb == 2)return true;return false;}//办理⼊住bool Home(Student *stu,Date d){if(isFull()){cout << "宿舍已满,请重新选择宿舍"<< endl;return false;}if(mDormSex == 'n')mDormSex = stu->getSex();mStu[mCurrentNmb] = stu;mHomeDate[mCurrentNmb] = d;mCurrentNmb++;cout << "⼊住成功!宿舍:" << mDormatory->getName() << " " << mDormatory->getLayer() << " " << mDormatory->getId() << endl; return true;}//付费void pay(Student *stu){for (int i=0;i<mCurrentNmb;i++){if(mStu[i] == stu){mbqf[i] = false;cout << "缴费成功!!"<< endl;break;}}}//学⽣离开void Leave(Student* stu){for (int i=0;i<mCurrentNmb;i++){if(mStu[i] == stu){for(int j= i;j< mCurrentNmb-1;j++){mbqf[j] = mbqf[j+1];cout << "该学⽣已从⼊住信息中删除" << endl; break;}}}//判断学⽣是否已经缴费bool isPayed(Student* stu){for (int i=0;i<mCurrentNmb;i++){if(mStu[i] == stu){return (!mbqf[i]);}}return false;}//显⽰⼊住信息void display(){mDormatory->display();for (int i =0;i<mCurrentNmb;i++){cout << " >>";mStu[i]->display();}}};//转换类型EDomType getDormType(int type){if(1== type)return e_dorm_two;else if(2 == type)return e_dorm_four;else if(3== type)return e_dorm_six;elsereturn e_dorm_eight;}//1添加学⽣void AddStudent(Student* allStudents[],int &nRealStu) {bool bgo = true;int id;char name[20]={0};char sex;int age;char par[30]={0};int grade;char ch;while(bgo){system("cls");cout << "请输⼊学⽣学号:";while(1){id = 0;cin >> id;if(id <= 0){cout << "输⼊不合法,请重新输⼊";if (cin.fail()){cin.clear();cin.sync();}cout << "请输⼊学⽣姓名:" ;memset(name,0,20);cin >> name;cout << "请输⼊学⽣性别:";cin >> sex;cout << "请输⼊学⽣年龄:";while(1){age = 0;cin >> age;if (age <= 0){cout << "输⼊不合法,请重新输⼊";if (cin.fail()){cin.clear();cin.sync();}}elsebreak;}cout << "请输⼊学院:";memset(par,0,30);cin >> par;cout << "请输⼊年级:";while(1){grade = 0;cin >> grade;if (grade <= 0){cout << "输⼊不合法,请重新输⼊";if (cin.fail()){cin.clear();cin.sync();}}elsebreak;}Student* stu = new Student(id,name,age,sex,par,grade); allStudents[nRealStu] = stu;nRealStu++;cout << "学⽣添加成功!" << endl;cout << "是否继续添加(Y/N)?" ;while(true){if (cin.fail()){cin.clear();cin.sync();}cin >> ch;if (ch == 'N' || ch == 'n'){bgo = false;break;}else if(ch == 'Y' || ch == 'y'){break;}}}system("pause");}char name[20]={0};char sex;int age;char par[30]={0};int grade;Student* stu = 0;system("cls");cout << "请输⼊需要修改信息的学⽣学号:";while(1){id = 0;cin >> id;if(id > 0)break;if (cin.fail()){cin.clear();cin.sync();}cout << "输⼊不合法,请重新输⼊" << endl;}for (int i =0;i< nRealStu;i++){if(allStudents[i]->getId() == id){stu = allStudents[i];cout << "找到学⽣信息如下:" << endl;cout << "姓名:" << stu->getName() << endl;;cout << "性别:" << stu->getSex() << endl;cout << "年龄:" << stu->getAge() << endl;;cout << "学院:" << stu->getPartment() << endl;cout << "年级:"<< stu->getGrade() << endl;cout << "请输⼊需要修改的信息:" << endl;cout << "请输⼊学⽣姓名:";cin >> name;cout << "请输⼊学⽣性别:";cin >> sex;cout << "请输⼊学⽣年龄:";cin >> age;cout << "请输⼊学院:";cin >> par;cout << "请输⼊年级:";cin >> grade;allStudents[i]->setName(name);allStudents[i]->setSex(sex);allStudents[i]->setAge(age);allStudents[i]->setPartment(par);allStudents[i]->setGrade(grade);cout << "学⽣信息修改成功!" << endl;break;}}if(stu==0)cout << "未找到该学⽣信息!" << endl;system("pause");}//3删除学⽣信息void DeleteStudent(Student* allStudents[],int &nRealStu,HomeInfo allInfo[],int nRealDorm) {int id;Student* stu = 0;system("cls");cout << "请输⼊需要删除信息的学⽣学号:";while(1)if (cin.fail()){cin.clear();cin.sync();}cout << "输⼊不合法,请重新输⼊" << endl;}for (int i =0;i< nRealStu;i++){if(allStudents[i]->getId() == id){stu = allStudents[i];//删除学⽣nRealStu -=1;//数组元素前移for (int j = i;j< nRealStu;j++){allStudents[j] = allStudents[j+1];}cout << "删除成功!!" << endl;break;}}if (stu == 0){cout << "未找到该学⽣信息" << endl;}else{//从住宿信息中删除该学⽣信息for (int i=0;i< nRealDorm;i++){allInfo[i].Leave(stu);}delete stu;stu = 0;}system("pause");}//4.浏览所有学⽣信息void ShowAllStudents(Student* allStudents[],int nRealStu) {system("cls");cout << "学⽣信息如下:" << endl;for (int i =0;i< nRealStu;i++){allStudents[i]->display();}system("pause");}//5.查询学⽣信息void FindStudents(Student* allStudents[],int nRealStu){int i,opt;int id;char tmp[40] = {0};bool bgo = true;bool isfind = false;char ch;while(bgo){system("cls");cout << "1.按学号查询" << endl;cout << "2.按姓名查询" << endl;cin >> opt;switch(opt){case 1:cout << "请输⼊需要查询的学号:" << endl;if (cin.fail()){cin.clear();cin.sync();}cout << "输⼊不合法,请重新输⼊" << endl;}}for (i=0;i<nRealStu;i++){if(allStudents[i]->getId() == id){allStudents[i]->display();break;}}if (i == nRealStu){cout << "未找到学号为"<< id <<"的学⽣信息..." << endl;}break;case 2:cout << "请输⼊需要查询的姓名:" << endl;memset(tmp,0,40);cin >> tmp;isfind = false;for (i=0;i<nRealStu;i++){if(strcmp(allStudents[i]->getName(),tmp) == 0){isfind = true;allStudents[i]->display();}}if (!isfind){cout << "未找到姓名为"<< tmp <<"的学⽣信息..." << endl;}break;}cout << "是否继续查询(Y/N)?";while(true){if (cin.fail()){cin.clear();cin.sync();}cin >> ch;if (ch == 'n' || ch == 'N'){bgo = false;break;}else if(ch == 'y'||ch =='Y'){break;}}}system("pause");}//6.添加宿舍void AddDormatory(Dormatory* allDormatory[],int &nRealDorm,HomeInfo allInfo[]) {int id;char name[20]={0};{system("cls");cout << "请输⼊宿舍编号:";while(1){id = 0;cin >> id;if(id > 0) break;else{if (cin.fail()){cin.clear();cin.sync();}cout << "输⼊不合法,请重新输⼊" << endl;}}cout << "请输⼊宿舍名称:";cin >> name;cout << "请输⼊楼层号:";cin >> layer;cout << "请输⼊宿舍类型(1.⼆⼈间 2.四⼈间 3.六⼈间 4.⼋⼈间)";cin >> type;cout << "请输⼊价格:";cin >> price;Dormatory* st = new Dormatory(id,name,layer,getDormType(type),price); allDormatory[nRealDorm] = st;//添加⼊住信息allInfo[nRealDorm].setDormatory(st);nRealDorm += 1;cout << "宿舍添加成功!!" << endl;cout << "是否继续添加(Y/N)?";while(true){cin >> ch;if(ch == 'y' || ch == 'Y')break;else if(ch == 'N' || ch == 'n'){bgo = false;break;}}}system("pause");}//7.修改宿舍信息void ModDormatory(Dormatory* allDormatory[],int nRealDorm){int id;int i;char name[20]={0};int layer;int type;int price;system("cls");cout << "请输⼊要修改信息的宿舍编号:";while(1){id = 0;cin >> id;if (id > 0)break;else{if (cin.fail()){}}for (i=0;i<nRealDorm;i++){if (allDormatory[i]->getId() == id){cout << "该宿舍当前信息如下:" << endl;allDormatory[i]->display();cout << "-------------------------" << endl;cout << "请输⼊宿舍名称:";cin >> name;cout << "请输⼊楼层号:";cin >> layer;cout << "请输⼊宿舍类型(1.⼆⼈间 2.四⼈间 3.六⼈间 4.⼋⼈间)";cin >> type;cout << "请输⼊价格:";cin >> price;allDormatory[i]->setName(name);allDormatory[i]->setLayer(layer);allDormatory[i]->setDormType(getDormType(type));allDormatory[i]->setPrice(price);cout << "宿舍信息修改成功!!"<< endl;break;}}system("pause");}//8.删除宿舍信息void DeleteDormatory(Dormatory* allDormatory[],int &nRealDorm,HomeInfo allInfo[]) {int i,j,id;bool isfind = false;Dormatory* dor = 0;system("cls");cout << "请输⼊需要删除的宿舍号:";while(1){id = 0;cin >> id;if (id > 0)break;else{if (cin.fail()){cin.clear();cin.sync();}cout << "输⼊不合法,请重新输⼊" << endl;}}for (i=0;i<nRealDorm;i++){if (allDormatory[i]->getId() == id){dor = allDormatory[i];//数组前移for (j = i;j<nRealDorm-1;j++){allDormatory[j] = allDormatory[j+1];}break;}}if (dor == 0){cout << "未找到宿舍号为" << id << "的宿舍信息" << endl;}else{//从⼊住信息中删除for (i = 0;i<nRealDorm;i++){if (allInfo[i].getDormatory() == dor){for (j = i;j<nRealDorm-1;j++)allInfo[j] = allInfo[j+1];}break;}}delete dor;dor = 0;nRealDorm -=1;cout << "宿舍信息已删除!!" << endl;}system("pause");}//9.浏览所有宿舍信息void ShowAllDormatory(Dormatory* allDormatory[],int nRealDorm){system("cls");cout << "宿舍信息如下:" << endl;for (int i=0;i<nRealDorm;i++){allDormatory[i]->display();}system("pause");}//10.查询宿舍信息void FindDormatory(Dormatory* allDormatory[],int nRealDorm){int id,i;char tmp[30]={0};char ch;int opt;bool isfind = false;bool bgo = true;while(bgo){system("cls");cout << "1.根据宿舍编号查询" << endl;cout << "2.根据宿舍名查询" << endl;cout << "3.根据楼层号查询" << endl;cout << "4.根据宿舍类型查询" << endl;cin >> opt;switch(opt){case 1:cout << "请输⼊宿舍编号:";cin >> id;for (i=0;i<nRealDorm;i++){if(allDormatory[i]->getId() == id){allDormatory[i]->display();break;}}if (i == nRealDorm){cout << "未找到是宿舍编号为" << id << "的宿舍信息" << endl; }break;case 2:cout << "请输⼊宿舍名:";cin >> tmp;isfind = false;for (i=0;i<nRealDorm;i++){if(strcmp(allDormatory[i]->getName(),tmp) == 0){allDormatory[i]->display();isfind = true;}}if (!isfind){cout << "未找到是宿舍名为" << tmp << "的宿舍信息" << endl; }break;cout << "请输⼊楼层号:";cin >> id;isfind = false;for (i=0;i<nRealDorm;i++){if(allDormatory[i]->getLayer() == id){allDormatory[i]->display();isfind = true;}}if (!isfind){cout << "未找到是楼层号为" << id << "的宿舍信息" << endl; }break;case 4:cout << "请输⼊宿舍类型(1.⼆⼈间 2.四⼈间 3.六⼈间 4.⼋⼈间):"; cin >> id;isfind = false;for (i=0;i<nRealDorm;i++){if(allDormatory[i]->getType() == getDormType(id)){allDormatory[i]->display();isfind = true;}}if (!isfind){if(1 == id)cout << "未找到是房间类型为⼆⼈间的宿舍信息" << endl; else if(2 == id)cout << "未找到是房间类型为四⼈间的宿舍信息" << endl; else if(3 == id)cout << "未找到是房间类型为六⼈间的宿舍信息" << endl; elsecout << "未找到是房间类型为⼋⼈间的宿舍信息" << endl; }break;}cout << "是否继续查询(Y/N)?" << endl;while(true){cin >> ch;if(ch == 'y' || ch =='Y')break;else if(ch == 'n' || ch == 'N'){bgo = false;break;}}}system("pause");}//获取可⽤的宿舍-功能11调⽤int GetDormatory(Student* stu,HomeInfo allinfo[],int nRealNmb){int i = 0;//先找是否有未住满的同性别宿舍for (i=0;i<nRealNmb;i++){if ( (allinfo[i].getSex() == stu->getSex()) && (!allinfo[i].isFull()) ){return i;}}//没有已分配的宿舍,则从未分配性别的宿舍中找⼀个for (i=0;i<nRealNmb;i++){if (allinfo[i].getSex() == 'n'){return i;}}return -1;}//11学⽣⼊住void StudentIn(Student* allStudents[],int nRealStu,Dormatory* allDormatory[],int nRealDorm,HomeInfo allInfo[]) {int id;bool bgo = true;Student* stu = 0;char ch;while(bgo){system("cls");cout << "请输⼊需要办理⼊住的学⽣的学号:";cin >> id;//查找学⽣信息stu = 0;for (int i = 0;i<nRealStu;i++){if(allStudents[i]->getId()==id){stu = allStudents[i];break;}}if (stu == 0){cout << "未找到该学号的学⽣"<< endl;}else{//判断学⽣是否已经⼊住bool isIn = false;for (int i=0;i<nRealDorm;i++){if (allInfo[i].isIn(stu)){isIn = true;cout << "该学⽣已经⼊住" << endl;allInfo[i].getDormatory()->display();break;}}//如果没有⼊住,则办理⼊住if (!isIn){int index = GetDormatory(stu,allInfo,nRealDorm);if(index == -1){cout << "没有宿舍可供分配" << endl;}else{cout << "请输⼊⼊住年、⽉、⽇:";Date dd;cin >> dd.year >> dd.month >> dd.day;allInfo[index].Home(stu,dd);}}}cout << "是否继续办理⼊住(Y/N)?";while(1){cin >> ch;if(ch == 'y' || ch == 'Y')break;else if(ch =='n' || ch == 'N'){bgo = false;break;}}}//while endsystem("pause");}//12学⽣缴费void StudentPay(Student* allStudents[],int nRealStu,HomeInfo allInfo[],int nRealDorm) {int id;bool bgo = true;Student* stu = 0;char ch;while(bgo){system("cls");cout << "请输⼊要缴费的学⽣学号:";cin >> id;//查找学⽣信息stu = 0;for (int i = 0;i<nRealStu;i++){if(allStudents[i]->getId()==id){stu = allStudents[i];break;}}if (stu == 0){cout << "未找到该学号的学⽣"<< endl;}else{//查找该学⽣的⼊住信息int i = 0;for (i=0;i< nRealDorm;i++){if (allInfo[i].isIn(stu)){if(allInfo[i].isPayed(stu)){cout << "该学⽣已经付费" << endl;break;}else{allInfo[i].pay(stu);break;}}}if (i == nRealDorm){cout << "该学⽣尚未办理⼊住,请先办理⼊住" << endl;}}cout << "是否继续办理缴费(Y/N)?";while(1){cin >> ch;if(ch == 'y' || ch == 'Y')break;else if(ch =='n' || ch == 'N'){bgo = false;break;}}}system("pause");}//13住宿信息浏览void ShowHomeInfo(HomeInfo allInfo[],int nRealDorm){int i;system("cls");cout << "⼊住信息如下:" <<endl;for (i=0;i<nRealDorm;i++){allInfo[i].display();}system("pause");}//14学⽣⼊住信息查询void FindStudent(Student* allStudents[],int nRealStu,HomeInfo allInfo[],int nRealDorm) {int i,j;Student* stu = 0;bool bgo = true;int opt;char ch;while(bgo){system("cls");stu = 0;cout << "1.根据学号查找" << endl;cout << "2.根据姓名查找" << endl;cin >> opt;int id;char tmp[30]={0};switch(opt){case 1:cout << "请输⼊学号:";cin >> id;for (i=0;i<nRealStu;i++){if(allStudents[i]->getId() == id){stu = allStudents[i];break;}}if(stu == 0)cout << "未找到该学号的学⽣" << endl;else{for (i=0;i<nRealDorm;i++){if (allInfo[i].isIn(stu)){cout << "该学⽣的⼊住信息如下:" << endl;allInfo[i].getDormatory()->display();break;}}}break;case 2:cout << "请输⼊姓名:";cin >> tmp;for (i=0;i<nRealStu;i++){if(strcmp(allStudents[i]->getName(),tmp) == 0){stu = allStudents[i];for (j=0;j<nRealDorm;j++){if (allInfo[j].isIn(stu)){cout << "该学⽣的⼊住信息如下:" << endl;allInfo[j].getDormatory()->display();break;}}//可能存在重名的学⽣,所以此处不退出循环}}if(stu == 0)cout << "未找到该学号的学⽣" << endl;break;}cout << "是否继续查询(Y/N)?";while(1){cin >> ch;if(ch == 'y' || ch == 'Y')break;else if(ch =='n' || ch == 'N'){bgo = false;break;}}}system("pause");}//15宿舍⼊住信息查询void FindDormInfo(HomeInfo allInfo[],int nRealDorm){int i;bool bgo = true;int id;char ch;while(bgo){system("cls");cout << "请输⼊需要查询的宿舍编号:"<< endl;cin >> id;for (i=0;i< nRealDorm;i++){if (allInfo[i].getDormatory()->getId() == id){allInfo[i].display();}}cout << "是否继续查询(Y/N)?";while(1){cin >> ch;if(ch == 'y' || ch == 'Y')break;else if(ch =='n' || ch == 'N'){bgo = false;break;}}}system("pause");}int main(){Student* allStudents[MAXSTU]; //存储所有学⽣信息int nRealStu = 0; //当前实际学⽣数量Dormatory* allDormatory[MAXDOR];//保存所有宿舍信息int nRealDorm = 0; //当前实际宿舍数量HomeInfo allInfo[MAXDOR]; //保存所有⼊住信息int opt;bool bgo = true;while(bgo){system("cls");cout << "--------------学⽣住宿信息管理系统---------------"<< endl; cout << "| 1.添加学⽣ |"<< endl;cout << "| 2.修改学⽣信息 |"<< endl;cout << "| 3.删除学⽣ |"<< endl;cout << "| 4.浏览所有学⽣信息 |"<< endl; cout << "| 5.查询学⽣信息 |"<< endl;cout << "| 6.添加宿舍 |"<< endl;cout << "| 7.修改宿舍信息 |"<< endl;cout << "| 8.删除宿舍 |"<< endl;cout << "| 9.浏览所有宿舍信息 |"<< endl; cout << "| 10.查询宿舍信息 |"<< endl; cout << "| 11.学⽣⼊住 |"<< endl;cout << "| 12.学⽣缴费 |"<< endl;cout << "| 13.住宿信息浏览 |"<< endl;cout << "| 14.学⽣⼊住信息查询 |"<< endl;cout << "| 15.宿舍⼊住信息查询 |"<< endl;cout << "| 0.退出系统 |"<< endl;cout << "-------------------------------------------------"<< endl;cin >> opt;switch(opt){case 0:bgo = false;break;case 1://添加学⽣AddStudent(allStudents,nRealStu);break;case 2://修改学⽣信息ModStudent(allStudents,nRealStu);break;case 3://删除学⽣DeleteStudent(allStudents,nRealStu,allInfo,nRealDorm);break;case 4://浏览所有学⽣信息ShowAllStudents(allStudents,nRealStu);break;case 5://查询学⽣信息FindStudents(allStudents,nRealStu);break;case 6://添加宿舍信息AddDormatory(allDormatory,nRealDorm,allInfo);break;case 7://修改宿舍信息ModDormatory(allDormatory,nRealDorm);break;case 8://删除宿舍信息DeleteDormatory(allDormatory,nRealDorm,allInfo);break;case 9://浏览所有宿舍信息ShowAllDormatory(allDormatory,nRealDorm);break;case 10://查询宿舍信息FindDormatory(allDormatory,nRealDorm);break;case 11://学⽣⼊住StudentIn(allStudents,nRealStu,allDormatory,nRealDorm,allInfo); break;case 12://学⽣缴费StudentPay(allStudents,nRealStu,allInfo,nRealDorm);break;case 13://住宿信息浏览ShowHomeInfo(allInfo,nRealDorm);break;case 14://学⽣⼊住信息查询FindStudent(allStudents,nRealStu,allInfo,nRealDorm);break;case 15://宿舍⼊住信息查询FindDormInfo(allInfo,nRealDorm);break;}}return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

学生宿舍管理系统java课程设计

学生宿舍管理系统java课程设计

学生宿舍管理系统Java课程设计一、介绍学生宿舍管理系统是一个致力于简化和规范学生宿舍管理流程的软件系统。

该系统能够帮助学校管理部门更加高效地管理宿舍分配、维修、费用收支等方面的工作。

在本文中,我将为您详细介绍学生宿舍管理系统的设计以及其中所涉及的Java课程设计。

二、系统功能1. 学生信息管理学生宿舍管理系统需要能够对学生的基本信息进行管理,包括尊称、学号、性别、通信方式等。

通过Java语言,可以设计一个简洁而有效的学生信息管理模块,实现学生信息的录入、编辑和查询等功能。

2. 宿舍分配宿舍管理系统需要能够根据学生的特点和条件进行宿舍的合理分配。

在Java课程设计中,可以设计一个宿舍分配算法,根据学生的性别、年级、专业等信息,自动进行宿舍分配,保证宿舍资源的合理利用。

3. 宿舍维修管理宿舍维修是宿舍管理中不可或缺的一环。

通过Java技术,可以设计一个宿舍报修系统,学生可以通过系统提交维修请求,维修人员可以及时查看并进行处理,从而提高维修效率。

4. 费用管理宿舍管理系统还需要能够管理学生宿舍费用的收支情况,包括宿舍费的缴纳、欠费提醒等功能。

通过Java编程,可以设计一个费用管理模块,实现宿舍费用的统计和提醒功能。

三、系统设计在Java课程设计中,需要按照面向对象的思想来设计学生宿舍管理系统。

可以设计学生、宿舍、维修人员、费用等各种对象,并建立它们之间的关系,如学生与宿舍的关联、维修人员与维修任务的关联等。

通过良好的系统设计,可以让系统结构清晰,功能互相独立,易于维护和扩展。

四、个人观点学生宿舍管理系统是一个非常实用的软件系统,可以有效地简化学校宿舍管理部门的工作,提高管理效率。

通过本文的介绍,我们了解了学生宿舍管理系统的设计和Java课程设计中的相关内容,可以更深入地理解和学习Java编程。

总结回顾本文中,我们详细介绍了学生宿舍管理系统的设计以及其中所涉及的Java课程设计。

通过对系统功能、系统设计和个人观点的讨论,希望能够让读者对学生宿舍管理系统有一个全面、深刻和灵活的理解。

贪心算法在高校排课系统中的应用

贪心算法在高校排课系统中的应用
1 6即 可 。
( 4 )为 了便 于 阅读 程序 ,用 户还 需为 内
I 址 另 加注 释 。
中应用在对算法 的优化及对 新技术的应用上。
L o g i x 5 0 0 0平 台 自 动 内存 管 理 的 面 向 “ 对象” 技术 在河 南 中烟南 阳卷烟 厂 电子皮 带秤 P L C

3排课算法简介
排 课 问题早在 7 0年 代 就 证 明 是 一 个 NP
】 课程 。
( 2 )一位教师在 某一 时刻最 多只能教授
上接 2 2 4页
地址 对 应 表 ,记 忆 对 于 的 I / 0 位置 ;
加 至 8个或 1 6个,也 无需再 定义标 签 ,只需 动 存 储 这 些 数据 结 构 ,开 发者 无 需知 道 数 据 具 将s e n s o r 对象 的下标加长 ,相应 从 4改成 8或 体存放 的物理单元 ,因而开发者可 以把精力集
在 高校 中,科 学合 理 高效 的
课表 是教 学活动顺 利开展 的前提 , 课 表 的优 劣直接 影 响 着 高校 的教 学质 量。人 工排 课 工作 量 十分 繁 重 ,常 出现 各 种 冲 突,例 如 两个 班 级 同时 使用 一 间教 室等。 随着 计 算机 技 术 的发展 , 出现 了多种

如实验课 。 ( 5 )合班教 学时尽量 为同一专业 或邻近
2贪心算法 简介
贪心算法,又叫贪婪算法 ( G  ̄d y 砷h m) ,
专业 ,高数 、英语 等基础 课除外。
( 6 )教室使 用时利 用率尽量 高,即不 出 指在 问题求解时 ,总是做 出在当前看来是最好 排课 算法,有效地解决了排课 困 I 难 的 问题 。本文 就 贪 心算 法在 排 I 现十几人 的小班 占用容量 为几 百人的大教室。 的选 择 , 也就是说 , 不 从 整 体 0 0 开 发平 台的P L O 开 发 电 6编 程 Z 带秤 的数据管理

C语言课程设计——学生宿舍管理系统(ubuntu下)

C语言课程设计——学生宿舍管理系统(ubuntu下)

****大学学号:学生姓名:指导教师:时间:一、课程设计目的1. 设计一个ubuntu下的学生宿舍管理系统2. 掌握用C语言定义单链表结构,并实现其创建、插入、删除等基本操作。

5、数据的查询查询可以根据学号和宿舍信息不同方面进行查询,方便操作者使用。

6、数据的排序操作者可以使所输入的信息按学号排序。

7、数据的统计按整体统计,统计所有学生人数,男生人数和女生人数。

四、概要设计1.系统结构图(功能模块图)(5) 查询模块:先将文件信息读出,再调用search(),在search()中有调用两个数,一个按照宿舍信息查询sushe_search(),需要楼号和宿舍号,一个按照生信息查询xuehao_search()需要学生学号或者姓名。

(6) 排序模块:先将文件信息读出,再调用sort (),按照学生学号排序,拍完续没有直接写入文件,如果要直接写入调用文件读入函数Write_to_File().(7) 统计模块:先将文件信息读出,再调用tongji()函数,统计了女生人数和男生人数,还统计了总人数.五.详细过程和运行结果:输入插入的学查找模块Count1++ Count2++六.参考文献:《C语言程序设计》: 王曙燕typedef struct Student{int num; /*学号*/ char name[15]; /*姓名*/ char sex; /*性别*/char zhuanye[20]; /*专业*/int lounum; /*楼号*/int sushenum; /*宿舍号*/int chuangnum; /*床号*/ struct Student *next;}Stu;getchar();getchar();exit(0);}p=L->next;while(p){fprintf(fp,"%d %s %c %s %d %d %d\n",p->num,p->name,p->sex, p->zhuanye,p->lounum,p->sushenum,p->chuangnum);p=p->next;}getchar();exit(0);}(*h)->next=NULL;}void append( ) /*录入学生信息*/{Stu *head;Stu *p,*q;char ch;InitStu(&head);scanf("%s",p->name);printf("\n性别:");scanf(" %c",&p->sex);printf("\n专业:");scanf("%s",p->zhuanye);printf("\n楼号:");scanf("%d",&p->lounum); printf("\n宿舍号:");ch=getchar();if(ch=='0')break;}Write_to_File(head);}void Read_from_File(Stu *h) /*读出文件信息*/{FILE *fp;Stu *p,*q;int i;i=fscanf(fp,"%d %s %c %s %d %d %d\n",&p->num,p->name,&p->sex, p->zhuanye,&p->lounum,&p->sushenum,&p->chuangnum);if(i == EOF)break;q->next=p;q=p;q->next = NULL;fclose(fp);}int display() /*显示文件信息*/printf("\n按任意键键返回\n");getchar();getchar();return 0;}printf("学号姓名性别专业楼号宿舍号床号while(p){printf("%-8d%-10s%-6c%-14s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye,{Stu *head;Stu *p,*q;char ch,h;int N;int lounum,sushenum,chuangnum;InitStu(&head);Read_from_File(head);q=head;p=head->next;do{while(p){if(p->num==N){q->next=p->next;printf("删除成功!");break;}q=p;p=p->next;}if(p==NULL)scanf("%d %d %d",&lounum,&sushenum,&chuangnum);while(p!=NULL){if(p->lounum==lounum && p->sushenum==sushenum && p->chuangnum){q->next=p->next;printf("删除成功!");break;}q=p;p=p->next;}printf("\n\n是否继续:Y/N?");scanf(" %c", &h);}while(h=='Y' ||h=='y');Write_to_File(head);}void insert() /*用头插法插入学生信息*/{Stu *p , *head;printf("\t 学号:");scanf("%d",&p->num);printf("\n\t 姓名:");scanf("%s",p->name);printf("\n\t性别:");scanf(" %c",&p->sex);printf("\n\t 宿舍号:"); scanf("%d",&p->sushenum);printf("\n\t 床号:"); scanf("%d",&p->chuangnum);p->next = head->next;head->next = p;printf("\n\n是否继续插入?Y/N");scanf(" %c",&ch);InitStu(&head);Read_from_File(head);system("clear");printf("\n\n请输入修改的学生学号: ");scanf("%d",&N);p=head->next;do{while(p!=NULL){if(p->num==N)printf("\n专业:"); scanf("%s",p->zhuanye);printf("\n楼号:"); scanf("%d",&p->lounum);printf("\n宿舍号:");scanf("%d",&p->sushenum);printf("\n床号:");scanf("%d",&p->chuangnum);scanf(" %c",&ch);}while(ch=='y'||ch=='Y');Write_to_File(head);}void xuehao_search(Stu * head) /*按照学生学号查找*/{int num;Stu *p;char ch;p=head->next ;do床号\n\n");printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",p->num,p->name,p->sex,p->zhuanye,p->lounum,p->sushenum,p->chuangnum);break;}p=p->next;}if(p==NULL)printf("\n未找到此学生");printf("\n\n 继续查找 ?Y/N");do{system("clear");printf("\n请输入要查找的学生宿舍信息(楼号宿舍床号) : ");printf("\n 楼号 :");scanf("%d",&lounum);printf("\n 宿舍号 :");scanf("%d",&sushenum);printf("\n 床号 :");scanf("%d",&chuangnum);while(p!=NULL)}p=p->next;}if(p==NULL)printf("\n未找到此学生"); printf("\n\n 是否继续 ?Y/N");scanf("%s",&ch);}while(ch=='y' || ch=='Y');}void Search( ) /*查找学生信息*/{int choose;{case 1:sushe_search(head);break;case 2:xuehao_search(head);break;case 3:break;}}k=i;for(n=i,j=i->next;j;n=j,j=j->next){if(j->num< k->num){k=j;break;}}if(i!=k){i=head->next;printf("学号姓名性别专业楼号宿舍号床号\n\n");while(i){printf("%-8d%-8s%-4c%-8s%-8d%-8d%-5d\n",i->num,i->name,i->sex,i->zhuanye,i->lounum,i->sushenum,i->chuangnum);i=i->next;}printf("\n按任意键返回!");getchar();getchar();InitStu(&head);Read_from_File(head);system("clear");p=head->next;Count1=0;Count2=0;while(p!=NULL){if(p->sex=='w' || p->sex=='W'){Count1++;printf("\t男生总数 : %d\n ",Count2); printf("\t学生总数 : %d\n ",Count1+Count2);printf("\t按任意键返回!");getchar();getchar();}void main(){printf(" 4.修改学生信息\n\n");printf(" 5.显示学生信息\n\n"); printf(" 6.查找学生信息\n\n");printf(" 7.排序学生信息\n\n");printf(" 8.统计学生信息\n\n");printf(" 0.退出系统\n");printf("==========================================\n");printf(" 请选择0-8:\n");printf("\n 请选择要进行的操作 : ");scanf("%d",&choice);insert();break;case 4:modify();break;case 5:display();break;case 6:Search();printf("\n\t\t确定退出? (Y/N)");scanf(" %c", &ch);if(ch=='Y'||ch=='y')exit(0);if(ch=='N' || ch=='n'){system("clear");}}}}。

《2024年基于Matlab的自动组卷系统的设计与实现》范文

《2024年基于Matlab的自动组卷系统的设计与实现》范文

《基于Matlab的自动组卷系统的设计与实现》篇一一、引言随着信息技术和在线教育的飞速发展,自动组卷系统已经成为在线考试系统中不可或缺的组成部分。

基于Matlab的自动组卷系统能够有效地实现题目的自动选择与组卷,为在线教育提供便利。

本文将详细介绍基于Matlab的自动组卷系统的设计与实现过程。

二、系统需求分析在系统设计之前,我们需要对自动组卷系统的需求进行详细的分析。

首先,系统需要从庞大的题库中自动选择符合考试要求的题目。

其次,系统需要按照一定的策略将选定的题目组成试卷,保证试卷的难度、知识点覆盖率和题型分布等符合考试要求。

最后,系统还需要提供试卷的预览、导出和评分等功能。

三、系统设计1. 数据库设计自动组卷系统的核心是题库,因此我们需要设计一个高效的数据库来存储题目信息。

题目信息包括题目内容、答案、难度、知识点等信息。

数据库的设计需要考虑到数据的存储、查询和更新的效率。

2. 系统架构设计基于Matlab的自动组卷系统采用客户端-服务器架构。

客户端负责题目的选择、组卷和预览等功能,服务器负责题库的管理和试卷的生成。

系统架构的设计需要考虑到系统的可扩展性、稳定性和安全性。

3. 算法设计自动组卷的核心是算法设计。

我们需要设计一种高效的算法,从题库中自动选择符合考试要求的题目,并将选定的题目组成试卷。

常用的算法包括随机选择法、遗传算法、贪心算法等。

在本系统中,我们采用贪心算法和随机选择法相结合的方式,以保证试卷的难度、知识点覆盖率和题型分布等符合考试要求。

四、系统实现1. 数据库实现我们使用Matlab自带的数据库操作函数,如SQL语句等,来实现对题库的增删改查操作。

同时,我们还需要设计一个友好的界面,方便用户对题库进行管理。

2. 系统界面实现系统界面采用Matlab的GUI模块进行设计。

界面包括登录、题库浏览、试卷生成、试卷预览和评分等功能模块。

界面设计需要考虑到用户的操作习惯和视觉体验。

3. 算法实现我们使用Matlab编程实现自动组卷算法。

c课程设计寝室管理系统

c课程设计寝室管理系统

c 课程设计寝室管理系统一、课程目标知识目标:1. 让学生掌握寝室管理系统的基本概念、功能模块及其运作原理。

2. 了解并掌握数据库、编程语言等基本知识在寝室管理系统中的应用。

3. 学会运用系统分析方法,对寝室管理进行需求分析和系统设计。

技能目标:1. 培养学生运用所学知识,独立设计并实现一个简单的寝室管理系统的能力。

2. 提高学生的编程实践能力,学会使用至少一种编程语言进行系统开发。

3. 培养学生的团队协作能力,学会在项目中进行有效沟通与分工。

情感态度价值观目标:1. 培养学生对信息技术学科的兴趣,激发其探索精神和创新意识。

2. 培养学生具备良好的信息素养,认识到信息技术在现实生活中的重要应用和价值。

3. 增强学生的社会责任感,使其认识到为他人提供便捷服务的重要性。

分析课程性质、学生特点和教学要求,本课程旨在使学生在掌握基本理论知识的基础上,通过实践操作,培养实际应用能力。

课程目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。

通过本课程的学习,学生将能够将所学知识应用于实际项目中,为未来的学习和工作打下坚实基础。

二、教学内容1. 寝室管理系统概述:介绍寝室管理系统的基本概念、功能模块及其在实际生活中的应用。

教材章节:第一章2. 数据库知识:讲解数据库的基本原理,重点掌握SQL语言及其在寝室管理系统中的应用。

教材章节:第二章3. 编程语言:学习并掌握一种编程语言(如Java、Python等),用于开发寝室管理系统。

教材章节:第三章4. 系统分析方法:介绍系统分析方法,如需求分析、系统设计等,并应用于寝室管理系统。

教材章节:第四章5. 寝室管理系统设计与实现:结合前述知识,设计并实现一个简单的寝室管理系统。

教材章节:第五章6. 项目实践:分组进行项目实践,培养学生的团队协作能力和实际操作能力。

教材章节:第六章教学内容按照教学大纲进行安排和进度,保证科学性和系统性。

通过以上六个方面的学习,使学生能够全面掌握寝室管理系统的相关知识,并具备实际应用能力。

C语言课程设计学生宿舍管理系统

C语言课程设计学生宿舍管理系统

模块化设计: 将系统划分为 多个模块,便 于维护和扩展
接口设计:提 供统一的接口, 便于与其他系
统集成
数据库设计: 采用关系型数 据库,便于数 据存储和ห้องสมุดไป่ตู้询
安全性考虑: 采用加密技术, 保证数据安全
用户体验:提 供友好的用户 界面,便于用
户使用
性能优化:采 用高效的算法 和数据结构, 提高系统运行
响应时间:系统处理用户请求所需的时间 吞吐量:系统在单位时间内处理的请求数量 资源利用率:系统对硬件资源的使用情况 可靠性:系统在运行过程中出现故障的概率 可扩展性:系统适应未来业务增长的能力 用户体验:用户对系统的满意度和易用性评价
提高系统响应速度:优化数据库查询和更新操作,减少数据传输时间
智能化:引入人工智能技术,实现 自动识别、自动处理等功能
安全性:加强数据加密和访问控制, 确保学生信息的安全
添加标题
添加标题
添加标题
添加标题
移动化:开发移动应用,方便学生 随时随地查询和管理宿舍信息
扩展性:支持与其他系统对接,实 现数据共享和协同工作
汇报人:
添加标题
报表管理:包括学生住宿情况报表、宿舍费用报表、 宿舍卫生检查报表等报表的生成和管理
添加标题
宿舍管理:包括宿舍分配、宿舍调整、宿舍卫生检 查等
添加标题
通知管理:包括宿舍通知、学校通知、班级通知等 通知的发布和管理
学生信息 管理:包 括学生基 本信息、 宿舍分配、 宿舍调整 等
宿舍管理: 包括宿舍 分配、宿 舍调整、 宿舍卫生 检查等
增强系统安全性:加强用户身份验证和权限管理,防止数据泄露和恶意攻击
提高用户体验:优化界面设计,简化操作流程,提高用户满意度 优化系统稳定性:加强系统监控和日志记录,及时发现和解决系统故障

学生宿舍分配系统系统设计说明书.doc

学生宿舍分配系统系统设计说明书.doc

系统设计说明书模板1. 引言1.1编写目的本设计说明是在学生宿舍分配软件需求规格说明书的基础上,详细描述系统的概要设计结果,作为详细设计的基础资料,为系统开发人员提供设计和开发依据。

1.2背景a.待开发的软件系统的名称:学生宿舍分配系统b.本项目的任务提出者:宿舍管理中心c.本项目的任务开发者:学校技术人员d.本项目的任务用户:学生、班主任、辅导员、宿舍负责人、校领导、院领导。

1.3术语本文当中涉及的专业术语定义或解释,一般用表格形式给出,如表2-1所示。

表2-1 术语定义或解释表1.4参考资料学生宿舍分配系统需求规格说明书马小军张玉祥,《软件开发实训教程》,中国人民大学出版社,2015年8月2. 系统总体设计2.1设计约束2.1.1 本系统应遵循的标准和规范易用性、高效性、可靠性、可扩展性、安全性2.1.2 软硬件运行环境约束Windows XP/win7/win8, Sql server 2008数据库数据库服务器一台,CPU:Pentium900M,内存容量>512M2.1.3 接口约束数据库访问接口2.1.4 用户界面约束交互方式:人机交互界面空间尺寸:可随浏览器大小自行调整硬件级网络带宽:校园网带宽>10M2.2 体系结构设计(系统的体系结构模型,如下)2.3系统功能结构主功能清单表2-2 主功能模块(用例)清单2.4模块设计2.4.1 学生住宿申请子系统——填报申请模块程序设计2.4.1.1功能描述学生在线填写住换宿申请,填写后提交。

该模块提供住换宿申请的保存和提交功能。

2.4.1.2性能提交时间<1s2.4.1.3输入项住宿申请表内容包括:姓名、学号、性别、学院、班级、家庭地址、联系电话、电子邮件、申请日期、特殊说明。

2.4.1.4输出项提交状态的宿舍申请表2.4.1.5流程逻辑与算法描述(住宿申请顺序图,如下)2.4.1.6接口数据库访问接口2.4.1.7单元测试计划按照住宿申请顺序图即程序执行流程设计测试用例2.4.2 学生住宿申请子系统——申请查询模块程序设计2.4.2.1功能描述针对学生在线提交的住换宿申请,实现申请书所处状态的具体查询并显示查询结果。

宿舍管理系统c课程设计

宿舍管理系统c课程设计

宿舍管理系统c课程设计一、课程目标知识目标:1. 理解宿舍管理系统的基本功能需求,掌握系统设计的基本原理;2. 学会运用C语言进行数据结构设计和算法实现,构建宿舍管理系统的功能模块;3. 掌握模块化编程思想,能够对宿舍管理系统进行模块划分和代码编写。

技能目标:1. 能够运用结构体、文件操作等C语言知识编写宿舍管理系统相关功能;2. 培养学生分析问题、解决问题的能力,提高编程实践技能;3. 增强团队协作能力,学会与他人共同完成一个项目。

情感态度价值观目标:1. 培养学生认真负责的工作态度,严谨细致的编程习惯;2. 增强学生对计算机科学与技术专业的兴趣,激发学习热情;3. 培养学生积极向上的团队精神,提高沟通表达能力。

课程性质分析:本课程为计算机科学与技术专业课程,旨在通过宿舍管理系统课程设计,让学生掌握C语言在实际项目中的应用,提高编程实践能力。

学生特点分析:学生已具备一定的C语言基础,但实际项目经验不足,需要通过课程设计培养实践能力和团队协作能力。

教学要求:教师需引导学生分析需求,明确功能模块,并在实践中提供指导,确保学生能够独立或协作完成课程设计任务。

通过课程目标的实现,评估学生在知识、技能和情感态度价值观方面的学习成果。

二、教学内容1. 宿舍管理系统需求分析:介绍宿舍管理系统的功能需求,引导学生明确课程设计的任务目标,对应教材中“系统分析与设计”章节。

2. 数据结构设计:讲解如何运用结构体、链表等数据结构存储宿舍信息,对应教材中“数据结构”章节。

3. 功能模块设计:- 宿舍信息录入与查询:介绍如何实现宿舍信息的添加、删除、修改和查询功能,对应教材中“文件操作”章节;- 学生信息管理:讲解如何实现学生信息的添加、删除、修改和查询功能,对应教材中“结构体与指针”章节;- 宿舍卫生管理:介绍如何实现宿舍卫生情况的记录和查询,对应教材中“函数与模块化编程”章节。

4. 系统测试与优化:教授如何对宿舍管理系统进行测试和优化,提高系统稳定性和性能,对应教材中“程序调试与优化”章节。

C语言实现宿舍管理系统课程设计

C语言实现宿舍管理系统课程设计

C语⾔实现宿舍管理系统课程设计宿舍管理系统C语⾔源码,供⼤家参考,具体内容如下内容摘要学⽣宿舍管理系统时应对学⽣宿舍管理的现代化、⽹络化,逐步摆脱学⽣宿舍管理的⼈⼯管理⽅式,提⾼学⽣宿舍管理效率⽽开发的,它包括了对学⽣宿舍基本信息管理,其功能包括对这些基本信息的增、删、改、查等基本功能,并将这些功能与⽂件读写相结合形成⽂档使管理者⼀⽬了然,也适合长时间的保存,数据不容易丢失;其中在输出时穿插着冒泡排序、希尔排序、折半拆⼊排序、⼆分查找等算法,按顺序输出学⽣信息等。

综上,这⽆疑为信息的管理存储提供了⼀个⽅便、快捷的操作⽅式。

关键词⼆分查找、排序算法及分析、⽂件操作系统概览开发⼯具Visual C++ 6.0函数功能源码#include"stdio.h"#include"stdlib.h"#include"string.h"#include "conio.h"#include "windows.h"#define MAX 1000/*结构体类型*/typedef struct{int num;/*学号*/char name[20];/*姓名*/char sex[5];/*性别*/int age;/*年龄*/char studentclass[20];/*班级*/int dorm;/*宿舍号*/}STUDENTS;//查找指针typedef struct Points{int a;struct Points *points;}Points;char xiugai[10]="修改";char chaxun[10]="查询";char xuehao[]="学号";char xingming[]="姓名";char xingbie[]="性别";char nianling[]="年龄";char banji[]="班级";char sushe[]="宿舍";/*共⽤的功能块 */void pause(){int i;printf("\n\n按任意键加回车返回主菜单!");scanf("%d",&i);getchar();}void print(STUDENTS stu[],int point){printf("\n\n\n学号:%d,姓名:%s,性别:%s,年龄:%d,班级:%s,宿舍号: %d\n",stu[point].num,stu[point].name,stu[point].sex,stu[point].age,stu[point].studentclass,stu[point].dorm);}void printfNotFound(){printf("找不到该数据\n");}void printSearch(STUDENTS stu[],int i){printf(" %7d%11s%10s%10d%12s%12d\n\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].studentclass,stu[i].dorm); }void printHead(){printf(" -------------------------------------------------------------------------------\n");printf(" -------------------------------------------------------------------------------\n");printf(" 学号:姓名:性别:年龄:班级:宿舍号: \n");printf(" -------------------------------------------------------------------------------\n");printf(" -------------------------------------------------------------------------------\n\n\n");}//默认继续int a=1;void selectOperate(){button:printf("继续操作请按1,返回主菜单请按0 ");scanf("%d",&a);if(!(a==1||a==0)){printf("请输⼊正确的指令");goto button;}}//读取⽂件,返回的是总个数int read_file(STUDENTS stu[]){FILE *fp;int point=-1;fp=fopen("stu.txt","rt");if(fp==NULL){printf("\n\n*****库存⽂件不存在!请创建");return 0;}while(!feof(fp)){point++;fread(&stu[point],sizeof(STUDENTS),1,fp);}fclose(fp);return point;}//存储数据到⽂件中void save_file(STUDENTS stu[],int sum)//sum是总个数{FILE *fp;int i;if((fp=fopen("temp.txt","w"))==NULL){printf("写⽂件错误!\n");return;}for(i=0;i<sum;i++)if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)printf("写⽂件错误!\n");fclose(fp);remove("stu.txt");rename("temp.txt","stu.txt");}/*创建学⽣信息*///返回的是总数int input(STUDENTS stu[],int sum){int x;for(;sum<MAX;sum++){system("cls");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf(" ▄▄\n");printf(" ▄创建学⽣宿舍信息▄\n");printf(" ▄▄\n");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf("\n\n 录⼊学⽣信息 (最多%d个)\n",MAX);printf(" ----------------------------\n");printf("\n 第%d个学⽣\n",sum+1);printf("\n 请输⼊学⽣的学号:");scanf("%d",&stu[sum].num);printf("\n 请输⼊学⽣的姓名:");scanf("%s",stu[sum].name);printf("\n 请输⼊学⽣的性别:");scanf("%s",stu[sum].sex);printf("\n 请输⼊学⽣的年龄:");scanf("%d",&stu[sum].age);printf("\n 请输⼊学⽣的班级:");scanf("%s",stu[sum].studentclass);printf("\n 请输⼊学⽣的宿舍号:");scanf("%d",&stu[sum].dorm);printf(" 创建成功!");//选择操作selectOperate();if(a==0)return sum+1;}return sum+1;}/*打印学⽣信息*/ void output(STUDENTS stu[],int sum){int i;system("cls");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf(" ▄▄\n");printf(" ▄打印学⽣宿舍信息▄\n");printf(" ▄▄\n");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printHead();for(i=0;i<sum;i++)printSearch(stu,i);pause();}/*排序 *//*复制student*///将排好的装在⼀个新的students数组⾥,不要存到⽂件中void cpStu(STUDENTS stu0[],STUDENTS stu[],int sum) {int i;for(i=0;i<sum;i++){stu[i].num=stu0[i].num;strcpy(stu[i].name,stu0[i].name);strcpy(stu[i].sex,stu0[i].sex);stu[i].age=stu0[i].age;strcpy(stu[i].studentclass,stu0[i].studentclass);stu[i].dorm=stu0[i].dorm;}}/*对数据元组排序*/void exchangeData(STUDENTS *stu1,STUDENTS *stu2){stu1->num=stu2->num;stu1->dorm=stu2->dorm;stu1->age=stu2->age;strcpy(stu1->name,stu2->name);strcpy(stu1->sex,stu2->sex);strcpy(stu1->studentclass,stu2->studentclass);}int selectSort(){int choice;printf("\n\n\n ********请您选择条件进⾏排序********\n\n");printf(" 1. 学号\n\n");printf(" 2. 班级\n\n");printf(" 3. 宿舍号\n\n");printf(" 4. 姓名\n\n");printf(" 0. 返回主菜单\n\n");printf(" 请选择(0-3):");scanf("%d",&choice);return choice;}/*根据宿舍号从⼩到⼤排序冒泡*/void sortByDorm(STUDENTS stu0[],int sum,STUDENTS stup[]){STUDENTS stu1; //中间变量int i,j;cpStu(stu0,stup,sum);for(i=0;i<sum-1;i++)for(j=0;j<sum-1-i;j++)if(stup[j].dorm>stup[j+1].dorm){exchangeData(&stu1,&stup[j]);exchangeData(&stup[j],&stup[j+1]);exchangeData(&stup[j+1],&stu1);}}/*根据班级从⼩到⼤排序选择*/void sortByClass(STUDENTS stu0[],int sum,STUDENTS stup[]) {STUDENTS stu1; //中间变量int i,j,k;cpStu(stu0,stup,sum);for(i=0;i<sum-1;i++){k=i;for(j=i+1;j<sum;j++)if(strcmp(stup[k].studentclass,stup[j].studentclass)>0) k=j;if(k!=i){exchangeData(&stu1,&stup[i]);exchangeData(&stup[i],&stup[k]);exchangeData(&stup[k],&stu1);}}}/*根据姓名从⼤到⼩排序折半插⼊排序*///因为这⾥是从stu[1]开始操作的,所以得再创个中间变量void sortByName(STUDENTS stu0[],int sum,STUDENTS stup[]) {STUDENTS stu1; //中间变量STUDENTS stu[1000];int i,j,low,high,mid;for(i=0;i<sum;i++){stu[i+1].num=stu0[i].num;strcpy(stu[i+1].name,stu0[i].name);strcpy(stu[i+1].sex,stu0[i].sex);stu[i+1].age=stu0[i].age;strcpy(stu[i+1].studentclass,stu0[i].studentclass);stu[i+1].dorm=stu0[i].dorm;}for(i=2;i<sum+1;i++){exchangeData(&stu1,&stu[i]); /*保存待插⼊元素到stu1*/low=1;high=i-1;while(low<=high){mid=(low+high)/2;if(strcmp(,stu[mid].name)>0)low=mid+1;elsehigh=mid-1;}for(j=i-1;j>=high+1;j--)exchangeData(&stu[j+1],&stu[j]);//后移元素,留出插⼊空位 exchangeData(&stu[high+1],&stu1);}for(i=0;i<sum;i++){stup[i].num=stu[i+1].num;strcpy(stup[i].name,stu[i+1].name);strcpy(stup[i].sex,stu[i+1].sex);stup[i].age=stu[i+1].age;strcpy(stup[i].studentclass,stu[i+1].studentclass);stup[i].dorm=stu[i+1].dorm;}}/*根据学号从⼤到⼩排序插⼊的希尔排序*/void ShellInsert(STUDENTS stup[],int sum,int dk){int i,j,k;STUDENTS stu1;//中间变量for(k=0;k<dk;k++)for(i=dk+k;i<sum;i=i+dk)if(stup[i].num<stup[i-dk].num){exchangeData(&stu1,&stup[i]);for(j=i-dk;j>=0&&stu1.num<stup[j].num;j=j-dk)//记录向后移 exchangeData(&stup[j+dk],&stup[j]);exchangeData(&stup[j+dk],&stu1);}}void sortByNum(STUDENTS stu[],int sum,STUDENTS stup[]){int i,x;cpStu(stu,stup,sum);int dlta[5]={5,4,3,2,1};for(x=0;x<5;x++)ShellInsert(stup,sum,dlta[x]);}//总的函数void sortStudent(STUDENTS stu[],int sum){STUDENTS stup[1000];//引⽤,把排好序的放在这⾥,不跟原来的混淆 int choice,x,i;do{system("cls");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf(" ▄▄\n");printf(" ▄学⽣宿舍信息排序▄\n");printf(" ▄▄\n");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");select:choice=selectSort();system("cls");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf(" ▄▄\n");printf(" ▄学⽣宿舍信息排序▄\n");printf(" ▄▄\n");printf(" ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");switch(choice){case 1: sortByNum(stu,sum,stup); break;/*学⽣学号信息顺序*/case 2: sortByClass(stu,sum,stup);break;/*学⽣班级信息顺序*/ case 3: sortByDorm(stu,sum,stup); break;/*学⽣宿舍信息顺序*/case 4: sortByName(stu,sum,stup); break;/*学⽣姓名信息顺序*/case 0: break;}//打印排好序的printHead();for(i=0;i<sum;i++)printSearch(stup,i);if(choice==1||choice==2||choice==3||choice==4){printf("\n\n");button:printf("继续查询请按1,返回主菜单请按0 ");scanf("%d",&x);if(x==1)x=1;else if(x==0)continue;else{printf("请输⼊正确的指令\n");goto button;}}else if(choice==0)x=0;else{printf("\n\t\t请输⼊正确的指令\n");goto select;}}while(x==1);}/* 根据条件查找指针point*//////查询或者修改的选择;int selectChoice(char tiaojian[20]){int choice;printf("\n\n\n ********您想根据哪个条件%s********\n\n",tiaojian);printf(" 1. 学号\n\n");printf(" 2. 姓名\n\n");printf(" 3. 性别\n\n");printf(" 4. 年龄\n\n");printf(" 5. 班级\n\n");printf(" 6. 宿舍号\n\n");printf(" 0. 返回主菜单\n\n");printf(" 请选择(0-6):");scanf("%d",&choice);return choice;}///为什么这⾥的指针得返回菜可⾏,参数不是指针,操作的是地址的Points *connectPoint(Points *r,Points *p,int i){p=(Points *)malloc(sizeof(Points));p->a=i;r->points=p;r=p;return r;}//choice是指主菜单中的功能选项,字符数组tiaojian为相应的字符,⽐如如果选择查询的话,//tiaojian传参进来的应该为 "查询",这⾥是为了提⾼函数的复⽤性。

C语言课程设计:学生宿舍管理系统[1]

C语言课程设计:学生宿舍管理系统[1]

AddfromText(room1,n); /*从文件中读入数据*/printf("\t\t");system("pause");break;case 9:printf("\t\t循环写入数据\n");WritetoText(room1,n); /*循环写入数据*/printf("\t\t");system("pause");break;case 0:printf("\t\t谢谢使用,祝您好运,再见!\n"); /*结束程序*/printf("\t\t");system("pause");exit(0);}}}3.设计结果与分析将程序进行编译链接后生成“”运行该文件如图:按照提示选择“1”进行记录的输入(输入一个数据后提示是否继续输入)如图:连续输入多组数据后,按“n”结束输入,提示按任意键继续,按任意键后选择“2”进行记录的显示如图:显示后提示按任意键继续,按任意键后选择“3”进行记录的按床位号排序并显示,如图:显示后提示按任意键继续,按任意键后选择“4”进行记录的按学号排序并显示,如图:显示后提示按任意键继续,按任意键后选择“5”按提示步骤插入一条记录并显示,如图:显示后提示按任意键继续,按任意键后选择“6”按提示步骤删除一条记录,如果没找到该学生显示如图:如果有该学生显示如图:显示后提示按任意键继续,按任意键后选择“7”按提示步骤查找并显示一个记录,如图:显示后提示按任意键继续,按任意键后选择“8”按提示步骤查找原有记录文件如果找不到则显示如图:如果有该文件则显示如图:将原有文件读入程序。

显示后提示按任意键继续,按任意键后选择“9”按提示步骤循环写入记录,如图:显示后提示按任意键继续,按任意键后选择“0”结束程序,如图:4.设计体会通过这次课程设计使我了解到我有很多的不足,在程序调试的时候常常会因为几个错误而弄得心烦,这说明我对知识的掌握还不够牢,在程序设计的过程中也暴露出了我的诸多弊端,借这次课程设计的机会我会认真的加以改正,为以后的学习打下坚实的基础。

贪心算法设计及其实际应用研究

贪心算法设计及其实际应用研究

哈尔滨师范大学学年论文题目关于贪心算法研究学生***指导教师年级2009级专业计算机科学与技术系别计算机科学与技术学院计算机科学与信息工程学院哈尔滨师范大学年月论文提要为满足人们对大数据量信息处理的渴望,解决各种实际问题,计算机算法学得到了飞速的发展。

设计一个好的求解算法更像是一门艺术而不像是技术。

当一个问题具有最优子结构性质和贪心选择性质时,贪心算法通常会给出一个简单、直观、高效的解法。

贪心算法通过一系列的选择来得到一个问题的解。

它所作的每一个选择都是在当前状态下具有某种意义的最好选择,即贪心选择;并且每次贪心选择都能将问题化简为一个更小的与原问题具有相同形式的子问题。

尽管贪心算法对许多问题不能总是产生整体最优解,但对诸如最短路径问题、最小生成树问题,以及哈夫曼编码问题等具有最优子结构和贪心选择性质的问题却可以获得整体最优解。

而且所给出的算法一般比动态规划算法更加简单、直观和高效。

贪心算法设计及其实际应用研究***摘要:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。

从贪心算法的定义可以看出,贪心法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。

贪心算法所作的选择可以依赖于以往所作过的选择,但决不依赖于将来的选择,也不依赖于子问题的解,因此贪心算法与其它算法相比具有一定的速度优势。

如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。

本文讲述了贪心算法的含义、基本思路及实现过程,贪心算法的核心、基本性质、特点及其存在的问题。

并通过贪心算法的特点举例列出了以往研究过的几个经典问题,对于实际应用中的问题,也希望通过贪心算法的特点来解决。

关键词:贪心算法;哈夫曼编码;最小生成树;多处最优服务次序问题;删数问题一、贪心算法的基本知识概述(一)贪心算法的核心贪心算法的核心问题是选择能产生问题最优解的最优度量标准,即具体的贪心策略。

BS模式-智能学生宿舍分配管理系统的设计与开发

BS模式-智能学生宿舍分配管理系统的设计与开发

本科毕业论文(设计)论文题目:B/S模式-智能学生宿舍分配管理系统的设计与开发学生姓名:学号:专业:信息管理与信息系统班级:指导教师:序言近年来,随着用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术的广泛应用,向用户提供的服务将越来越丰富,越来越人性化。

对于学校而言,学生宿舍管理是必不可少的组成部分。

目前仍然存在有学校停留在宿舍管理部门人员手工记录数据的阶段,手工记录对于规模小的学校来说勉强可以接受;但对于学生信息量比较庞大,需要记录存档的数据比较多的高校来说,人工记录是相当麻烦的,而且当查找某条记录时,由于数据量庞大,只能依靠人工去一条一条地查找,这样不但工作效率比较低而且易出错。

采用计算机来管理宿舍和学生的信息,大大提高了查询的速度,节约了人力和物力资源,达到了预期的要求。

如今,计算机已经被应用于许多领域,计算机之所以如此通用的原因主要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三,计算机可以大大的提高人们的工作效率;第四,计算机可以使敏感文档更加安全。

为了实现提高高校宿舍管理部门的工作效率,充分利用资源,减少不必要的人力,物力和财力的支出,方便宿舍管理部门的工作人员全面地掌握学生住宿情况等目的,为宿舍管理部门,开发设计专用系统--智能学生宿舍分配管理系统来进行学生宿舍信息管理,使学生宿舍信息实现标准化的管理和规范化的制度是十分必要的。

它将实现检索迅速和查找方便,信息的录入,修改和删除功能,以及对新入校学生进行宿舍安排等功能,用户可以在系统前台以管理员和后勤人员的身份进行发布寝室和查看的信息。

整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成系统管理,学生信息查询管理,学生出入宿舍登记和资料的修改管理等功能,本文所设计的智能学生宿舍分配管理系统可以用于学校从事学生宿舍管理方面的需要。

一、项目概述(一)开发背景1. 智能学生宿舍分配管理系统解决的问题学生宿舍分配管理系统对于一个学校来说是必不可少的组成部分。

贪心算法实现背包问题算法设计与分析实验报告

贪心算法实现背包问题算法设计与分析实验报告

算法设计与分析实验报告实验名称 贪心算法实现背包问题 评分 实验日期 年 月 日 指导教师 姓名 专业班级 学号一.实验要求1. 优化问题有n个输入,而它的解就由这n个输入满足某些事先给定的约束条件的某个子集组 成,而把满足约束条件的子集称为该问题的可行解。

可行解一般来说是不唯一的。

那些使目标函数取极值(极大或极小)的可行解,称为最优解。

2.贪心法求优化问题算法思想:在贪心算法中采用逐步构造最优解的方法。

在每个阶段,都作出一个看上去最优的决策(在一定的标准下)。

决策一旦作出,就不可再更改。

作出贪心决策的依据称为贪心准则(greedy criterion)。

3.一般方法1)根据题意,选取一种量度标准。

2)按这种量度标准对这n个输入排序3)依次选择输入量加入部分解中。

如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。

procedure GREEDY(A,n) /*贪心法一般控制流程*///A(1:n)包含n个输入//solutions←φ //将解向量solution初始化为空/for i←1 to n dox←SELECT(A)if FEASIBLE(solution,x)then solutions←UNION(solution,x)endifrepeatreturn(solution)end GREEDY4. 实现典型的贪心算法的编程与上机实验,验证算法的时间复杂性函数。

二.实验内容1. 编程实现背包问题贪心算法。

通过具体算法理解如何通过局部最优实现全局最优,并验证算法的时间复杂性。

2.输入5个的图的邻接矩阵,程序加入统计prim算法访问图的节点数和边数的语句。

3.将统计数与复杂性函数所计算比较次数比较,用表格列出比较结果,给出文字分析。

三.程序算法1. 背包问题的贪心算法procedure KNAPSACK(P,W,M,X,n)//P(1:n)和W(1;n)分别含有按P(i)/W(i)≥P(i+1)/W(i+1)排序的n件物品的效益值和重量。

宿舍管理系统c课程设计

宿舍管理系统c课程设计

宿舍管理系统c课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和编程技巧,并能运用到实际项目中;2. 使学生了解宿舍管理系统的功能需求,掌握其模块划分和设计方法;3. 帮助学生掌握文件操作、数据存储和查询等基本技能。

技能目标:1. 培养学生运用C语言解决实际问题的能力,提高编程实践技能;2. 培养学生分析问题、设计解决方案和编程实现的能力;3. 培养学生团队协作和沟通表达的能力。

情感态度价值观目标:1. 激发学生对计算机编程的兴趣,提高学习主动性和积极性;2. 培养学生严谨、细致、负责的工作态度,养成良好的编程习惯;3. 培养学生面对问题勇于挑战、善于创新的精神。

课程性质:本课程为实践性较强的课程设计,要求学生将所学的C语言知识应用到实际项目中,提高编程能力和解决问题的能力。

学生特点:学生已具备一定的C语言基础,对编程有一定兴趣,但可能缺乏实际项目经验。

教学要求:教师应注重理论与实践相结合,引导学生积极思考、动手实践,关注学生的学习过程,提高其分析问题和解决问题的能力。

通过课程设计,使学生达到预期的学习成果。

二、教学内容1. C语言基础回顾:变量、数据类型、运算符、控制语句、函数等;2. 宿舍管理系统功能分析:学生信息管理、宿舍楼信息管理、宿舍分配与调整、费用管理等;3. 系统模块设计与实现:- 学生信息模块:学生基本信息录入、查询、修改和删除;- 宿舍楼信息模块:宿舍楼基本信息录入、查询、修改和删除;- 宿舍分配与调整模块:实现宿舍分配、调整功能;- 费用管理模块:实现宿舍费用计算、查询和缴纳功能;4. 文件操作与数据存储:文件打开、关闭、读写,数据存储格式设计;5. 系统测试与调试:功能测试、性能测试、异常处理;6. 项目实践与团队协作:分组进行项目实践,培养学生的团队协作和沟通能力。

教学内容安排与进度:第一周:C语言基础回顾;第二周:宿舍管理系统功能分析;第三周:系统模块设计与实现(1);第四周:系统模块设计与实现(2);第五周:文件操作与数据存储;第六周:系统测试与调试;第七周:项目实践与团队协作。

C宿舍管理系统课程设计

C宿舍管理系统课程设计

C 宿舍管理系统课程设计一、教学目标本课程旨在通过宿舍管理系统的设计与实现,让学生掌握计算机编程的基本技能,培养其解决实际问题的能力。

具体的教学目标如下:知识目标:使学生掌握C语言的基本语法、数据结构和算法;理解面向对象编程的基本概念。

技能目标:培养学生运用C语言进行程序设计的能力;培养学生使用集成开发环境进行软件开发的能力。

情感态度价值观目标:培养学生团队协作、沟通交流的能力;培养学生对计算机科学的兴趣和热情。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、算法和面向对象编程。

具体的教学安排如下:1.C语言的基本语法:变量、数据类型、运算符、表达式、语句等。

2.数据结构:数组、链表、栈、队列、树等。

3.算法:排序算法、查找算法、递归算法等。

4.面向对象编程:类、对象、封装、继承、多态等。

5.宿舍管理系统的设计与实现:需求分析、系统设计、编码实现、测试与优化等。

三、教学方法为了提高教学效果,本课程将采用多种教学方法,如讲授法、案例分析法、实验法等。

具体的教学方法如下:1.讲授法:通过讲解C语言的基本语法、数据结构、算法和面向对象编程的概念,使学生掌握相关知识。

2.案例分析法:分析典型的宿舍管理系统的案例,使学生了解并学会解决实际问题。

3.实验法:让学生动手编写代码,实现宿舍管理系统,培养其实际操作能力。

四、教学资源为了支持教学内容的实施,我们将准备以下教学资源:1.教材:《C语言程序设计》、《数据结构》、《面向对象编程》等。

2.参考书:提供相关的参考书籍,以便学生课后自学。

3.多媒体资料:制作课件、视频等多媒体资料,丰富教学手段。

4.实验设备:提供计算机、网络等实验设备,确保学生能顺利进行实验操作。

五、教学评估为了全面、客观地评估学生的学习成果,本课程将采取多种评估方式,包括平时表现、作业、考试等。

具体评估方式如下:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解其学习态度和实际能力。

基于数据挖掘技术的宿舍智能分配系统

基于数据挖掘技术的宿舍智能分配系统

最小值的准则函数[7],这使得算法在运算过程中将陷 入局部极小,所以最后的结果是不是全局最优解还 不确定。除此之外,k-means 聚类算法中 k 表示聚簇 的个数,聚类结果取决于 k 值的选取[8],然而 k 值的 选取需要根据实际的需求来确定,通常情况下并不 知道要将数据集聚为多少个类簇最为合适,因此针 对 k 值的选取问题依然有待解决。
2) 采集详细的性格特征。性格包括:大方外向、 自制力、敏感、责任心、卫生五个方面。在调查问卷 中,这五个大方向共有 20 道小题,每个大方向有四 个小题,每个小题有四个选项,选项根据得分按序排 列,分数赋值提前按照顺序排列好,从 A 到 D 分别 是 1 到 4 分,生成表格时按序号生成,那么每个序号 就对应了相应的得分。
经逐渐开始将信息化技术应用于校园管理中。当前 绝大多数高校普遍依靠性别、专业、班级、学号等进 行宿舍分配,没有更多考虑学生个性发展的多样化 因素,如何利用计算机强大的数据分析能力实现智 能化宿舍分配是当下宿舍管理中相当值得思考的问 题[1-2]。在此设计实现一款基于数据挖掘技术的宿舍 智能分配系统,对解决上述问题做出尝试。
第3期 2021 年 6 月
微处理机 MICROPROCESSORS
No. 3 Jun.,2021
基于数据挖掘技术的宿舍智能分配系统 *
李 涵,傅文鸿,范昱煊,焦宇航,胡雪巍,党 赫
(北京信息科技大学理学院,北京 100096)
摘 要: 随着信息技术的不断发展,智慧校园建设已成为许多高校发展战略规划的重点内容,鉴
3) 爱好选择。此部分应用了 5 道多项选择题, 分别为每个人喜欢的运动、剧种、书籍、游戏、音乐类 别。当导出为表格时,此部分的表格每一列的列名变 为题目的选项,表格元素也不再是选项的序号,而改 用 0 或者 1 来表示是否有此爱好。在后续聚类过程 中,假若第二次分类时,有宿舍人数达到饱和,学生 得分相近,那么就要依靠此部分将学生进行详细拆 分,筛选爱好相对差异较小的学生。 3.2 数据库设计
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于贪心算法的学生宿舍分配系统设计与实现
摘要:随着数字化校园进程的快速推进,科研和教学都进入了数字信息化管理时代,研究如何利用数字信息化的优势来高效管理高校后勤具有重要意义。

本文设计了基于改进的贪心算法的智能宿舍分配系统,把选定的分配条件如作息时间、爱好、专业、个性等作为特征项,为每个特征项根据其在匹配中的重要程度赋予一定的权重,通过计算匹配度为学生进行宿舍分配,实现一个人性化的宿舍分配系统。

在减少后勤人员的工作量、提高宿舍分配效率的同时,也有助于营造和谐的宿舍氛围。

实现了学生管理的信息化、自动化,对于数字化校园的建设有一定的理论和现实意义。

关键词:贪心算法;宿舍分配;数字化校园
中图分类号:tp311
随着高校招生规模的不断扩大,学生人数的急剧增加,住宿资源也愈发紧张,学生对宿舍分配与管理的要求也在不断地提高。

同时,随着社会信息化发展步伐的加快,学校的管理和服务工作也需要越来越周到、全面、先进和高效。

在校生的学历层次、文化水平、思想状态呈多样化、复杂化的趋势,学生对宿舍分配和管理的要求也在不断地提高.这使得管理工作变得越来越繁重复杂和琐碎。

采用传统的手工模式进行管理,其效率低,易出错,利用现代信息技术来实现高校宿舍分配的智能化,不仅可以有效的降低分配的人力和时间成本,而且可以提高分配宿舍的质量和效率,更有益于加快数字化校园建设的步伐。

也使得管理工作更加人性化,充分体现以人
为本的管理理念和服务思想,不断提高服务质量,营造和谐的宿舍氛围为学生提供优质的学习生活环境。

1 宿舍分配系统的需求分析
宿舍分配系统的主要目的是使用先进的信息技术来实现学生宿
舍分配相关基础数据的处理,宿舍的分配以及宿舍资源的查询等功能。

学生宿舍分配系统主要包括如下的需求:
(1)能够对全校的宿舍资源及宿舍分配情况进行统一管理,并保证宿舍分配的高效性与准确性。

(2)能够收集学生的相关信息,进行数据处理,根据学生的特点为其分配宿舍。

(3)能实时查看住宿的情况,便于分析和统计等。

(4)能够为学生收费系统提供相应的住宿费收费依据。

2 系统设计
2.1 宿舍分配系统的分配原则
(1)学院、专业、班级实行相对集中的原则:尽量将同一学院、专业、班级的学生安排在一起(同一楼层或相近的楼层),为便于进行日常管理,尽量安排同一个专业或班级的学生住满若干间宿舍。

[1]
(2)年级集中原则:以便于做好迎新接待,日常活动,毕业设计及就业工作,尽量减小不同的年级之间的互相影响。

[1]
(3)对同一楼层的安排,安排宿舍到头后再后退折回,对于不同的楼层的安排,宿舍安排到头后上楼后退折回,不再从头开始,
以便使同一个专业或班级的宿舍尽可能地靠在一起。

[1]
(4)尽量将作息时间相近,兴趣爱好互补的同学安排在同一宿舍。

2.2 宿舍分配系统的分配流程
根据实际调研的结果,得出影响宿舍氛围的因素及其权重,以确定宿舍分配时所依据的条件及权重。

分配前,准备可用的宿舍资源,即增加新宿舍和回收毕业生的宿舍;将学生的基本信息录入互联网服务器的数据库系统后开放该系统,再由学生通过登录该系统填入一些个性化的信息如性格、爱好、作息时间等,到设定的截止日期系统会自动关闭。

分配时,系统依据学生的学院、年级、专业、班级、性别、兴趣爱好、作息时间等条件进行加权计算,完成学生与宿舍资源的比对和匹配,在辅以必要的人工干预的同时,实现学生宿舍的智能分配。

分配完毕后在网站上公示各宿舍人员名单,若有需要调整的可在公示期内联系宿舍管理员进行适当调整,最后公布各宿舍人员的正式名单。

2.3 算法分析
贪心算法是一种简化解题复杂度的算法,不追求最优解,不用回溯,只希望得到较为满意的解。

它的基本思想是:从问题的某一个初始解出发,采用逐步构造当前状态下最优解,以尽可能快的速度逐步逼近给定的目标的搜索方法。

贪心算法不在整体上考虑最优,而是把整个问题分成多个阶段,保证在每个阶段求出当前看来的最优解,并且一旦求出解就不再更改,使用贪心算法省去了为找到整
体最优解穷尽所有可能而耗费的大量时间,并且可以快速得到较为满意的解。

虽然贪心算法不是对所有问题都能得到整体最优解,但对于范围相当广泛的求最优解的问题来说,它是一种最直接的算法设计技术,通过一系列局部最优的解的选择,贪心算法可以产生整体的最优解。

[2][3][4][5]
(1)贪心算法的求解步骤。

从问题的某一个初始状态出发,根据当前的局部最优策略,以满足约束方程为条件,以使目标函数增长最快(或最慢)为准则,在候选集合中进行一系列的选择,以便尽快构成问题的可行解。

[6]
(2)基于贪心法的宿舍分配算法设计。

①首先进行宿舍分配的预处理:将所有学生的学号按性别、学院、年级、专业、班级由高到低的优先级顺序依次排列好。

②取出排在最前面的学生,以该学生为对象,计算出其所在班级待分配的同性别学生与他在作息时间、兴趣爱好等特征项的匹配度以及该班级待分配的人数m,根据计算出的匹配度的值将该班级同性别学生重新排序。

③根据贪心算法的思想:若m不小于n-1(n为一个宿舍的人员容量),将该学生及与其匹配度高的前n-1个学生分配到一个宿舍,并将m的值减小(n-1)。

④当m小于n-1时,保存m个学生的信息,跳过这些学生,继续进行本专业下一个班级学生宿舍的分配。

⑤重复步骤②③④,直至本专业所有班级可以分配宿舍的学生分配宿舍完毕。

⑥将本专业还未分配到宿舍的学生(之前跳过的学生)按学号排好,取出排在最前面的学生,以该学生为对象,计算出其所在专业待分配的同
性别学生与他在作息时间、兴趣爱好等特征项的匹配度以及该专业待分配的人数p,根据计算出的匹配度的值将该班级同性别学生重新排序。

⑦根据贪心算法的思想:若p不小于n-1(n为一个宿舍的人员容量),将该学生及与其匹配度高的前n-1个学生分配到一个宿舍,并将p的值减小(n-1)。

⑧当p小于n-1时,保存p个学生的信息,跳过这些学生,继续进行本年级下一个专业学生宿舍的分配。

⑨依此类推直到该校所有学生分配完宿舍(不同性别不可分配在同一个宿舍)。

3 系统实现与开发工具
根据系统的需求,采用b/s模式进行系统设计,应用c#语言进行程序设计,其数据库设计按照oracle数据库的标准进行。

[7]运用b/s模式,不需要安装客户端的软件,可以支持跨平台访问,支持多校区的联网运行,宿舍管理人员可在多地区、任意时间段登录进行学生宿舍的分配和管理,学生也可在多地点进行信息录入、修改及查询,系统适应性强。

4 结束语
宿舍分配是大学宿舍管理系统中一个非常重要同时也是非常复杂的一个工作,良好的宿舍分配系统对宿舍资源的统一管理有十分重要的意义,可以在很大程度上提高管理效率和资源利用率,能够有效缓解高校宿舍资源的紧张局面,提高学校管理的科学化和人性化。

本文采用贪心算法作为学生宿舍分配系统的核心算法,对宿舍分配问题做出了一些有益的尝试,也希望能够为宿舍智能分配系统
的研究做出自己微薄的贡献。

参考文献:
[1]舒攀,陈金刚.数字化校园建设中宿舍管理系统的设计与实现[j].武汉工程大学学报,2008,30(4):108-111.
[2]王伟,余利华.基于贪心法和禁忌搜索的实用高校排课系统[j].计算机应用,2007,27(11):2873-2876.
[3]邓曦辉.浅谈贪心算法在排课系统中的应用[j].电脑与电信,2011,7.
[4]江朝勇,陈子庆,谢赞福.基于优先级贪婪算法的排课系统的研究与实现[j].信息技术,2008.
[5]聂小东.基于贪婪算法的排课系统的研究与实现[d].广州:广东工业大学,2006.
[6]王红梅.算法设计与分析[m].北京:清华大学出版社,2006,
7.
[7]谢红标,徐争前.基于web的智能化宿舍管理系统的设计与实现[j].计算机时代,2007.。

相关文档
最新文档