为您推荐:
精华内容
最热下载
问答
  • 5星
    73.72MB weixin_40228600 2021-05-23 13:40:54
  • 5星
    221KB allensyj 2011-09-18 23:51:47
  • 11KB qq_44487263 2020-06-21 10:21:30
  • 四、功能模块说明输入学生宿舍信息模块:完成宿舍信息的录入,可以选择从平台手动输入,也可以选择从指定文件中读取。...浏览学生宿舍信息模块,完成对已经输入的信息的打印浏览,如果没有向系统输入数据,...

    8abb8f0d8abfba9ee6e96f1e678c9790.png

    四、功能模块说明

    输入学生宿舍信息模块:完成宿舍信息的录入,可以选择从平台手动输入,也可以选择从指定文件中读取。

    保存学生宿舍信息模块,完成宿舍信息的保存。

    排序学生宿舍信息模块,完成按关键字排序的功能,可以选择按宿舍号、学号或姓名进行排序。

    查询学生宿舍信息模块,完成按关键字查询的功能,可以选择按宿舍号、学号或姓名进行查询。

    浏览学生宿舍信息模块,完成对已经输入的信息的打印浏览,如果没有向系统输入数据,将提醒无文件数据存在,请进行输入。

    最后退出系统。

    五、实验过程

    #include#include#include#include#includeusing namespace std;

    #define Max 100

    int total;

    struct edg

    //构造结构体,创建学生信息的结构体数组,其中的信息包含名字,宿舍房号以及学号 。

    {

    string name;

    int number;

    int domenumber;

    }student[Max];

    edg s[Max];

    void menu() //主菜单的函数包含3个功能(新建,排序,查询,打印)

    {

    cout<>total;

    if(ofs)

    {

    for(i=1;i<=total;i++) //为每个同学输入信息

    {

    cout<>a;

    student[i].name=a;

    ofs<>b;

    student[i].number=b;

    ofs<>c;

    student[i].domenumber=c;

    ofs

    return -1;

    int mid=(left+right)/2;

    if(student[mid].number==key) //刚好要查找的对象key在mid这个位置,查找成功

    return mid;

    else if(student[mid].number>choice;

    break;

    }

    if(choice[0]=='1') //进行以学号为关键字的排序

    {

    for(i=1;i<=total;i++) //用冒泡排序法进行排序

    for(j=1;j=student[j+1].number)

    {

    edg temp;

    temp=student[j];

    student[j]=student[j+1];

    student[j+1]=temp;

    }

    cout<=student[j+1].domenumber)

    {

    edg temp;

    temp=student[j];

    student[j]=student[j+1];

    student[j+1]=temp;

    }

    cout<=student[j+1].name)

    {

    edg temp;

    temp=student[j];

    student[j]=student[j+1];

    student[j+1]=temp;

    }

    cout<>choice;

    break;

    }

    if(choice[0]=='1')

    {

    cout<>a;

    for(i=1;i<=total;i++)

    {

    //c_str返回当前的字符串的首地址,c_str()把string对象转换成c中的字符串样式

    if(strcmp(student[i].name.c_str(),a.c_str())==0) s[i]=student[i];

    break;

    }

    if(i!=total+1)

    {

    cout<>choice1;

    if(choice1[0]=='s')

    {

    cout<>choice1;

    if(choice1[0]=='s')

    {

    cout<>b;

    //int len=b.size(); //b.length为字符串b的长度,b.size()为字符串b的元素个数

    if(bin_search(1,total,b)!=-1) //b为关键字 使用二分的方法来找到位置,若return结果为-1则表示学号没有录入系统中

    {

    s[i]=student[bin_search(1,total,b)];

    cout<>choice1;

    if(choice1[0]=='s')

    {

    cout<>choice1;

    if(choice1[0]=='s')

    {

    cout<>c;

    for(i=1;i<=total;i++)

    {

    if(c==student[i].domenumber)

    {

    s[i]=student[i];

    cout<>choice1;

    if(choice1[0]=='s')

    {

    cout<>choice;

    if(choice[0]=='1')

    {

    build();

    cout<>choice;

    if(choice[0]=='s')

    {

    system("cls");

    menu();

    }

    else

    break;

    }

    else if(choice[0]=='2')

    {

    sortmenu();

    cout<>choice;

    if(choice[0]=='s')

    {

    system("cls");

    menu();

    }

    else

    break;

    }

    else if(choice[0]=='3')

    {

    query();

    cout<>choice;

    if(choice[0]=='s')

    {

    system("cls");

    menu();

    }

    else

    break;

    }

    else if(choice[0]=='4')

    {

    print();

    cout<>choice;

    if(choice[0]=='s')

    {

    system("cls");

    menu();

    }

    else

    break;

    }

    else

    {

    cout<

    展开全文
    weixin_39962285 2021-05-21 14:46:57
  • 数据结构课程设计之学生宿舍信息管理系统,宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据...

    一、问题陈述

    宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,如何直观的了解宿舍的入住情况和每位同学的住宿位置是提高工作效率的重要课题,根据我们所学的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;
    		}
    	}
    }
    
    
    展开全文
    qq_44487263 2020-06-21 10:14:38
  • 某高校学生的住宿安排比较灵活,一个学院有可能住在不同的宿舍楼,为方便学生管理者快速查找学生的住宿信息,设计一个小型的宿舍管理查询软件。其中学生信息包括:学号、姓名、学院、楼号、房间号。 一堆废话 很久...

    问题描述

    某高校学生的住宿安排比较灵活,一个学院有可能住在不同的宿舍楼,为方便学生管理者快速查找学生的住宿信息,设计一个小型的宿舍管理查询软件。其中学生信息包括:学号、姓名、学院、楼号、房间号。
    一堆废话
    很久没有更新博客了,小白刚刚历经考试周的打击,百废待兴,赶紧跑来CSDN和小伙伴们取暖安慰受伤的心灵。近期会陆续写四篇数据结构课设的博客,然后再写两篇编写小游戏的博客,一个是基于Python的飞机大战,另一个是基于C++并在funcode上完成的海底世界游戏。

    数据描述

    (1)首先定义一个结构体,用来存放某个学生的信息,包括学号、姓名、学院、楼号、房间号。

    //定义学生信息结构体 
    typedef struct{
    	int number;
    	char name[20];
    	char college[50];
    	int building;
    	int room;
    }Student;	
    

    (4)再定义一个顺序表,用具有20个元素顺序表来存放20个学生的信息。每个元素分别表示一个药品信息的结构体。

    //定义存储顺序表 
    typedef struct {
    	Student s[20];
    	int length;
    }SqList;
    

    程序代码

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h> 
    //定义学生信息结构体 
    typedef struct{
    	int number;
    	char name[20];
    	char college[50];
    	int building;
    	int room;
    }Student;
    //定义存储顺序表 
    typedef struct {
    	Student s[20];
    	int length;
    }SqList;
    void CreatStudent(SqList &L,int n)//输入学生信息 
    {
    	L.length=0;
    	for(int i=1;i<=n;i++)
    	{
    		printf("输入第%d个学生信息\n",i);
    		printf ("学号:");
    		scanf("%d",&L.s[i].number);
    		printf ("姓名:");
    		scanf("%s",&L.s[i].name);
    		printf ("学院:");
    		scanf("%s",&L.s[i].college);
    		printf ("楼号:");
    		scanf("%d",&L.s[i].building);
    		printf ("房间号:");
    		scanf("%d",&L.s[i].room);
    		L.length++;
    	}
    	FILE *fp;
    	fp=fopen("room.txt","w+");
    	for(int i=1;i<=L.length;i++)
    	{
    		fprintf(fp,"%d %s %s %d %d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);
    	}
    	printf("添加成功!\n");
    	fclose(fp);
    }
    void NumberSort(SqList &L)//按学号进行排序 
    {
    	int i=1;
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	for(i=2;i<=L.length;i++)
    	{
    		if(L.s[i].number<L.s[i-1].number)
    		{
    			L.s[0]=L.s[i];
    			L.s[i]=L.s[i-1];
    			int j;
    			for(j=i-2;L.s[0].number<L.s[j].number;j--)
    			{
    				L.s[j+1]=L.s[j];
    			}
    			L.s[j+1]=L.s[0];
    		}
    	}
    	printf("按学号排序为:\n");
    	for(int i=1;i<=L.length;i++)
    	{
    		printf("%d %s %s %d %d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);
    	}
    	printf("排序成功!\n");
    }
    void NameSort(SqList &L)//按姓名排序 
    {
    	int i=1,j;
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	for(i=1;i<L.length;i++)
    	{
    		for(j=1;j<=L.length-i;j++)
    		{
    			if(strcmp(L.s[j].name,L.s[j+1].name)>=0)
    			{
    				L.s[0]=L.s[j];
    				L.s[j]=L.s[j+1];
    				L.s[j+1]=L.s[0];
    			}
    		}
    	}
    	printf("按姓名排序为:\n");
    	for(int i=1;i<=L.length;i++)
    	{
    		printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);
    	}
    	printf("排序成功!\n");
    } void BuildingSort(SqList &L)//按楼号进行排序 
    {
    	int i=1;
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	for(i=2;i<=L.length;i++)
    	{
    		if(L.s[i].building<L.s[i-1].building)
    		{
    			L.s[0]=L.s[i];
    			L.s[i]=L.s[i-1];
    			int j;
    			for(j=i-2;L.s[0].building<L.s[j].building;j--)
    			{
    				L.s[j+1]=L.s[j];
    			}
    			L.s[j+1]=L.s[0];
    		}
    	}
    	printf("按楼号排序为:\n");
    	for(int i=1;i<=L.length;i++)
    	{
    		printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);
    	}
    	printf("排序成功!\n");
    }
    void NumberSearch(SqList &L) //按学号查询 
    {
    	int i=1,k,flag=0;
    	int num; 
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	printf("输入要查询学生的学号:\n");
    	scanf("%d",&num);
    	for(i=1;i<=L.length;i++)
    	{
    		if(L.s[i].number==num)
    		{
    			k=i;
    			flag=1;
    		}	
    	}
    	if(flag==0)
    	printf("没有找到该学生,查询失败!\n");
    	else
    	printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[k].number,L.s[k].name,L.s[k].college,L.s[k].building,L.s[k].room);
    }
    void NameSearch(SqList &L)
    {
    	int i=1,k,flag=0;
    	char na[20]; 
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	printf("输入要查询学生的姓名:\n");
    	scanf("%s",na);
    	for(i=1;i<=L.length;i++)
    	{
    		if(strcmp(L.s[i].name,na)==0)
    		{
    			k=i;
    			flag=1;
    		}		
    	}
    	if(flag==0)
    	printf("没有找到该学生,查询失败!\n");
    	else
    	printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[k].number,L.s[k].name,L.s[k].college,L.s[k].building,L.s[k].room);
    }
    void BuildingSearch(SqList &L)
    {
    	int i=1,flag=0;
    	int bu; 
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	printf("输入要查询学生的楼号:\n");
    	scanf("%d",&bu);
    	for(i=1;i<=L.length;i++)
    	{
    		if(L.s[i].building==bu)
    		{
    			printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);	
                flag=1;
    		}
    	}
    	if(flag==0)
    	printf("没有找到该楼号,查询失败!\n");
    }
    void ShowRoom(SqList &L)
    {
    	int i=1;
    	L.length=0;
    	FILE *fp1;
        fp1=fopen("room.txt","r+");
    	while(!feof(fp1))
    	{
    		fscanf(fp1,"%d %s %s %d %d",&L.s[i].number,L.s[i].name,L.s[i].college,&L.s[i].building,&L.s[i].room);
    		L.length++;
    		i++;
    	}	
    	L.length--;
    	fclose(fp1);
    	for(i=1;i<=L.length+1;i++)
    	{
    		printf("学号:%d  姓名:%s  学院:%s  楼号:%d  房间号:%d\n",L.s[i].number,L.s[i].name,L.s[i].college,L.s[i].building,L.s[i].room);	
    	}
    }
    int main()
    {
    	SqList L;
    	int n,option;
        
        printf("********欢迎进入宿舍管理查询系统**************\n"); 
        ShowRoom(L);
    	while(1)
    	{
    		printf("****************************************");
    		printf("\n1.创建\t2.按学号排序\n");  
            printf("\n3.按姓名排序\t4.按楼号排序\n");
            printf("\n5.按学号查询\t6.按姓名查询\n");  
            printf("\n7.按楼号查询\t8.退出\n");
            printf("****************************************");
            printf("\n请选择需要的服务:"); 
            scanf("%d",&option);
            switch(option)
    		{
    			case 1:
    				printf("请输入学生个数:");
    	            scanf("%d",&n);
    	            CreatStudent(L,n); 
    	            break;
    			case 2:
    				NumberSort(L);
    				break;
    			case 3:
    				NameSort(L);
    				break;
    			case 4:
    				BuildingSort(L);
    				break;
    			case 5:
    				NumberSearch(L);
    				break;
    			case 6:
    				NameSearch(L);
    				break;
    			case 7:
    				BuildingSearch(L);
    				break;
    			case 8:
    				exit(0);
    	        	break;
    		} 
    	}
    	return 0;
     } 
    

    测试数据

    (1)开始界面(显示文件信息和系统服务选项)
    在这里插入图片描述
    (2)按学生学号进行排序
    在这里插入图片描述
    (3)按销学生姓名进行排序
    在这里插入图片描述
    (4)按楼号进行排序
    在这里插入图片描述
    (5)按学号查询
    在这里插入图片描述
    (6)按姓名查询
    在这里插入图片描述
    (7)按楼号查询
    在这里插入图片描述

    展开全文
    weixin_45087775 2020-01-15 13:10:57
  • 4星
    295KB xqk1010101 2010-06-01 13:25:28
  • 4星
    19KB gyz413977349 2012-05-22 17:56:54
  • 景德镇陶瓷大学 ... 编写宿舍管理查询软件 姓 名 杨茹 班 级 17信管一班 学 号 117060300109 完成日期 2018...

    景德镇陶瓷大学

     

     

    实践周课程设计报告

     

     

    实验名称

    编写宿舍管理查询软件

    姓    名

    杨茹

    班    级

    17信管一班

    学    号

    117060300109

    完成日期

    2018年12月27日

     

     

     

     

     

     

     

    • 实验目的

    为宿舍管理人员编写一个宿舍管理查询软件

    • 设计要求
    1. 采用交互工作方式 
    2. 建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) 
    3. 查询菜单(用二分查找实现以下操作)
    1. 按姓名查询  
    2. 按学号查询  
    3. 按宿舍号查询 
    1. 打印任一查询结果(可以连续操作)
    • 需求分析
      1. 性能分析

    宿舍内入住若干学生,每个宿舍都有唯一独立编码,入住学生有唯一的姓名、学号。编写宿舍管理系统,添加学生的姓名、学号、宿舍号为关键字,创建相应函数实现各种排序、查找和插入删除等操作。使用这些关键字及函数方便进行宿舍管理。

      1. 功能分析
    1. 实现交互工作方式,各项操作结束后均应返回主菜单; 
    2. 建立数据文件:系统本无任何信息数据,需开发一个“信息输入”功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,学生信息包括:姓名,学号,宿舍号;
    3. 显示:信息录入后都保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查阅,所以需具备按各种关键字显示的功能;
    4. 排序:本系统按关键字(姓名、学号、房号)进行冒泡排序;
    5. 查询:采用二分查找方式,分别实现按关键字(姓名、学号、房号)查询功能; 
    6. 删除:于有些同学因为不同原因而离校,所以设计了删除功能;
    7. 插入:由于有新同学入校,所以设计了插入功能;、
    8. 打印:将查询到的某一学生信息或全部学生信息打印;
    9. 退出:退出交互工作系统。

     

    功能

    输入

    查询   

    排序

    显示

    插入

    删除

    退出

     

     
      

     

     

     

     

     

     

     

     

     

    (图1  功能简图)

      1. 用户需求
    1. 创建欢迎界面;
    2. 创建线性表,提示用户输入信息,并现实显示信息,输出各种关键字信息,便于用户查阅;
    3. 创建主界面,建立主选择菜单和子选择菜单,便于用户操作;
    4. 创建返回主菜单的函数,人性化设计;
    5. 提供推出选项,操作完毕需要退出时,提供选项,便于使用者退出交互工作系统;
    6. 优化程序,提供友好界面,操作键如下:

    0:退出程序       1:按姓名排序     2:按学号排序     

     3:按宿舍号排序   4:按姓名查找     5:按学号查找  

     6:按宿舍号查找   7:按学号插入     8:按学号删除

     

    • 框架设计

     

    宿舍管理系统功能模块图及流程图

    姓名

    学号

    宿舍号

    按照姓名排序,冒泡排序

    按照学号排序,冒泡排序

     

    按照宿舍排序,冒泡排序

     

    排序模块

    按照姓名从小到大查找,二分法查找

    按照学号从小到大查找,二分法查找

    按照宿舍从小到大查找,二分法查找

     

    查找模块

    按照学号从小到大插入

    按照学号从小到大删除

     

    插入和删除

     

    (图2 功能模块图)

     

    y

    1<=f<=8

    f<0或f>8

    f=0

    显示学生信息

    是否继续

    按姓名排序

    按学号排序

    按宿舍号排序

    按姓名查找

    按学号查找

    按宿舍号查找

    按学号插入

    按学号删除

    输入

    姓名

    输入

    学号

    输入

    宿舍号

    输入

    信息

    输入

    学号

    退出

    开始

    (主界面)

    输入学生信息

    是否继续输入

    输入整数t

    判断t

    y

     

     

     

    (图 3 系统流程图)

     

    • 概要设计
    1. 存储结构

    单链表存储,结构体定义为

    typedef struct{           //定义结构体成员

         char name[20];

         int num;                 //学号宿舍号为整型

         int room;

    }stu;

    stu stud;

    typedef struct{

         int Length;              //当前长度

         stu *Elem;               //存储空间基址

         int ListSize;            //当前分配的存储容量

    }LinkList;

    1. 数据设计

    int f                  全局变量,指选择的操作键数

    char name[20]          姓名

    int num                学号

    int room               宿舍号

    int Length            为线性表的当前长度

    stu *Elem;          指示线性表的基地址  

    int Listsize          当前分配的存储容量 

    char c                 进入主界面的任意键

    ch                    判断字符y或n 

    int i,j               冒泡排序中,i为外层循环次数,j为内层循环次数

    int i                打印学生信息时,i作为循环变量

    int m;,int n;,int a   m,n,a在二分查找中分别代表房号,学号,姓名

    int i,j,k;           i,j,k在按学号插入中作为循环变量 

    int i,j,k=-1          i,j,k在按学号删除中作为循环变量

    1. 函数设计

    int menu();                //列出主菜单

    void Init(LinkList &L)     //初始化线性表

    void Create(LinkList &L)   //创建学生信息表

    void Shuru(LinkList L)     //学生信息录入

    void Disp()                //返回主界面,调用menu()函数实现

    void Sorte(LinkList &L)    //按照姓名由小到大排序,冒泡排序

    void Sortn(LinkList &L)    //按照学号由小到大排序,冒泡排序

    void Sortr(LinkList &L)    //按照宿舍号由小到大排序,冒泡排序

    void chazhaoe(LinkList &L) //按姓名从小到大查找,二分查找

    void chazhaon(LinkList &L) //按学号从小到大查找,二分查找

    void chazhaor(LinkList &L) //按宿舍号从小到大查找,二分查找

    void Insert(LinkList &L)  //按学号从小到大插入该学生

    void Delete(LinkList &L)  //按学号从小到大删除该学生

    int panduan2(char ch)   //如果学生不存在,判断是否继续查找,通过if语句,文件操作函数实现

    void panduan3()        //如果已无学生记录则返回主界面,通过调用其他函数和文件操作函数实现

    void print1 LinkList L)  //打印学生信息,通过调用文件操作函数实现

    void print2(LinkList L,int mid)//输出学生信息,通过调用文件查找函数实现

    void main()                //主函数,系统操作入口

    • 详细设计

    实验源代码如下:

    // 17信管宿舍管理系统.cpp : 定义控制台应用程序的入口点。

    #include "stdafx.h"

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    #define N 40

    #define increase 10

    int f,t=0;

    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("----------------------------17信管1班宿舍管理查询系统---------------------------\n");

               printf("\n");printf("\n");

               printf("                             1、 按姓名排序\n");        printf("\n");

               printf("                             2、 按学号排序\n");        printf("\n");

               printf("                             3、 按宿舍号排序\n");   printf("\n");

               printf("                             4、 按姓名查找\n");        printf("\n");

               printf("                             5、 按学号查找\n");        printf("\n");

               printf("                             6、 按宿舍号查找\n");   printf("\n");

               printf("                             7、 按学号插入\n");        printf("\n");

               printf("                             8、 按学号删除\n");

               printf("\n");printf("\n");printf("\n");

               printf("提示:当输入的数字键为0时,退出操作\n");

               if(t==1)

               {

                         printf("请输入数字键(1——8为操作键):");

                         scanf_s("%d",&f);

                         if(f<0||f>9)

                         {

                                    system("cls");

                                    printf("\n");

                                    printf("输入的数字不对,请在原处重新输入\n");printf("\n");

                                    menu();

                         }

               }

    }

    void Disp(){                                      //返回主界面

               char c; 

               fflush(stdin);printf("\n");

               printf("请按任意键进入主界面:");

               scanf_s("%c",&c);

               system("cls");

    }

    void Shuru(LinkList L)                              //输入学生信息

    {

               printf("请输入姓名:");

               fflush(stdin);                                //清空输入缓冲区,得到正确的输入数据

               gets_s(stud.name);

               printf("请输入学号:");

               scanf_s("%d",&stud.num);

               printf("请输入宿舍号:");

               scanf_s("%d",&stud.room);

    }

    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("\n");

               printf("请输入第1个学生信息\n");

               Shuru(L);

                  ch=getchar();

                  strcpy_s(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_s("%c",&ch);

               printf("\n");printf("\n");

               while(ch=='y')

               {

                         printf("请输入第%d个学生的信息\n",i);

                         Shuru(L);

                         strcpy_s(L.Elem[L.Length].name,stud.name);

                                    L.Elem[L.Length].num=stud.num;

                                    L.Elem[L.Length].room=stud.room;

                                    L.Length++;

                         i++;

                         ch=getchar();

                         printf("\n");

                         printf("是否继续输入?<y/n>:");

            scanf_s("%c",&ch);

                   printf("\n");printf("\n");

               }

               if(ch=='n')

                         system("cls");

    }

    void Sortr(LinkList &L)                             //按照宿舍号号排序由小到大排序,冒泡排序

    {

               int i,j;

               stu temp;

               for(i=0;i<L.Length-1;i++)

                         for(j=i+1;j<L.Length;j++)

                                    if(L.Elem[i].room>L.Elem[j].room)

                                    {

                                               temp=L.Elem[i];

                                              L.Elem[i]=L.Elem[j];

                                              L.Elem[j]=temp;

                                    }

    }

    void Sortn(LinkList &L)                           //按照学号排序由小到大排序,冒泡排序

    {

               int i,j;

               stu temp;

               for(i=0;i<L.Length-1;i++)

                         for(j=i+1;j<L.Length;j++)

                                    if(L.Elem[i].num>L.Elem[j].num)

                                    {

                                              temp=L.Elem[i];

                                              L.Elem[i]=L.Elem[j];

                                              L.Elem[j]=temp;

                                    }

    }

    void Sorte(LinkList &L)                           //按照姓名排序由小到大排序,冒泡排序

    {

               int i,j;

               stu temp;

               for(i=0;i<L.Length-1;i++)

                         for(j=i+1;j<L.Length;j++)

                                    if(strcmp(L.Elem[i].name,L.Elem[j].name)>0)

                                    {

                                              temp=L.Elem[i];

                                              L.Elem[i]=L.Elem[j];

                                              L.Elem[j]=temp;

                                    }

    }

    void print1(LinkList &L)                          //打印学生信息

    {

               int i;

               printf("\n");

               printf("姓名           学号           宿舍号  \n");printf("\n");

               for(i=0;i<L.Length;i++)

                         printf("%-15s%-3d%15d\n",L.Elem[i].name,L.Elem[i].num,L.Elem[i].room);

    }

    void print2(LinkList &L,int mid)                   //打印查找到的学生信息

    {

               printf("查找成功------->该学生信息为:\n");

               printf("姓名           学号          宿舍号\n");printf("\n");

               printf("%-15s%-3d%15d\n",L.Elem[mid].name,L.Elem[mid].num,L.Elem[mid].room);

    }

    int Panduan1(char ch)                          //有学生

    {

               scanf_s("%c",&ch);

               printf("是否继续查找?<y/n>:");

               fflush(stdin);

               scanf_s("%c",&ch);

               if(ch=='y')

               {

                         system("cls");

                         return(1);

               }

               else

                         return 0;

    }

    int Panduan2(char ch)                          //该学生不存在,是否继续查找

    {

               scanf_s("%c",&ch);

               printf("该学生不存在,是否继续查找?<y/n>:");

               fflush(stdin);

               scanf_s("%c",&ch);

               if(ch=='y')

               {

                         system("cls");

                         return(1);

               }

               else

                         return 0;

    }

    void Panduan3()                               //判断没有学生信息后的操作,返回主界面

    {

               printf("\n");

               printf("已无学生记录\n");

               printf("\n");

               Disp();

               menu();

    }

    void chazhaor(LinkList &L)                       //按宿舍号从小到大查找,二分查找

    {

               if(L.Length==0)

                         Panduan3();

               else

               {

                         int low=0,high=L.Length,mid,flag=0;

                         int m;

                         char ch='y';

                         printf("\n");           printf("\n");

                         printf("按宿舍号查找---------->请输入要查找的宿舍号:");

                         scanf_s("%d",&m);

                         printf("\n");

                         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)

                         {

                                    print2(L,mid);

                                    if(Panduan1(ch))

                                              chazhaor(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

                         else

                         {

                                    if(Panduan2(ch))

                                              chazhaor(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

               }

    }

    void chazhaon(LinkList &L)                    //按学号从小到大查找,二分查找

    {

               if(L.Length==0)

                         Panduan3();

               else

               {

                         int low=0,high=L.Length,mid,flag=0;

                         int n;

                         char ch='y';

                         printf("\n");           printf("\n");

                         printf("按学号查找---------->请输入要查找的学号:");

                         scanf_s("%d",&n);

                         printf("\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)

                         {

                                    print2(L,mid);

                                    if(Panduan1(ch))

                                              chazhaon(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

                         else

                         {

                                    if(Panduan2(ch))

                                              chazhaon(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

               }

    }

    void chazhaoe(LinkList &L)                  //按姓名查找,二分查找

    {

               if(L.Length==0)

                         Panduan3();

               else

               {

                         int low=0,high=L.Length,mid,flag=0;

                         printf("\n");printf("\n");

                         printf("按姓名查找---------->请输入要查找的姓名:");

                         char a[15],ch='y';

                         scanf_s("%s",&a);

                         printf("\n");

                         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)

                         {

                                    print2(L,mid);

                                    if(Panduan1(ch))

                                              chazhaoe(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

                         else

                         {

                                    if(Panduan2(ch))

                                              chazhaoe(L);

                                    else

                                    {

                                              system("cls");

                                              menu();

                                    }

                         }

               }

    }

    void Insert(LinkList &L)                       //按学号从小到大插入该学生

    {

               int i,j ,k;

               char ch;

               printf("\n");

               printf("插入的学生信息为:\n");

               printf("姓名:");

               fflush(stdin);

               gets_s(stud.name);

               printf("学号:");

               scanf_s("%d",&stud.num);

               printf("宿舍号:");

               scanf_s("%d",&stud.room);

               if(L.Length==0)

               {

                          strcpy_s(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_s(L.Elem[k].name,stud.name);

                                    L.Elem[k].num=stud.num;

                                    L.Elem[k].room=stud.room;

                                    break;

                         }

                         else

                         {

                                    strcpy_s(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_s("%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_s("%d",&stud.num);

               for(i=0;i<L.Length;i++)

               {

                         if(stud.num==L.Elem[i].num)

                         {

                                    printf("该学生的信息为:\n");

                                    printf("\n");

                                    printf("%-15s%-3d%15d\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_s("%c",&ch);

               system("cls");

               if(ch=='y')

                         Delete(L);

               else

                         system("cls");

    }

    void main(){

               LinkList L;

               Init(L);

               char ch;

               system("color d");

               printf("\n"); 

               printf("-----------------------欢迎进入17信管一班宿舍管理查询系统-----------------------\n");

               printf("\n");

               printf("请按任意键开始操作:");

               scanf_s("%c",&ch);

               system("cls");                           //将屏幕先前显示的内容删除掉

               Create(L); 

               system("cls");

               t=1;

               menu();

               while(f!=0)

               {

                         system("cls");

                         switch(f)

                         {

                         case 1:Sorte(L);                     //按照姓名排序

                                    printf("\n");

                                    if(L.Length==0)

                                    {

                                              printf("已无学生记录\n");

                                              printf("\n");

                                              Disp();

                                               menu();

                                    }

                                    else

                                    {

                                              printf("按姓名排序:\n");

                                              print1(L);

                                              Disp();                   //调用返回主界面

                                              menu();

                                    }

                                    break;

                                    case 2:Sortn(L);                //按学号排序

                                    printf("\n");

                                    if(L.Length==0)

                                    {

                                              printf("已无学生记录\n");

                                              printf("\n");

                                              Disp();

                                              menu();

                                    }

                                    else

                                    {

                                              printf("按学号排序:\n");

                                              print1(L);

                                              Disp();

                                              menu();

                                    }

                                    break;

                                    case 3:Sortr(L);                  //按房间号排序

                                    printf("\n");

                                    if(L.Length==0)

                                    {

                                              printf("已无学生记录\n");

                                              printf("\n");

                                              Disp();

                                              menu();

                                    }

                                    else

                                    {

                                              printf("按宿舍号排序:\n");

                                              print1(L);

                                              Disp();

                                              menu();

                                    }

                                    break;

                                    case 4:Sorte(L);               //先调用按姓名排序函数进行排序

                                              chazhaoe(L);            //再调用按姓名查找函数进行(二分)查找

                                              break;

                                    case 5:Sortn(L);              //姓名

                                              chazhaon(L);

                                              break;

                                    case 6:Sortr(L);              //宿舍号

                                              chazhaor(L);

                                              break;

                                    case 7:Sorte(L);              //调用插入函数

                                              Insert(L);

                                              system("cls");

                                              printf("显示插入后的学生信息:\n");

                                        print1(L);

                                              Disp();

                                              menu();

                                              break;

                                    case 8:Delete(L);            //调用删除函数

                                              if(L.Length==0)

                                              {

                                                         printf("\n");

                                                         printf("学生记录已经被删除完\n");

                                                         printf("\n");

                                                         Disp();

                                                         menu();

                                              }

                                              else

                                              {

                                                         printf("显示删除后的学生信息:\n");

                                                         print1(L);

                                                         Disp();

                                                         menu();

                                              }

                                              break;

                         }

               }

    }

    • 调试分析
    1. 测试数据

    姓名      学号      宿舍号

      杨茹      109        602   (删除)

      訾欣      108        603

      彭珠      131        602

      孙友田    104        604  (插入)

    李倩      105        602  (插入)(删除)

    1. 测试结果
                    1. 欢迎界面

     

                    1. 学生信息输入

     

                    1. 主菜单

     

                    1. 按姓名排序

     

                    1. 按学号排序

     

                    1. 按宿舍号排序

     

                    1. 按姓名查找

     

                    1. 按学号查找

     

                    1. 按宿舍号查找

     

                    1. 插入学生信息

     

    (插入:信息输入界面)

     

    (插入:信息输出界面)

                    1. 删除学生信息

     

    (删除一人)

     

    (继续删除一人) 

    (删除:最终输出界面)

                    1. 退出

     

                    1. 判断学生不存在

     1

    • 心得体会

    通过本次数据结构课程设计实践周,我学习到了很多。本次课程设计内容是编写一个宿舍管理系统,完成这个项目我用时四天:

    第一天

    分析系统功能模块,设计程序框图,查找相关资料,编写代码框架

    第二天

    编写代码,填充内容,完成实验设计

    第三天

    调试代码,分析结果,编写实验报告

    第四天

    完成实验报告,进行总结。

    在实验过程中,我充分利用了时间,在完成实验设计的同事,复习课本内容,巩固了知识点,许多曾经不知道的知识,通过互联网资源结合自身实践,现在也能了解掌握,比如:

    1、在VS中,system("cls");的功能是将屏幕先前显示的内容删除掉

    2、fflush(stdin); 功能是清空输入缓冲区,得到正确的输入数据

    3、system("color d");功能是改变整个控制台的颜see,用 system("color

    0A"); 其中color后面的0是背景色代号,A是前景色代号,每个数字可以为以下任何值之一。各颜色代码如下: 

        0 = 黑色      1 = 蓝色      8 = 灰色       9 = 淡蓝色

        2 = 绿色      3 = 湖蓝色    A = 淡绿色     B = 淡浅绿色

      4 = 红色      5 = 紫色      C = 淡红色     D = 淡紫色

    6 = 黄色      7 = 白色      E = 淡黄色     F = 亮白色

    4、scanf()和gets()输入函数的不同之处,scanf()输入字符串时不能带空格,否则不能输出空格后的字符,而gets()可以。

    5、strmp()函数,比较两个字符串

    设这两个字符串为str1,str2,

    若str1=str2,则返回零;

    若str1<str2,则返回负数;

    若str1>str2,则返回正数。

    6、在使用vs的时候,使用scanf和strcpy以及gets函数都会报错,说这几个函数存在安全问题。带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。比如 scanf是不安全的 建议使用scanf_s替换,scanf_s多了一个参数,缓冲区大小,这可以防止缓冲区溢出。

    在程序设计中,我使用Panduan1(),Panduan2(),Print1(),print2(),Disp()等函数来实现程序优化,对线性表、二分查找、冒泡排序有了进一步了解。但在实验过程中我也遇到了许多问题,有的是如if(**==**)漏写等号,数据未初始化等细节方面的问题,在调试分析中都可以检查出来,但是仍然有一些知识性问题来求助于网络和同学。其中在“按照名字查询void chazhaoe(LinkList &L) ”这一函数中遇到一些问题,程序不稳定,此功能经常会失灵,不能发挥相应的功能效果,目前我仍在寻找解决办法。

    编程是一门实践学问,在以后我一定会多加练习,增加实践,提高自己的编程能力。

    展开全文
    qq_41285360 2020-01-30 15:09:38
  • 129KB zcube 2012-06-11 10:39:09
  • 17KB hanmeisong 2011-01-29 17:28:33
  • 1.06MB ui_shero 2012-09-06 21:06:00
  • m0_46422419 2021-02-09 14:33:27
  • 294KB bw6236223 2021-09-29 07:25:07
  • weixin_33352628 2021-03-06 22:15:53
  • qq_45234177 2021-01-12 12:06:50
  • 297KB huayuya123 2021-09-25 21:40:47
  • 147KB m0_46529566 2021-09-22 15:46:17
  • weixin_35545782 2021-03-31 08:27:54
  • 469KB m0_52957036 2020-11-01 11:35:49
  • 395KB m0_52957036 2020-10-09 00:37:21
  • 466KB bw6236223 2021-09-28 20:07:54
  • 37KB m0_52957036 2020-08-12 21:20:11
  • 225KB m0_52957036 2020-11-25 03:07:06
  • 473KB huayuya123 2021-09-25 21:40:47
  • 713KB m0_52957036 2020-09-29 08:13:17
  • 4星
    31KB zxl_lover 2009-06-29 11:04:42
  • 275KB jackiedyh 2019-04-10 18:29:46
  • 416KB qq_45234177 2021-01-12 12:12:41

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,083
精华内容 2,033
关键字:

宿舍管理查询系统数据结构

数据结构 订阅