1. 题目要求
图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等,试设计一图书管理系统,使之能提供以下功能:
(1) 新图书基本信息的输入。 (2) 图书基本信息的查询。 (3) 对撤销图书信息的删除。 (4) 办理借书的手续。 (5)办理还书的手续。 2. 需求分析
这是一个能简单管理图书的小型图书管理系统,其中图书信息包括:书名,作者名,书编号,分类,出版社,价格等。通过这些信息使之提供以下功能:
(1) 图书信息的创建功能。其中图书信息包括:书名,作者名,书编号,分类,
出版社,价格等。(图书信息用文件保存)
(2) 图书信息查看功能。用来查看各项图书信息。
(3) 图书信息查找功能。通过已知信息来查找想要的图书。 (4) 图书信息的删除。可以删除指定图书。
(5) 图书信息的修改。可以修改图书的各项信息。
(6) 菜单选择功能,次功能也是图书信息管理系统的入口,用户所要进行的各
种操作均需要在此模块中进行选择并进行调用其他模块实现相应的功能。
3. 总体设计
(1) 数据结构
图书管理系统中主要的数据结构包含书名、图书书号、作者名、分类、出版社、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。
struct Book /*定义结构体数组*/
{ char ISBN[14]; //编号 char Name[20]; //名称 char Author[20]; //作者
char Type[10]; //类型 char Pub[20]; //出版社 char Date[10]; //出版日期 float Price; //价格
};
(2) 模块分化
本系统主要有添加图书、查找图书、搜索图书、删除图书、修改图书几个基本功能。
函数声明:
int Choose(); int Add(); int View(); int Search(); int Delete(); int Modify(); int menu(); 4. 详细设计
流程图:
//选择 //添加图书 //查找图书 //搜索图书 //删除图书 //修改图书 //返回系统
C 语言课程设计报告
开始
主菜单
输入
查找
添 加 图 书
查 看 图 书
书 名 查 找
作 者 查 找
编 号 查 找
日 期 查 找
删 除 图 书
修 改 图 书
退 出 系 统
4.1主函数
函数的原型:void main()
函数的功能:调用菜单,使用各项功能。
程序: main() { menu(); }
menu() { printf ("\n\n********图书管理系统********\n\n\t1.添加图书\n\t2.查看图书\n\t3.搜索图书\n\t4.删除图书\n\t5.修改图书\n\t6.退出程序\n\n****************************\n"); switch (Choose(6)) { case 1: Add(); break; case 2: View(); break; case 3: Search(); break; case 4: Delete(); break; case 5: Modify(); break; case 6: exit(0); } return 0; }
Choose(int limit) { int n = 0; while (n < 1 || n > limit) {
}
printf("选择一个项目:"); scanf("%d", &n); getchar(); }
return n;
4.2各功能模块设计 4.2.1添加图书信息: 函数原型:void Add()
函数的功能:记录图书的各项信息 程序: Add() { FILE *f; struct Book b; f = fopen("Book.txt", "ab"); if (f == NULL) { printf("File open error!\n"); exit(0); }
else { Add:printf ("请输入图书信息,分类标签:\n图书编号 图书名称 作者 图书类型 出版社 出版日期 图书价格\n"); scanf("%s%s%s%s%s%s%f", b.ISBN, http://www.77cn.com.cn, b.Author, b.Type, b.Pub, b.Date, &b.Price); fwrite(&b, sizeof(struct Book), 1, f); printf("\n完成.\t1.继续添加\t2.返回菜单\n"); switch (Choose(2)) { case 1: goto Add; break; case 2: fclose(f); menu(); break; } } return 0; }
4.2.2查看图书信息
函数的原型:void View()
函数的功能:查看图书书编号,书名,作者名,类型,出版社,出版日期,价格。 程序: View() { FILE *f; struct Book b; f = fopen("Book.txt", "rb"); if (f == NULL) { printf("File open error!\n"); exit(0); } else { fread(&b, sizeof(struct Book), 1, f);
}
while (feof(f) == 0) { printf("%s\t%s\t%s\t%s\t%s\t%s\t%4.2f\n", b.ISBN, http://www.77cn.com.cn, b.Author, b.Type, b.Pub, b.Date, b.Price); fread(&b, sizeof(struct Book), 1, f); }
fclose(f);
printf("\n完成.\t1.返回菜单\t2.退出程序\n"); switch (Choose(2)) {
case 1: menu(); break; case 2: exit(0); } return 0;
}
4.2.3搜索图书
函数的原型:void Search()
函数的功能:通过书编号,书名,作者名,类型,出版社,出版日期查找图书。 程序: Search() { FILE *f; struct Book b; char s[40]; int i = 0; f = fopen("Book.txt", "rb"); if (f == NULL) { printf("File open error!\n"); exit(0); } else { printf("请输入图书关键词查询:"); scanf("%s", s); fread(&b, sizeof(struct Book), 1, f); while (feof(f) == 0) { char bi[128] = { 0 }; strcat(bi, b.ISBN); strcat(bi, http://www.77cn.com.cn); strcat(bi, b.Author); strcat(bi, b.Type); strcat(bi, b.Pub); strcat(bi, b.Date); if (strstr(bi, s)) { printf("%s\t%s\t%s\t%s\t%s\t%s\t%4.2f\n", b.ISBN, http://www.77cn.com.cn, b.Author, b.Type, b.Pub, b.Date, b.Price); i++; } break; fread(&b, sizeof(struct Book), 1, f); } fclose(f); if (i == 0) printf("没有发现图书信息!"); else printf("%d 发现信息", i);
}
}
printf("\n完成.\t1.返回菜单\t2.退出程序\n"); switch (Choose(2)) {
case 1: menu(); break; case 2: exit(0); } return 0;
4.2.4删除图书
函数的原型:void Delete()
函数的功能:通过图书编号或者查询图书编号确定图书,进而删除图书。 程序: Delete()
FILE *i, *o; struct Book b; char s[40]; printf ("你需要图书编号. 如果你没有,你可以通过查询功能获得.\n\t1.拥有图书编号\t2.查询图书编号\n"); if (Choose(2) == 2) Search(); i = fopen("Book.txt", "rb"); o = fopen("tempBook.txt", "wb"); if (i == NULL || o == NULL) { printf("File open error!\n"); exit(0); } else { int c = 0; printf("请输入你想要删除的图书编号:\n"); scanf("%s", s); fread(&b, sizeof(struct Book), 1, i); while (feof(i) == 0) { if (strcmp(s, b.ISBN)) fwrite(&b, sizeof(struct Book), 1, o); else c = 1; fread(&b, sizeof(struct Book), 1, i); } fclose(i); fclose(o); remove("book.txt"); rename("tempbook.txt", "book.txt"); if (c) printf("删除成功."); else printf("无效图书编号."); printf("\t1.返回菜单\t2.退出程序\n"); switch (Choose(2)) { case 1: menu(); break;
}
}
exit(0); } return 0;
4.2.5修改图书信息
函数的原型:void Modify()
函数的功能:通过图书编号或者查询图书编号确定图书,进而修改图书。 程序: Modify()
FILE *i, *o; struct Book b, t; char s[40]; printf ("你需要图书编号. 如果你没有, 你可以通过查询功能获得.\n\t1.拥有图书编号\t2.查询图书编号\n"); if (Choose(2) == 2) Search(); i = fopen("Book.txt", "rb"); o = fopen("tempBook.txt", "wb"); if (i == NULL || o == NULL) { printf("File open error!\n"); exit(0); } else { int c = 0; printf("请输入你想修改的图书编号:\n"); scanf("%s", s); printf ("请输入图书信息,分类标签:\n图书编号 图书名称 作者 图书类型 出版社 出版日期 图书价格\n"); scanf("%s%s%s%s%s%s%f", t.ISBN, http://www.77cn.com.cn, t.Author, t.Type, t.Pub, t.Date, &t.Price); fread(&b, sizeof(struct Book), 1, i); while (feof(i) == 0) { if (strcmp(s, b.ISBN) == 0) { c = 1; b = t; } fwrite(&b, sizeof(struct Book), 1, o); fread(&b, sizeof(struct Book), 1, i); } fclose(i); fclose(o); remove("book.txt"); rename("tempbook.txt", "book.txt"); if (c) printf("修改成功."); else
}
}
printf("\t1.返回菜单\t2.退出程序\n"); switch (Choose(2)) {
case 1: menu(); break; case 2: exit(0); } return 0;