| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 425 人关注过本帖, 1 人收藏
标题:c语言编程——图书信息管理
只看楼主 加入收藏
范贤伟
Rank: 1
来 自:云南省
等 级:新手上路
帖 子:5
专家分:7
注 册:2012-10-13
结帖率:50%
收藏(1)
已结贴  问题点数:18 回复次数:9 
c语言编程——图书信息管理
#include<stdio.h>       /*输入输出函数*/
#include<string.h>      /*字符串操作函数*/
#include<stdlib.h>      /*数值转换函数*/
#include<conio.h>       /*控制台输入输出函数*/
 #define MAX 100        /*宏定义?参数为形参*/  
struct book             /*图书信息结构定义*/
{  int num;     /*图书编号*/  
char name[100];   /*书名*/  
char author[100];  /*作者名*/  
char classNo[100];  /*分类号*/  
char publisher[100];  /*出版单位*/  
char  pubTime[100];  /*出版时间*/  
float price;     /*价格*/
 }bk[MAX];  

  void Input()/*输入*/
 {
      FILE *fp;
      int i;
fp=fopen("book","ab");/*建立一个新二进制文件*/
 for(i=0;i<MAX;i++)
 {  
     printf("i=%d 输入序号i(当输入i=-1时,返回),i=",i++);
 scanf("%d",&i);
 if(i==-1)   
 {   
     fclose(fp);   
 return;/*默认不返回值*/  
 }  
 else   
 {  
     printf("请输入:\n编号 书名 作者名 分类号 出版社 出版时间 价格 输入时用逗号隔开)\n");
 scanf("%d,%s,%s,%s,%s,%s,%f",&bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,&bk[i].price);
 fwrite(&bk[i],sizeof(struct book),1,fp);/*写入文件*/
 }  }
 fclose(fp);
  }  

  void Output()/*输出*/
{  
      FILE *fp;
      int i;
 fp=fopen("book","rb");              
printf("================================================================================\n");
printf("                      图书列表\n");
printf("--------------------------------------------------------------------------------\n");
 printf("编号 书名 作者名 分类号 出版社 出版时间 价格");         
   for(i=0;fread(&bk[i],sizeof(struct book),1,fp)==1;i++) /*记录写入临时文件*/
 {  
       printf("\n%d%s%s%s%8s%s%f\n",bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,bk[i].price);
   }   
 fclose(fp);
 printf("--------------------------------------------------------------------------------\n");  
  }  
void Find()/*查找*/
 {   
     int i;
int choose,t;
 char m[100];   
do
 {  
 printf("================================================================================\n");
 printf("\t\t\t\t   查找菜单\n");  
 printf("\t\t\t\t1.按书名查找\n");
 printf("\t\t\t\t2.按作者名查找\n");
 printf("\t\t\t\t3.返回主菜单\n");
 printf("===============================================================================\n");
 printf("输入选项代号:");
 scanf("%d",&choose);  
 if(choose==1)  
 {   
     printf("输入所查书名:\n");  
  scanf("%s",m);   
  t=-1;
  if(choose==1)  
  {   
      for(i=0;i<MAX;i++)   
   if(strcmp(m,bk[i].name)==0)     
 {   
       t=i;     
 printf("%d%s%s%s%s%8s %f\n",bk[t].num,bk[t].name,bk[t].author,bk[t].classNo,bk[t].publisher,bk[t].pubTime,bk[t].price);     
  }    }   
 if(t==-1)   
 printf("不存在该信息\n");  
 }  
 else if(choose==2)  
 {   
     printf("输入所查作者名?\n");
   scanf("%s",m);  
   t=-1;  
  if(choose==2)   
  {  
      for(i=0;i<MAX;i++)   
      if(strcmp(m,bk[i].author)==0)   
      {  
          t=i;
printf("%d%s%s%s%s%s%f\n",bk[t].num,bk[t].name,bk[t].author,bk[t].classNo,bk[t].publisher,bk[t].pubTime,bk[t].price);  
  }          }  
  if(t==-1) printf("不存在该信息\n");  
 }  
 else return;
 }
 while(1);
 }
 void Delete()/*删除*/
 {  
     FILE *fp;
 int i,flag,n,j, s;
 fp=fopen("book","rb+"); /*以读/写 的方式打开一个已存在的二进制文件*/  
  rewind(fp);/*把文件指针fp重新指向文件的开始处*/
  printf("                             图书列表\n");
  printf("--------------------------------------------------------------------------------\n");
printf("   编号书名作者名分类号出版单位出版时间价格\n");
 printf("---------------------------------------------------------------------------------\n");   
 for(i=0;fread(&bk[i],sizeof(struct book),1,fp)==1;i++)
 { printf("%d%s%s%s%s%s%f\n",bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,bk[i].price);
 printf("\n");  }
 n=i;  
 printf("输入待删除图书编号:\n");
 scanf("%d",&s);
 for(i=0,flag=1;flag&&i<n;i++)
 {   if(s==bk[i].num)  
 {    for(j=i;j<n-1;j++)
{     bk[j].num=bk[j+1].num;
 strcpy(bk[j].name,bk[j+1].name);  /*把bk[j+1].name复制到bk[j].name*/   
 strcpy(bk[j].author,bk[j+1].author);
  strcpy(bk[j].classNo,bk[j+1].classNo);  
 strcpy(bk[j].publisher,bk[j+1].publisher);
     strcpy(bk[j].pubTime,bk[j+1].pubTime);   
  bk[j].price=bk[j+1].price;   
 }   
 flag=0;
 }  }
 if(!flag)  
     n=n-1;
 else
     printf("没有此号\n");
 fp=fopen("book","wb");  
for(i=0;i<n;i++)  
 fwrite(&bk[i],sizeof(struct  book),1,fp); /*将&bk[i]所指的地址的1个长度为sizeof的数据项写入到fp所指的文件流中去。*/
fclose(fp);
 fp=fopen("book","r"); /*以只读方式打开一个文本文件*/
  printf("                      图书列表\n");
 printf("-------------------------------------------------------------------------------\n");
 printf("   编号书名作者名分类号出版单位出版时间价格\n");
 printf("-------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
 { fread(&bk[i],sizeof(struct book),1,fp);/*从fp所指的文件中读取1个数据项,每个数据项的长度为sizeof个字节,放到&bk[i]所指的快中*/
 printf("%d %s%s%s%s%s%f\n",bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,bk[i].price);
 printf("\n");  
 fclose(fp); } }


void Change()/*修改*/
 {   
    int i,n;char num; int flag=0; FILE *fp;
printf("请输入要修改的图书编号:");
 scanf("%d",&num);
 for(i=0;i<=MAX;i++)
if(bk[i].num==num)
 {
    printf("                      图书列表\n");
 printf("--------------------------------------------------------------------------------\n");
printf("   编号书名作者名分类号出版单位出版时间价格\n");
printf("---------------------------------------------------------------------------------\n");
 printf("%d%s%s%s%s%s%f",bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,bk[i].price);
 printf("--------------------------------------------------------------------------------\n\n");   
      n=i; flag=1; break;  }
 if(flag==0)
 {
     printf("==============================================================================\n");
 printf("\t\t\t输入错误!                        \n");
printf("\t\t\t请按任意键返回!                          \n");
 printf("===============================================================================\n");
 return;  
 }
printf("\n\n\n");
  fp=fopen("bk","rb+");
fseek(fp,n*sizeof(struct book),0);/*将fp所指的文件指针,从文件开始起移动n*sizeof(struct book)个位置(0:文件开始1:当前位置2:文件末尾)fseek:文件定位函数*/
 printf("编号书名作者名分类号出版单位出版时间价格\n");   
 scanf("%d%s%s%s%s%s%f",&bk[n].num,bk[n].name,bk[n].author,bk[n].classNo,bk[n].publisher,bk[n].pubTime,&bk[n].price);
 fwrite(&bk[i],sizeof(struct book),1,fp);
 fclose(fp);
 fp=fopen("book","rb");
printf("                      图书列表\n");
printf("--------------------------------------------------------------------------------\n");
printf("   编号书名作者名分类号出版单位出版时间价格\n");
printf("--------------------------------------------------------------------------------\n");   
 for(i=0;
 fread(&bk[i],sizeof(struct book),1,fp)==1;i++)
 {
     printf("%d%s%s%s%s%s%f",bk[i].num,bk[i].name,bk[i].author,bk[i].classNo,bk[i].publisher,bk[i].pubTime,bk[i].price);  }
printf("--------------------------------------------------------------------------------\n\n");
fclose(fp);
}
void main()/*主函数*/
{  
  int n;  
printf("\n");
printf("================================================================================\n");
printf("\t\t\t欢迎来玉溪师范学院图书信息管理系统\n");
printf("\t\t\t\t1.管理员模式\n\t\t\t\t2.读者模式\n\t\t\t\t3.退出系统\n");  
printf("===============================================================================\n");
 printf("请输入选择项(1-3):");
scanf("%d",&n);
printf("\n");
  if(n==1)  
  {   
      int m;
  printf("请输入管理员密码:");
 scanf("%d",&m);   
 if(m==100)   
  {  
     for(;;)/*省略"初始化"、"条件表达式"和"增量" ,起作用*/
  {
         int s;  
 printf("\n");
 printf("===============================================================================\n");
 printf("\t\t\t欢迎来玉溪师范学院图书信息管理系统\n");  
 printf("\t\t\t\t    主菜单\n");  
 printf("\t\t\t\t1.图书信息录入\n");   
 printf("\t\t\t\t2.图书信息浏览\n");
 printf("\t\t\t\t3.图书信息查询\n");   
 printf("\t\t\t\t4.图书信息删除\n");  
 printf("\t\t\t\t5.图书信息修改\n");
 printf("\t\t\t\t6.退出系统\n");
 printf("===============================================================================\n\n");
 printf("请输入选择项(1-6):");
 scanf("%d",&s);
 printf("\n");   
   if(s>0&&s<7)   
  {  
       switch(s)   
   {
case 1:Input();break;
case 2:Output();break;
case 3:Find();break;
case 4:Delete();break;   
case 5:Change();break;            
case 6:printf("=============================================================================\n");
printf("\t\t\t\t谢谢使用!                 \n");
printf("\t\t\t\t再见!                    \n");
 printf("===============================================================================\n");
 exit(0);       }         }     }    }
 else   
     printf("密码错误,请您重新进入系统\n");  
  }  
 else if(n==2)
    {
     int t;
     printf("请输入读者密码:");
     scanf("%d",&t);
     if(t==123)
     {       for(;;)/*省略"初始化"、"条件表达式"和"增量" ,起作用*/
  {
         int j;  
 printf("\n");
 printf("===============================================================================\n");
 printf("\t\t\t欢迎来玉溪师范学院图书信息管理系统\n");  
 printf("\t\t\t\t    主菜单\n");     
 printf("\t\t\t\t1.图书信息浏览\n");
 printf("\t\t\t\t2.图书信息查询\n");   
 printf("\t\t\t\t3.退出系统\n");
 printf("===============================================================================\n\n");
 printf("请输入选择项(1-3):");
 scanf("%d",&j);
 printf("\n");   
   if(j>0&&j<4)   
   {       switch(j)
   {   
case 1:Output();break;
case 2:Find();break;            
case 3:printf("===============================================================================\n");
printf("\t\t\t\t谢谢使用!                 \n");
printf("\t\t\t\t再见!                    \n");
 printf("===============================================================================\n");
 exit(0);       }         }     }    }
 else   
     printf("密码错误,请您重新进入系统\n");  
 }
}
搜索更多相关主题的帖子: 图书 信息 include 分类号 字符串 
2012-12-12 21:38
wanjiawei
Rank: 4
等 级:业余侠客
帖 子:61
专家分:213
注 册:2012-11-16
收藏
得分:3 
看下~~~~~~~~~~~~
2012-12-12 22:44
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:3 
牛逼
2012-12-12 22:52
zhangfudong
Rank: 4
等 级:业余侠客
帖 子:119
专家分:212
注 册:2012-12-12
收藏
得分:3 
高手!~
2012-12-13 11:59
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
收藏
得分:3 
自己码的额么??

建议这个程序用链表写
2012-12-13 12:01
crystall
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:184
专家分:809
注 册:2012-12-1
收藏
得分:3 
看看
2012-12-13 12:39
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:3 
代码没细看,但是这样的管理系统用结构体数组来做本人感觉会造成一定的不便不如链表好操作:比如要删除一个数组元素,哪么就要把钙元素后所有的元素都赋值给他的前一个元素,这样才能保证数据的连续,但如果有几万几十万上百万的书籍,进行管理师岂不要命吗?如果用链表只需要更改一个指针,然后释放掉节点的内存就好了。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 12:43
z2860304810
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2012-12-10
收藏
得分:3 
回复 7楼 yaobao
呵呵    感谢 啊 本人 初次学习c语言   那我就可以用你的 程序来研究研究啊
2012-12-13 12:55
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
回复 8楼 z2860304810
呃呃呃,这是我看的一本书里的,管理的是电话本,但是差不多了都,用链表做的
程序代码:
#include <stdio.h>   
#include <stdlib.h>   
#include <string.h>   
struct addr  
{  
    char name[30];  
    char street[40];  
    char city[20];  
    char state[3];  
    char tel[11];  
    struct addr *next;  

 }record;  
struct addr *head,*start;  
struct addr *last;  
int menu_select();  
void enter();  
void deleted();  
void search();  
void main()  
{  
    char s[80],choice;  
    struct addr *info;  
    start=last=NULL;  
  
        switch(menu_select())  
    {  
    case 1:enter();  
        break;  
    case 2:deleted();  
        break;  
    case 3:search();  
        break;  
    case 4:exit(0);  
    }  
}  
  
int menu_select()  
{  
    char s[80];  
    int c;  
    printf("1__Enter a name\n");  
    printf("2__Delete a record\n");  
    printf("3__Search\n");  
    printf("4__Quit\n");  
    do  
    {  
        printf("\n Enter  your choice:");  
        gets(s);  
        c=atoi(s);  
    }while(c<1||c>4);  
    return(c);  
}  
  
struct addr* des_store(struct addr *i,struct addr *top)  
{  
    if(!last)  
    {  
        last=i;  
        return(i);  
    }  
    else  
    {  
        top->next=i;  
        i->next=NULL;  
        last=i;  
        return(i);  
    }  
}  
void enter()  
{  
    struct addr *info;  
    void inputs(char *,char *,int );  
    int n;  
    for(n=0;n<2;n++)  
    {  
        info=(struct addr *)malloc(sizeof(record));  
        if(info==NULL)  
        {   
            printf("\n out of memory");  
            return;  
        }  
        inputs("enter name:",info->name,30);  
        if(info->name[0]=='0')  
            break;  
        else  
        {  
            inputs("enter street:",info->street,40);  
            inputs("enter city:",info->city,20);  
            inputs("enter state:",info->state,3);  
            inputs("enter tel:",info->tel ,11);  
            start=des_store(info,start);  
            if(n==0)  
                head=start;  
        }  
    }  
}  
      
void inputs(char *p1,char* s,int count)  
{  
    char p[40];  
    do  
    {  
        printf("%s",p1);  
        gets(p);  
        if (strlen(p)>count)  
            printf("\n too long\n");  
    }while(strlen(p)>count);  
    strcpy(s,p);  
}  
  
void display(struct addr *info)  
{  
    printf("%s\n",info->name);  
    printf("%s\n",info->street);  
    printf("%s\n",info->city);  
    printf("%s\n",info->tel);  
    printf("\n\n");  
}  
  
struct addr *find(char *name)  
{  
    struct addr *info;  
    info=head;  
    while(info)  
    {  
        if(!strcmp(name,info->name))  
            return(info);  
        else  
            info=info->next;  
    }  
    return(info);  
}  
  
void search()  
{  
    char name[40];  
    struct addr *info;  
    printf("enter name to find:");  
    gets(name);  
    if((info=find(name))==NULL)  
        printf("not found\n");  
    else  
        display(info);  
}  
  
void deleted()  
{  
    char s[80];  
    struct addr*p1,*p2,*info;  
    printf("enter name:");  
    gets(s);  
    info=find(s);  
    if(info!=NULL)  
    {  
        if (head==info)  
        {  
            head=info->next;  
            printf("deleted:%s\n",info->name);  
            free(info);  
        }  
        else  
        {  
            p1=head->next;  
            while(info!=p1)  
            {  
                p2=p1;  
                p1=p1->next;  
            }  
            p2->next=p1->next;  
            printf("deleted:%s\n",info->name);  
            free(info);  
        }  
    }  
    else  
        printf("%s not find!\n",info->name);  
}  

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 13:06
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
我认为这个代码就比楼主的好操作

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-13 13:07
快速回复:c语言编程——图书信息管理
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022264 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved