ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小型图书管理系统

2019-02-01 17:40:50  阅读:546  来源: 互联网

标签:小型 管理系统 信息 查找 book 操作 书名 图书


【问题描述】
小明同学特别喜欢买书看书。由于书较多,摆放杂乱,找起来非常麻烦。这学期小明同学上了数据结构与程序设计课后,决定改变这种状况:用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”后,控制台输出:

1.jpg

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

2.jpg

ordered.txt文件内容为:
3.jpg

【样例说明】
先读入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 }

 

标签:小型,管理系统,信息,查找,book,操作,书名,图书
来源: https://www.cnblogs.com/tuoniao/p/10346467.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有