加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

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

09/18 09:56
245
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

图书管理系统

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

1自定义问题

图1.0

创建一个图书管理系统。假设图书管理系统中仅仅包含图书的书名和编号和作者等信息。程序的运行效果如图1.0所示,选择任意菜单后,实现相应功能

2系统设计

2.1总体设计

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述

2.2 详细设计

2.2.1数据结构设计

  1. 图书信息结构体
  2. struct describe
  3. {
  4. char book_name [10]; //书名
  5. int num ;//编号
  6. char author [10]; }book[N]//作者

2.2.2主控main()函数执行流程

图2.2  主控函数执行流程图

2.2.3 初始化图书模块:choice1()//初 始 化 图 书函数。   对图书进行输入和保存,

choice1()//初 始 化 图 书函数

{

int i,j,temp;//

printf("--------------初 始 化 图 书 信 息---------------n");

printf("初始化图书的本书: ");

scanf("%d",&temp);

printf("--------书名 编号 作者 n");

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

{

printf("第%d本书:",i+1);

scanf("%s%d%s",book[i].book_name,&book[i].num,book[i].author);

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

{

again:

if((strcmp(book[i].book_name,book[j].book_name))==0||book[i].num==book[j].num)

{

printf("初始化失败!------你输入的数据违背了主键的唯一性!n");

printf(" 书名 编号 作者 n");

printf("第%d本书:",i+1);

scanf("%s%d%s",book[i].book_name,&book[i].num,book[i].author);//重新输入书本信息

goto again;

}

}

}

FILE* fp;

if((fp=fopen("book.txt","wb"))==NULL)

{

printf("cannot open filen");

return;

}

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

{

if(fwrite(&book[i],sizeof(struct describe ),1,fp)!=1)

printf("file write errorn");

}

fclose (fp);

}

该函数对图书进行初始化录入保存,首先调用程序,首先输入要录入的图书的本书,如图

先输入要初始化的本数为1;接下来输入书的名字;编号;作者如图

输入完后,函数将结果保存到book.txt文件中.

2.2.4 /增 加 图 书模块,对图书馆购进新书时要对新书进行录入保存在图书管理系统。

choice2()//增 加 图 书函数

{

int i,m=0,y=1;

FILE *fp ;

printf("----------------增 加 图 书 信 息----------------n");

if((fp=fopen("book.txt","rb"))==NULL)

{

printf("cannot open filen");

exit(0) ;

}

while((fread(&book[m],sizeof(struct describe ),1,fp))!=0)

m++ ;

fclose(fp);

while(y)

{

again:

printf("书名 编号 作者n");

scanf("%s%d%s",book[m].book_name,&book[m].num,book[m].author);

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

{

if((strcmp(book[i].book_name,book[m].book_name))==0||book[i].num==book[m].num)

{printf("添加图书失败!----你输入的数据违背了主键的唯一性!n");

goto again;}

}

printf("是否继续(1继续or 0结束):");

getchar();

scanf("%d",&y);

m++;

}

if((fp=fopen("book.txt","wb"))==NULL)

{

printf("cannot open filen");

exit(0) ;

}

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

{

if(fwrite(&book[i],sizeof(struct describe ),1,fp)!=1)//保存函数

printf("file write errorn");

}

fclose (fp);

}

该模块主要对图书馆新购买回来的书籍进行录入保存,输入数字2进入choice2()函数,依次输入书本的名字,编号,作者。函数要求输入1和0,以判断是否继续输入图书信息;如图

如果继续输入就输入1或者结束就输入0。

2.2.5修改图书模块:该模块对输入有错误的图书的信息进行修改。在主菜单中输入数字3,进入choice2()函数,

choice3()//修 改 图 书函数

{

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

FILE *fp ;

int temp ;

again:

printf("输入你要修改的图书的编号:");

scanf("%d",&temp);

struct describe update ;//再定义一个struct describe的结构体

int i=0,k=0,j;

if((fp=fopen("book.txt","rb+"))==NULL)

{

printf("cannot open filen");

exit(0);

}

int n=10000;

while((fread(&book[k],sizeof(struct describe),1,fp))!=0)

{

if(book[k].num==temp)

n=k;

k++;

}

fclose(fp);

if(n==10000)

{

printf("你要-修改的-图书-不存在!n");

getchar();

goto again ;

}

printf("书名 编号 作者n");

scanf("%s%d%s",update.book_name,&update.num,update.author);

for(j=0;j<k;j++)

{

if(j==n) continue ;

else

if((strcmp(book[j].book_name,update.book_name))==0||book[j].num==update.num)

{

printf("修改图书信息失败!您输入的数据违背了主键的唯一性!n");

goto again ;

}

}

if((fp=fopen("book.txt","rb+"))==NULL)

{

printf("cannot open filen");

exit(0);

}

while((fread(&book[i],sizeof(struct describe),1,fp))!=0)

{

if(book[i].num==temp)

{

fseek(fp,-sizeof(struct describe),1);//把文件fp向前后推sizeof(struct describe)字节

fwrite(&update,sizeof(struct describe ),1,fp);

fclose(fp);

}

i++;

  • 有需要资料的可了解一下.docx

相关推荐

电子产业图谱