图书管理系统

来源:互联网 发布:迅雷看看for mac下载 编辑:程序博客网 时间:2024/04/27 21:24

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DATA_FILE "data"
struct bk_node;
typedef struct bk_node *n_ptr;
struct bk_node
{
char id[16];
char name[32];
char author[16];
char date[16];
char price[16];
n_ptr next;
};
n_ptr clean_list(n_ptr list);
n_ptr create_list(void);
n_ptr create_node(void);
void save_list(n_ptr list);
n_ptr insert_node(n_ptr list,n_ptr node);
n_ptr delete_node(n_ptr list,n_ptr node);
n_ptr query_node(n_ptr list,char *id);
void print_list(n_ptr list);
void print_node(n_ptr node);

n_ptr clean_list(n_ptr list)
{
n_ptr pos,tmp;
if(list==NULL)
{
    printf("列表已经为空!/n");
    return NULL;
}
pos=list;
while(pos!=NULL)
{
    tmp=pos->next;
    free(pos);
    pos=tmp;
}
printf("列表已经为空!/n");
return NULL;
}

n_ptr create_list(void)
{
FILE *fp;
n_ptr list=NULL;
n_ptr node;
fp=fopen(DATA_FILE,"rb");
if(fp==NULL)
    return list;
while(1)
{
    node=malloc(sizeof(struct bk_node));
    if(fread(node,sizeof(struct bk_node),1,fp)==0)
      break;
    node->next=NULL;
    list=insert_node(list,node);
}
return list;
}

void save_list(n_ptr list)
{
FILE *fp;
n_ptr pos=list;
fp=fopen(DATA_FILE,"wb");
while(pos!=NULL)
{
    fwrite(pos,sizeof(struct bk_node),1,fp);
    pos=pos->next;
}
printf("保存成功!/n");
fclose(fp);
}

n_ptr create_node(void)
{
n_ptr node;
node=malloc(sizeof(struct bk_node));
printf("编号:");
gets(node->id);
printf("书名:");
gets(node->name);
printf("作者:");
gets(node->author);
printf("出版日期(YY/MM/DD):");
gets(node->date);
printf("价格:");
gets(node->price);
node->next=NULL;
getchar();
return node;
}

n_ptr insert_node(n_ptr list,n_ptr node)
{
n_ptr pos=list;
if(list==NULL)
{
    list=node;
    return list;
}
while(pos->next!=NULL)
    pos=pos->next;
node->next=pos->next;
pos->next=node;
return list;
}

n_ptr delete_node(n_ptr list,n_ptr node)
{
n_ptr pos=list;
n_ptr tmp;
if(list==NULL)
{
    printf("列表为空!/n");
    return list;
}
if(pos==node)
{
    tmp=pos->next;
    free(pos);
    printf("删除成功!/n");
    return tmp;
}
while(pos->next!=node && pos->next!=NULL)
    pos=pos->next;
if(pos->next!=NULL)
{
    pos->next=node->next;
    free(node);
    printf("删除成功 n");
}
else
printf("没有找到记录!/n");
return list;
}

n_ptr query_node(n_ptr list,char *id)
{
n_ptr pos=list;
while(pos!=NULL && strcmp(pos->id,id)!=0)
    pos=pos->next;
if(pos==NULL)
    printf("列表为空!/n");
return pos;
}

void print_list(n_ptr list)
{
n_ptr pos=list;
if(list==NULL)
{
    printf("列表为空!/n");
    return;
}
printf("%-10s","编号");
printf("%-30s","书名");
printf("%-15s","作者");
printf("%-10s","出版日期");
printf("%-10s","价格");
printf("/n");
while(pos!=NULL)
{
    printf("%-10s",pos->id);
    printf("%-30s",pos->name);
    printf("%-15s",pos->author);
    printf("%-10s",pos->date);
    printf("%-10s",pos->price);
    printf("/n");
    pos=pos->next;
}
}

void print_node(n_ptr node)
{
printf("编号:%s/n",node->id);
printf("书名:%s/n",node->name);
printf("作者:%s/n",node->author);
printf("出版日期:%s/n",node->date);
printf("价格:%s/n",node->price);
}

void print_mune(void)
{
printf("/n");
printf("*************************/n");
printf(" 图书信息管理系统/n");
printf("*************************/n");
printf("1。列出所有图书/n");
printf("2。查询指定图书/n");
printf("3。添加记录/n");
printf("4。删除记录/n");
printf("5。清空图书列表/n");
printf("6。保存修改/n");
printf("0。退出系统/n");
printf("/n");
printf("请选择:");
}


int main()
{
char c;
char id[16];
n_ptr list;
n_ptr node;
list=create_list();
while(1)
{
    print_mune();
    c=getchar();
    switch(c)
    {
      case '1':
        print_list(list);
        break;
      case '2':
        printf("请输入要查询的图书编号:");
        scanf("%s",id);
        getchar();
        node=query_node(list,id);
        if(node!=NULL)
          print_node(node);
        break;
      case '3':
        node=create_node();
        list=insert_node(list,node);
        break;
      case '4':
        printf("请输入要删除的图书编号:");
        scanf("%S",id);
        getchar();
        node=query_node(list,id);
        if(node!=NULL)
          list=delete_node(list,node);
        break;
      case '5':
        list=clean_list(list);
      case '6':
        save_list(list);
        break;
      case '0':
        return 0;
      default:
        printf("输入错误,请重新输入!/n");
    }

}
}

原创粉丝点击