-
Notifications
You must be signed in to change notification settings - Fork 2
Description
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define m 100
typedef int keytype;
typedef struct{
int number;//卡号
char name[10];//姓名
char depart[10];//系名
char class_num;//班号
}student;
typedef struct{
student r[m+5];
int length;
}table;
void creat(table *tab)
{
printf("输入总个数:");
scanf("%d",&tab->length);
printf("\n输入每个成员信息:\n");
for(int i=1;i<=tab->length;i++)
{
printf("姓名:");
scanf("%s",&tab->r[i].name);
printf("卡号:");
scanf("%d",&tab->r[i].number);
printf("班号:");
scanf("%s",&tab->r[i].class_num);
printf("系名:");
scanf("%s",&tab->r[i].depart);
printf("\n");
}
}
//直接排序算法
void insertsort(table *tab)
{
int i,j;
for(i=2;i<=tab->length;i++)
{
j=i-1;
tab->r[0]=tab->r[i];
while(tab->r[0].numberr[j].number)
{
tab->r[j+1]=tab->r[j];
j--;
}
tab->r[j+1]=tab->r[0];
}
}
//二分法插入排序算法
void binarysort(table *tab)
{
int i,j,left,right,mid;
for(i=2;i<=tab->length;i++)
{
tab->r[0]=tab->r[i];
left=1;right=i-1;
while(left<=right)
{
mid=(left+right)/2;
if(tab->r[i].numberr[mid].number)
right=mid-1;
else
left=mid+1;
}
for(j=i-1;j>=left;j--)
tab->r[j+1]=tab->r[j];
tab->r[left]=tab->r[0];
}
}
//快速排序
void quicksort(table *tab,int left,int right)
{
int i,j;
if(left<right)
{
i=left;j=right;
tab->r[0]=tab->r[i];
do{
while(tab->r[j].number>tab->r[0].number&&i<j) j--;
if(i<j){
tab->r[i]=tab->r[j];i++;
}
while(tab->r[i].numberr[0].number&&i<j) i++;
if(i<j){
tab->r[j]=tab->r[i];j--;
}
}while(i!=j);
tab->r[i]=tab->r[0];
quicksort(tab,left,i-1);
quicksort(tab,i+1,right);
}
}
void output(student x)
{
printf("姓名:%s 卡号:%d 班号:%s 系名:%s\n",x.name,x.number,x.class_num,x.depart);
}
void outputall(table *tab)
{
for(int i=1;i<=tab->length;i++)
{
printf("姓名:%s 卡号:%d 班号:%s 系名:%s \n",tab->r[i].name,tab->r[i].number,tab->r[i].class_num,tab->r[i].depart);
}
}
void search(table *tab)
{
char s[20];
printf("输入要查找的系名:\n");
scanf("%s",s);
int flag=0;
for(int i=1;i<=tab->length;i++)
{
if(!strcmp(s,tab->r[i].major)){
output(tab->r[i]);flag++;
}
}
if(!flag) printf("不存在\n");
}
void role()
{
printf("1:创建\t2:输出\t3:查找\t0:结束\n");
}
int main()
{
table tab;
int cmd;
role();
while(scanf("%d",&cmd)!=EOF)
{
switch(cmd)
{
case 1:creat(&tab);
case 4:quicksort(&tab,1,tab.length);break;
case 2:outputall(&tab);break;
case 3:search(&tab);break;
case 0:printf("退出成功");return 0;
default:printf("请重新输入!");
}
role();
}
return 0;
}

