-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100//借书证信息记录个数的最大值
typedef struct{
char name[8];//姓名
int cardnum;//卡号
char major[10];//专业
char classnum[8];//班号
}libcardinfo; //借书证信息结点的结构体
typedef struct{
libcardinfo cardinfo;//定义借书证信息的记录
}recardinfo;//记录类型的定义
typedef struct{
recardinfo r[MAXSIZE+1];//r[0]一般不用于存放排序码,r为数组
int length;//待排序文件中记录的个数
}table;//待排序文件类型
void input(table *tab){//录入基本信息
tab->length=1;
char s='Y';
while((s=='y'||s=='Y')&&tab->length<=MAXSIZE)
{
printf("请输入借书卡号:");
scanf("%d",&tab->r[tab->length].cardinfo.cardnum);
printf("\n请输入持卡人姓名:");
scanf("%s",tab->r[tab->length].cardinfo.name);
printf("\n请输入持卡人专业:");
scanf("%s",tab->r[tab->length].cardinfo.major);
printf("\n请输入持卡人班级:");
scanf("%s",tab->r[tab->length].cardinfo.classnum);
printf("\n是否继续录入?\n");
getchar();
scanf("%c",&s);
tab->length++;//准备录入下一个同学信息
}
}
void print(libcardinfo *info)//输出卡的信息
{
printf("\t╔ ╗\n");
printf("\t 借书证卡号:%d\n",info->cardnum);
printf("\t 持卡人姓名:%s\n",info->name);
printf("\t 持卡人专业:%s\n",info->major);
printf("\t 持卡人班级:%s\n",info->classnum);
printf("\t╚ ╝\n");
}
void shellinsertsort(table *tab)//Shell插入排序
{
int i,j,d;
d=tab->length/2;
while(d>=1)
{
for(i=d+1;i<tab->length;i++)//从第i+1个元素开始,将所有元素有序插入相应分组中
{
tab->r[0]=tab->r[i];//保存第i个元素
j=i-d;//向前找插入位置
while(j>0&&tab->r[0].cardinfo.cardnum<tab->r[j].cardinfo.cardnum)//排序码比较找插入位置并排序
{
tab->r[j+d]=tab->r[j];//记录后移
j=j-d;//继续向前查找
}
tab->r[j+d]=tab->r[0];//插入第i个元素的副本
}
d=d/2;
}
for(i=1;i<tab->length;i++)//按卡号顺序输出信息
{
print(&tab->r[i].cardinfo);
}
}
void search(table *tab)
{
int i=1,j=1;
char major[10];
printf("\n请输入你要查找的专业:");
scanf("%s",major);
while(i<tab->length)
{
if(strcmp(tab->r[i].cardinfo.major,major)==0)
{
print(&tab->r[i].cardinfo);
j=0;
}
i++;
}
if(j) printf("\t没有该专业的信息\n");
}
int main()
{
int x,set=1;
table tab;
while(set)
{
printf("\t\t 1.录入借书证基本信息 \n");
printf("\t\t \n");
printf("\t\t 2.输出已有借书证信息 \n");
printf("\t\t \n");
printf("\t\t 3.专业名查借书证信息 \n");
printf("\t\t \n");
printf("\t\t 4.退出借书证管理系统 \n");
printf("\t\t \n");
printf("请选择:");
scanf("%d",&x);
printf("\n");
switch(x)
{
case 1:input(&tab);
break;
case 2://quicksort(tab,1,10);
shellinsertsort(&tab);
break;
case 3:search(&tab);
break;
case 4:set=0;
printf("\t\t系统推出成功!\n");
}
}
return 0;
}Metadata
Metadata
Assignees
Labels
No labels


