代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 100
typedef int keytype;
typedef struct{
keytype key;
char major[20];
char name[20];
char cl[20];
}recordtype;
typedef struct{
recordtype r[maxsize+1];
int length;
}table;
void init(table *tab){
tab->length=1;
}
void key(){
printf("\n 输入任意键以继续执行通讯录操作\n");
getchar();
getchar();
}
void add(table *tab){
if(tab->length==maxsize){
printf("顺序表已满!");
exit(1);
}
else{
printf("录入系别: ");scanf("%s",tab->r[tab->length].major);
printf("录入学号: ");scanf("%d",&(tab->r[tab->length].key));
printf("录入班级: ");scanf("%s",tab->r[tab->length].cl);
printf("录入姓名: ");scanf("%s",tab->r[tab->length].name);
tab->length++;
printf("录入成功,若要继续录入其他同学信息请返回主菜单继续操作");
}
}
void display(table *tab){
if(!tab->length){
printf("\n顺序表为空");
}
else{
for(int i=1;i<tab->length;i++){
printf("\n系别: %s",tab->r[i].major);
printf("\n学号: %d",tab->r[i].key);
printf("\n班级: %s",tab->r[i].cl);
printf("\n姓名: %s",tab->r[i].name);
printf("\n");
printf("\n");
printf("\n");
}
}
key();
}
void shellinsertsort(table *tab){
int i,j,d;
d=tab->length/2;
while(d>=1){
for(i=d+1;i<tab->length;i++){
tab->r[0]=tab->r[i];
j=i-d;
while(j>0&&tab->r[0].key<tab->r[j].key){
tab->r[j+d]=tab->r[j];
j=j-d;
}
tab->r[j+d]=tab->r[0];
}
d=d/2;
}
}
void seqsearch(table *tab) {
int k=tab->length-1;
int count=1;
char a[20];
printf("请输入查找系别:");scanf("%s",&a);
getchar();
for(int i=0;i<tab->length;i++){
if(strcmp(a,tab->r[k].major)==0){
printf("符合条件学生%d:",count);
printf("\n系别: %s",tab->r[i].major);
printf("\n学号: %d",tab->r[i].key);
printf("\n班级: %s",tab->r[i].cl);
printf("\n姓名: %s",tab->r[i].name);
printf("\n");
printf("\n");
printf("\n");
count++;
}
k--;
}
key();
}
int menu(){
int set;
printf("\n");
printf("\n");
printf("\n");
printf(" 校园借书证\n (输入对应按键以完成操作) \n");
printf("\n");
printf("\n");
printf("\n");
printf(" 1.添加学生信息\n");
printf(" 2.依据学生学号进行排序\n");
printf(" 3.依据系别查找当前系别的所有学生信息\n");
printf(" 4.展示目前存入的所有学生信息\n");
printf(" 5.返回主菜单\n");
printf("\n");
printf("\n");
printf("\n");
printf("请输入操作指令:");
scanf("%d",&set);
return set;
}
int main(){
table tab;
init(&tab);
int set=5;
while(set){
switch(menu()){
case 1:add(&tab);break;
case 2:shellinsertsort(&tab);break;
case 3:seqsearch(&tab);break;
case 4:display(&tab);break;
case 5:menu();break;
}
}
return 0;
}
以下为运行图: