C语言程序设计--图书信息管理系统

题    目: 图书信息管理系统 

图书信息管理系统

本题目设计目的是训练学生的基本编程能力,了解图书管理信息系统的开发流程,熟悉C语言的文件的基本操作。本程序中涉及结构体、文件等方面的知识。通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用文件存储结构实现对学生成绩管理的原理,为进一步开发出高质量的图书管理系统打下坚实的基础。

1、题目要求

设计“图书信息管理系统

要求:

图书信息包括:书号、书名、作者、价格等。使之提供以下功能:

  1. 系统以菜单方式工作。
  2. 图书信息录入功能。(图书信息用文件保存)。
  3. 图书信息浏览功能。
  4. 图书信息的导入。
  5. 图书信息的修改。
  6. 图书信息查询功能。
  7. 图书信息的删除。
  8. 图书信息的保存和返回主菜。

2、分析:

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

3、总体设计:

    根据题目要求,可以将系统分为十三个模块:

  1. 菜单选择模块。
  2. 图书信息数据写入文件。
  3. 图书信息数据文件的导入。
  4. 图书信息主菜单的打印。
  5. 输出*与输出~。
  6. 提供开关的效果。
  7. 图书信息的输入。
  8. 图书信息的打印。
  9. 图书信息的修改。
  10. 图书信息的查找。
  11. 图书信息的删除。
  12. 图书信息的保存。
  13. 返回主菜单。

4:部分程序设计:

头函数名

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<windows.h>

#define N 80

struct book_type

{char booknum[20];                   /*书号*/

char bookname[20];                      /*书名*/

char authorname[20];                  /*作者*/

char price[20];                      //价格

}person[N];                       /*存储图书信息*/

4.1:功能模块

void menu();                      /*菜单函数*/

void display1();                  /*执行打印的功能*/

void display2();                  /*执行打印的功能*/

void reserve();                   /*保存到数组*/

void read();                      /*导入图书信息*/

void delay();                     /*提供开关的效果*/

void choose();                    /*提供选择的功能*/

void enter();                     /*图书信息的输入*/

void printfinformation();         /*图书信息的打印*/

void modify();                     /*图书信息的修改*/

void search();                    /*图书信息的查找*/

void del();                       /*图书信息的删除*/

void save();                      /*图书文件信息的保存*/

void back();                      /*返回主菜单*/

char ch;                          /*存储主菜单的调用选项信息*/

int number=0,temp1,temp2=0;       /*记录每次输入的人数*/

void main()

{system("color 0e");              //选择颜色

menu();                           //菜单函数

do

{scanf(" %c",&ch);

system("cls");                    //清屏功能

choose();

}while(ch!='8');                  //循环条件的判断

}

//提供主菜单的选择功能

void choose()

{switch(ch)

{case'1':enter();

break;

case'2':printfinformation();

       back();

       break;         

case'3':modify();

       back();

       break;

case'4':search();

       //back;

       break;

case'5':del();

       break;

case'6':save();

       break;

case'7':read();

       back();

case'8':printf("\n\n\t感谢您的使用!\n");

       break;

default:menu();

       printf("\n\n\t请重新选择:");

}

注释:图书信息以数据的形式写入文件,以文件的形式保存图书信息数据

//图书信息数据写入文件

void reserve()

{FILE *fp=NULL;

FILE *fp1=NULL;

int i;

if((fp=fopen("book.txt","w"))==NULL)                                            //以文本只写方式打开文件

{printf("不能打开文件");

exit(0);

}

if((fp1=fopen("book1.txt","w"))==NULL)                                            //以文本只写方式打开文件

{printf("不能打开文件");

exit(0);

}

fprintf(fp1,"%20d\n",number);

for(i=temp2;i<number;i++)

{fprintf(fp,"%10s%15s%15s%15s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);       //写入文件

}

fclose(fp1);  

fclose(fp);                                                                     //关闭文件

}

注释:当图书信息不能打开时则关闭文件,返回菜单。

//图书信息数据文件的读取/导入

void read()

{FILE *fp;//=NULL;

FILE *fp1;

int i=0;

if((fp1=fopen("book1.txt","rb+"))==NULL)         以文本只读方式重新打开文件

{printf("不能打开文件");

exit(0);

}

fscanf(fp1,"%4d\n",&number);

if((fp=fopen("book.txt","rb+"))==NULL)     为了读与写,打开一个二进制文件

{printf("不能打开文件");

exit(0);

}

for(i=0;i<number;i++)

{fscanf(fp,"%11s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);

                                                                             //读文件

printf("%11s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);

                                                                             //输出文件数据

}

reserve();

fclose(fp1);

fclose(fp);

menu();

back();                                                                    

}

//主菜单的打印

void menu()

{char *s[9]={"【1】输入图书信息","【2】查看图书信息","【3】修改图书信息","【4】查找图书信息","【5】删除图书信息","【6】保存图书信息","【7】导入图书信息","【8】退出管理系统","请选择:"};

int i;

printf("\n");

printf("\t\t");

display1();

printf("图书管理系统");

display1();

printf("\n\n");

printf("\t\t");

display2();

printf("\n\n");

printf("\t\t");

for(i=0;i<9;i++)

{display1();

printf("%s",s[i]);

display1();

printf("\n");

printf("\t\t");

}

}

//输出*

void display1()

{int i;

for(i=0;i<=16;i++)

{printf("*");

delay();

}

}

//输出~

void display2()

{int i;

for(i=0;i<=24;i++)

{printf("~");

delay();

}

}

//提供开关的效果

void delay()

{long i,n=4000000;

for(i=0;i<n;i++)

{if(ch!='\0') i=n;                //运行过后可消除开关的延迟效果

}

}

//图书信息的输入

void enter()

{int i;

printf("请输入图书的册数:");

scanf("%d",&temp1);

number+=temp1;

for(i=temp2;i<number;i++)         //引用中间变量temp2,记录每次输入的人数

{printf("请输入%d本图书的信息:",i+1);

printf("\t书号:");

scanf("%s",person[i].booknum);

printf("\t书名:");

scanf("%s",person[i].bookname);

printf("\t作者:");

scanf("%s",person[i].authorname);

printf("\t价格:");

scanf("%s",person[i].price);

}

reserve();

temp2+=temp1;

back();                           //返回主菜单

}

//图书信息的打印

void printfinformation()

{int i;

if(number==0)

{printf("\t没有图书信息");

}

else

{printf("\n\t\t~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~\n");

printf("--------------------------------------------------\n");

printf("        书号       书名        作者      价格\n");

printf("--------------------------------------------------\n");

for(i=0;i<number;i++)

{printf("%10s%11s%11s%11s\n",person[i].booknum,person[i].bookname,person[i].authorname,person[i].price);

printf("--------------------------------------------------\n");

}

}

}//图书信息的修改

//图书信息的查找

void search()

{int i,k,flag;

char temp[20],temp1;

if(number==0)

{printf("\t没有图书信息");

}

else

{do

{printf("请输入你要查找的图书是书号或书名:");

scanf("%s",temp);

for(i=0;i<number;i++)

{if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0)

{k=i;

flag=1;

break;

}

if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0))

{printf("不存在该图书\n");

flag=0;

}

}

if(flag==1)

{printf("该图书的信息:\n");

printf("--------------------------------------------------\n");

printf("\3  书号    书名     作者     价格\n");

printf("--------------------------------------------------\n");

printf("%5s%7s%9s%9s\n",person[k].booknum,person[k].bookname,person[k].authorname,person[k].price);

printf("--------------------------------------------------\n");

}

printf("\n是否继续查找?Y/N:");

scanf("%c",&temp1);

}while(temp1=='y'||temp1=='Y');

}

back();

}

void del()

{int i,k,flag;

char temp[20],temp1;

if(number==0)

{printf("\t没有图书信息");

}

else

{printfinformation();

do

{printf("请输入要删除的图书信息的书号或书名:");

scanf("%s",temp);

for(i=0;i<number;i++)

{if(strcmp(temp,person[i].booknum)==0||strcmp(temp,person[i].bookname)==0)

{k=i;

flag=1;

break;

}

if(i==(number-1)&&(strcmp(temp,person[i].booknum)!=0)&&(strcmp(temp,person[i].bookname)!=0))

{printf("不存在该图书\n");

flag=0;

}

}

if((flag==1)&&(number==1))

{number--;

temp2--;

printf("该图书信息已经成功删除\n\n");

}

if((flag==1)&&(number<=0))

{printf("已经没有图书信息,请重新输入!\n\n");

}

if((flag==1)&&(number>1))

{for(i=k;i<(number-1);i++)

{strcpy(person[i].booknum,person[i+1].booknum);

strcpy(person[i].bookname,person[i+1].booknum);

strcpy(person[i].authorname,person[i+1].authorname);

strcpy(person[i].price,person[i+1].price);

}

number--;

temp2--;

printf("该图书信息已经成功删除\n\n");

}

printf("是否继续删除?Y/N");

scanf("%c",&temp1);

}while(temp1=='Y'||temp1=='y');

printf("是否显示删除操作后全部图书信息?Y/N:");

scanf("%c",&temp1);

if(temp1=='y'||temp1=='Y')

{printfinformation();

}

reserve();

}

back();

}

注释:当输入数据时选择1则返回上次的记录,2则保存记录。会输出相应的数据。

//保存记录

void save()

{char temp;

printf("1、读取上次的记录:\n2、保存现在的记录:\n请选择:");

scanf("%c",&temp);

if(temp=='1')

{printf("\n\t\t/~~~~~~~~~~~~~图书信息~~~~~~~~~~~~~~~\n");

printf("--------------------------------------------------\n");

printf("  书号    书名     作者    价格\n");

read();

back();

}

else

{printf("\t程序已经保存\n");

back();

}

}

//返回主菜单

void back()

{printf("\n\t\t输入任意键返回主菜单:");

getch();                          //提供任意键返回效果

system("cls");                    //清屏功能

menu();                           //打印主菜单

}

5运行与测试报告:

功能选择键。

输入图书信息。

查看图书信息。

修改图书信息。

查找图信息。

删除图书信息。

保存图书信息。

图书信息的导入。

退出图书管理系统。


需要全部资料可以在我的资源里下载,资料包括程序文档、源程序。

 

 需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传 点击用微信打开即可,过程有点繁琐请见谅。​​​​​​​

  • 30
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白茶丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值