VVYY要成为大神 2023-03-08 22:23 采纳率: 0%
浏览 13

图书信息管理系统,注释部分应该怎么理解


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
typedef struct book{
    char dengluhao[20];
    char name[20];
    char author[20];
    char fenleihao[20];
    char company[20];
    char outtime[20];
    char price[20];
    struct book *next;
}Booksystem, *Pointer;

Pointer Head=NULL;             
FILE *fp;  
int num=0;

int Makemenu()                         //菜单功能 
{
    int choice; 
    
    printf("\t\t********************MENU*********************\n");  
    printf("\t\t          1. 图书信息录入\n");
    printf("\t\t          2. 图书信息浏览\n");
    printf("\t\t          3. 图书信息查询(按书名查询)\n"); 
    printf("\t\t          4. 图书信息查询(按作者名查询)\n");
    printf("\t\t          5. 图书信息排序\n");
    printf("\t\t          6. 图书信息删除\n");
    printf("\t\t          7. 图书信息修改\n");
    printf("\t\t          8. 图书信息保存\n");
    printf("\t\t          9. 退出\n");
    printf("\t\t***********************************************\n");
    
    
    printf("\t选择你需要的服务选项:");
    scanf("%d",&choice);
        
    return choice;
}
                
void Insert(Pointer *Head)                     //录入功能 
{
    char dengluhao[20];
    char ch;
    Pointer p,q,r;
    printf("\n\t请输入登录号:");
    scanf("%s", dengluhao);
    p = q = *Head;  
    while(p != NULL) {
        if(strcmp(p->dengluhao, dengluhao)==0){
            printf ("该书籍已经存在!");
            return;
        } else {
            q = p;
            p = p->next;
        }
    }
    r = (Pointer)malloc(sizeof(Booksystem));
    r->next = NULL;
    
    if(r == NULL) {
        printf("分配空间失败!");
        return;
    }
    
    /*if(q == NULL)
        *Head = r;
    else{
        q->next = r;
    }*/
    
    strcpy(r->dengluhao, dengluhao);
    printf("\n\t输入书名:");  
    scanf("%s", r->name);
    getchar();
    printf("\n\t输入作者名:");
    scanf("%s", r->author);
    getchar();
    printf("\n\t输入分类号:");
    scanf("%s", r->fenleihao) ;
    getchar();
    printf("\n\t输入出版单位:");
    scanf("%s", r->company) ;
    getchar();
    printf("\n\t输入出版日期:");
    scanf("%s",r->outtime);
    printf("\n\t输入价格:");
    scanf("%s", r->price);  
    num++;
    printf("是否继续录入(y or n)?\n");
    getchar();
    scanf("%c",&ch);
    if(ch=='y' || ch== 'Y')
            Insert(Head);
        else {
            if(ch== 'n' ||ch== 'N')
                return;
            else
                printf("\n\t输入错误,请重新输入!");
        
    } 
}

void Through(Pointer Head)                        //浏览功能 
{
    Pointer p;
    p=Head;
    if(p==NULL){
        printf("无数据,没有录入图书信息.");
    }else{
        while(p!=NULL){
            printf("\n\t\t登录号:%-20s\n", p->dengluhao);  //显示图书信息
            printf("\t\t书名:    %-20s\n", p->name);
            printf("\t\t作者名:  %-20s\n", p->author);
            printf("\t\t分类号:  %-20s\n", p->fenleihao);
            printf("\t\t出版单位:%-20s\n", p->company);
            printf("\t\t出版时间:%-20s\n", p->outtime);
            printf("\t\t价格:    %-20s\n",p->price);
            p = p->next;
        }
        return ;
    }
}

void Serch_name(Pointer Head) {                       //查询功能(按书名查询)          
    char name[20];
    Pointer p;
    int flag=0;
    printf("请输入需要查询的书名:");
    scanf("%s", name);
   
    p = Head;
    while(p != NULL) {   
        if(strcmp(p->name, name) == 0) {   
            printf("\t登录号:  %-20s\n", p->dengluhao);
            printf("\t书名:    %-20s\n", p->name);
            printf("\t作者名:  %-20s\n", p->author);
            printf("\t分类号:  %-20s\n", p->fenleihao);
            printf("\t出版单位:%-20s\n", p->company);
            printf("\t出版时间:%-20s\n", p->outtime);
            printf("\t价格:    %-20s\n",p->price);
            flag = 1;  
            p = p->next;  
        } else
            p = p->next;
    }
    if(flag == 0)
        printf("\t\t很抱歉,没有查询到相关书籍\n");
    
    getchar();
}

void Search_author(Pointer Head) {                    //查询功能(按作者名查询) 
    int flag = 0;
    char author[20];
    Pointer p;
    printf("请输入需要查询书籍的作者名:");
    scanf("%s", author);
    
    p = Head;
    while(p != NULL) {  
        if(strcmp(p->author, author) == 0) {       
            printf("\t登录号:  %-20s\n", p->dengluhao);
            printf("\t书名:    %-20s\n", p->name);
            printf("\t作者名:  %-20s\n", p->author);
            printf("\t分类号:  %-20s\n", p->fenleihao);
            printf("\t出版单位:%-20s\n", p->company);
            printf("\t出版时间:%-20s\n", p->outtime);
            printf("\t价格:    %-20s\n",p->price);
            flag = 1;
            p = p->next;
        } else
            p = p->next;
    }
    
    if(flag == 0)
        printf("\t\t没有找到相同作者名书籍\n");
    
    getch();
}

void Paixu(Pointer *Head)                    //排序功能 
{
    Pointer p,q;
    int i,j;
    char a[20],ch;
    if(Head==NULL){
        printf("\n\t并未找到任何书籍信息!");
        return ;
    }
    p=q=*Head;
    for(i=0;i<num;i++){
        for(j=i+1;j<num;j++){
            q=p;
            p=p->next;
            if(strcmp(q->name,p->name)>0) {          
                strcpy(a, p->dengluhao);
                strcpy(p->dengluhao, q->dengluhao);
                strcpy(q->dengluhao, a);
                strcpy(a, p->name);
                strcpy(p->name, q->name);
                strcpy(q->name, a);
                strcpy(a, p->author);
                strcpy(p->author, q->author);
                strcpy(q->author, a);
                strcpy(a, p->fenleihao);
                strcpy(p->fenleihao, q->fenleihao);
                strcpy(q->fenleihao,a);
                strcpy(a, p->company);
                strcpy(p->company, q->company);
                strcpy(q->company, a);
                strcpy(a, p->outtime);
                strcpy(p->outtime, q->outtime);
                strcpy(q->outtime, a);
                strcpy(a, p->price);
                strcpy(p->price, q->price);
                strcpy(q->price, a);
            }
        }
        p = q = *Head;
    }
    do {
        printf("\n\t排序完成,需不需要显示结果:");  
        getchar();
        scanf("%c", &ch);
        if(ch== 'y' || ch== 'Y')
            Through(*Head);  
        else {
            if(ch=='n' || ch== 'N')
                return;  
            else
                printf("\n\t输入错误,请重新输入!");  
        }
    } while(ch!= 'y' && ch!= 'n' && ch!= 'Y' && ch!= 'N');
}

void Delete(Pointer *Head)                   //删除功能 
{
    Pointer p,q;
    char dengluhao[20];
    int flag=1;
    printf("\n\t请输入你要删除书籍的登录号:");
    scanf("%s",dengluhao);
    p=q=*Head;
    while(p!=NULL && flag==1){
        if(strcmp(p->dengluhao,dengluhao)==0){
            if(p==*Head){
                *Head=p->next;
                free(p);
            }else{
                q->next=p->next;
                free(p);
            }
            flag=0;
        }else{
            q=p;
            p=p->next;
        }
    }
    if(flag==1){
        printf("\n\t抱歉没有找到可以删除的书籍!");
        return ; 
    } 
    printf("\n\t已成功删除!");
    return ;
    
    
}

void Revise(Pointer Head)                  //修改功能 
{
    Pointer p;
    char dengluhao[20];
    int flag=1;
    printf("\n\t请输入要修改书籍的登录号:");
    scanf("%s",dengluhao);
    p=Head;
    while(p != NULL && flag==1) {
        if(strcmp(p->dengluhao, dengluhao) == 0) { 
            printf("\n\t请输入新的登录号:");  
            scanf("%s", p->dengluhao);
            getchar();
            printf("\n\t请输入新的书名:");
            scanf("%s", p->name);
            getchar();
            printf("\n\t请输入新的作者名:");
            scanf("%s", p->author);
            getchar();
            printf("\n\t请输入新的分类号:");
            scanf("%s",p->fenleihao) ;
            getchar();
            printf("\n\t请入新的出版单位:");
            scanf("%s", p->company) ;
            getchar();
            printf("\n\t请输入新的出版日期:");
            scanf("%s",p->outtime);
            printf("\n\t请输入新的价格:");
            scanf("%s", p->price);
            flag = 0;
            printf("修改成功!\n");
        } else
            p = p->next;  
    } 
    if(flag==1){
        printf("\n\t抱歉并没有找到要删除的书籍!");
    }else{
        return ;
    }
}

void Reserve() {                      //文件的保存 
    Pointer p;
    p = Head;
    char file[20];  
    printf("请输入文件路径及文件名:");
    scanf("%s", file);
    if((fp = fopen(file, "w+")) == NULL) {  
        printf("不能打开文件!\n");
        return;
    }
    while(p != NULL) {
        fprintf(fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
                p->dengluhao, p->name, p->author, p->fenleihao, p->company, p->outtime, p->price);  
        p = p->next;  
    }
    fclose(fp);  
    printf("文件已经保存!\n");
    return;
}

void Exit()            //退出 
{
    exit(0);
    
}

int main(void)
{
    for(;;){
        switch(Makemenu()){
            case 1:Insert(&Head); break;
            case 2:Through( Head); break;
            case 3:Serch_name(Head); break;
            case 4:Search_author( Head); break;
            case 5:Paixu( &Head) ; break;
            case 6:Delete( &Head);  break;
            case 7:Revise( Head);  break;
            case 8:Reserve(); break;
            case 9:Exit();  break;
            default:putchar('\a');
        }
    }
    getch();
    return 0;
    
}
    
    
    


  • 写回答

2条回答 默认 最新

  • CQ.abc 2023-03-08 23:41
    关注

    这是一段 C 语言代码,实现了一个图书管理系统,包含了录入、浏览、查询、删除、修改、保存等功能。

    代码使用了链表来存储图书信息,每个节点表示一本书。通过菜单功能实现了各种操作。其中,录入功能用 Insert 函数实现,通过输入各项信息并将新的节点加入链表实现。浏览功能通过遍历链表并输出各项信息实现。查询功能可以按照书名和作者名进行查询,输入需要查询的书名或作者名,遍历链表并输出符合条件的节点信息。删除功能可以删除指定的图书信息节点,通过输入需要删除的书籍的登录号实现。修改功能可以修改指定的图书信息节点的各项信息,同样需要输入需要修改的书籍的登录号。保存功能将链表中的图书信息保存到文件中。

    代码有些细节问题,例如函数的传参不太合理,存在一些小的错误。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月8日

悬赏问题

  • ¥15 Windows X86 远线程注入问题解惑
  • ¥15 Vs2022安装时黑框闪退无反应
  • ¥15 嵌入式设备网口down后再up时不能link?
  • ¥15 关于区块链和边缘计算
  • ¥15 做一个简单项目,用Python分析共享单车的数据
  • ¥20 在使用CESM2.2.0模型进行case.submit过程中出现如下错误(关键词-Map)
  • ¥15 有办法改变通过wifi进入的网站的设置吗
  • ¥15 label_studio
  • ¥15 请教如何phython发邮件
  • ¥15 linux系统安装问题