17070047 / 17070047/CodeStructureCourse
武智鹏
- Lingua principale
- C++
- Stelle
- 16
- Fork
- 2
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
```c
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAXSIZE 100
typedef struct {
char cardnum[30];
char id[25];
char name[30];
char specialty[30];
char classnum[30];
}stu;
typedef struct{
stu r[MAXSIZE];
int length;
}table;
void create(table *tab,char *filename)
{
int i;
FILE *fp;
fp=fopen(filename,"r");
printf("输入学生个数:\n");
if(fp)
{
fscanf(fp,"%d",&tab->length);
for(i=1;i<=tab->length;i++)
{
fscanf(fp,"%s",tab->r[i].cardnum);
fscanf(fp,"%s",tab->r[i].id);
fscanf(fp,"%s",tab->r[i].name);
fscanf(fp,"%s",tab->r[i].specialty);
fscanf(fp,"%s",tab->r[i].classnum);
}
printf("学生信息读入成功!\n");
}
else
printf("学生信息读入失败!\n");
}
void print(table *tab)
{
int i;
if (tab->length!= 0)
{
printf("输出所有的学生信息:\n");
printf("%22s%15s%12s%20s%18s\n", "借书卡号", "专业", "姓名", "班级号", "学号");
for(i = 1;i<=tab->length; i++)
printf("%20s%20s%10s%20s%20s\n", tab->r[i].cardnum, tab->r[i].specialty, tab->r[i].name, tab->r[i].classnum, tab->r[i].id);
}
else
printf("借书证系统还没有借书记录!!\n");
}
void cardnumsort(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(strcmp(tab->r[i].cardnum,tab->r[mid].cardnum)<0)
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 classnumsort(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(strcmp(tab->r[i].classnum,tab->r[mid].classnum)<0)
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 specialtysort(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(strcmp(tab->r[i].specialty,tab->r[mid].specialty)<0)
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 idsort(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(strcmp(tab->r[i].id,tab->r[mid].id)<0)
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];
}
}
int namesearch(table *tab,char *key)
{
int low=1,high=tab->length,mid;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(tab->r[mid].name,key)==0)
return mid;
else if(strcmp(tab->r[mid].name,key)>0)
high=mid-1;
else
low=mid+1;
}
return -1;
}
int cardnumsearch(table *tab,char *key)
{
int low=1,high=tab->length,mid;
while(low<=high)
{
mid=(low+high)/2;
if(strcmp(tab->r[mid].cardnum,key)==0)
return mid;
else if(strcmp(tab->r[mid].cardnum,key)>0)
high=mid-1;
else
low=mid+1;
}
return -1;
}
void sort()
{
printf("1.对卡号排序并输出\n");
printf("2.对学号排序并输出\n");
printf("3.对班级排序并输出\n");
printf("4.对学院排序并输出\n");
printf("5.输出指定卡号\n");
printf("6.输出指定姓名\n");
printf("7.输出指定班号\n");
printf("8.输出指定学院\n");
}
void menu(table *tab)
{
int i=1,c;
char key1[30],key2[30],key3[30],key4[30];
int result1, result2;
printf("输入操作选项:\n");
scanf("%d",&c);
switch(c)
{
case 1:
{
cardnumsort(tab);
print(tab);
menu(tab);
}
break;
case 2:
{
idsort(tab);
print(tab);
menu(tab);
}
break;
case 3:
{
classnumsort(tab);
print(tab);
menu(tab);
}
break;
case 4:
{
specialtysort(tab);
print(tab);
menu(tab);
}
break;
case 5:
{
printf("输入要查找的卡号:\n");
scanf("%s",&key1);
result1=cardnumsearch(tab,key1);
if(result1!=-1)
{
printf("%22s%15s%12s%20s%18s\n", "借书卡号", "专业", "姓名", "班级号", "学号");
printf("%20s%20s%10s%20s%20s\n", tab->r[result1].cardnum, tab->r[result1].specialty,tab->r[result1].name, tab->r[result1].classnum, tab->r[result1].id);
}
else
printf("没有找到该借书证信息!\n");
menu(tab);
}
break;
case 6:
{
printf("输入要查找的姓名:\n");
scanf("%s",&key2);
result2=namesearch(tab,key2);
if(result2!=-1)
{
printf("%22s%15s%12s%20s%18s\n", "借书卡号", "专业", "姓名", "班级号", "学号");
printf("%20s%20s%10s%20s%20s\n", tab->r[result2].cardnum, tab->r[result2].specialty,tab->r[result2].name, tab->r[result2].classnum, tab->r[result2].id);
}
else
printf("没有找到该借书证信息!\n");
menu(tab);
}
break;
case 7:
{
printf("输入要查找的班级:\n");
scanf("%s",&key3);
printf("%22s%15s%12s%20s%18s\n", "借书卡号", "专业", "姓名", "班级号", "学号");
while(i<=tab->length&&i>=1)
{
if (strcmp(tab->r[i].classnum,key3) == 0)
{
printf("%20s%20s%10s%20s%20s\n", tab->r[i].cardnum, tab->r[i].specialty,
tab->r[i].name, tab->r[i].classnum, tab->r[i].id);
}
i++;
}
menu(tab);
}
break;
case 8:
{
printf("输入要查找的学院:\n");
scanf("%s",&key4);
printf("%22s%15s%12s%20s%18s\n", "借书卡号", "专业", "姓名", "班级号", "学号");
while(i<=tab->length&&i>=1)
{
if (strcmp(tab->r[i].specialty,key4) == 0)
{
printf("%20s%20s%10s%20s%20s\n", tab->r[i].cardnum, tab->r[i].specialty,
tab->r[i].name, tab->r[i].classnum, tab->r[i].id);
}
i++;
}
menu(tab);
}
break;
default:
printf("已退出!\n");
exit(0);
break;
}
}
int main()
{
table tab;
char filename[]="D:\\jsz.txt";
create(&tab,filename);
print(&tab);
sort();
menu(&tab);
return 0;
}
```


Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.