数据结构实验—宿舍管理系统(C,Python,Java三种代码版本)

目录

 实验课程

实验内容

数据结构类型定义

模块划分

(C语言)详细代码设计

(python)详细代码设计

(Java)详细代码设计

测试数据及结果

 实验总结


 

 实验课程

课程名称:数据结构

实验名称:宿舍管理查询系统

实验目的:掌握数据结构的两种基本技术:查找和排序,根据实际情况选择效率较高的算法解决应用问题。

实验条件:计算机一台,Visual C++6.0


实验内容

问题描述

为宿舍管理人员设计一个宿舍管理查询系统, 程序采用交互工作方式,完成下列功能:

(1)建立合适的数据结构作为查找表并输入数据;

数据分别按关键字姓名、学号、房号进行排序(所学排序算法任选一种效率较高的算法);

(2)设计查询菜单,按指定关键字姓名、学号、房号进行查询并输出结果,要求查询采用效率较高的算法实现;

(3)可以连续查询


数据结构类型定义

struct student{

    char name[20];  //姓名

    char num[20];   //学号

    char room[20];  //宿舍号

};

struct RoomSystem{

    struct student allStudentdata[60];  //存储学生信息的数组

    int size;   //系统中学生信息的数量

};

模块划分

void addStudent(struct RoomSystem* system);//添加学生信息,存进管理系统结构体

void quickSort(struct student student[],int low, int high,const char* key);//快排

int binarySearch(struct student student[],int low, int high,const char* key,const char* value);//二分查找

void searchstudent(struct RoomSystem* RoomSystem,const char* key,const char* value);//查找学生

int main()//主函数

 


(C语言)详细代码设计

#include 
#include 
#include 
//学生结构体
struct student
{
    //都使用char,后续用strcmp比较
    char name[20];  //姓名
    char num[20];   //学号
    char room[20];  //宿舍号
};

//宿舍管理系统结构体
struct RoomSystem
{
    //系统所有学生的数据
    struct student allStudentdata[60];  //存储学生信息的数组
    int size;   //系统中学生信息的数量

};

//添加学生信息,存进管理系统结构体
void addStudent(struct RoomSystem* system){
    printf("输入需要添加学生信息的数量:");
    int number;
    scanf("%d",&number);
    for (int i = 1; i <=number; i++){
        if(system->size < 60){
        struct student* student = &system->allStudentdata[system->size++];
        printf("输入第%d名学生信息\n姓名:",i);
        scanf("%s", student->name);
        printf("学号:");
        scanf("%s", student->num);
        printf("房号:");
        scanf("%s", student->room);
        printf("学生信息添加成功\n");
    }else{
        printf("学生人数已满,无法添加\n");
    }
    }
    
}

//查询学生信息
//快排,传入学生数组,0和长度,还有查询值key
void quickSort(struct student student[],int low, int high,const char* key){
    
    if(low 0) {
            high = mid - 1;
        } else {
            // 如果关键字值大于中间元素的值,则在右半部分继续搜索
            low = mid + 1;
        }
    }
    //未找到,返回-1
    return -1;
}

void searchstudent(struct RoomSystem* RoomSystem,const char* key,const char* value){
    int result = binarySearch(RoomSystem->allStudentdata, 0, RoomSystem->size - 1, key, value);
    if (result != -1) {
        // 输出查询结果
        printf("\n查询结果:\n姓名: %s\n学号: %s\n房号: %s\n", RoomSystem->allStudentdata[result].name,
            RoomSystem->allStudentdata[result].num, RoomSystem->allStudentdata[result].room);
    } else {
        // 提示未找到匹配结果
        printf("未找到该学生信息。\n");
    }
}

int main(){
    struct RoomSystem roomsystem;
    roomsystem.size = 0;

    //菜单
    while (1) {
        // 显示菜单选项
        printf("\n1. 添加学生信息\n");
        printf("2. 查询学生信息\n");
        printf("3. 退出\n");

        int choice,num;
        // 获取用户选择
        printf("请输入选项:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                addStudent(&roomsystem);    // 添加学生信息
                break;
            case 2: {
                printf("\n1. 姓名查询\n2. 学号查询\n3. 房号查询\n");    // 显示查询菜单
                printf("输入查询学生的个数:");
                scanf("%d",&num);
                for (int i = 0; i < num; i++){
                    int searchChoice;           // 获取查询关键字选择
                printf("请输入查询关键字:");
                scanf("%d", &searchChoice);

                char searchValue[50];       // 获取查询值
                printf("请输入查询值:");
                scanf("%s", searchValue);

                // 根据用户选择设置查询关键字
                const char* key;
                if (searchChoice == 1){
                    key = "name";
                }else if (searchChoice == 2){
                    key = "num";
                } else if (searchChoice == 3){
                    key = "room";
                }else {
                    // 处理无效的查询关键字
                    printf("\n无效的查询关键字。\n");
                    continue;
                }

                // 使用快速排序算法对数据进行排序
                quickSort(roomsystem.allStudentdata, 0,roomsystem.size - 1, key);
                // 查询数据,注意传入的是整个结构体,而不是里面的数组
                searchstudent(&roomsystem,key,searchValue);
                }
                
                
                break;
            }
            case 3:
                // 退出程序
                printf("已退出系统\n");
                system("pause");
                return 0;
            default:
                // 处理无效的选项
                printf("无效选项,请重新输入。\n");
        }
    }
    system("pause");
    return 0;
}

 


(python)详细代码设计

class Student:
    def __init__(self, name, num, room):
        self.name = name
        self.num = num
        self.room = room

class RoomSystem:
    def __init__(self):
        self.all_student_data = []
        self.size = 0

def add_student(room_system):
    print("输入需要添加学生信息的数量:")
    number = int(input())
    for i in range(1, number + 1):
        if room_system.size < 60:
            name = input(f"输入第{i}名学生信息\n姓名:")
            num = input("学号:")
            room = input("房号:")
            student = Student(name, num, room)
            room_system.all_student_data.append(student)
            room_system.size += 1
            print("学生信息添加成功")
        else:
            print("学生人数已满,无法添加")

def quick_sort(student_list, key):
    if len(student_list) <= 1:
        return student_list

    pivot_index = len(student_list) // 2
    pivot = getattr(student_list[pivot_index], key)

    left = [student for student in student_list if getattr(student, key) < pivot]
    middle = [student for student in student_list if getattr(student, key) == pivot]
    right = [student for student in student_list if getattr(student, key) > pivot]

    return quick_sort(left, key) + middle + quick_sort(right, key)

def binary_search(student_list, key, value):
    low, high = 0, len(student_list) - 1

    while low <= high:
        mid = (low + high) // 2
        compare_result = getattr(student_list[mid], key) - value

        if compare_result == 0:
            return mid
        elif compare_result > 0:
            high = mid - 1
        else:
            low = mid + 1

    return -1

def search_student(room_system, key, value):
    sorted_students = quick_sort(room_system.all_student_data, key)
    result = binary_search(sorted_students, key, value)

    if result != -1:
        print("\n查询结果:\n姓名: {}\n学号: {}\n房号: {}".format(
            sorted_students[result].name,
            sorted_students[result].num,
            sorted_students[result].room
        ))
    else:
        print("未找到该学生信息。")

def main():
    room_system = RoomSystem()

    while True:
        print("\n1. 添加学生信息")
        print("2. 查询学生信息")
        print("3. 退出")

        choice = int(input("请输入选项:"))

        if choice == 1:
            add_student(room_system)
        elif choice == 2:
            print("\n1. 姓名查询\n2. 学号查询\n3. 房号查询")
            num = int(input("输入查询学生的个数:"))
            for _ in range(num):
                search_choice = int(input("请输入查询关键字:"))
                search_value = input("请输入查询值:")
                key = ""
                if search_choice == 1:
                    key = "name"
                elif search_choice == 2:
                    key = "num"
                elif search_choice == 3:
                    key = "room"
                else:
                    print("\n无效的查询关键字。")
                    continue

                room_system.all_student_data = quick_sort(room_system.all_student_data, key)
                search_student(room_system, key, search_value)
        elif choice == 3:
            print("已退出系统")
            break
        else:
            print("无效选项,请重新输入。")

if __name__ == "__main__":
    main()

 


(Java)详细代码设计

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

class Student {
    String name;
    String num;
    String room;

    public Student(String name, String num, String room) {
        this.name = name;
        this.num = num;
        this.room = room;
    }
}

class RoomSystem {
    ArrayList allStudentData = new ArrayList<>();
    int size = 0;
}

public class DormitoryManagementSystem {

    public static void addStudent(RoomSystem roomSystem) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入需要添加学生信息的数量:");
        int number = scanner.nextInt();

        for (int i = 1; i <= number; i++) {
            if (roomSystem.size < 60) {
                System.out.printf("输入第%d名学生信息\n姓名:", i);
                String name = scanner.next();
                System.out.print("学号:");
                String num = scanner.next();
                System.out.print("房号:");
                String room = scanner.next();

                Student student = new Student(name, num, room);
                roomSystem.allStudentData.add(student);
                roomSystem.size++;
                System.out.println("学生信息添加成功");
            } else {
                System.out.println("学生人数已满,无法添加");
            }
        }
    }

    public static void quickSort(ArrayList studentList, final String key) {
        Collections.sort(studentList, Comparator.comparing(s -> {
            switch (key) {
                case "name":
                    return s.name;
                case "num":
                    return s.num;
                case "room":
                    return s.room;
                default:
                    return "";
            }
        }));
    }

    public static int binarySearch(ArrayList studentList, String key, String value) {
        int low = 0;
        int high = studentList.size() - 1;

        while (low <= high) {
            int mid = (low + high) / 2;
            int compareResult = switch (key) {
                case "name" -> studentList.get(mid).name.compareTo(value);
                case "num" -> studentList.get(mid).num.compareTo(value);
                case "room" -> studentList.get(mid).room.compareTo(value);
                default -> 0;
            };

            if (compareResult == 0) {
                return mid;
            } else if (compareResult > 0) {
                high = mid - 1;
            } else {
                low = mid + 1;
            }
        }

        return -1;
    }

    public static void searchStudent(RoomSystem roomSystem, String key, String value) {
        quickSort(roomSystem.allStudentData, key);
        int result = binarySearch(roomSystem.allStudentData, key, value);

        if (result != -1) {
            System.out.printf("\n查询结果:\n姓名: %s\n学号: %s\n房号: %s\n",
                    roomSystem.allStudentData.get(result).name,
                    roomSystem.allStudentData.get(result).num,
                    roomSystem.allStudentData.get(result).room);
        } else {
            System.out.println("未找到该学生信息。");
        }
    }

    public static void main(String[] args) {
        RoomSystem roomSystem = new RoomSystem();
        Scanner scanner = new Scanner(System.in);

        while (true) {
            System.out.println("\n1. 添加学生信息");
            System.out.println("2. 查询学生信息");
            System.out.println("3. 退出");

            System.out.print("请输入选项:");
            int choice = scanner.nextInt();

            if (choice == 1) {
                addStudent(roomSystem);
            } else if (choice == 2) {
                System.out.println("\n1. 姓名查询\n2. 学号查询\n3. 房号查询");
                System.out.print("输入查询学生的个数:");
                int num = scanner.nextInt();
                for (int i = 0; i < num; i++) {
                    System.out.print("请输入查询关键字:");
                    int searchChoice = scanner.nextInt();
                    System.out.print("请输入查询值:");
                    String searchValue = scanner.next();

                    String key;
                    switch (searchChoice) {
                        case 1 -> key = "name";
                        case 2 -> key = "num";
                        case 3 -> key = "room";
                        default -> {
                            System.out.println("\n无效的查询关键字。");
                            continue;
                        }
                    }

                    searchStudent(roomSystem, key, searchValue);
                }
            } else if (choice == 3) {
                System.out.println("已退出系统");
                break;
            } else {
                System.out.println("无效选项,请重新输入。");
            }
        }
    }
}

测试数据及结果

 数据结构实验—宿舍管理系统(C,Python,Java三种代码版本)_第1张图片

 实验总结

哈哈,到了这里就得你们自己写喽 

喜欢的小伙伴记得点个关注,给个三连呐~ 

 

 

你可能感兴趣的:(数据结构,c语言,python,java,c++)