宿舍管理查询软件

问题描述

为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:

(1)采用交互工作方式

(2)可以增加、删除、修改信息

(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)

(4)查询  : a.按姓名查询 ;b.按学号查询 ;c按房号查询

(5)打印任一查询结果(可以连续操作)

 

算法设计

   算法思想:

           主要就是排序的应用,从文件读入信息存在线性表中,实现一些对这些信息的基本操作,然后就是各种排序的应用,在这里主要用到了选择排序是循环然后一次比较。

   算法设计

           本程序主要包括主要包括以下几部分以及各函数的功能如下:

  1. 主函数:主函数主要包括功能菜单,定义线性表,各功能的选择实现,调用各函数。
  2. 显示学生信息函数DisPlay(StQueue &st)遍历表输出所有的学生信息。
  3. 读取学生信息函数Read(StQueue &st)

定义文件流,从建立好的文件中读取学生信息,将读取出的信息赋值给线性表中相应的变量。

    4.添加学生信息函数Add(StQueue &st)

     先输入要添加的学生的个数,然后循环添加,先输入学生的具体信息,然后复制给相应的变量。

    5.编辑学生信息函数Edit(StQueue &st)

先输入要编辑的学生的个数,然后进行循环,先输入要编辑的学生的学号,然后查询学号当找到与之相对应的之后将新输入的新的学生信息替换原本信息实现编辑。

     6.  删除学生信息函数Delete(StQueue &st):  

                   输入要删除的学生的个数,然后循环删除,输入要删除的学生的学号,然后遍历查找,找到相对应的之后,将其删除。

     7.  查询学生信息函数Query (StQueue st)

                   有三种查询方式,按照姓名、学号、房号进行查询,在这个函数外写三个函数依次是按照这三种方式查询,其具体思路是一样的都是遍历所有信息找到与输入信息相匹配的学生信息时,将该学生的全部信息输出。

      8.  对学生信息进行排序函数Pai(StQueue &st)

                   有三种排序依据方式,按照姓名、学号、房号进行排序,在这个函数外写三个函数依次是按照这三种方式排序,其具体思路是一样的写二层for循环进行选择排序,然后在这个函数中调用。

    函数间的关系

 

        

代码

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
const int max_size=1000;
const int n=7;

typedef struct
{
    char name[20];
    char num[20];
    char dnum[10];
}StudentType;

typedef struct
{
    StudentType x[max_size];
    int length;
}StQueue;

void DisPlay(StQueue &st){
    printf("全部的学生信息如下:\n");
    printf("学号\t姓名\t房号\n");
    for(int i=1;i<=st.length;i++)
        printf("%s\t%s\t%s\n",st.x[i].num,st.x[i].name,st.x[i].dnum);
    printf("\n");
    system("pause");
    system("cls");
}

void Read(StQueue &st){
    FILE *fp;
    char na[20],nu[20],dnu[10];
    if((fp=fopen("C:\\ww\\xue.txt","r"))==NULL){
        printf("文件读取发生错误!\n");
        return;
    }
    st.length=0;
    while(!feof(fp)){
        fscanf(fp,"%s%s%s",nu,na,dnu);
        st.length++;
        strcpy(st.x[st.length].num,nu);
        strcpy(st.x[st.length].name,na);
        strcpy(st.x[st.length].dnum,dnu);
        if(st.length==n){
            printf("文件数据已全部导入!\n");
            printf("当前药品数量为:%d\n",st.length);
            DisPlay(st);
            break;
        }
    }
}

void Add(StQueue &st){
    printf("请输入要增加的学生的个数:\n");
    int k;
    scanf("%d",&k);
    for(int i=1;i<=k;i++){
        printf("请输入第%d个学生的信息:\n",i);
        printf("[提示:按学号、姓名、房号的顺序输入.]\n");
        st.length++;
        cin>>st.x[st.length].num>>st.x[st.length].name>>st.x[st.length].dnum;
        printf("添加成功!\n\n");
    }
    printf("现在一共有%d个学生的信息.\n\n",st.length);
    system("pause");
    system("cls");
}

void Edit(StQueue &st){
    printf("请输入要编辑的学生的个数:\n");
    int k,flag=1;
    scanf("%d",&k);
    for(int j=1;j<=k;j++){
        printf("请输入要编辑的第%d个学生的学号:\n",j);
        char nu[20];
        cin>>nu;
        for(int i=1;i<=st.length;i++){
            if(strcmp(nu,st.x[i].num)==0){
                printf("该学生当前信息如下:\n");
                printf("学号:%s\n姓名:%s\n房号:%s\n",st.x[i].num,st.x[i].name,st.x[i].dnum);
                printf("请输入该学生的新信息:\n");
                printf("[提示:按学号、姓名、房号的顺序输入.]\n");
                cin>>st.x[i].num>>st.x[i].name>>st.x[i].dnum;
                printf("\n");
                printf("修改成功!\n\n");
                flag=0;
                break;
            }
        }
        if(flag==1)
            printf("无该学生的信息!\n");
    }
    printf("现在一共有%d个学生的信息.\n\n",st.length);
    system("pause");
    system("cls");
}

void Delete(StQueue &st){
    printf("请输入要删除的学生的个数:\n");
    int k,flag=1;
    scanf("%d",&k);
    for(int j=1;j<=k;j++){
        printf("请输入要删除的第%d个学生的学号:\n",j);
        char nu[20];
        cin>>nu;
        for(int i=1;i<=st.length;i++){
            if(strcmp(nu,st.x[i].num)==0){
                for(int p=i;p<=st.length-1;p++)
                    st.x[p]=st.x[p+1];
                printf("删除成功!\n\n");
                st.length--;
                flag=0;
                break;
            }
        }
        if(flag==1)
            printf("无该学生的信息!\n");
    }
    printf("现在一共有%d个学生的信息.\n\n",st.length);
    system("pause");
    system("cls");
}

void Query1(StQueue st){
    printf("请输入学号:\n");
    char num[20];
    int flag=1;
    cin>>num;
    for(int i=1;i<=st.length;i++){
        if(strcmp(num,st.x[i].num)==0){
            printf("查询到的结果如下:\n");
            printf("学号:%s\n姓名:%s\n房号:%s\n\n",st.x[i].num,st.x[i].name,st.x[i].dnum);
            flag=0;
            break;
        }
    }
    if(flag==1)
        printf("没有该学生的信息!\n");
}
void Query2(StQueue st){
    printf("请输入姓名:\n");
    char name[20];
    int flag=1;
    cin>>name;
    for(int i=1;i<=st.length;i++){
        if(strcmp(name,st.x[i].name)==0){
            printf("查询到的结果如下:\n");
            printf("学号:%s\n姓名:%s\n房号:%s\n\n",st.x[i].num,st.x[i].name,st.x[i].dnum);
            flag=0;
        }
    }
    if(flag==1)
        printf("没有该学生的信息!\n");
}
void Query3(StQueue st){
    printf("请输入房号:\n");
    char dnum[20];
    int flag=1;
    cin>>dnum;
    printf("查询到的结果如下:\n");
    for(int i=1;i<=st.length;i++){
        if(strcmp(dnum,st.x[i].dnum)==0){
            printf("学号:%s\n姓名:%s\n房号:%s\n\n",st.x[i].num,st.x[i].name,st.x[i].dnum);
            flag=0;
        }
    }
    if(flag==1)
        printf("没有该学生的信息!\n");
}
void Query(StQueue st){
    printf("请选择查询的方式:\n");
    printf("   1.按学号查询.\n");
    printf("   2.按姓名查询.\n");
    printf("   3.按房号查询.\n");
    int a;
    scanf("%d",&a);
    switch(a){
        case 1:Query1(st);break;
        case 2:Query2(st);break;
        case 3:Query3(st);break;
    }
    system("pause");
    system("cls");
}

void Pai1(StQueue st){
    StudentType t;
    for(int i=1;i<=st.length;i++){
        int k=i;
        for(int j=i+1;j<=st.length;j++)
            if(strcmp(st.x[j].num,st.x[k].num)<0)
                k=j;
        if(k!=i){
            t=st.x[i];
            st.x[i]=st.x[k];
            st.x[k]=t;
        }
    }
    DisPlay(st);
}

void Pai2(StQueue st){
    StudentType t;
    for(int i=1;i<=st.length;i++){
        int k=i;
        for(int j=i+1;j<=st.length;j++)
            if(strcmp(st.x[j].name,st.x[k].name)<0)
                k=j;
        if(k!=i){
            t=st.x[i];
            st.x[i]=st.x[k];
            st.x[k]=t;
        }
    }
    DisPlay(st);
}

void Pai3(StQueue st){
    StudentType t;
    for(int i=1;i<=st.length;i++){
        int k=i;
        for(int j=i+1;j<=st.length;j++)
            if(strcmp(st.x[j].dnum,st.x[k].dnum)<0)
                k=j;
        if(k!=i){
            t=st.x[i];
            st.x[i]=st.x[k];
            st.x[k]=t;
        }
    }
    printf("按房号排序后结果如下:\n");
    DisPlay(st);
}

void Pai(StQueue &st){
    printf("请选择排序方式:\n");
    printf("    1.按学号排序.\n");
    printf("    2.按姓名排序.\n");
    printf("    3.按房号排序.\n");
    int a;
    scanf("%d",&a);
    switch(a){
        case 1:Pai1(st);break;
        case 2:Pai2(st);break;
        case 3:Pai3(st);break;
    }
}

int main()
{
    StQueue st;
    while(1){
        printf("--------欢迎来到宿舍查询系统----------\n\n");
        printf("         1.从文件读入学生信息.\n");
        printf("         2.打印全部学生信息.\n");
        printf("         3.增加学生信息.\n");
        printf("         4.删除学生信息.\n");
        printf("         5.修改学生信息.\n");
        printf("         6.按不同方式排序.\n");
        printf("         7.查询学生信息.\n");
        printf("         8.退出.\n\n");
        printf("---------------------------------------\n\n");
        printf("请输入您的选择:\n");
        int a;
        scanf("%d",&a);
        if(a==8){
            printf("-----------\n");
            printf("谢谢使用!\n");
            printf("-----------\n");
            break;
        }
        if(a!=1&&a!=2&&a!=3&&a!=4&&a!=5&&a!=6&&a!=7&&a!=8){
            printf("您输入的不符合要求,请重新输入!\n");
            continue;
        }
        switch(a){
            case 1:Read(st);break;
            case 2:DisPlay(st);break;
            case 3:Add(st);break;
            case 4:Delete(st);break;
            case 5:Edit(st);break;
            case 6:Pai(st);break;
            case 7:Query(st);break;
        }
    }
    return 0;
}
/*
添加:

201813 Yili 115
201821 Huaxi 128

删除:

201813
201821

修改:

201813
201821

201813 Yili 117
201821 Huaxi 138

*/

 

摘 要:本系统是为方便宿舍管理人员实现宿舍管理查询而开发的,具有信息录入、显示、查询排序、插入和删除功能,能实现信息修改和通过别的途径导入大量数据,但不能实现信息存盘,使用简单方便,点击“宿舍管理查询系统.exe”即可运行。(使用详解见“说明.txt”) 宿舍管理查询软件 1) 任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: A. 采用交互工作方式 B. 建立数据文件 ,数据文件按关键字(姓名学号房号)进行排序(冒泡、选择、插入排序等任选一种) 2) 查询菜单: (用二分查找实现以下操作) A. 按姓名查询 B. 按学号查询 C. 按房号查询 3) 打印任一查询结果(可以连续操作) 根据上述要求,我们开始考虑系统应具备的功能: (1)要实现交互工作方式,各项操作结束后均应返回主菜单; (2)系统本无任何信息数据,要建立数据文件,需开发一个信息录入功能,即首先创建一个学员线性表,同时我们可以将数据暂时保存在内存中,所以我们未开发信息存盘功能; (3)信息录入后都保存在内存中,用户看不到,需要设计一个信息显示功能,信息的显示应该便于查阅,所以需具备按各种关键字显示的功能; (4)本系统按关键字(姓名学号房号)进行冒泡排序,采用二分查找方式分别实现按关键字(姓名学号房号查询功能; (5)由于有些同学因为不同原因而离校,所以设计了删除功能; (6)由于有新同学入校,所以设计了插入功能; (7)当用户操作完毕需要退出时,我们提供了退出选项,便于使用者退出交互式工作
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值