- 引言:
图书管理系统是一个重要的信息管理系统,对于图书馆和书店等机构来说,它能够方便地管理图书的录入、显示、查询、修改和删除等操作。本实验基于C语言开发了一个简单的图书管理系统,通过账户名和密码进行系统访问和权限控制,并实现了上述功能。在本实验报告中,我们将详细介绍该系统的背景和需求分析、系统设计、系统实现以及实验结果与分析。
- 背景和需求分析:
在现代社会的图书馆和书店中,图书的管理是一项重要的工作。传统的图书管理方式往往需要耗费大量人力和时间,且容易出现错误。因此,开发一个图书管理系统来自动化和简化这一过程具有重要意义。
- 需求分析如下:
录入图书:系统应该允许用户输入图书的相关信息,包括书名、作者、出版社等,并将这些信息保存到图书数据库中。
显示图书:系统应该能够将图书馆中所有图书的信息进行显示,以方便用户查看。
查询图书:系统应该支持用户通过书名或作者进行图书查询,并将查询结果返回给用户。
修改图书:系统应该允许用户选择要修改的图书,并输入新的图书信息进行修改。
删除图书:系统应该支持用户选择要删除的图书,并将其从图书馆中删除。
- 系统实现:
- 录入图书功能的实现代码如下:
void WriteToFile() { FILE *fp = NULL; book stu; char flag = 'y'; fp = fopen("book1.dat", "ab+");//打开文件 if (fp == NULL) { printf("文件打开失败!\n"); exit(1);//1表示在有错的方式退出程序 } while ((flag == 'y' || flag == 'Y')) { system("cls"); Menu1(); printf("请输入图书id:"); scanf("%s", stu.id); printf("请输入书名:"); scanf("%s", stu.name); printf("请输入书籍作者:"); scanf("%s", &stu.author); printf("请输入出版社:"); scanf("%s", &stu.publish); printf("请输入价格:"); scanf("%lf", &stu.price); fwrite(&stu, LEN, 1, fp); fflush(stdin); printf("继续输入吗?继续请输入y或Y:"); getchar(); scanf("%c", &flag); } fclose(fp);//关闭文件 return; }//图书添加的函数
- 显示图书功能的实现代码如下:
void ReadFromFile() { system("cls"); Menu1(); FILE *fp = NULL; book stu; fp = fopen("book1.dat", "rb"); if (fp == NULL) { printf("文件打开失败"); exit(1); } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf(" id\t\t书名\t\t作者\n"); fseek(fp, 0, SEEK_SET); while (!feof(fp)) { if (fread(&stu, LEN, 1, fp)) { printf("%10s\t%8s\t\t%5s\n", stu.id, stu.name, stu.author); } } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); system("pause"); system("cls"); fclose(fp); return; }
- 查询图书功能的实现代码如下:
void QueryFile() { system("cls"); Menu1(); book stu; char x[8]; int flag = 0; FILE *fp; printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t请输入图书id:"); scanf("%s", x); printf(" ID 书名 作者 出版社 价格\n"); fp = fopen("book1.dat", "rb"); if (fp == NULL) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("错误\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); return; } fseek(fp, 0, SEEK_SET); while (fread(&stu, LEN, 1, fp)) { if (strcmp(x, stu.id) == 0) { printf("%3s %5s %5s %10s %5.2lf\n", stu.id, stu.name, stu.author, stu.publish, stu.price); flag = 1; } if (flag = 0) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("没有图书信息"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); } } printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); fclose(fp); system("pause"); system("cls"); return; }
- 修改图书功能的实现代码如下:
void ModifyFile() { system("cls"); Menu1(); book stu; FILE *fp; char x[8]; printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请输入图书id:"); scanf("%s", x); fp = fopen("book1.dat", "rb+"); if (fp == NULL) { printf("文件打开失败"); exit(1); } fseek(fp, 0, SEEK_SET); while (fread(&stu, LEN, 1, fp)) { if (strcmp(x, stu.id) == 0) { printf("请重新输入图书id: "); scanf("%s", stu.id); printf("请重新输入书名: "); scanf("%s", stu.name); printf("请重新输入书籍作者 : "); scanf("%s", &stu.author); printf("请重新输入图书出版社 : "); scanf("%s", &stu.publish); printf("请重新输入图书价格 : "); scanf("%lf", &stu.price); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); fflush(stdin); fseek(fp, 0-LEN, SEEK_CUR); fwrite(&stu, LEN, 1, fp); fclose(fp); } if (feof(fp)) { printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("没有图书信息"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); } } system("pause"); system("cls"); return; }
- 删除图书功能的实现代码如下:
void DeletFile() { system("cls"); Menu1(); book s; FILE* fp; char a[10]; fp = fopen("book1.dat", "rb+"); if (fp == NULL) { printf("打开文件错误!!!\n"); exit(1); } printf("\n请输入图书ID:"); scanf("%s", a); printf("\n\t\t\t删除成功\n"); fseek(fp, 0, SEEK_SET); FILE* fp1; fp1 = fopen("linshi.dat", "ab+");//读写新建一个临时文件 while (fread(&s, LEN, 1, fp))//从原文件读一个结点 { if (strcmp(a, s.id) != 0)//不是要删除的内容 { fwrite(&s, LEN, 1, fp1); } } fclose(fp); fclose(fp1); remove("book1.dat");//删除原文件 rename("linshi.dat", "book1.dat");//重命名为原文件 fflush(stdin); system("pause"); system("cls"); return; }
- 实验结果与分析:
经过代码的实现和编译后,我们进行了多次功能测试,确保系统正常运行,并可按照预期完成各项操作。用户可以登录系统,输入合法的账户名和密码后进入系统,然后可以根据自己的需要执行各种功能操作。
本次实验设计并实现了一个基于C语言的图书管理系统,它具备了录入图书、显示图书、查询图书、修改图书和删除图书等功能。通过使用面向对象的思想和结构体数组来存储图书信息,我们使系统结构清晰、操作简单。另外,通过账户名和密码的验证,我们保证了系统的安全性和可靠性。
然而,本系统还有一些可以改进的地方。例如,可以增加图书的分类和编号功能,以便更详细和便捷地组织和查找图书。另外,可以引入文件操作,将图书信息保存到文件中,以实现长久的数据存储和备份。此外,还可以增加借阅和归还图书的功能,完善整个图书管理流程。
综上所述,基于C语言的图书管理系统在方便了图书管理的同时,也为后续的功能扩展和改进提供了基础。通过进一步的优化和功能增加,该系统有望成为一个更加完善和实用的图书管理工具。