精华内容
下载资源
问答
  • 宿舍进行查询,数据结构课程设计C语言版
  • 宿舍管理人员编写一个宿舍管理查询软件。 要求: 1)建立数据文件,数据文件按关键字(姓名,学号,房号)进行排序(冒泡,选择,插入排序等任意一种) 2)查询菜单(用二分法实现以下操作) A.按姓名查询 B...
  • 数据结构课程设计 宿舍管理系统 有代码设计
  • 学号 20XX-20XX年 第 20XX-20XX年 第一学期 数据结构 课程设计汇报 题目 宿舍管理查询系统实现 专业 班级 姓名 学号 指导老师 成绩 计算机和信息工程系 20XX年 10 月25 日 目 录 TOC \o "1-1" \h \u 26667 1设计任务...
  • 学生通讯录管理系统设计;2 概要设计;3 详细设计;int main) { int choose; book b; while (choose = b.face) { switch (choose) {case 1: b.find;////查询联系人 break; case 2: b.add_person;////添加联系人 break; ...
  • 数据结构课程设计 宿舍管理系统C++语言编写
  • 数据结构宿舍管理系统课程设计,源代码和报告都有
  • 数据结构课程设计宿舍管理查询系统,实验代码和实验报告
  • 成绩 徐州工程学院 课 程 设 计 报 告 课 程 名 称 数据结构课程设计 专 业 计算机科学与技术 班 级 09 计单 学 生 姓 名 黄 晨 学 号 * 设 计 题 目 宿舍查询管理系统 指 导 教 师 * 设计起止时间 2011 年 6 月 20...
  • 计算机与信息工程系 数据结构课程设计报告学号2014-2015 学年 第一学期数据结构课程设计报告题 目 宿舍管理查询系统的实现 专 业 班 级 姓 名 学 号 指导教师 成 绩 计算机与信息工程系2014 年 10 月 25 日计算机与...
  • 成绩 徐州工程学院 课 程 设 计 报 告 课 程 名 称 数据结构课程设计 专 业 计算机科学与技术 班 级 09计单 学 生 姓 名 黄 晨 学 号 * 设 计 题 目 宿舍查询管理系统 指 导 教 师 * 设计起止时间2011 年 6 月20日...
  • 数据结构课程设计之学生宿舍信息管理系统,宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据...

    一、问题陈述

    宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求。
    任务:

    1. 为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
      • 采用交互工作方式
      • 可按关键字(姓名、学号、房号)进行排序
    2. 查询菜单: (用二分查找实现以下操作)
      • 按姓名查询
      • 按学号查询
      • 按房号查询
    3. 打印任一查询结果(可以连续操作)

    二、概要设计

    2.1 概要简述

    根据系统要求,即本系统具有信息的录入,显示,排序显示、查找,插入、删除、结束程序等功能,先设计出详细的系统流程图,然后将源代码输入程序,进行编译调试即可。
    程序总体分10个项目:输入记录、显示记录、按姓名排序并显示、按房间号排序并显示 、按学号排序并显示 、按姓名查找并显示 、按房间号查找并显示 、按学号查找并显示、插入一条记录按学号排序并显示以及结束程序。

    2.2 线性表存储结构表示

    typedef struct {
    	char name[20];
    	int num;            //学号和房号都为整型
    	int room;
    } stu;
    
    typedef struct {
    	int length; //当前长度
    	stu *elem;  //存储空间基址
    	int listsize;  //当前分配的存储容量
    } linklist;
    

    2.3 详细设计

    2.3.1 系统流程图

    在这里插入图片描述

    2.3.2 三种排序方法及二分查找法
    2.3.2.1 冒泡排序(按姓名排序)
    //按姓名排序(采用冒泡排序)
    void sort1(linklist &L) { 
    	int i, j;
    	stu temp;
    	for (i = 0; i<L.length - 1; i++)
    		for (j = 0; j<L.length-1-i; j++)
    			if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) {
    				temp = L.elem[j];
    				L.elem[j] = L.elem[j+1];
    				L.elem[j+1] = temp;
    			}
    }
    
    2.3.2.2 折半插入排序(按学号排序)
    //按学号排序(采用折半插入排序)
    void sort2(linklist &L) { 
    	int i, j, mid, low, high;
    	stu temp;
    	for (i = 1; i < L.length; i++) {
    		if(L.elem[i].num<L.elem[i-1].num) {
    			temp = L.elem[i];
    			low = 0;
    			high = i-1;
    			while (low <= high) {
    				mid = (low + high) / 2;
    				if (temp.num < L.elem[mid].num)
    					high = mid - 1;
    				else
    					low = mid + 1;
    			}
    			for (j = i - 1; j >= high+1; j--)
    				L.elem[j+1]=L.elem[j];
    			L.elem[high+1]=temp;
    		}
    	}
    }
    
    2.3.2.3 简单选择排序(按房号排序)
    //按房号排序(采用简单选择排序)
    void sort3(linklist &L) { 
    	int i,j,k;
    	stu temp;
    	for(i=0; i<L.length-1; i++) {
    		k=i;
    		for(j=i+1; j<L.length; j++)
    			if(L.elem[j].room<L.elem[k].room)
    				k=j;
    		if(k!=i){
    			temp = L.elem[i];
    			L.elem[i] = L.elem[k];
    			L.elem[k] = temp;
    		}
    	}
    }
    
    2.3.2.4 二分查找法(以按姓名查找为例)
    //按姓名从小到大查找(采用二分查找)
    void search1(linklist &L) { 
    	if (L.length == 0) {
    		printf("已无学生记录!\n");
    		Ret();
    		Menu();
    	} else {
    		int low = 0, high = L.length, mid, flag = 0;
    		printf("\n");
    		printf("按姓名查找-->请输入要查找的姓名:");
    		char a[15], ch;
    		scanf("%s", a);
    		while (low <= high) {
    			mid = (low + high) / 2;
    			if (strcmp(a, L.elem[mid].name) == 0) {
    				flag = 1;
    				break;
    			} else if (strcmp(a, L.elem[mid].name)>0)
    				low = mid + 1;
    			else
    				high = mid - 1;
    		}
    		if (flag == 1) {
    			printf("查找成功-->该学生信息为:\n");
    			printf("姓名       学号    房号\n");
    			printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);
    			if (Select())
    				search1(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		} else {
    			printf("该学生不存在!");
    			if (Select())    search1(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		}
    	}
    }
    

    三、测试与运行

    3.1 系统界面

    在这里插入图片描述

    3.2 新建宿舍名单

    在这里插入图片描述

    3.3 排序(以姓名排序为例)

    在这里插入图片描述

    3.4 查询(以学号查询为例)

    在这里插入图片描述

    3.5 插入学生信息

    在这里插入图片描述 在这里插入图片描述

    3.6 删除学生信息

    在这里插入图片描述 在这里插入图片描述

    四、代码实现

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<windows.h>
    #define N 40 //线性表存储空间的初始分配量
    #define increase 10 //线性表存储空间的分配量增量
    int choice;  //定义全局变量
    typedef struct {
    	char name[20];
    	int num;            //学号和房号都为整型
    	int room;
    } stu;
    stu stud;
    typedef struct {
    	int length; //当前长度
    	stu *elem;  //存储空间基址
    	int listsize;  //当前分配的存储容量
    } linklist;
    
    //线性表初始化
    void Init(linklist &L) { 
    	L.length = 0;
    	L.elem = (stu *)malloc(N * sizeof(stu));
    	L.listsize = N;
    }
    
    //操作菜单
    void Menu() { 
    	printf( "**************************************\n" );
    	printf( "***       欢迎进入宿舍管理系统     ***\n" );
    	printf( "**************************************\n" );
    	printf( "*        1.  新建宿舍名单            *\n" );
    	printf( "*        2.  排序宿舍信息            *\n" );
    	printf( "*        3.  查询宿舍信息            *\n" );
    	printf( "*        4.  插入宿舍信息            *\n" );
    	printf( "*        5.  删除宿舍信息            *\n" );
    	printf( "*        0.  退出系统                *\n" );
    	printf( "**************************************\n" );
    	printf("请输入菜单(0-5):");
    	scanf("%d", &choice);
    	if (choice<0 || choice>5) {
    		system("cls");
    		printf("输入数字不对,请重新!\n");
    		printf("\n");
    		Menu();
    	}
    
    }
    
    //打印学生信息
    void Display(linklist &L) { 
    	int i;
    	printf("姓名       学号    房号\n");
    	for (i = 0; i<L.length; i++)
    		printf("%-10s %-2d %5d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room);
    }
    
    //返回主界面
    void Ret() {    
    	char c;
    	fflush(stdin);
    	printf("\n");
    	printf("请按任意键进入主界面:");
    	scanf("%c", &c);
    	system("cls");
    }
    
    //创建学生信息表
    void Create(linklist &L) { 
    	if (L.length >= L.listsize) { //判断学生的人数是否超过初值,如果超过,则重新分配
    		stu *newbase;
    		newbase = (stu*)realloc(L.elem, (N + increase) * sizeof(stu));
    		L.elem = newbase;
    		L.listsize += increase;
    	}
    	int i = 2;
    	char ch;
    	printf("********开始创建学生信息**********\n");
    	printf("\n");
    	printf("请输入第1个学生的信息\n");
    	printf("请输入姓名:");
    	fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
    	gets(stud.name);    //输入一行字符串(姓名)
    	printf("请输入学号:");
    	scanf("%d", &stud.num);
    	printf("请输入房号:");
    	scanf("%d", &stud.room);
    	ch = getchar();
    	strcpy(L.elem[L.length].name, stud.name);
    	L.elem[L.length].num = stud.num;
    	L.elem[L.length].room = stud.room;
    	L.length++;
    	printf("\n");
    	printf("是否继续输入?<y/n>:");
    	scanf("%c", &ch);
    	printf("\n");
    	while (ch == 'y') {
    		printf("请输入第%d个学生的信息\n", i);
    		printf("请输入姓名:");
    		fflush(stdin);      // 清空输入缓冲区,得到正确的输入数据
    		gets(stud.name);    //输入一行字符串(姓名)
    		printf("请输入学号:");
    		scanf("%d", &stud.num);
    		printf("请输入房号:");
    		scanf("%d", &stud.room);
    		strcpy(L.elem[L.length].name, stud.name);
    		L.elem[L.length].num = stud.num;
    		L.elem[L.length].room = stud.room;
    		i++;
    		L.length=i-1;
    		ch = getchar();
    		printf("\n");
    		printf("是否继续输入?<y/n>:");
    		scanf("%c", &ch);
    		printf("\n");
    	}
    	if (ch == 'n')
    		system("cls");
    }
    
    //按姓名排序(采用冒泡排序)
    void sort1(linklist &L) { 
    	int i, j;
    	stu temp;
    	for (i = 0; i<L.length - 1; i++)
    		for (j = 0; j<L.length-1-i; j++)
    			if (strcmp(L.elem[j].name, L.elem[j+1].name)>0) {
    				temp = L.elem[j];
    				L.elem[j] = L.elem[j+1];
    				L.elem[j+1] = temp;
    			}
    }
    
    //按学号排序(采用折半插入排序)
    void sort2(linklist &L) { 
    	int i, j, mid, low, high;
    	stu temp;
    	for (i = 1; i < L.length; i++) {
    		if(L.elem[i].num<L.elem[i-1].num) {
    			temp = L.elem[i];
    			low = 0;
    			high = i-1;
    			while (low <= high) {
    				mid = (low + high) / 2;
    				if (temp.num < L.elem[mid].num)
    					high = mid - 1;
    				else
    					low = mid + 1;
    			}
    			for (j = i - 1; j >= high+1; j--)
    				L.elem[j+1]=L.elem[j];
    			L.elem[high+1]=temp;
    		}
    	}
    }
    
    //按房号排序(采用简单选择排序)
    void sort3(linklist &L) { 
    	int i,j,k;
    	stu temp;
    	for(i=0; i<L.length-1; i++) {
    		k=i;
    		for(j=i+1; j<L.length; j++)
    			if(L.elem[j].room<L.elem[k].room)
    				k=j;
    		if(k!=i){
    			temp = L.elem[i];
    			L.elem[i] = L.elem[k];
    			L.elem[k] = temp;
    		}
    	}
    }
    //排序函数
    void Sort(linklist &L) { 
    	int c;
    	printf("请输入排序的方式(1:按名字排序,2:按学号排序,3:按房号排序):");
    	scanf("%d", &c);
    	switch (c) {
    		case 1:
    			sort1(L);
    			if (L.length == 0) {
    				printf("已无学生记录!\n");
    				Ret();
    				Menu();
    			} else {
    				printf("按姓名排序:\n");
    				Display(L);
    				Ret();  //调用返回主界面
    				Menu();
    			}
    			break;
    		case 2:
    			sort2(L);
    			if (L.length == 0) {
    				printf("已无学生记录!\n");
    				Ret();
    				Menu();
    			} else {
    				printf("按学号排序:\n");
    				Display(L);
    				Ret();  //调用返回主界面
    				Menu();
    			}
    			break;
    		case 3:
    			sort3(L);
    			if (L.length == 0) {
    				printf("已无学生记录!\n");
    				Ret();
    				Menu();
    			} else {
    				printf("按房号排序:\n");
    				Display(L);
    				Ret();  //调用返回主界面
    				Menu();
    			}
    			break;
    		default:
    			break;
    	}
    }
    
    //选择是否继续查找
    int Select() { 
    	char ch;
    	scanf("%c", &ch);
    	printf("是否继续查找?<y/n>:");
    	fflush(stdin);
    	scanf("%c", &ch);
    	if (ch == 'y') {
    		system("cls");
    		return 1;
    	} else
    		return 0;
    }
    
    //按姓名从小到大查找(采用二分查找)
    void search1(linklist &L) { 
    	if (L.length == 0) {
    		printf("已无学生记录!\n");
    		Ret();
    		Menu();
    	} else {
    		int low = 0, high = L.length, mid, flag = 0;
    		printf("\n");
    		printf("按姓名查找-->请输入要查找的姓名:");
    		char a[15], ch;
    		scanf("%s", a);
    		while (low <= high) {
    			mid = (low + high) / 2;
    			if (strcmp(a, L.elem[mid].name) == 0) {
    				flag = 1;
    				break;
    			} else if (strcmp(a, L.elem[mid].name)>0)
    				low = mid + 1;
    			else
    				high = mid - 1;
    		}
    		if (flag == 1) {
    			printf("查找成功-->该学生信息为:\n");
    			printf("姓名       学号    房号\n");
    			printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);
    			if (Select())
    				search1(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		} else {
    			printf("该学生不存在!");
    			if (Select())    search1(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		}
    	}
    }
    
    //按学号从小到大查找(采用二分查找)
    void search2(linklist &L) { 
    	if (L.length == 0) {
    		printf("\n");
    		printf("已无学生记录!\n");
    		Ret();
    		Menu();
    	} else {
    		int low = 0, high = L.length, mid, flag = 0;
    		int n;
    		char ch;
    		printf("\n");
    		printf("按学号查找-->请输入要查找的学号:");
    		scanf("%d", &n);
    		while (low <= high) {
    			mid = (low + high) / 2;
    			if (n == L.elem[mid].num) {
    				flag = 1;
    				break;
    			} else if (n>L.elem[mid].num)
    				low = mid + 1;
    			else
    				high = mid - 1;
    		}
    		if (flag == 1) {
    			printf("查找成功----->该学生信息为:\n");
    			printf("姓名       学号    房号\n");
    			printf("%-1s0 %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);
    			if (Select())
    				search2(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		} else {
    			printf("该学生不存在!");
    			if (Select())
    				search2(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		}
    	}
    }
    
    //按房号从小到大查找(采用二分查找)
    void search3(linklist &L) { 
    	if (L.length == 0) { //此函数功能为:返回主界面
    		printf("\n");
    		printf("已无学生记录!\n");
    		Ret();
    		Menu();
    	} else {
    		int low = 0, high = L.length, mid, flag = 0;//flag作为标志符,为1则表示查找成功,否则没有所要查找的学生
    		int m;
    		char ch;
    		printf("\n");
    		printf("按房号查找-->请输入要查找的房号:");
    		scanf("%d", &m);
    		while (low <= high) {
    			mid = (low + high) / 2;
    			if (m == L.elem[mid].room) {
    				flag = 1;
    				break;
    			} else if (m>L.elem[mid].room)
    				low = mid + 1;
    			else
    				high = mid - 1;
    		}
    		if (flag == 1) {
    			printf("查找成功-->该学生信息为:\n");
    			printf("姓名       学号    房号\n");
    			printf("%-10s %-2d %-5d\n", L.elem[mid].name, L.elem[mid].num, L.elem[mid].room);
    			if (Select())    //调用判断函数1
    				search3(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		} else {
    			printf("该学生不存在!");
    			if (Select())  //调用判断函数2
    				search3(L);
    			else {
    				system("cls");
    				Menu();
    			}
    		}
    	}
    }
    
    //查找函数
    void Search(linklist &L) { 
    	int c;
    	printf("请输入查找的方式(1:按名字查找,2:按学号查找,3:按房号查找):");
    	scanf("%d", &c);
    	switch (c) {
    		case 1:
    			sort1(L);
    			search1(L);
    			break;//先进行二分查找排序
    		case 2:
    			sort2(L);
    			search2(L);
    			break;
    		case 3:
    			sort3(L);
    			search3(L);
    			break;
    		default:
    			break;
    	}
    }
    
    //按学号从小到大插入该学生
    void Insert(linklist &L) { 
    	int i, j, k;
    	char ch;
    	printf("\n");
    	printf("插入的学生信息为:\n");
    	printf("姓名:");
    	fflush(stdin);// 清空输入缓冲区,得到正确的输入数据
    	gets(stud.name);
    	printf("学号:");
    	scanf("%d", &stud.num);
    	printf("房号:");
    	scanf("%d", &stud.room);
    	if (L.length == 0) {
    		strcpy(L.elem[L.length].name, stud.name);
    		L.elem[L.length].num = stud.num;
    		L.elem[L.length].room = stud.room;
    	}
    	for (i = 0; i<L.length; i++) {
    		if (stud.num<L.elem[i].num) {
    			k = i;
    			for (j = L.length; j>k; j--)
    				L.elem[j] = L.elem[j - 1];
    			strcpy(L.elem[k].name, stud.name);
    			L.elem[k].num = stud.num;
    			L.elem[k].room = stud.room;
    			break;
    		} else {
    			strcpy(L.elem[L.length].name, stud.name);
    			L.elem[L.length].num = stud.num;
    			L.elem[L.length].room = stud.room;
    		}
    	}
    	L.length++;
    	fflush(stdin);
    	printf("\n");
    	printf("是否继续插入?<y/n>:");
    	scanf("%c", &ch);
    	if (ch == 'y') Insert(L);
    	else system("cls");
    }
    
    //按学号删除该学生
    void Delete(linklist &L) { 
    	int i, j, k = -1;
    	char ch;
    	printf("\n");
    	printf("\n");
    	printf("请输入要删除学生的学号:");
    	scanf("%d", &stud.num);
    	for (i = 0; i<L.length; i++) {
    		if (stud.num == L.elem[i].num) {
    			printf("该学生的信息为:\n");
    			printf("姓名:%s \n学号:%d \n房号:%d\n", L.elem[i].name, L.elem[i].num, L.elem[i].room);
    			k = i;
    			for (j = k; j<L.length - 1; j++)
    				L.elem[j] = L.elem[j + 1];
    			printf("已成功删除\n");
    
    			break;
    		}
    	}
    	if (i >= L.length) printf("该学生不存在\n");
    	if (k >= 0)L.length--;
    	fflush(stdin);
    	printf("\n");
    	printf("是否继续删除操作?<y/n>:");
    	scanf("%c", &ch);
    	system("cls");
    	if (ch == 'y') Delete(L);
    	else system("cls");
    }
    
    //主函数
    int main() {  
    	linklist L;    //定义线性表 L
    	Init(L);
    	Menu();        //调用主菜单函数
    	while (choice != 0) {
    		system("cls");
    		switch (choice) {
    			case 1:
    				Create(L);    //调用线性表创建函数
    				Menu();
    				break;
    			case 2:
    				Sort(L);
    				break;//调用排序函数
    			case 3:
    				Search(L);
    				break;//调用查找函数进行(二分)查找
    			case 4:
    				sort2(L);      //调用学号排序函数
    				Insert(L);        //按学号序列插入
    				system("cls");
    				printf("插入后的学生信息:\n");
    				Display(L);
    				Ret();
    				Menu();
    				break;
    			case 5:
    				Delete(L);    //调用删除函数
    				if (L.length == 0) {
    					printf("\n");
    					printf("学生记录已被删除完!\n");
    					Ret();
    					Menu();
    				} else {
    					printf("显示删除后的学生信息:\n");
    					Display(L);
    					Ret();
    					Menu();
    				}
    				break;
    		}
    	}
    }
    
    
    展开全文
  • 这是个好东西,如果你需要可以好好看看,数据结构是很重要的课程,课程设计使每个大学生必须的,所以这个很有用
  • 数据结构课程设计-宿舍管理系统

    万次阅读 多人点赞 2015-12-27 19:36:52
    为期三天的课程设计到此就告一段落,一个宿舍系统的也已经初具雏形。以下是我的代码及演示。 /***************************************** *版权所有(c)2015,Yao Zhaoyan; *文件名称:宿舍系统 *文件标识:无 *内容...
            为期三天的课程设计到此就告一段落,一个宿舍系统的也已经初具雏形。以下是我的代码及演示。
    /*****************************************
    *版权所有(c)2015,Yao Zhaoyan;
    *文件名称:宿舍系统
    *文件标识:无
    *内容摘要:该代码用于宿舍管理
    *其他内容:无
    *当前版本:v1.0
    *作者:姚昭彦
    *完成日期:20151225
    *****************************************/
    头文件Header.h:
    #ifndef LIST_H_INCLUDED//防止重复定义出错
    #define LIST_H_INCLUDED
    
    #define MaxSize 700//宏定义变量
    #define MaxLen 12                //单词的最大长度
    #define Radix  10   
    typedef char String[MaxLen+1];  //定义String为字符数组类型
    typedef struct member//定义结构体
    {
    	String stu_num;//学号
    	char sushe[5];//宿舍号
    	char name[20];//名字长20字符
    	struct member *next;
    
    }Mem;//定义700个学生,数组序号即为宿舍号
    
    //MSD
    void Distribute(Mem *R,Mem *head[],Mem *tail[],int j,int n);//分配
    void Collect(Mem *R,Mem *head[]);//收集
    void RadixSort(Mem *R,int top);//基数排序
    //FIND
    int BinSearch1(Mem R[],int low,int high,String k);
    
    void hello();//欢迎界面
    void getinformation(Mem *p);//录入学生信息
    void showinformation(Mem *p);//打印学生信息
    void disinformation(Mem *p);//消除学生信息函数
    void print(Mem *p);
    void over();//退出程序
    void savedate();
    void readdate();
    void memb();
    
    #endif

    各主要功能函数other.cpp:
    #include"Header.h"
    #include <stdio.h>//清屏头文件
    #include<fstream>//读写文件表头
    #include<iostream>//C++头文件
    #include<iomanip>//输出格式的头文件
    using namespace std;
    
    Mem M[MaxSize];
    int top;
    int num;//作为用户做出选择时,输入的变量
    /***************************************
    *功能描述:输出程序选择界面
    *输入参数:num,
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void hello()//欢迎界面
    {
    	system("cls");//清屏
    	cout<<"*******************************"<<endl;
    	cout<<"**  ╭╮       ╭╮  ***"<<endl;  
    	cout<<"** ││**号楼管理系统││  ***"<<endl;  
    	cout<<"**╭┴┴———————┴┴╮***"<<endl;
    	cout<<"**│ ●       ● │***"<<endl;
    	cout<<"**│○  ╰┬┬┬╯  ○│***"<<endl;
    	cout<<"**│    ╰—╯    │***"<<endl;
    	cout<<"**╰——┬O———O┬——╯***"<<endl;
    	cout<<"**   ╭╮    ╭╮     ***"<<endl;
    	cout<<"**   ╰┴————┴╯     ***"<<endl;
    	cout<<"******* <1>录入学生信息 *******"<<endl;
    	cout<<"******* <2>查询宿舍信息 *******"<<endl;
    	cout<<"******* <3>消除学生信息 *******"<<endl;
    	cout<<"******* <4>所有学生信息 *******"<<endl;
    	cout<<"******* <0>退出管理系统 *******"<<endl;
    	cout<<"*******************************"<<endl;
    	cout<<"Please Enter Your Selection:";
    	
    	cin>>num;//输入选项
    	switch(num)
    	{
    		case 1:getinformation(M);break;//进入录入信息函数
    		case 2:showinformation(M);break;//进入打印信息函数
    		case 3:disinformation(M);break;//进入消除信息界面
    		case 4:print(M);break;
    		case 0:over();break;//结束程序
    	}	
    }
    /***************************************
    *功能描述:录入学生信息
    *输入参数:M(学生信息通过指针p输入)
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void getinformation(Mem *p)//录入学生信息函数
    {
    	system("cls");//清屏
    	String k;
    	int j;
    	for(int i=0;i<MaxSize;i++)//持续循环输入
    	{	
    		cout<<"请输入宿舍号"<<endl;
    		cin>>(p+top)->sushe;
    		cout<<"请输入名字:"<<endl;
    		cin>>(p+top)->name;
    		cout<<"请输入学号:"<<endl;
    		cin>>(p+top)->stu_num;
    		strcpy(k,(p+top)->stu_num);
    		j=BinSearch1(p,0,top-1,k);
    		if(j==0)
    		{
    			top++;//人数加1
    			cout<<"========================================================"<<endl;
    			cout<<"		1.next"<<"		"<<"2.back"<<endl;//next继续录入下一个,back返回主界面
    			cout<<"========================================================"<<endl;
    			cin>>num;//输入选择(1 or 2)
    			if(num==2) break;//num=1 不作处理,for循环继续。num=2中断循环。
    		}
    		else
    		{
    			cout<<"========================================================"<<endl;
    			cout<<"               该学号的学生已存在!"<<endl;
    			cout<<"========================================================"<<endl;
    			break;
    		}
    	}
    	RadixSort(p,top);//基数排序
    	savedate();//——————————————————————保存
    	cout<<"按任意键返回"<<endl;
    	system("pause");
    	hello();//返回主界面
    }
    /***************************************
    *功能描述:按宿舍打印信息
    *输入参数:room(宿舍号)
    *输出参数:M(学生信息通过指针p输出)
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void showinformation(Mem *p)//按宿舍打印信息
    {
    	char room[5];//用户输入查询的宿舍
    	int j,k=1;
    	system("cls");//清屏
    	cout<<"输入宿舍号"<<endl;
    	cin>>room;
    	system("cls");//清屏
    	cout<<"====================================================="<<endl;
    	cout<<"===========您现在查看的是"<<room<<"宿舍的学生信息==========="<<endl;
    	cout<<"====================================================="<<endl;
    	cout<<"========================================================"<<endl;
    	cout<<setiosflags(ios::right)<<setw(15)<<"姓名"<<setw(15)<<"学号"<<setw(15)<<"值日"<<endl;
    	cout<<"========================================================"<<endl;
    
    	for(int i=0;i<top;i++)//循环查询每个结构体中的宿舍号
    	{
    		j=strcmp(room,(p+i)->sushe);//数组比较函数,两数组相等时返回0
    		if(j==0&&k<7)//如果返回0,输出这个人的信息,最多输出6个人
    		{
    			
    			cout<<setiosflags(ios::right)<<setw(15)<<(p+i)->name<<setw(15)<<(p+i)->stu_num<<setw(15)<<"周"<<k<<endl;
    			cout<<"========================================================"<<endl;
    			k++;
    		}
    	}
    
    	cout<<"按任意键返回"<<endl;
    	system("pause");
    	hello();//调用主界面
    }
    /******************************************************
    *功能描述:按宿舍打印信息
    *输入参数:studentnum(用户输入要查询的学生的学号),num
    *输出参数:M(学生信息通过指针p输出)
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    *******************************************************/
    void disinformation(Mem *p)//消除学生信息函数
    {
    	system("cls");//清屏
    	String studentnum;
    	int j,k;
    	cout<<"请输入学号:"<<endl;
    	cin>>studentnum;//用户输入要查询的学生的学号
    	j=BinSearch1(p,0,top-1,studentnum);
    
    	if(j==0)//如果没有找到此学号的学生,输出错误信息
    		{
    		cout<<"没有此人信息!"<<endl;
    		cout<<"按任意键返回"<<endl;
    		system("pause");
    		}
    	else
    		{
    			cout<<"========================================================"<<endl;
    			cout<<setiosflags(ios::right)<<setw(15)//输出这个学生的信息加以确认
    				<<(p+j)->sushe<<"宿舍"<<setw(15)
    				<<(p+j)->name<<setw(15)
    				<<(p+j)->stu_num<<setw(15)<<endl;
    			cout<<"========================================================"<<endl;
    			cout<<"你确定要消除信息吗?"<<endl;
    				
    			cout<<"========================================================"<<endl;
    			cout<<"		1.next"<<"		"<<"2.back"<<endl;
    			cout<<"========================================================"<<endl;
    			cin>>num;
    			if(num==1) //输入1继续消除
    			{
    				for(k=j+1;k<top;k++)//循环把之后每人的信息前移一个
    				{
    					strcpy((p+k-1)->sushe,(p+k)->sushe);
    					strcpy((p+k-1)->name,(p+k)->name);
    					strcpy((p+k-1)->stu_num,(p+k)->stu_num);
    				}
    				top--;//总人数减少一人
    				system("cls");//清屏
    
    				savedate();//——————————————————————保存
    				cout<<"信息消除成功!"<<endl;//输出成功信息
    				cout<<"按任意键返回"<<endl;
    				system("pause");
    			}
    		}
    	hello();//调用主界面
    }
    
    /******************************************************
    *功能描述:结束程序
    *输入参数:
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    *******************************************************/
    void over()//结束程序函数
    {
    	return;
    }
    /******************************************************
    *功能描述:打印所有学生信息
    *输入参数:
    *输出参数:M(学生信息通过指针p输出)
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    *******************************************************/
    void print(Mem *p)//打印所有学生信息
    {
    
    	system("cls");//清屏
    	for(int i=0;i<top;i++)
    	{
    		cout<<setiosflags(ios::right)<<setw(15)
    			<<(p+i)->stu_num<<setw(15)
    			<<(p+i)->sushe<<"宿舍"<<setw(15)
    			<<(p+i)->name<<endl;
    	}
    	cout<<"按任意键返回"<<endl;
    	system("pause");
    	hello();//调用主界面
    }
    
    /******************************************************
    *功能描述:打印所有学生信息
    *输入参数:
    *输出参数:top(现存录入学生信息条数),M(学生信息通过指针p输出)
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    *******************************************************/
    void savedate()//——————————————————————保存
    {
    	ofstream outfile("Acount.dat",ios::binary);
    	if(!outfile)
    	{
    		cerr<<"open error!"<<endl;
    		abort();
    	}
    	outfile.write((char*)&top,sizeof(top));
    	for(int i=0;i<=top;i++)
    		outfile.write((char*)&M[i],sizeof(M[i]));
    	outfile.close();
    }
    /******************************************************
    *功能描述:打印所有学生信息
    *输入参数:【通过文件写入】top(现存录入学生信息条数),M(学生信息通过指针p输出)
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    *******************************************************/
    void readdate()//——————————————————————读取
    {
    	top=0;
    	ifstream infile("Acount.dat",ios::binary);
    	if(!infile)
    	{
    		cerr<<"open error!"<<endl;
    		abort();
    	}
    	infile.read((char*)&top,sizeof(top));
    	for(int i=0;i<top;i++)		
    		infile.read((char*)&M[i],sizeof(M[i]));
    	infile.close();
    }

    基数排序MSD.cpp:
    #include"Header.h"
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    
    /***************************************
    *功能描述:基数排序-分配
    *输入参数:
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void Distribute(Mem R[],Mem *head[],Mem *tail[],int j,int top)
    //按关键字的第j个分量进行分配,进入此过程时各队列一定为空
    {
        int i,k;
        Mem *p;
        for (i=0; i<top; i++)         //依次扫描R[i],将其入队
        {           
            k=R[i].stu_num[j]-48;//从最低位开始扫描,0时放入0号队列中,1时放入1号队列中,…
            p=(Mem *)malloc(sizeof(Mem)); //创建新结点
    
            strcpy(p->stu_num,R[i].stu_num);//赋值,数据全部跟着关键字“学号”转移
    		strcpy(p->sushe,R[i].sushe);
    		strcpy(p->name,R[i].name);
            p->next=NULL;//指针指向空
    		//赋head,tail
            if (head[k]==NULL)//如果这个队列还没有数的话
            {
                head[k]=p;
                tail[k]=p;
            }
            else//如果已有其他数
            {
                tail[k]->next=p;
                tail[k]=p;
            }
        }
    }
    /***************************************
    *功能描述:基数排序-收集
    *输入参数:
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void Collect(Mem R[],Mem *head[])
    //依次将各非空队列中的记录收集起来
    {
        int k=0,i;
        Mem *p;
        for (i=0; i<Radix; i++)	//i取1-10
    	{
            for (p=head[i]; p!=NULL; p=p->next)//p作为循环变量,循环一次指向下一个数据
    		{
                strcpy(R[k].stu_num,p->stu_num);//把经过排序的数据覆盖到原来的数组
    			strcpy(R[k].sushe,p->sushe);
    			strcpy(R[k].name,p->name);
    			k++;
    		}
    	}
    }
    /***************************************
    *功能描述:基数排序
    *输入参数:
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    void RadixSort(Mem R[],int top)    //进行基数排序
    {
        Mem *head[Radix],*tail[Radix]; //定义Radix个队列
        int i,j;
        for (i=MaxLen-1; i>=0; i--)             //从低位到高位做d趟箱排序 (最后一位,i>0,从最后一位往前数)
        {
            for (j=0; j<Radix; j++)				//Radix基数,十进制为10		
    		{head[j]=tail[j]=NULL;}  //队列置空
    
            Distribute(R,head,tail,i,top);        //分配
            Collect(R,head);                    //收集
        }
    }
    

    折半查找FIND.cpp
    #include"Header.h"
    #include<iostream>//C++头文件
    using namespace std;
    /***************************************
    *功能描述:折半查找
    *输入参数:
    *输出参数:
    *返回值:
    *其他说明:消息字段之间用分号(;)分隔
    ***************************************/
    int BinSearch1(Mem R[],int low,int high,String k)//low为0,high为top-1
    {
        int mid;
        if (low<=high)      //查找区间存在一个及以上元素
        {
            mid=(low+high)/2;  //求中间位置
            if (strcmp(R[mid].stu_num,k)==0) //查找成功返回其逻辑序号mid+1
                return mid;
            if (strcmp(R[mid].stu_num,k)>0)  //在R[low..mid-1]中递归查找
                BinSearch1(R,low,mid-1,k);
            else              //在R[mid+1..high]中递归查找
                BinSearch1(R,mid+1,high,k);
        }
        else
            return 0;
    }

    主函数main.cpp:
    #include"Header.h"
    #include <stdio.h>//清屏头文件
    #include<iostream>//C++头文件
    #include<string>//字符串头文件
    using namespace std;
    
    int main()
    {	
    	string ID,key;//进入程序所需账号密码
    	cout<<"pleace enter your username:";//管理员名	
    	for(int i=0;i<3;i++)	
    	{
    		cin>>ID;
    		if(ID!="admin") 
    		{
    			cout<<"ID can't be found!"<<endl;
    			cout<<"pleace enter your username:";
    			if(i==2)exit(0);//三次错误跳出
    		}
    		else break;
    	}
    	
    	cout<<"pleace enter your password:";//管理员密码	
    	for(i=0;i<3;i++)
    	{
    		cin>>key;
    		if(key!="admin") 
    		{
    			cout<<"key is wrong!"<<endl;
    			cout<<"pleace enter your password:";
    			if(i==2)exit(0);//三次错误跳出
    		}
    		else break;
    	}
    
    	readdate();//——————————————————————读取
    	hello();//欢迎界面		
    
    	cout<<"按任意键返回"<<endl;
    	system("pause");
    	
    	return 0;
    }

    运行结果:
    1.验证管理员用户的账号和密码,三次不对跳出程序。

    2.登陆后的主选择界面

    3.选择1,录入学生信息,完成后选择1.next继续输入下一个,选择2.back返回选择界面

    4.如果录入的学号已经存在,则出现提示信息并返回选择界面。

    5.选择2查询宿舍信息,输入要查询的宿舍号,则出现宿舍全员的信息。

    6.选择3消除学生信息,输入要消除学生的学号,若没有此人则出现提示并返回选择界面,若查找到则弹出学生信息加以确认,删除后返回选择界面。

    7.选择4打印所有学生信息,则出现按学号排序的所有学生信息



    展开全文
  • 学号 2014-2015学年 第一学期 数据结构 课程设计报告 题目: 宿舍管理查询系统的实现 专业 班级 姓名 学号 指导教师: 成绩 计算机与信息工程系 2014年10月25 日 目录 1设计任务 错误!未定义书签 TOC \o "1-5" \h \z \...
  • 计算机与信息工程系 数据结构课程设计报告 学号 2014-2015 学年 第一学期 数据结构 课程设计报告 题 目 宿舍管理查询系统的实现 专 业 班 级 姓 名 学 号 指导教师 成 绩 计算机与信息工程系 2014 年 10 月 25 日 1 ...
  • 学生宿舍管理系统的某些信息应当能够以报表形式打印出来。基本上应该能够实现学生基本信息的报表打印、某宿舍具体住宿情况的报表打印、某栋宿舍楼的所有员工信息打印、所有学生各年度宿舍交费情况打印、学生物品出入...
  • 学号 2014-2015学年 第一学期 数据结构 课程设计报告 题目 宿舍管理查询系统的实现 专业 班级 姓名 Word Word资料 指导教师: 计算机与信息工程系 2014年10月25 日 1设计任务 错误未定义书签 TOC \o "1-5" \h \z \o ...
  • (1)为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: A.采用交互工作方式 B可按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) (2)查询菜单: (用二分查找实现以下操作) A.按姓名...
  • 数据机构 课程设计 C++ 二分查找 直接插入排序 折半插入排序 快速排序
  • 学生宿舍管理系统VC6.0,数据结构课程设计
  • 指导教师 时 间 一 课程设计目的 设计一个 ubuntu 下的学生宿舍管理系统 掌握用 C 语言定义单链表结构并实现其创建插入删除等基本操作 二课程设计容 用 C 语言编写学生宿舍管理系统 要求如下 创建链表录入数据 数据...
  • 一题目名称 宿舍管理查询软件 二设计目的 进一步掌握和利用C语言进行课程设计的能力理解和运用结构化程设计的思想和方法熟练掌握条件语句循环数组函数操作初步掌握开发一个小型实用系统的基本方法学会高度一个较长...
  • 数据结构课程设计

    2017-01-22 16:14:10
    数据结构课程设计,包含求字符串之间距离,后缀表达式计算,两个小游戏,二叉树结点染色问题,打印机任务队列,约瑟夫双向生死游戏,求解布尔表达式,谣言传播问题,分形问题,网络布线,数独游戏,中国邮路问题,...

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

宿舍管理系统数据结构课程设计

数据结构 订阅