C语言实现学生宿舍信息管理系统课程设计
本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下
一、问题陈述
宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的C语言和数据结构课程中有关链表的内容,为宿舍管理人员编写宿舍管理查询软件,就可以轻松满足实现上述需求。
任务:
【C语言实现学生宿舍信息管理系统课程设计】1、为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
1)、采用交互工作方式
2)、可按关键字(姓名、学号、房号)进行排序
2、查询菜单: (用二分查找实现以下操作)
1)、按姓名查询
2)、按学号查询
3)、按房号查询
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; i0) {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= 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
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; elsehigh = 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#include#include#include#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.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("是否继续输入? :"); 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("是否继续输入? :"); scanf("%c", &ch); printf("\n"); }if (ch == 'n')system("cls"); }//按姓名排序(采用冒泡排序)void sort1(linklist &L) { int i, j; stu temp; for (i = 0; i 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 = 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 :"); fflush(stdin); scanf("%c", &ch); if (ch == 'y') {system("cls"); return 1; } elsereturn 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; elsehigh = 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; elsehigh = 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; elsehigh = 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())//调用判断函数1search3(L); else {system("cls"); Menu(); }} else {printf("该学生不存在!"); if (Select())//调用判断函数2search3(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 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("是否继续插入? :"); 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) printf("该学生不存在\n"); if (k >= 0)L.length--; fflush(stdin); printf("\n"); printf("是否继续删除操作? :"); scanf("%c", &ch); system("cls"); if (ch == 'y') Delete(L); else system("cls"); }//主函数int main() {linklist L; //定义线性表 LInit(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; }}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- Sublime|Sublime Text3安装Go语言相关插件gosublime时搜不到gosublime的解决方法
- C++实现LeetCode(84.直方图中最大的矩形)
- C++实现寝室卫生管理系统
- 为什么说想搞懂云原生,必须会 Go 语言()
- 使用APICloud平台实现朋友圈功能
- 前端基础知识|【前端基础知识】精灵图/雪碧图的实现以及优缺点
- 原生JS实现拼图游戏
- Java毕业设计实战之健身器材商城系统的实现
- C语言陷阱与缺陷之数组越界访问详解
- C++实现简单学生管理系统