赞
踩
C++数据结构课程设计,学生宿舍管理系统
使用了顺序表数据结构
资源地址:源码+报告
采用结构体数组作为顺序表
typedef struct Stu { char stuNo[20]; char stuName[20]; char dormNo[10]; //宿舍号 char stuAge[3]; char stuSex[3]; char stuNative[20]; char stuMajor[20];//专业 }Stu; void Swap(Stu &a, Stu &b, int flag) { /** * 此函数实现两个结构体进行交换 用于排序和插入操作中 * flag 有三个值 1 2 3 * flag == 1 时进行学号比较并交换 * flag == 2 时进行姓名比较并交换 * flag == 3 时进行宿舍号比较并交换 */ Stu temp; //结构体交换临时变量 if (flag == 1) { if (strcmp(a.stuNo, b.stuNo) > 0) { temp = a; a = b; b = temp; } } else if (flag == 2) { if (strcmp(a.stuName, b.stuName) > 0) { temp = a; a = b; b = temp; } } else { if (strcmp(a.dormNo, b.dormNo) > 0) { temp = a; a = b; b = temp; } else if(strcmp(a.dormNo, b.dormNo)==0 && strcmp(a.stuNo, b.stuNo)>0) { temp = a; a = b; b = temp; } } } void InsertStu(Stu stu[], int stuNum, Stu &stuTemp, int flag) { /** * 功能:接受要插入学生信息 并按指定顺序插入 * st[] 成员结构体数组 * stuNum 学生人数 * stuTemp 要插入学生结构体 * flag 按何种顺序插入 * flag == 1 学号 * flag == 2 姓名 * flag == 3 宿舍号 * 说明:此函数可需调用 Swap(Stu &a, Stu &b, int flag) 函数 */ stu[stuNum] = stuTemp; for (int i=stuNum; i>0; i--) { Swap(stu[i-1], stu[i], flag); } } /****************************************************/ void OutStuInfo(Stu stu[], int m) { /** * 功能:输出学生信息 并进行简单排版 * stu[] 结构体数组 * m 要输出学生结构体下标 */ //printf("***********************************************************************\n"); //printf("* 学号 姓名 性别 年龄 籍贯 专业 宿舍号 *\n"); printf("* *\n"); printf("* %-12s", stu[m].stuNo); printf("%-10s", stu[m].stuName); printf("%-5s", stu[m].stuSex); printf("%-5s", stu[m].stuAge); printf("%-12s", stu[m].stuNative); printf("%-15s", stu[m].stuMajor); printf("%-8s", stu[m].dormNo); printf("*\n"); } void OutDormInfo(Stu stu[], int m) { /** * 输出宿舍成员信息 接收一成员 stu[m] * 按学号顺序输出该宿舍所有成员信息 * 并进行简单排版 */ int min = m, max = m; while (strcmp(stu[min-1].dormNo, stu[min].dormNo) == 0) min--; while (strcmp(stu[max+1].dormNo, stu[max].dormNo) == 0) max++; printf("\n该宿舍人数为 %d\n", max-min+1); printf("***********************************************************************\n"); printf("* 学号 姓名 性别 年龄 籍贯 专业 宿舍号 *\n"); for (int i=min; i<=max; i++) { OutStuInfo(stu, i); } printf("***********************************************************************\n"); } /*****************************************************/ bool JudgeMarry(char str1[], char str2[]) { /** * 功能实现模糊匹配判断 * 假设str2 匹配 str1 * 规定: str2 长度大于等于 str1 * str2 顺序包含 str1中字符 * 即为匹配成功 * 如:str1 = "abcde" str2 == "ace" / "abd" 等均为成功 */ int s1 = strlen(str1), s2 = strlen(str2); if (s1 < s2) return false; int i=0, j=0; while (j<s2 && i<s1) { if (str1[i] == str2[j]) { i++; j++; } else { i++; } } if (j == s2) return true; else return false; } void DimSearch(Stu stu[], int stuNum, char s[], int flag) { /** * 功能:模糊查找 * 接受一个字符串按照指定的flag 进行模糊查找 * flag 取 1 2 * flag == 1 学号 * flag == 2 姓名 */ bool temp = true; if (flag == 1) { for (int i=0; i<stuNum; i++) { if (JudgeMarry(stu[i].stuNo, s)) { OutStuInfo(stu, i); temp = false; } } } else { for (int i=0; i<stuNum; i++) { if (JudgeMarry(stu[i].stuName, s)) { OutStuInfo(stu, i); temp = false; } } return; } if (temp) printf("\n!!! 没有匹配结果\n"); } /*****************************************************/ void BublleSort(Stu stu[], int stuNum, int flag) { /** * 功能:为冒泡排序函数 用于结构体排序 * 接收三个参数 * stu[] 结构体数组 stuNum学生人数 flag 按哪种方式排序 * flag == 1 按学号排序 * flag == 2 按姓名排序 * flag == 3 按宿舍号排序 */ for (int i=0; i<stuNum; i++) { for (int j=1; j<stuNum; j++) { Swap(stu[j-1], stu[j], flag); } } switch (flag) { case 1: printf("\n已完成按*学号*的排序 可输入 4 进行展示\n"); break; case 2: printf("\n已完成按*姓名*的排序 可输入 4 进行展示\n"); break; case 3: printf("\n已完成按*宿舍号*的排序 可输入 4 进行展示\n"); break; } } void BinarySearch(Stu stu[], int stuNum, char s[], int flag) { /** * 功能:接收4个参数 进行二分查找 并输出学生或宿舍信息 * stu[] 成员结构体数组 stuNum 学生人数 s[] 需要查找的字符串 * flag 接受到的字符串为何种形式 * flag == 1 按学生学号查找 * flag == 2 按姓名查找 * flag = =3 按宿舍号查找 */ if (flag == 1) { int low = 0, high = stuNum-1, mid; while (low <= high) { mid = (low + high) / 2; if (strcmp(stu[mid].stuNo, s) > 0) high = mid-1; else if (strcmp(stu[mid].stuNo, s) < 0) low = mid+1; else { OutStuInfo(stu, mid); return; } } } else if (flag == 2) { int low = 0, high = stuNum-1, mid; while (low <= high) { mid = (low + high) / 2; if (strcmp(stu[mid].stuName, s) > 0) high = mid-1; else if (strcmp(stu[mid].stuName, s) < 0) low = mid+1; else { OutStuInfo(stu, mid); return; //必须得有 标志着二分查找的成功 退出函数 } } } else { int low = 0, high = stuNum-1, mid; while (low <= high) { mid = (low + high) / 2; if (strcmp(stu[mid].dormNo, s) > 0) high = mid-1; else if (strcmp(stu[mid].dormNo, s) < 0) low = mid+1; else { OutDormInfo(stu, mid); return; } } } printf("\n查无此人 请检查您的输入是否正确\n"); }
C++学生宿舍管理系统,数据结构课程设计,控制台应用,实现了对学生宿舍相关信息的管理,功能基本完善。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。