-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
#include<stdio.h>
#include<stdlib.h>
#define N 50
#define M 200
typedef struct node {
int id; //卡号
char name[N]; //姓名
int classid; //班号
char major[N]; //系别
} messagenode;
typedef struct {
messagenode adjlist[M];
int s; //学生人数
}student;
void creat(student *A,char file[]) //从文件录入每个学生的信息
{
int i,j,k;
FILE *fp;
fp=fopen(file,"r");
if (fp==NULL)
{
printf("打开文件失败!");
exit;
}
fscanf(fp,"%d",&A->s); //得到学生人数
for (i=0;i<A->s;i++)
{
fscanf(fp,"%d",&A->adjlist[i].id); //卡号
fscanf(fp,"%ls",&A->adjlist[i].name); //姓名
fscanf(fp,"%d",&A->adjlist[i].classid); //班号
fscanf(fp,"%ls",&A->adjlist[i].major); //系别
}
fclose(fp);
}
void poposort(student *A) //对卡号进行冒泡排序 卡号按照从小到大顺序排列
{
int i,j;
messagenode p;
for (i=0;i<A->s;i++)
for (j=0;j<A->s-i-1;j++)
{
if (A->adjlist[j].id>A->adjlist[j+1].id)
{
p=A->adjlist[j];
A->adjlist[j]=A->adjlist[j+1];
A->adjlist[j+1]=p;
}
}
}
void search(student *A,char major1[N]) //按系名进行检索
{
int i;
for (i=0;i<A->s;i++)
{
for (int j=0;j<N;j++)
{
if(A->adjlist[i].major[j]!=major1[j])
break;
if(j==N-1)
{
printf("%3d %ls %4d %ls",A->adjlist[i].id,A->adjlist[i].name,A->adjlist[i].classid,A->adjlist[i].major);
printf("\n");
}
}
}
}
int main ()
{
student S;
char m[N];
char filename[]="text2.txt";
creat(&S,filename);
printf("卡号 姓名 班号 系别\n");
for (int i=0;i<S.s;i++)
{
printf("%3d %ls %4d %ls",S.adjlist[i].id,S.adjlist[i].name,S.adjlist[i].classid,S.adjlist[i].major);
printf("\n");
}
poposort(&S);
printf("输出按卡号排序后的表:\n");
printf("卡号 姓名 班号 系别\n");
for (int i=0;i<S.s;i++)
{
printf("%3d %ls %4d %ls",S.adjlist[i].id,S.adjlist[i].name,S.adjlist[i].classid,S.adjlist[i].major);
printf("\n");
}
printf("请输入系别:");
scanf("%ls",&m);
printf("卡号 姓名 班号 系别\n");
search(&S,m);
return 0;
} Metadata
Metadata
Assignees
Labels
No labels
