C语言图书馆管理系统课程设计报告

一、  目的要求

《C语言程序设计》是一门讲述C语言的基本知识和编程方法的课程。在讲述C语言数据类型的基础上对C语言的五类语句做了简单的介绍,另外还讨论了C语言的三种程序结构:顺序、选择和循环。对函数的使用、指针的概念、结构体的应用、文件的操作做了详细的介绍。同时结合高职的实际要求和学生的具体情况,在实际教学过程当中强调技能操作的具体指导,鉴于此,编写了C语言课程设计实训大纲。希望同学们能通过实训大纲对C语言有更全面的认识。

通过综合训练,要求学生掌握C语言的各种数据结构,熟练应用C语言的各种程序结构,熟悉函数的定义、函数的调用,灵活应用指针,能够解决一般的程序设计问题。图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。

设计一图书信息管理系统,使之能提供以下功能:

1)系统以菜单方式工作;

2)图书信息录入功能(图书信息用文件保存)——输入;

3)图书信息浏览功能——输出;

4)查询和排序功能:(至少一种查询方式)——算法;

5)按书名查询;

6)按作者名查询;

7)图书信息的删除与修改(可选项)。


二、  设计思路

根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中去,所以应该提供下个结构体和文件的输入等操作:在程序中需要实现图书信息录入,浏览,查询,删除和修改等功能的操作,所以需要建立相应的模块来实现:另外还需提供选择菜单实现功能,在运行时达到所要求的目的。

1、系统需求分析

经过以上对本系统的调研及可行性分析后,下面将对系统在功能上以及性能上进行进一步的需求分析。

2、功能介绍

输入图书信息, 出现一个"图书信息管理系统的主界面",其中有6个数字代表的选项,可以按相关的数字进行操作。

每一条记录包括一本书的书名、图书号、作者、出版时间、出版社名、价格。

  0)退出:

    如果在图书管理系统的主界面,则退出的是系统,如果是在子菜单下则返回到主界面。

  1)录入新图书:

    可以完成一条信息的输入,也可以完成多条信息的输入。

  2)浏览图书信息:

    学生可以浏览图书的相关信息,包括一本书的书名、图书号、作者、出版时间、出版社名、价格。

  3)自主查询图书信息:

   可以按书名或按作者查找图书的相关信息并显示。

 4)删除图书信息:

   只能通过图书号删除一本书的相关信息。

 5)修改图书信息:

只能通过图书号进行修改该图书的相关信息。 

3、模块划分

图1  系统功能模块图

4、数据流图

流程图: 可选过程: 结束流程图: 可选过程: 开始     

图2 系统数据流程图


三、  设计步骤

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct {

   char number[10];//书号

   char name[20];//书名

   char author[20];//作者

   char publish[50];//出版社

   char time[20];//出版时间

   float price;

}mbook;

typedef struct {

   int count;//书的本数

   mbook book[100];//最大可有100本书

}mlibrary;

mlibrary library;

void save()//保存图书信息。

{

   FILE *fp;

   if((fp=fopen("library.doc","w"))==NULL)

   {

         printf("\n不能保存图书信息\n");

         return;

   }

   fwrite(&library.count,sizeof(int),1,fp);

   fwrite(library.book,sizeof(library.book[0]),library.count,fp);

}

void putin()      /*定义录入函数*/

{

   int y=1;

   system("cls");

   while(y)

   {

         printf("\t请输入您的书籍的书号:");

         scanf("%s",library.book[library.count].number);

         printf("\t请输入书名:");

         scanf("%s",library.book[library.count].name);

         printf("\t请输入作者名:");

         scanf("%s",library.book[library.count].author);

         printf("\t请输入出版社:");

         scanf("%s",library.book[library.count].publish);

         printf("\t请输入出版时间:");

         scanf("%s",library.book[library.count].time);

         printf("\t请输入该书的价格:");

         fflush(stdin);

         scanf("%f",&library.book[library.count].price);

         library.count++;

         printf("录入成功,恭喜您!");

         printf("\n是否继续录入(1.继续;0,退出录入):");

         fflush(stdin);

         scanf("%d",&y);

         if (y!=1)

         {

              y=0;

              break;

         }

   }

    save();

}

void lookup()

{

   system("cls");

   printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");

   for (int i=0;i<library.count;i++)

   {

         printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);

   }

   printf("\n   查询结果如上按0键返回主菜单:   ");

   fflush(stdin);

   getchar();

}

void search_by_name()          /*定义按书名查询*/

{  

   char s2[20];

   int flag=1;

   printf("\n请输入要查询的书名: ");

   fflush(stdin);

   scanf("%s",s2);

   printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");

   for(int i=0;i<library.count;i++ )

         if(strcmp(s2,library.book[i].name)==0)

         { 

              flag=0;

              printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);

         }

   if (flag)

   {

         printf("查询错误!按0键返回主菜单:   ");

   }

   fflush(stdin);

   getchar();

}

void search_by_author()          /*定义按作者名查询*/

{  

   char s3[20];

   int flag=1;

   printf("请输入要查询的书的作者: ");

   fflush(stdin);

   scanf("%s",s3);

   printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");

   for(int i=0;i<library.count;i++ )

         if(strcmp(s3,library.book[i].author)==0)

         { 

              flag=0;

              printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);

                    }

         if (flag)

         {

              printf("查询出错!按0键返回主菜单:    ");

         }

        

   fflush(stdin);

   getchar();

}

void search()        /*定义查询函数*/

   int a;

   system("cls");         /*进行清屏*/

    printf("\t\t******************************\n");

   printf("开始查询\n");

    printf("\t\t\t1---------------按书名查询\n");

    printf("\t\t\t2---------------按作者名查询\n");

    printf("\t\t\t0---------------退出\n");

    printf("\t\t******************************\n") ;

    printf("\t\t请选择你想要的查询方式:");

   fflush(stdin);

    scanf("%d",&a);

    switch(a)

   {

   case 1:

         search_by_name();

         break;     

   case 2:

         search_by_author();

         break;

   case 0:

         return;

   }

}

void del()                   /*定义删除函数*/

{

   char number[10];

   system("cls");            /*清屏*/

   printf("\n   请输入想要删除的书名:");

   fflush(stdin);

   scanf("%s",number);

   int i;

   for (i=0;i<library.count;i++)

   {

         if(strcmp(number,library.book[i].number)==0)break;

   }

   if (i!=library.count)

   {

         for(;i<library.count-1;i++)

         {

              strcpy(library.book[i].name,library.book[i+1].name);

              strcpy(library.book[i].number,library.book[i+1].number);

              strcpy(library.book[i].publish,library.book[i+1].publish);

              strcpy(library.book[i].author,library.book[i+1].author);

              strcpy(library.book[i].time,library.book[i+1].time);

              library.book[i].price=library.book[i+1].price;

         }

         library.count--;

   }

   else

         printf("\n cannot found!\n");

         printf("删除成功按0键返回主菜单");

   save();

   fflush(stdin);

   getchar();

}

void update()//修改图书信息

{

   char number[10];

   system("cls");            /*清屏*/

   printf("\n   请输入你要更改的图书名:");

   fflush(stdin);

   scanf("%s",number);

   int i;

   for (i=0;i<library.count;i++)

   {

      if(strcmp(number,library.book[i].number)==0)

      {

            printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n");

            printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price);

            break;

      }

   }

   if (i!=library.count)

   {

         mbook book;

         printf("\n\t\t请输入修改后此图书的信息\n");

         printf("\t请输入图书号:");

         scanf("%s",book.number);

         printf("\t请输入图书名:");

         scanf("%s",book.name);

         printf("\t请输入作者名:");

         scanf("%s",book.author);

         printf("\t请输入出版社:");

         scanf("%s",book.publish);

         printf("\t请输入出版时间:");

         scanf("%s",book.time);

         printf("\t请输入该书的价格:");

         fflush(stdin);

         scanf("%f",&book.price);

         strcpy(library.book[i].name,book.name);

         strcpy(library.book[i].number,book.number);

         strcpy(library.book[i].publish,book.publish);

         strcpy(library.book[i].author,book.author);

         strcpy(library.book[i].time,book.time);

         library.book[i].price=book.price;

         save();

         printf("\n 修改成功请按0键返回主菜单:");

   }

   else

         printf("\n 修改出错!请按0键返回主菜单:\n");

   fflush(stdin);

   getchar();

}

void main()

{

   FILE *fp;

   if((fp=fopen("library.doc","r"))==NULL)

   {

         printf("\n不能打开图书信息库\n");

         fp=fopen("library.doc","w+");

         printf("\n初始化图书信息库,初始化之后要重启程序\n");

         library.count=0;

         fwrite(&library.count,sizeof(int),1,fp);

         fclose(fp);

   }

   fread(&library.count,sizeof(int),1,fp);

   fread(library.book,sizeof(library.book[0]),library.count,fp);

   fclose(fp);

   int a;

    do

    {

         system("cls");

         printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n");

         printf("\t\t*********************************************\n");

         printf("\t\t\t1 ------------------图书信息录入\n");

         printf("\t\t\t2 ------------------图书信息浏览\n");

            printf("\t\t\t3 ------------------图书信息查询\n");

         printf("\t\t\t4 ------------------图书信息删除\n");

         printf("\t\t\t5 ------------------图书信息修改\n");

         printf("\t\t\t0 -----------------退出图书信息系统\n");

         printf("\t\t*********************************************\n");

         printf("\t\t请输入操作类型:    ");

         fflush(stdin);

         scanf("%d",&a);

         switch(a)

         {

         case 1:

              putin();

              break;

         case 2:

              lookup();

              break;

         case 3:

              search();

              break;

         case 4:

              del();

              break;

         case 5:

              update();

              break;

         case 0:

              printf("\n\n退出\n\n");

              break;

         default:

              printf("\n序号不对\n");

         }

    }while(a!=0);

    save();

}


四、  课程设计总结

通过为期一周的课程设计,对《C语言》这门课程有了更深一步的了解。它是计算机程序设计的重要理论技术基础,在我们软件工程专业的学习中占据着十分重要的地位。这个程序的结构大体是从网络上借鉴的,但是结果无法运行,只能自己修改,最后终于调试通过,同时也使我们知道,要学好这门课程,仅学习书本上的知识是不够的,还要有较强的实践能力。因为我们学习知识就是为了实践。而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西。

相关推荐