问题描述
为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求:
(1)采用交互工作方式
(2)可以增加、删除、修改信息
(3)建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(选择、快速排序、堆排序等任选一种)
(4)查询 : a.按姓名查询 ;b.按学号查询 ;c按房号查询
(5)打印任一查询结果(可以连续操作)
代码
#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
*/