> 文档中心 > C语言课设图书信息管理系统(大作业)

C语言课设图书信息管理系统(大作业)


一、设计功能(文章仅供参考)

图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:
(1)系统以菜单方式工作
(2)图书信息录入功能(图书信息用文件保存)--输入
(3)图书信息浏览功能--输出
(4)图书信息查询功能--算法
查询方式:按书名查询; 按作者名查询
(5)图书信息的删除与修改(可选项)

二、功能展示

C语言课设图书信息管理系统(大作业)
C语言课设图书信息管理系统(大作业)

C语言课设图书信息管理系统(大作业)

三、思维导图

C语言课设图书信息管理系统(大作业)

四、程序源码

#include /*引用库函数*/#include #include #include #include typedef struct book_info//定义图书信息的结构体变量并声明新的类型名{  char AN[10];     /*登录号*/  char name[20];   /*书名*/  char author[20];/*作者名*/  char clc[10];   /*分类名*/  char company[20];      /*出版单位*/  char date[20];  /*出版日期*/  char price[10]; /*价格*/  struct book_info*next;}Booklist,*Pointer;int num=0;//全局变量的定义Pointer Head=NULL;//头指针为空FILE*fp;//指向文件的指针 /*声明函数*/int menu_select();/*主菜单函数*/void Insert(Pointer*Head);/*录入函数*/void Scan(Pointer Head);/*显示函数*/void Search_name(Pointer Head);/*按书名查找函数*/void Search_author(Pointer Head);/*按作者名查找函数*/void Listbyname(Pointer*Head);/*按书名排序函数*/void Delete(Pointer*Head);//删除函数void Update(Pointer Head);//修改函数void Save();//用文本文件形式保存函数void Read();//读入文本文件函数void Exit();//退出函数int main()//主函数{  system("cls");/*运行前清屏*/  for(;;) {   switch(menu_select())   {    case 1:Insert(&Head);    break;    case 2:Scan(Head);    break;    case 3:Search_name(Head);    break;    case 4:Search_author(Head);    break;    case 5:Listbyname(&Head);    break;    case 6:Delete(&Head);    break;     case 7:Update(Head);    break;    case 8:Save();    break;    case 9:Read();    break;    case 0:Exit();    default:    putchar('\a');   } }}int menu_select()//主菜单函数{  int a;  printf("\n\t\t\t欢迎使用图书信息管理系统\n\n\n\n\n\t\t*****请按任意键进入系统菜单!*****\n");  getch();  system("cls");  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    0.退出\n");  printf("\t\t***********************************************\n");  do {  printf("\n\t请选择您所需要的服务:");  scanf("%d",&a); } while(a<0||a>9); return a;}void Insert(Pointer*Head)//录入图书信息函数{ char AN[10]; char c; Pointer p,q,r; printf("\n\t\t****************请输入图书信息****************\n");/*交互输入*/ printf("\n\t\t请输入登录号:"); scanf("%s",AN); p=q=*Head;//检测登录号是否重复 while(p!=NULL) {     if(strcmp(p->AN,AN)==0)   {    printf("已经有相同的登录号:");return;   }   else   {    q=p;p=p->next;   } }  r=(Pointer)malloc(sizeof(Booklist));  r->next=NULL;  if(r==NULL)  {    printf("分配空间失败!");return;  }  if(q==NULL)  *Head=r;  else  {    q->next=r;  }   strcpy(r->AN,AN);   printf("\n\t\t输入书名:");//录入图书信息   scanf("%s",r->name);   getchar();   printf("\n\t\t输入作者名:");   scanf("%s",r->author);   getchar();   printf("\n\t\t输入分类号:");   scanf("%s",r->clc);    getchar();   printf("\n\t\t输入出版单位:");   scanf("%s",r->company);   getchar();   printf("\n\t\t输入出版日期:");   gets(r->date);   printf("\n\t\t输入价格:");   scanf("%s",r->price);   do   {printf("\n\t\t录入成功!!!!");      num++;      printf("选择是否继续录入(Y/N)?:");   /*连续录入图书信息*/      getchar();      scanf("%c",&c);      if(c=='y'||c=='Y')   Insert(Head);      else      { if(c=='n'||c=='N') return; else printf("\n\t\t输入错误,请重新输入!!!");      }   }      while(c!='y'&&c!='n'&&c!='Y'&&c!='N');}void Scan(Pointer Head)//显示图书信息函数{ Pointer p; p=Head;  if(p==NULL) printf("记录为空");//检测是否有图书信息 else {   printf("\n\t共有%d条记录",num);   while(p!=NULL);   {     printf("\n\n\t\t登录号:%-10s",p->AN);//显示图书信息     printf("\n\t\t书名:%-20s",p->name);     printf("\n\t\t作者名:%-20s",p->author);     printf("\n\t\t分类号:%-10s",p->clc);     printf("\n\t\t出版单位:%-20s",p->company);     printf("\n\t\t出版时间:%-20s",p->date);     printf("\n\t\t价格:¥%-10s",p->price);     p=p->next;   }    printf("\n\t\t请按任意键回到主菜单");    return; }}void Search_name(Pointer Head)//按书名查找函数{  int flag=0;//标记变量的初值  char name[10];  Pointer p;  printf ("\n请输入需要查询的书名:");  scanf("%s",name);  printf("\n\t\t*************以下是您查找的信息***************");  p=Head;  while(p!=NULL);  {    if(strcmp(p->name,name)==0)//查找符合的图书    {     printf("\n\t登录号:%-10s",p->AN);     printf("\n\t书名:%-20s",p->name);     printf("\n\t作者名:%-20s",p->author);     printf("\n\t分类号:%-10s",p->clc);     printf("\n\t出版单位:%-20s",p->company);     printf("\n\t出版时间:%-20s",p->date);     printf("\n\t价格:¥%-10s",p->price);     flag=1;//找到标记变量设为1     p=p->next;//指针走到下一个节点    }    else    p=p->next;  }  if(flag==0)  printf("\n\t\t没有相同书名纪录");  printf("\n\t\t请按任意键返回主菜单");  getchar();}void Search_author(Pointer Head)  //按作者名查找函数{ int flag=0; char author[10]; Pointer p; printf("\n请输入需要查询的作者名:"); scanf("%s",author); printf("\n\t\t*************以下是您查找的信息?***************"); p=Head; while(p!=NULL);//查找符合的图书 {  if(strcmp(p->author,author)==0)/*找到图书显示信息*/  {   printf("\n\t登录号:%-10s",p->AN);   printf("\n\t书名:%-20s",p->name);   printf("\n\t作者名:%-20s",p->author);   printf("\n\t分类号:%-10s",p->clc);   printf("\n\t出版单位:%-20s",p->company);   printf("\n\t出版时间:%-20s",p->date);   printf("\n\t价格:¥%-10s",p->price);   flag=1;   p=p->next;  }  else  p=p->next; }  if(flag==0)  printf("\n\t\t没有相同作者名纪录");  printf("\n\t\t请按任意键返回主菜单");  getch();}void Listbyname(Pointer*Head)//按书名排序函数?{  Pointer p,q;  int i,j;  char t[10];  char c;  if(Head==NULL)  {    printf("\n\t\t没有任何资料!\n");    return;  }   if(num==0)//检查是否存在数据可供排序  {     printf("\n\t\t图书信息记录为空!!请按任意键返回主菜单。");   getchar();   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)//检查二者排  {      //p指针对应数据应排于q指针对应数据后,p,q进行数据交换   strcpy(t,p->AN);   strcpy(p->AN,q->AN);   strcpy(q->AN,t);   strcpy(t,p->author);   strcpy(p->author,q->author);   strcpy(q->author,t);   strcpy(t,p->clc);   strcpy(p->clc,q->clc);   strcpy(q->clc,t);   strcpy(t,p->company);   strcpy(p->company,q->company);   strcpy(q->company,t);   strcpy(t,p->date);   strcpy(p->date,q->date);   strcpy(q->date,t);   strcpy(t,p->name);   strcpy(p->name,q->name);   strcpy(q->name,t);   strcpy(t,p->price);   strcpy(p->price,q->price);   strcpy(q->price,t);  } }  q=*Head;p=*Head;}     do  {  printf("\n\t排序完成,是否显示(Y/N):");   /*询问是否显示排序结果*/  getchar();  scanf("%c",&c);  if(c=='y'||c=='Y')  Scan(*Head);  //显示排序结果  else {    if(c=='n'||c=='N')    return; //返回主菜单    else    printf("\n\t\t输入错误,请重新输入!!!");//错误则继续询问 }  }   while(c!='y'&&c!='n'&&c!='Y'&&c!='N');}void Delete(Pointer*Head)/*删除函数*/{ int flag=1; char AN[10]; char c,z; Pointer p,q; printf("\n\t\t*******************图书删除*******************\n"); printf("\t请输入要删除图书的信息的登录号:"); scanf("%s",AN); p=q=*Head;/*查找符合条件的图书*/ while(p!=NULL&&flag); {  if(strcmp(p->AN,AN)==0)/*找到该图书*/  {   printf("\t\n登录号:%-10s",p->AN);//显示即将要删除的图书的信息   printf("\t\n书名:%-20s",p->name);   printf("\t\n作者名:%-20s",p->author);   printf("\t\n分类号:%-10s",p->clc);   printf("\t\n出版单位:%-20s",p->company);   printf("\t\n出版时间:%-20s",p->date);   printf("\t\n价格:¥%-10s\n",p->price);   printf("确定删除?确定请输Y,其它则不删除");//询问是否删除   getchar();   scanf("%c",&z);   if(z=='Y'||z=='y')   {    if(p==*Head)    {  *Head=p->next;free(p);}/*删除图书信息*/    else    { q->next=p->next; free(p);}      flag=0;   }   else   {     printf("图书信息未删除,返回主菜单。");     return;   } } else {  q=p;p=p->next; }/*指针走到下一个节点*/  printf("\t\t删除成功!!!\n");}  if(flag)  printf("\t没有找到可以删除的数据!!!");  do  {   printf("选择是否继续删除(Y/N)?:");  /*连续删除图书信息*/   getchar();   scanf("%c",&c);   if(c=='y'||c=='Y')   Delete(Head); /*继续删除*/   else  {   if(c=='n'||c=='N')   return;/*不删除返回主菜单*/   else   printf("\n\t\t输入错误,请重新输入!!!");  }  }   while(c!='y'&&c!='n'&&c!='Y'&&c!='N');}void Update(Pointer Head)/*图书信息修改函数*/{  int flag=1;  char AN[10];  char c;  Pointer p;  printf("\n\t\t*****************图书信息修改*****************\n");  printf("\t请输入要修改的图书的登录号:");  scanf("%s",AN);/*查找符合条件的图书*/  p=Head;  while(p!=NULL&&flag);   {   if(strcmp(p->AN,AN)==0)   {   printf("\n\t\t请输入登录号:");/*修改图书信息*/   scanf("%s",p->AN);   printf("\n\t\t输入书名:");   scanf("%s",p->name);   getchar();   printf("\n\t\t输入作者名:");   scanf("%s",p->author);   getchar();   printf("\n\t\t输入分类号:");   scanf("%s",p->clc);   getchar();   printf("\n\t\t输入出版单位:");   scanf("%s",p->company);   getchar();   printf("\n\t\t输入出版日期:");   gets(p->date);   printf("\n\t\t输入价格:");   scanf("%s",p->price);   flag=0;   printf("修改成功!!\n");   }   else   p=p->next;/*指针走到下一个节点*/ }  if(flag)  printf("\n\t\t没有该图书记录!!!");  do  {   printf("选择是否继续修改(Y/N):"); /*连续修改图书信息*/   getchar();   scanf("%c",&c);   if(c=='y'||c=='Y')   Update(Head);/*继续修改*/   else   {    if(c=='n'||c=='N')    return;//不修改,返回菜单    else    printf("\n\t\t输入错误,请重新输入!!!");   }  }    while(c!='y'&&c!='n'&&c!='Y'&&c!='N');//输入错误则继续询问}void Save()     /*以文本文件形式保存的函数*/{ 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->AN,p->name,p->author,p->clc,p->company,p->date,p->price);//将数据写入文件   p=p->next;/*下移一个结点*/ }  fclose(fp);//写入完成,关闭文件  printf("文件已经保存!\n");  return;}void Read()/*读入文本文件的函数*/{  Pointer p,q;  int m=0;  char file[20];  printf("请输入文件路径及文件名:");  scanf("%s",file);/*输入文件路径及名称*/  if((fp=fopen(file,"r+"))==NULL)//检查文件是否存在  {   printf("不能打开文件!\n");   return;  }  m=m+1;  if(m==1)  {   p=(Pointer)malloc(sizeof(Booklist));/*开辟一个新单元*/   Head=p;//将p的地址赋给头指针Head   fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",&p->AN,&p->name,&p->author,&p->clc,&p->company,&p->date,&p->price);/*文件读入*/   do   {   num=num+1;//记录书籍信息量   if(num==1)//区别开链表开头与中间的处理方法   Head->next=p;   else   q->next=p;   q=p;   p=(Pointer)malloc(sizeof(Booklist));/*开辟一个新单元*/   fscanf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n",&p->AN,&p->name,&p->author,&p->clc,&p->company,&p->date,&p->price);//读入文件数据   }    while(!feof(fp));//检查文件是否结束,若是则停止读入,否则继续读入    q->next=p;    p->next=NULL;//链表结尾处理    num=num+1;//正确的图书信息量  }   printf("写入数据成功,可返回浏览其信息。");   fclose(fp);/*结束读入,关闭文件*/   return;}void Exit()/*退出程序的函数*/{ char c; do {  printf("\n\t\t退出中......是否保存到文件(Y/N)?");/*询问是否保存图书信息,防止丢失*/  getchar();  scanf("%c",&c);  if(c=='y'||c=='Y')  {   Save();   exit(0);  }  else  {if(c=='n'||c=='N')  {exit(0);}  else  printf("\n\t\t输入错误,请重新输入!!!");  }}while(c!='y'&&c!='n'&&c!='Y'&&c!='N');//错误则继续询问}

请添加图片描述

大家可以点个关注后续会持续更新0.0(在此先谢过各位了)