C语言决赛代码

简介: #include#include#includestruct book{int num;char bname[50];char wname[20];char press[50];char sort[50];int time;float p...
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct book
{
int num;
char bname[50];
char wname[20];
char press[50];
char sort[50];
int time;
float price;
    struct book *next;
};
struct book *creatbook();                          //创建链表
struct book *addbook(struct book *head);           //添加图书
int yanzheng(struct book *head,int m);             //验证新添加的图书编码是否已存在
void deletebook(struct book *head);                //删除图书
void fprint(struct book *head);                    //将链表写入文件
struct book *load();                               //从文件中读取信息并建成链表
void print_book(struct book *head);                //将链表信息输出
void chaxun(struct book *head);                    //查询图书信息
void num_chaxun(struct book *head);                //按图书编号查询图书
void wname_chaxun(struct book *head);              //按作者名查询图书
void sort_chaxun(struct book *head);               //按类别查询图书
void time_chaxun(struct book *head);               //按出版时间查询图书
void bname_chaxun(struct book *head);              //按图书名查询图书
void xiugai(struct book *head);                    //修改图书信息
void paixu(struct book *head);                     //对图书进行排序
void num_paixu(struct book *head);                 //按图书编号排序
void time_paixu(struct book *head);                //按图书出版时间排序
void price_paixu(struct book *head);               //按图书价格排序
void bname_paixu(struct book *head);               //按图书名排序
void wname_paixu(struct book *head);               //按作者名排序
int main()
{
int choice,n,x,y=1,c,c1=1234;
char a,d,b[10],b1[10]="yjk";
struct book *head=NULL;
while(y){

system("cls");
        printf("\n\n\n\n\n\n\n");
   printf("                         ********** 欢迎光临 **********\n\n");
   printf("         ********************** 图书信息管理系统 ************************\n\n\n");
printf("\n\n");
printf("                      ============1-用户登录===========\n");
printf("                      ============0-退出系统===========\n");
printf("       请输入您的选择:");
scanf("%d",&n);
printf("\n");
getchar();
switch(n){
case 0:
y=0;
break;
case 1:
   printf("       请输入您的用户名:");
        gets(b);
   printf("\n");
   printf("       请输入您的密码:");
   scanf("%d",&c);
   printf("\n");
   if(strcmp(b,b1)!=0||c!=c1){
      printf("           验证失败,请重新输入!\n");
  scanf("%c",&d);
      getchar();
      system("cls");
} 
     else{
   printf("             验证通过!请按Enter键进入!\n");
   scanf("%c",&d);
   getchar();
   x=1;


       while(x){
           system("cls");
           printf("                             ------------------\n");
           printf("                             *图书信息管理系统*\n");
             printf("                             ------------------\n\n");
                printf("               **********************************************\n\n");
                printf("               **********************************************\n\n");
                printf("               || 1-添加图书                    2-删除图书 ||\n\n");
                printf("               || 3-图书列表                    4-图书排序 ||\n\n");
                printf("               || 5-查询图书                    6-修改图书 ||\n\n");
                printf("               || 7-录入数据                    0-退出系统 ||\n\n");          
                printf("               **********************************************\n\n");
                printf("               **********************************************\n\n");
           printf("请输入所选择的序号:");
           scanf("%d",&choice);
           getchar();
           system("cls");
           switch(choice)
{
           case 0:
      x=0;break;
       case 1:
      head=load();
      if(head==NULL){
     printf("文件为空,请先录入数据!\n");
     getchar();
     break;
  }
     else{
    head=addbook(head);
    printf("添加成功!\n");
                     printf("是否将新信息保存到文件?(y/n)\n");
                     scanf("%c",&a);
    getchar();
    switch(a){
    case 'n':
    break;
    case 'y':
        fprint(head);
    printf("保存成功!\n");
    getchar();
        break;
}
    break;
 }

      case 2:
    head=load();
                 if(head==NULL){
    printf("文件为空,请先录入数据!\n");
    getchar();
    break;
}
 
    else{
    deletebook(head);
                     getchar();
    break;
    }
break;
      case 3:
                 head=load();
    if(head==NULL){
    printf("文件为空,请先录入数据!\n");
    getchar();
    break;
}
    else{
    print_book(head);
    getchar();
    break;
}
      case 4:
                 head=load();
    if(head==NULL){
    printf("文件为空,请先录入数据!\n");
    getchar();
    break;
}
    else{
    paixu(head);
    getchar();
}
    break;
               case 5:
                     head=load();
        if(head==NULL){
        printf("文件为空,请先录入数据!\n");
        getchar();
        break;
}
    else{
    chaxun(head);
    getchar();
}
    break;
      case 6:
                   head=load();
      if(head==NULL){
      printf("文件为空,请先录入数据!\n");
      getchar();
      break;
  }
  else{
  xiugai(head);
  getchar();
                       break;
  }
  break;
               case 7:
        printf("注意:输入图书编码为0时结束!\n");
                     head=creatbook();
                     printf("是否将输入的信息保存到文件以覆盖文件中已存在的信息?(y/n)\n");
                     getchar();
    scanf("%c",&a);
    getchar();
switch(a){
case 'n':
    break;
    case 'y':
        fprint(head);
    printf("保存成功!\n");
    getchar();
    break;
}
    break;
      default:
      printf("您的输入有误,请重新输入!\n");
      getchar();
      break;
}

}
}
break;
default:
printf("        您的输入有误!  请重新输入!\n");
getchar();
break;
}
}
} 
//录入数据并形成链表
struct book *creatbook()
{
struct book *head,*tail,*p;
int num,time,n;
char bname[50],wname[20],press[50],sort[50];
float price;
int size=sizeof(struct book);
head=tail=NULL;
printf("请输入图书编号:");
scanf("%d",&num);
    printf("请输入图书名:");
    scanf("%s",bname);
getchar();
    printf("请输入作者名:");
    scanf("%s",wname);
getchar();
    printf("请输入出版社:");
    scanf("%s",press);
getchar();
printf("请输入类别:");
    scanf("%s",sort);
getchar();
    printf("请输入出版时间:");
    scanf("%d",&time);
getchar();
    printf("请输入价格:");
    scanf("%f",&price);
getchar();
while(1){
p=(struct book *)malloc(size);
p->num=num;
strcpy(p->bname,bname);
strcpy(p->wname,wname);
strcpy(p->press,press);
strcpy(p->sort,sort);
p->time=time;
p->price=price;
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
do
{
        printf("请输入图书编号:");
   scanf("%d",&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf("您输入的编号已存在,请重新输入!\n");
}
while(1);
if(num==0)
break;
else
{ 
printf("请输入图书名:");
scanf("%s",bname);
getchar();
printf("请输入作者名:");
scanf("%s",wname);
getchar();
printf("请输入出版社:");
scanf("%s",press);
getchar();
printf("请输入类别:");
scanf("%s",sort);
getchar();
printf("请输入出版时间:");
scanf("%d",&time);
getchar();
printf("请输入价格:");
scanf("%f",&price);
getchar();
}
}
return head;
}


//插入结点,并且插入后仍按一定顺序
struct book *addbook(struct book *head)
{


struct book *ptr,*p1,*p2,*p;
    char bname[50],wname[20],press[50],sort[50];
int size=sizeof(struct book);
    int num,time,n=1;
float price;
do{
        printf("请输入图书编号:");
   scanf("%d",&num);
n=yanzheng(head,num);
if(n==0)
break;
else
printf("您输入的编号已存在,请重新输入!\n");
}while(1);
    printf("请输入图书名:");
    scanf("%s",bname);
getchar();
    printf("请输入作者名:");
    scanf("%s",wname);
getchar();
    printf("请输入出版社:");
    scanf("%s",press);
getchar();
printf("请输入类别:");
    scanf("%s",sort);
getchar();
    printf("请输入出版时间:");
    scanf("%d",&time);
getchar();
    printf("请输入价格:");
    scanf("%f",&price);
getchar();
p=(struct book *)malloc(size);
    p->num=num;
    strcpy(p->bname,bname);
strcpy(p->wname,wname);
strcpy(p->press,press);
strcpy(p->sort,sort);
p->time=time;
p->price=price;
p2=head;
ptr=p;
while((ptr->num>p2->num)&&(p2->next!=NULL)){
p1=p2;
p2=p2->next;
}
if(ptr->num<=p2->num){
if(head==p2)
head=ptr;
else{
p1->next=ptr;
   p->next=p2;
}
}
else{
p2->next=ptr;
p->next=NULL;
}
return head;
}
//验证添加的图书编号是否已存在
int yanzheng(struct book *head,int m)
{
struct book *p;
p=head;
while(p!=NULL){
if(p->num==m)
break;
p=p->next;
}
if(p==NULL)
return 0;
else
return 1;
}


//将新链表写入文件中
void fprint(struct book *head)
{
FILE *fp;
char ch='1';
struct book *p1;
if((fp=fopen("D:/f1.txt","w"))==NULL){
printf("File open error!\n");
exit(0);
}
fputc(ch,fp);
for(p1=head;p1;p1=p1->next){
fprintf(fp,"%d %s %s %s %s %d %f\n",p1->num,p1->bname,p1->wname,p1->press,p1->sort,p1->time,p1->price);
}
fclose(fp);
}
//从文件中读取图书信息
struct book *load()
{
FILE *fp;
char ch;
struct book *head,*tail,*p1;
head=tail=NULL;
if((fp=fopen("f1.txt","r"))==NULL){
printf("File open error!\n");
exit(0);
}
ch=fgetc(fp);
if(ch=='1'){


   while(!feof(fp)){
   p1=(struct book *)malloc(sizeof(struct book));
   fscanf(fp,"%d%s%s%s%s%d%f\n",&p1->num,p1->bname,p1->wname,p1->press,p1->sort,&p1->time,&p1->price);
   if(head==NULL)
   head=p1;
   else
   tail->next=p1;
   tail=p1;
}
   tail->next=NULL;
   fclose(fp);
        return head;
}
else
return NULL;

}
//将整个链表的信息输出
void print_book(struct book *head)
{
struct book *ptr;
if(head==NULL){
printf("\n没有信息!\n");
return;
}
printf("                                 图书信息列表如下\n");
printf("            ==========================================================\n");
printf("             编号   图书名   作者名   出版社   类别   出版时间   价格\n");
for(ptr=head;ptr;ptr=ptr->next)
printf("              %d       %s        %s        %s       %s       %d     %.2f\n",ptr->num,ptr->bname,ptr->wname,ptr->press,ptr->sort,ptr->time,ptr->price);
printf("            ==========================================================\n");
}
//删除图书信息
void deletebook(struct book *head)
{
int a;
char b,ch='1';
struct book *p1,*p2;
FILE *fp;
printf("请输入要删除的图书编号:");
scanf("%d",&a);
    p1=head;
    if(p1->num==a&&p1->next==NULL){          //对于文件中只有一组数据
printf("是否清空文件!(y/n)\n");
getchar();
scanf("%c",&b);
getchar();
switch(b){
case 'n':
break;
case 'y':


            if((fp=fopen("f1.txt","w"))==NULL){
       printf("File open error!\n");
       exit(0);
}
            fclose(fp);
printf("文件已清空!\n");
}
}
else{
        while(p1->num!=a&&p1->next!=NULL){
   p2=p1;
   p1=p1->next;
}
    
        if(p1->next==NULL){
       if(p1->num==a){
       p2->next=NULL;
                printf("是否确定从文件中彻底删除该图书?(y/n)\n");
   getchar();
                scanf("%c",&b);
         
                switch(b){
       case 'n':
      break;
           case 'y':
          fprint(head);
          printf("删除成功!\n");
              getchar();
              break;
}
}

   else{
      printf("没有找到要删除的数据!\n");
      getchar();
}
}
        else if(p1==head){
   head=p1->next;
            printf("是否确定从文件中彻底删除该图书?(y/n)\n");
   getchar();
            scanf("%c",&b);
         
   switch(b){
   case 'n':
              break;
       case 'y':
        fprint(head);
            printf("删除成功!\n");
                 getchar();
        break;
}

}
   else{
   p2->next=p1->next;
            printf("是否确定从文件中彻底删除该图书?(y/n)\n");
     getchar();
            scanf("%c",&b);
        
   switch(b){
   case 'n':
              break;
       case 'y':
        fprint(head);
            printf("删除成功!\n");
                 getchar();
        break;
}
}
}
      
}
//图书查询
void chaxun(struct book *head)
{
int a;
printf("               ==========================================================\n");
printf("                     ** 1-按图书编号查询        2-按图书名查询 **\n");
printf("                     ** 3-按图书类别查询        4-按作者名查询 **\n");
printf("                     ** 5-按出版时间查询        0-退出查询     **\n");
printf("               ==========================================================\n");
printf("请输入所选择的编号:");
scanf("%d",&a);
getchar();
switch(a){
case 0:
break;
case 1:
num_chaxun(head);
break;
case 2:
bname_chaxun(head);
break;
case 3:
sort_chaxun(head);
break;
case 4:
wname_chaxun(head);
break;
case 5:
time_chaxun(head);
break;
default:
printf("您的输入有误!\n");
break;
}
}
//按编号查询图书信息
void num_chaxun(struct book *head)
{
int a;
struct book *p; 
printf("请选择您要查询的图书编号:");
scanf("%d",&a);
getchar();
p=head;
    while(p!=NULL){
if(p->num==a)
break;
p=p->next;
}

if(p==NULL){
printf("没有找到该编号的图书!\n");
}
else{
printf("                        你所查询的图书信息如下\n");
printf(" =========================================================================\n");
printf(" **   编号    图书名    作者名    出版社    类别    出版时间     价格   **\n");
printf(" **    %d        %s         %s         %s        %s        %d       %.2f  **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);
printf(" =========================================================================\n");
}
}
//按图书名查询图书信息
void bname_chaxun(struct book *head)
{
char a[50];
int flag=0;
struct book *p; 
printf("请选择您要查询的图书名:");
gets(a);
p=head;
while(p!=NULL){
if(strcmp(p->bname,a)==0){
flag=1;
break;
}
p=p->next;
}
    if(flag==0){
printf("没有找到该图书名的图书!\n");

}
else{
    printf("                        你所查询的图书信息如下\n");
printf(" =========================================================================\n");
printf(" **   编号    图书名    作者名    出版社    类别    出版时间     价格   **\n");
    while(p!=NULL){
if(strcmp(p->bname,a)==0){
printf(" **    %d        %s         %s        %s         %s       %d        %.2f  **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);
}
    p=p->next;
}
    printf(" =========================================================================\n");
}

}
//按作者名查询图书信息
void wname_chaxun(struct book *head)
{
char a[50];
int flag=0;
struct book *p; 
printf("请选择您要查询的图书作者名:");
gets(a);
p=head;
    while(p!=NULL){
if(strcmp(p->wname,a)==0){
flag=1;
break;
}
p=p->next;
}
    if(flag==0){
printf("没有找到该图书名的图书!\n");

}
else{
    printf("                        你所查询的图书信息如下\n");
printf(" =========================================================================\n");
printf(" **   编号    图书名    作者名    出版社    类别    出版时间     价格   **\n");
    while(p!=NULL){
if(strcmp(p->wname,a)==0){
printf(" **    %d        %s         %s        %s         %s       %d        %.2f  **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);
flag=1;
}
    p=p->next;
}
    printf(" =========================================================================\n");
}

}
//按图书类别查询图书信息
void sort_chaxun(struct book *head)
{
char a[50];
int flag=0;
struct book *p; 
printf("请选择您要查询的图书类别:");
gets(a);
p=head;
    while(p!=NULL){
if(strcmp(p->sort,a)==0){
flag=1;
break;
}
p=p->next;
}
    if(flag==0){
printf("没有找到该图书名的图书!\n");

}
else{
    printf("                        你所查询的图书信息如下\n");
printf(" =========================================================================\n");
printf(" **   编号    图书名    作者名    出版社    类别    出版时间     价格   **\n");
    while(p!=NULL){
if(strcmp(p->sort,a)==0){
printf(" **    %d        %s         %s        %s         %s       %d        %.2f  **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);
flag=1;
}
    p=p->next;
}
    printf(" =========================================================================\n");
}
}
//按图书出版时间查询图书信息
void time_chaxun(struct book *head)
{
int a,flag=0;
struct book *p; 
printf("请选择您要查询的图书出版时间:");
scanf("%d",&a);
    getchar();
p=head;
    while(p!=NULL){
if(p->time==a){
flag=1;
break;
}
p=p->next;
}
    if(flag==0){
printf("没有找到该图书名的图书!\n");

}
else{
    printf("                        你所查询的图书信息如下\n");
printf(" =========================================================================\n");
printf(" **   编号    图书名    作者名    出版社    类别    出版时间     价格   **\n");
    while(p!=NULL){
if(p->time==a){
printf(" **    %d        %s         %s        %s         %s       %d        %.2f  **\n",p->num,p->bname,p->wname,p->press,p->sort,p->time,p->price);
flag=1;
}
    p=p->next;
}
    printf(" =========================================================================\n");
}
}
//修改图书信息
void xiugai(struct book *head)
{
int a,b;
char c;
struct book *p;
printf("请输入要修改的图书编号:");
scanf("%d",&a);
p=head;
while(p!=NULL){
if(p->num==a)
break;
p=p->next;
}
if(p==NULL){
printf("没有找到该编号的图书!\n");
getchar();
}
else{
printf("              ============================================================\n");
printf("              **  1-编号               2-图书名              3-作者名   **\n");
printf("              **  4-出版社             5-类别                6-出版时间 **\n");
printf("              **  7-价格               8-修改全部            0-放弃修改 **\n");
printf("              ============================================================\n");
printf("请选择你要修改的信息编号:");
scanf("%d",&b);
getchar();
switch(b){
case 1:
printf("请输入新编号:");
scanf("%d",&p->num);
printf("修改成功!\n");
getchar();
break;
case 2:
printf("请输入新图书名:");
gets(p->bname);
printf("修改成功!\n");
break;
case 3:
printf("请输入新作者名:");
gets(p->wname);
printf("修改成功!\n");
break;
case 4:
printf("请输入新出版社:");
gets(p->press);
printf("修改成功!\n");
break;
case 5:
printf("请输入新类别:");
gets(p->sort);
printf("修改成功!\n");
break;
case 6:
printf("请输入新出版时间:");
scanf("%d",&p->time);
printf("修改成功!\n");
getchar();
break;
case 7:
printf("请输入新价格:");
scanf("%f",&p->price);
printf("修改成功!\n");
getchar();
break;
case 8:
printf("请输入新图书编号:");
scanf("%d",&p->num);
            printf("请输入新图书名:");
            scanf("%s",p->bname);
       getchar();
            printf("请输入新作者名:");
            scanf("%s",p->wname);
       getchar();
            printf("请输入新出版社:");
            scanf("%s",p->press);
       getchar();
       printf("请输入新类别:");
            scanf("%s",p->sort);
       getchar();
            printf("请输入新出版时间:");
            scanf("%d",&p->time);
       getchar();
            printf("请输入新价格:");
            scanf("%f",&p->price);
       getchar();
printf("修改成功!\n");
getchar();
break;
case 0:
break;
default :
printf("您的输入有误!\n");
break;
}
        printf("是否将修改后的信息保存到文件中?(y/n)\n");
        scanf("%c",&c);
        getchar();
   switch(c){
case 'n':
break;
case 'y':
   fprint(head);
printf("保存成功!\n");
getchar();
break;
}
 
}
}
//图书排序
void paixu(struct book *head)
{
int a;
    printf("           ================================================================\n");
printf("                 **  1-按图书编号排序         2-按出版时间排序   **\n");
printf("                 **  3-按图书价格排序         4-按图书名排序     **\n");
printf("                 **  5-按作者名排序           0-取消排序操作     **\n");
printf("           ================================================================\n");
printf("请输入您选择的编号:");
scanf("%d",&a);
getchar();
switch(a){
case 0:
break;
case 1:
num_paixu(head);
break;
case 2:
time_paixu(head);
break;
case 3:
price_paixu(head);
break;
case 4:
bname_paixu(head);
break;
case 5:
wname_paixu(head);
break;
default:
printf("您的输入有误!\n");
break;
}
}


//按图书编号排序
void num_paixu(struct book *head)
{
struct book *a[1000],*p,*p1,*temp;
int i,k,index,n=0;
char b;
p1=head;
for(p=head;p;p=p->next)
n++;
for(i=0;i<n;i++){
a[i]=p1;
p1=p1->next;
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){
if(a[i]->num<a[index]->num)
index=i;
}
        temp=a[index];
a[index]=a[k];
a[k]=temp;
}
    printf("排序成功!\n");
printf("是否显示排序结果?(y/n)\n");
scanf("%s",&b);
    getchar();
switch(b){
case 'n':
break;
case 'y':
   printf("        ================================================================\n");
   printf("        ** 编号   图书名   作者名   出版社   类别   出版时间    价格  **\n");
   for(i=0;i<n;i++){
printf("        **  %d       %s        %s        %s        %s      %d      %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);
}
printf("        ================================================================\n");
break;
default:
printf("您的输入有误!\n");
break;
}
}
//按出版时间排序      
void time_paixu(struct book *head)
{
struct book *a[1000],*p,*p1,*temp;
int i,k,index,n=0;
char b;
p1=head;
for(p=head;p;p=p->next)
n++;
for(i=0;i<n;i++){
a[i]=p1;
p1=p1->next;
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){
if(a[i]->time<a[index]->time)
index=i;
}
        temp=a[index];
a[index]=a[k];
a[k]=temp;
}
printf("排序成功!\n");
printf("是否显示排序结果?(y/n)\n");
scanf("%s",&b);
    getchar();
switch(b){
case 'n':
break;
case 'y':
   printf("        ===============================================================\n");
   printf("        ** 编号   图书名   作者名   出版社   类别   出版时间    价格 **\n");
   for(i=0;i<n;i++){
printf("        **  %d       %s        %s        %s        %s      %d      %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);
}
printf("        ===============================================================\n");
break;
default:
printf("您的输入有误!\n");
break;
}
}
//按图书价格排序
void price_paixu(struct book *head)
{
struct book *a[1000],*p,*p1,*temp;
int i,k,index,n=0;
char b;
p1=head;
for(p=head;p;p=p->next)
n++;
for(i=0;i<n;i++){
a[i]=p1;
p1=p1->next;
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){
if(a[i]->price<a[index]->price)
index=i;
}
        temp=a[index];
a[index]=a[k];
a[k]=temp;
}
    printf("排序成功!\n");
printf("是否显示排序结果?(y/n)\n");
scanf("%s",&b);
    getchar();
switch(b){
case 'n':
break;
case 'y':
   printf("        ===============================================================\n");
   printf("        ** 编号   图书名   作者名   出版社   类别   出版时间    价格 **\n");
   for(i=0;i<n;i++){
printf("        **  %d       %s        %s        %s        %s      %d      %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);
}
printf("        ===============================================================\n");
break;
default:
printf("您的输入有误!\n");
break;
}
}         


//按图书名排序
void bname_paixu(struct book *head)
{
struct book *a[1000],*p,*p1,*temp;
int i,k,index,n=0;
char b;
p1=head;
for(p=head;p;p=p->next)
n++;
for(i=0;i<n;i++){
a[i]=p1;
p1=p1->next;
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){
if(strcmp(a[index]->bname,a[i]->bname)>0)
index=i;
}
        temp=a[index];
a[index]=a[k];
a[k]=temp;
}
    printf("排序成功!\n");
printf("是否显示排序结果?(y/n)\n");
scanf("%s",&b);
    getchar();
switch(b){
case 'n':
break;
case 'y':
   printf("        ===============================================================\n");
   printf("        ** 编号   图书名   作者名   出版社   类别   出版时间    价格 **\n");
   for(i=0;i<n;i++){
printf("        **  %d       %s        %s        %s        %s      %d      %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);
}
printf("        ===============================================================\n");
break;
default:
printf("您的输入有误!\n");
break;
}
}         

//按作者名排序
void wname_paixu(struct book *head)
{
struct book *a[1000],*p,*p1,*temp;
int i,k,index,n=0;
char b;
p1=head;
for(p=head;p;p=p->next)
n++;
//指针数组
for(i=0;i<n;i++){
a[i]=p1;
p1=p1->next;
}
for(k=0;k<n-1;k++){
index=k;
for(i=k+1;i<n;i++){
if(strcmp(a[index]->wname,a[i]->wname)>0)
index=i;
}
        temp=a[index];
a[index]=a[k];
a[k]=temp;
}
    printf("排序成功!\n");
printf("是否显示排序结果?(y/n)\n");
scanf("%s",&b);
    getchar();
switch(b){
case 'n':
break;
case 'y':
   printf("        ===============================================================\n");
   printf("        ** 编号   图书名   作者名   出版社   类别   出版时间    价格 **\n");
   for(i=0;i<n;i++){
printf("        **  %d       %s        %s        %s        %s      %d      %.2f **\n",a[i]->num,a[i]->bname,a[i]->wname,a[i]->press,a[i]->sort,a[i]->time,a[i]->price);
}
printf("        ===============================================================\n");
break;
default:
printf("您的输入有误!\n");
break;
}
}         








目录
相关文章
|
1月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
90 1
|
1月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
1天前
|
安全 C语言
在C语言中,正确使用运算符能提升代码的可读性和效率
在C语言中,运算符的使用需要注意优先级、结合性、自增自减的形式、逻辑运算的短路特性、位运算的类型、条件运算的可读性、类型转换以及使用括号来明确运算顺序。掌握这些注意事项可以帮助编写出更安全和高效的代码。
14 4
|
18天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
18天前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
|
18天前
|
存储 C语言
数据结构基础详解(C语言): 栈与队列的详解附完整代码
栈是一种仅允许在一端进行插入和删除操作的线性表,常用于解决括号匹配、函数调用等问题。栈分为顺序栈和链栈,顺序栈使用数组存储,链栈基于单链表实现。栈的主要操作包括初始化、销毁、入栈、出栈等。栈的应用广泛,如表达式求值、递归等场景。栈的顺序存储结构由数组和栈顶指针构成,链栈则基于单链表的头插法实现。
119 3
|
18天前
|
存储 算法 C语言
C语言手撕实战代码_二叉排序树(二叉搜索树)_构建_删除_插入操作详解
这份二叉排序树习题集涵盖了二叉搜索树(BST)的基本操作,包括构建、查找、删除等核心功能。通过多个具体示例,如构建BST、查找节点所在层数、删除特定节点及查找小于某个关键字的所有节点等,帮助读者深入理解二叉排序树的工作原理与应用技巧。此外,还介绍了如何将一棵二叉树分解为两棵满足特定条件的BST,以及删除所有关键字小于指定值的节点等高级操作。每个题目均配有详细解释与代码实现,便于学习与实践。
|
18天前
|
存储 算法 C语言
C语言手撕实战代码_二叉树_构造二叉树_层序遍历二叉树_二叉树深度的超详细代码实现
这段代码和文本介绍了一系列二叉树相关的问题及其解决方案。其中包括根据前序和中序序列构建二叉树、通过层次遍历序列和中序序列创建二叉树、计算二叉树节点数量、叶子节点数量、度为1的节点数量、二叉树高度、特定节点子树深度、判断两棵树是否相似、将叶子节点链接成双向链表、计算算术表达式的值、判断是否为完全二叉树以及求二叉树的最大宽度等。每道题目均提供了详细的算法思路及相应的C/C++代码实现,帮助读者理解和掌握二叉树的基本操作与应用。
|
18天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
18天前
|
算法 C语言 开发者
C语言手撕实战代码_单链表
本文档详细介绍了使用C语言实现单链表的各种基本操作和经典算法。内容涵盖单链表的构建、插入、查找、合并及特殊操作,如头插法和尾插法构建单链表、插入元素、查找倒数第m个节点、合并两个有序链表等。每部分均配有详细的代码示例和注释,帮助读者更好地理解和掌握单链表的编程技巧。此外,还提供了判断子链、查找公共后缀等进阶题目,适合初学者和有一定基础的开发者学习参考。