#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 40 //数组的长度,即能处理的图书记录的最大值
struct books
{intID;
char Class[10];
char BookName[20];
char Author[20];
char Publishing[15];
intCount;
floatPrice;
}books;
struct books Books[M];
int booknum =0;
char Title[100];
void menu() //菜单函数,可参考
{printf(" *****************************\n");
printf(" | 简易图书管理系统 |\n");
printf(" |***************************|\n");
printf(" | 1. 显示所有图书基本信息 |\n");printf(" | 2. 按书名查询 |\n");
printf(" | 3. 按作者名查询 |\n");
printf(" | 4. 按种类排序 |\n");
printf(" | 5. 按出版社排序 |\n");
printf(" | 6. 书籍总价 |\n");
printf(" | 7. 每类图书的总册数 |\n");
printf(" | 8. 图书的修改 |\n");
printf(" | 0. 退出 |\n");
printf(" ****************************\n");}//将文件中的数据读出来,保存在结构体中
void ReadFile(){FILE *fp;int i=0, j;// 读取数据文件图书信息
if((fp = fopen("JK0305.txt", "r")) == NULL)
{printf("图书信息文件打开错误!\n");return;} // 文件打开成功后,先读文件中的第一行标题栏,存在Title数组中
fscanf(fp, "%s ", Title);//循环读出每一条图书记录,因图书记录数不是固定的,最好用while循环
while(!feof(fp)) //feof(fp)文件指针指向文件的尾部
{ fscanf(fp, "%d %s%s%%s%d%f",&Books[i].ID, Books[i].Class, Books[i].BookName, Books[i].Author, Books[i].Publishing, &Books[i].Count, &Books[i].Price); i++; }
booknum=i;
printf("\n\n图书信息文件读取成功!\n\n");
fclose(fp); }// 显示所有图书信息
void DisplayAll() {int i;puts(Title);for(i=0;i<booknum;i++)
printf("%d%s%s%s%s%d%6.2f\n", Books[i].ID, Books[i].Class, Books[i].BookName, Books[i].Author, Books[i].Publishing, Books[i].Count, Books[i].Price);}//后面各个功能函数,自行完成// 按书名查询
void QryByBookName(){}// 按作者查询
void QryByAuthor(){}//
void SortByClass(){}
void SortByPublish(){}
void BookTotal(){}
void BookCount(){}
void Bookbooknumodify(){}//主函数,程序运行从主函数入口,先调用打开文件的函数,将文件中的图书数据读出来保存在结构体数组中,再循环调用菜单,根据菜单的选项,调用其他各功能函数,实现各个功能。
int main()
{int ind;
while(1)
{ ReadFile();
menu();
printf("请输入操作编号:");
scanf("%d", &ind);
switch(ind)
{case 1: DisplayAll();break;
case 2: QryByBookName();break;
case 3: QryByAuthor(); break;
case 4: SortByClass(); break;
case 5: SortByPublish(); break;
case 6: BookTotal(); break;
case 7: BookCount(); break;
case 8: Bookbooknumodify(); break;
case 0: exit(1);
}}
return 0;}
#include <stdlib.h>
#include <string.h>
#define M 40 //数组的长度,即能处理的图书记录的最大值
struct books
{intID;
char Class[10];
char BookName[20];
char Author[20];
char Publishing[15];
intCount;
floatPrice;
}books;
struct books Books[M];
int booknum =0;
char Title[100];
void menu() //菜单函数,可参考
{printf(" *****************************\n");
printf(" | 简易图书管理系统 |\n");
printf(" |***************************|\n");
printf(" | 1. 显示所有图书基本信息 |\n");printf(" | 2. 按书名查询 |\n");
printf(" | 3. 按作者名查询 |\n");
printf(" | 4. 按种类排序 |\n");
printf(" | 5. 按出版社排序 |\n");
printf(" | 6. 书籍总价 |\n");
printf(" | 7. 每类图书的总册数 |\n");
printf(" | 8. 图书的修改 |\n");
printf(" | 0. 退出 |\n");
printf(" ****************************\n");}//将文件中的数据读出来,保存在结构体中
void ReadFile(){FILE *fp;int i=0, j;// 读取数据文件图书信息
if((fp = fopen("JK0305.txt", "r")) == NULL)
{printf("图书信息文件打开错误!\n");return;} // 文件打开成功后,先读文件中的第一行标题栏,存在Title数组中
fscanf(fp, "%s ", Title);//循环读出每一条图书记录,因图书记录数不是固定的,最好用while循环
while(!feof(fp)) //feof(fp)文件指针指向文件的尾部
{ fscanf(fp, "%d %s%s%%s%d%f",&Books[i].ID, Books[i].Class, Books[i].BookName, Books[i].Author, Books[i].Publishing, &Books[i].Count, &Books[i].Price); i++; }
booknum=i;
printf("\n\n图书信息文件读取成功!\n\n");
fclose(fp); }// 显示所有图书信息
void DisplayAll() {int i;puts(Title);for(i=0;i<booknum;i++)
printf("%d%s%s%s%s%d%6.2f\n", Books[i].ID, Books[i].Class, Books[i].BookName, Books[i].Author, Books[i].Publishing, Books[i].Count, Books[i].Price);}//后面各个功能函数,自行完成// 按书名查询
void QryByBookName(){}// 按作者查询
void QryByAuthor(){}//
void SortByClass(){}
void SortByPublish(){}
void BookTotal(){}
void BookCount(){}
void Bookbooknumodify(){}//主函数,程序运行从主函数入口,先调用打开文件的函数,将文件中的图书数据读出来保存在结构体数组中,再循环调用菜单,根据菜单的选项,调用其他各功能函数,实现各个功能。
int main()
{int ind;
while(1)
{ ReadFile();
menu();
printf("请输入操作编号:");
scanf("%d", &ind);
switch(ind)
{case 1: DisplayAll();break;
case 2: QryByBookName();break;
case 3: QryByAuthor(); break;
case 4: SortByClass(); break;
case 5: SortByPublish(); break;
case 6: BookTotal(); break;
case 7: BookCount(); break;
case 8: Bookbooknumodify(); break;
case 0: exit(1);
}}
return 0;}