小型图书管理系统

【问题描述】
小明同学特别喜欢买书看书。由于书较多,摆放杂乱,找起来非常麻烦。这学期小明同学上了数据结构与程序设计课后,决定改变这种状况:用C开发一个小型图书管理系统。系统中包含的图书信息有:书名、作者、出版社、出版日期等。首先,图书管理系统对已有的书(原始书库,存放在一个文本文件中)按书名字典序进行(排序)摆放(即将原始无序的图书信息文件生成一个有序的文件,即新书库),以便查找。该管理系统可以对新书库中图书条目进行如下操作:
1.录入。新增书录入到书库中(即从输入中读入一条图书信息插入到已排序好的图书文件相关位置处)
2.查找。按书名或书名中关键字信息在书库中查找相关图书信息,若有多本书,按字典序输出。
3.删除。输入书名或书名中关键字信息,从书库中查找到相关书并将其删除,并更新书库。
【输入形式】
原始的图书信息(原始书库)保存在当前目录下的books.txt中。
用户操作从控制台读入,首先输入操作功能序号(1代表录入操作,2代表查找操作,3代表删除操作,0代表将已更新的图书信息保存到书库中并退出程序),然后在下一行输入相应的操作信息(录入操作后要输入一条图书信息,查找和删除操作后只要输入书名或书名中部分信息)。程序支行过程中可以进行多次操作,直到退出(输入操作0)程序。
要求:
1、原始文件中的图书信息与录入的图书信息格式相同,每条图书信息都在一行上,包括书名(不超过50个字符)、作者(不超过20个字符)、出版社(不超过30个字符)和出版日期(不超过10个字符),只由英文字母和下划线组成,用一个空格分隔。图书信息总条数不会超过500.
2、下划线字符参加排序。
3、图书不会重名。
【输出形式】
进行录入和删除操作,系统会更新图书信息,但不会在控制台窗口显示任何信息。
进行查找操作后,将在控制台按书名字典序分行输出查找到的图书信息,书名占50个字符宽度,作者占20个字符宽度,出版社占30个字符宽度,出版日期占10个字符宽度,都靠左对齐输出。
最终按字典排序的图书信息保存在当前目录下的ordered.txt中,每条图书信息占一行,格式与查找输出的图书信息相同。
【样例输入】
假设books.txt中保存的原始图书信息为:
The_C_programming_language
Kernighan Prentice_Hall 1988
Programming_in_C Yin_Bao_Lin China_Machine_Press
2013
Data_structures_and_Algorithm_Analysis_in_C Mark_Allen_Weiss
Addison_Wesley 1997
ANSI_and_ISO_Standard_c Plauger Microsoft_Press
1992
Data_structures_and_program_design_in_C Robert_Kruse Pearson_Education
1997
Computer_network_architectures Anton_Meijer Computer_Science_Press
1983
C_programming_guidelines Thomas_Plum Prentice_Hall
1984
Data_structures_using_C Tenenbaum Prentice_Hall
1990
Operating_system_concepts Peterson Addison_Wesley
1983
Computer_networks_and_internets Douglas_E_Come Electronic_Industry
2017
用户控制台输入信息为:
1
Data_structures_and_C_programs Christopher
Addison_Wesley 1988
2
structure
1
The_C_programming_tutor
Leon_A_Wortman R_J_Brady
1984
2
rogram
3
rogramming
0
【样例输出】
用户输入“2
structure”后,控制台输出:

用户输入“2 rogram”后,控制台输出:

ordered.txt文件内容为:

【样例说明】
先读入books.txt中的10条图书信息,按照书名进行字典序排序;用户进行了五次操作,然后退出:第一次操作是插入了一条图书信息,这时有11条图书信息,按书名字典序排序为:
ANSI_and_ISO_Standard_c
Plauger Microsoft_Press 1992
C_programming_guidelines Thomas_Plum
Prentice_Hall 1984
Computer_network_architectures Anton_Meijer
Computer_Science_Press 1983
Computer_networks_and_internets Douglas_E_Come
Electronic_Industry 2017
Data_structures_and_Algorithm_Analysis_in_C
Mark_Allen_Weiss Addison_Wesley 1997
Data_structures_and_C_programs
Christopher Addison_Wesley 1988
Data_structures_and_program_design_in_C
Robert_Kruse Pearson_Education 1997
Data_structures_using_C Tenenbaum
Prentice_Hall 1990
Operating_system_concepts Peterson Addison_Wesley
1983
Programming_in_C Yin_Bao_Lin China_Machine_Press
2013
The_C_programming_language Kernighan Prentice_Hall
1988
第二次操作是查找书名包含structure的图书,有4本图书信息按照格式要求输出到屏幕;第三次操作又插入了一条图书信息,这时有12条图书信息;第四次操作查找书名包含rogram的图书,有6本图书信息按照格式要求输出到屏幕;第五次操作是删除书名包含rogramming的图书信息,有三条图书信息要删除,剩下九条图书信息;最后退出程序前将剩余的九条图书信息按照格式要求存储在ordered.txt文件中。

【题解】

  1 #include<stdio.h>
  2 #include<string.h>
  3 int read_file();
  4 void sort_book();
  5 void enter_book();
  6 void seek_book();
  7 void cancel_book();
  8 void save_file();
  9 int len;
 10 struct que
 11 {
 12     char name[55];
 13     char aut[25];
 14     char pub[35];
 15     char date[15];
 16 }book[505],t,enter;
 17 int main()
 18 {
 19     int n;
 20     len=read_file();
 21     sort_book();
 22     while((scanf("%d",&n))!=EOF)
 23     {
 24         switch(n)
 25         {
 26             case 1:
 27                 enter_book();
 28                 break;
 29             case 2:
 30                 seek_book();
 31                 break;
 32             case 3:
 33                 cancel_book();
 34                 break;
 35             default:
 36                 break;
 37         }
 38         if(n==0)
 39             break;
 40     }
 41     return 0;
 42 }
 43 int read_file()
 44 {
 45     FILE *fp;
 46     int i=0;
 47     if((fp=fopen("books.txt","r"))==NULL)
 48         return 1;
 49     while((fscanf(fp,"%s",book[i].name))!=EOF){
 50         fscanf(fp,"%s",book[i].aut);
 51         fscanf(fp,"%s",book[i].pub);
 52         fscanf(fp,"%s",book[i].date);
 53         i++;
 54     }
 55     fclose(fp);
 56     return i;
 57 }
 58 void sort_book()
 59 {
 60     int i,j;
 61     for(i=0;i<len;i++)
 62         for(j=0;j<len-1-i;j++)
 63             if((strcmp(book[j].name,book[j+1].name))>0)
 64             {
 65                 t=book[j];
 66                 book[j]=book[j+1];
 67                 book[j+1]=t;
 68             }
 69     save_file();
 70     return;
 71 }
 72 void enter_book()
 73 {
 74     scanf("%s %s %s %s",book[len].name,book[len].aut,book[len].pub,book[len].date);
 75     len++;
 76     sort_book();
 77     save_file();
 78     return;
 79 }
 80 void seek_book()
 81 {
 82     int i;
 83     char name[55];
 84     scanf("%s",name);
 85     for(i=0;i<len;i++)
 86         if((strstr(book[i].name,name))!=NULL)
 87             printf("%-50s%-20s%-30s%-10s\n",book[i].name,book[i].aut,book[i].pub,book[i].date);
 88     save_file();
 89     return;
 90 }
 91 void cancel_book()
 92 {
 93     int i,j;
 94     char name[55];
 95     scanf("%s",name);
 96     for(i=0;i<len;i++)
 97         if((strstr(book[i].name,name))!=NULL)
 98         {
 99             for(j=i;j<len;j++)
100                 book[j]=book[j+1];
101             len--;
102             i--;
103         }
104     save_file();
105     return;
106 }
107 void save_file()
108 {
109     FILE *fp;
110     int i;
111     if((fp=fopen("ordered.txt","w"))==NULL)
112             return;
113     for(i=0;i<len;i++)
114         fprintf(fp,"%-50s%-20s%-30s%-10s\n",book[i].name,book[i].aut,book[i].pub,book[i].date);
115     fclose(fp);
116     return;
117 }

原文地址:https://www.cnblogs.com/tuoniao/p/10346467.html

时间: 2024-07-31 07:17:40

小型图书管理系统的相关文章

将一个SSH框架的小型图书管理系统,sql server 2005数据库修改为oracle数据库遇到的一些问题总结下

一.Oracle 11g database的下载,安装: 下载: 然后,根据这个超链接建立自己的用户,数据库. http://wenku.baidu.com/view/caa21c1a650e52ea551898e2.html 二.navicat premium 连接oracle 1.查看安装目录下(F:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN)的tnsnames.ora 文件. 2.连接时,先配置选项下的OCI文件,下载:

图书管理系统

该图书馆里系统能实现基本的对图书信息的操作和借阅.归还功能. 一.主要内容: 本课程设计结合本学期所学C语言知识,数组.函数.结构体.指针.链表.文件读取操作等等,准备设计开发一个简单的图书管理系统.设计开发这个系统需要用到链表.文件读取操作.结构体.函数.指针.等C语言知识.本课程设计将会实现对图书信息的账号登录.注册账号.密码修改.密码查找.查找.输出.排序.备份.恢复.图书借阅和归还功能.本着简单.易用的设计原则,本课程设计在尽量优化界面在保证输入输出美观的同时又不失友好的交互界面. 本次

脚踏实地 志存高远-快意图书管理系统开发侧记之二

以网络技术为主的信息技术的飞速发展,使得图书管理信息化向着更加智能.快捷的方向不断变革.原有的一批图书管理软件的处理模式.软件架构.操作流程已不能满足网络时代所要求的双向互动.信息共享.高度智能的操作诉求.快意团队于2011年10月成立,并在调研数家企事业单位.大中专学校.中小学校图书管理业务流程及需求的基础上,研制了快意图书管理综合解决方案,开发了快意图书综合管理软件,并针对不同行业特点,进行了差异化开发,推出了快意图书管理企事业版本,中小学版本.大中专院校等多个版本,为不同行业图书管理提供了

图书管理系统------软件设计图纸

图书管理系统------软件设计图纸 一.图书馆管理系统总体功能概述 图书馆管理系统功能图: 1.系统登录模块 : 本模块的功能点包括: (1) 判断用户名和密码是否相符: (2) 根据用户的权限类型,登录到系统的制定界面操作使用. 2.图书管理模块: 在本模块中图书馆工作人员可以对图书进行管理操作. 本模块的功能点包括: (1) 新书入库,将新进图书按其类型将图书的基本信息录入系统数据库: (2) 图书出库,某一部分图书会随着时间的增长及知识的更新而变得不再有收藏的价值,或者图书被损坏,这些图

图书管理系统测试计划说明书

图书管理系统测试计划说明书 一. 引言 1.1 编写目的 本测试计划文档作为指导此测试项目循序渐进的基础,帮助我们安排合适的资源和进度,避免可能的风险.本文档有助于实现以下目标: 1) 确定现有项目的信息和应测试的软件结构. 2) 列出推荐的测试需求 3) 推荐可采用的测试策略,并对这些策略加以详细说明 4) 确定所需的资源,并对测试的工作量进行估计. 5) 列出测试项目的可交付元素,包括用例以及测试报告等. 1.2 背景 随着人们知识层次的提高,阅读成为日常生活中不可缺少的一部分.而图书馆的存

s1考试 图书管理系统 结构体版

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

Java图书管理系统(用Java常用集合实现)

图书管理系统 一.需求说明 1.功能:登录,注册,忘记密码,管理员管理,图书管理. 2.管理员管理:管理员的增删改查. 3.图书管理:图书的增删改查. 4.管理员属性包括:id,姓名,性别,年龄,家庭住址,手机号码,登录名称,登录密码,状态. 5.图书属性包括:id,图书名称,作者,单价,出版社,出版日期,类别. 6.技术:通过用集合来模拟数据库实现该系统,建议采用List集合实现,集合模拟数据库只是一个数据的临时保存. 二.功能说明 1.注册功能 描述:注册需要用户输入所有的必须的用户信息.

图书管理系统类图

一. 实验目的  使用面向对象的建模方法创建图书管理系统的类图. 二. 实验要求 画出该系统的类图 . 三. 实验器材 计算机一台. Office Visio 2010或Rational Rose工具软件. 四.  实验内容 创建类图,以及他们之间的关系 users:用户 record:记录 books:图书信息

C语言课程设计—图书管理系统

这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<stdio.h> #include<stdlib.h> #include<string.h> struct book{ char book_name[30]; int bianhao; double price; char author[20]; char state[20]; cha