基于C语言的图书馆管理系统(数据存储在文件中) 您所在的位置:网站首页 基于大数据的图书馆信息管理 基于C语言的图书馆管理系统(数据存储在文件中)

基于C语言的图书馆管理系统(数据存储在文件中)

2024-07-01 14:20| 来源: 网络整理| 查看: 265

程序设计课程实践

------基于C语言图书馆管理系统编程设计

1.课程目的

本程序旨在训练学生的C语言基本编程能力,通过串联C语言输入输出、循环语句、子函数设计、数组、结构体等知识点,完成一个简单系统的设计开发。

2.系统功能

(1)通过菜单的形式实现人机交互界面

(2)实现录入图书基本信息

(3)实现删除指定图书的基本信息

(4)实现修改指定图书的基本信息

(5)实现查询指定图书的基本信息

3.设计思想

(1)人机交互界面

使用printf()和scanf()输入输出函数设计出主界面交互菜单,通过switch case语句判断输入的选项值,执行相对应得子函数。

每一个选项执行完毕,需要考虑清屏(system("cls");),然后重新显示主界面,供用户下一次操作。

设计程序退出菜单选项,用户执行其选项后,需要使用C语言文件操作,保存当前录入得全部图书信息。

程序启动时需要打开上次保存得数据文件,读入到内存中,如果没有则新建一个文件用于程序退出时保存数据。

人机交互界面可以自己设计,可以加上开发者信息,体现每个学生的差异。

展示如下:

(2)添加图书信息

设计为单独的子函供主函数调用。

定义一个结构体类型,包括七个成员变量(图书编号,图书名,作者名,出版单位,数量),并用该类型定义一个全局的结构体数组,供外部录入图书信息时存储。

//定义一个全局变量来存储当前学生个数。

添加图书信息时,需要从外部读入图书的图书编号,图书名,作者名,出版单位,数量,在获取图书编号时需要判断是否输入重复,图书个数变量加一,并根据当前图书个数将其保存在结构体数组对应序号的元素中。

一个图书信息录入结束后可以提示用户输入Y/N来选择是否接着输入下一个图书。

(3)显示全部图书信息

通过对当前结构体数组进行遍历,并显示输出

展示如下:

(4)查找单个图书

根据输入需要查找图书名,遍历当前结构体数组,判断是否含有一致图书名的元素,若有则显示输出对应的信息和成绩,否则显示无此书籍。

显示如下:

(5)修改图书信息

根据输入需要查找图书的编号,遍历当前结构体数组,判断是否含有一致编号的元素,

若有则依次从外部读入用户所修改的值,保存到对应成员变量中。

展示如下:

(6)删除指定图书

根据输入需要查找图书的编号,遍历当前结构体数组,判断是否含有一致图书名称的元素,若有则从该元素之后依次将下一个元素赋值到上一个元素,直至最后一个赋值完成,最后当前图书个数变量减一。

显示如下:

(7)借阅图书

  通过对当前结构体数组进行遍历,并显示输出

显示如下:

归还图书

通过对当前结构体数组进行遍历,并显示输出

 显示如下:

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1 #include #include #include //定义结构体 struct book { int id; char name[30]; char author[30]; char publish[50]; int store; int total; int user[10]; int days[10]; }; const char* file = "Book.txt"; //图书文件 //显示整体标题标题函数 void page_title(char* menu_item) { printf("\t\t图书馆管理系统\n\n%s-\n\n", menu_item); } void add_book(struct book* lib, int* count) { void menu(); void page_title(char* menu_item); system("cls"); //清屏 page_title("注册新书"); printf("序号:"); scanf("%d", &lib[*count].id); printf("书名:"); scanf("%s", &lib[*count].name); printf("作者:"); scanf("%s", &lib[*count].author); printf("出版社:"); scanf("%s", &lib[*count].publish); printf("数量:"); scanf("%d", &lib[*count].total); lib[*count].store = lib[*count].total; (*count)++; printf("\n"); } void Show_books(struct book* lib, int count) { int i; system("cls"); for (i = 0; i < count; i++) { printf("序号:%d\t ", lib[i].id); printf("书名:%s\t ", lib[i].name); printf("作者:%s\t ", lib[i].author); printf("出版社:%s\t ", lib[i].publish); printf("存数:%d\t", lib[i].store); printf("总数:%d\n\n", lib[i].total); } } void search_book(struct book* lib, int count) { system("cls"); int i, flag; char nam[30]; system("cls"); printf("请输入书名:"); scanf("%s", &nam); if (strlen(nam) > 1) { for (i = 0; i < count; i++) { if (strcmp(lib[i].name, nam) == 0) { printf("序号:%d\t ", lib[i].id); printf("书名:%s\t ", lib[i].name); printf("作者:%s\t ", lib[i].author); printf("出版社:%s\t ", lib[i].publish); printf("存数:%d\t", lib[i].store); printf("总数:%d\n", lib[i].total); flag = 1; break; } } } else { printf("输入错误!\n"); return; } if (flag == 0) { printf("\n没有找到相关书籍\n"); } } void modify_book(struct book* lib, int count) { int i, id_change; system("cls"); page_title("修改图书信息:"); printf("输入要修改的图书id:"); scanf("%d", &id_change); for (i = 0; i < count; i++) { if (lib[i].id == id_change) { printf("修改书名:"); scanf("%s", &lib[i].name); printf("修改作者:"); scanf("%s", &lib[i].author); printf("修改出版社:"); scanf("%s", &lib[i].publish); printf("修改数量:"); scanf("%d", &lib[i].total); lib[i].store = lib[i].total; printf("修改图书信息成功\n"); } else if(i==count) printf("\n没有找到相关信息\n"); } } void delete_book(struct book* lib, int* count) { int i, num; system("cls"); page_title("删除图书"); printf("输入所要删除的书的id:"); scanf("%d", &num); for (i = 0; i 0) { printf("借书证序号:"); scanf("%d", &s); printf("输入可借天数:"); scanf("%d", &d); lib[i].user[i] = s; lib[i].days[i] = d; lib[i].store--; printf("借阅成功!\n"); printf("序号:%d\t ", lib[i].id); printf("书名:%s\t ", lib[i].name); printf("作者:%s\t ", lib[i].author); printf("出版社:%s\t ", lib[i].publish); printf("存数:%d\t", lib[i].store); printf("总数:%d\n", lib[i].total); } else if (lib[i].store == 0) { printf("此书已经完全借完\n\n"); } } else if(i==count) { printf("抱歉,未找到匹配的书籍!\n"); break; } } } //归还图书 void return_book(struct book* lib, int count) { int i,s; char name[30]; page_title("归还图书"); printf("请输入要归还的书籍名称:"); scanf("%s", name); for (i = 0; i < count; ++i) { if (strcmp(name, lib[i].name) == 0) { if (i != -1 && lib[i].store < lib[i].total) { printf("借阅图书证列表\n"); if (lib[i].user != 0) { printf("[%d]--%d天\n", lib[i].user[i], lib[i].days[i]); } printf("输入借书证号:"); scanf("%d", &s); if (lib[i].user[i] == s) { lib[i].store++; printf("归还成功\n"); } } else if (i != -1 && lib[i].store == lib[i].total) { printf("全部归还\n"); } } } } //将图书信息保存到文件中 void save_books(struct book* lib, int count, const char* file_name) { FILE* fp = fopen(file_name, "wb"); fwrite(&count, sizeof(int), 1, fp); fwrite(lib, sizeof(struct book), count, fp); fclose(fp); } //从文件中读取图书信息 int load_books(struct book* lib, int* count, const char* file_name) { FILE* fp = fopen(file_name, "rb"); if (fp == NULL) { printf("读取文件失败"); } fread(count, sizeof(int), 1, fp); fread(lib, sizeof(struct book), *count, fp); fclose(fp); return 1; } void menu() { page_title("开发者:林**\n操作选单"); printf("用数字选择操作\n\n"); printf("\t\t(1)图书信息录入\t\t(2)显示图书\n"); printf("\t\t(3)查询图书信息\t\t(4)修改图书信息\n"); printf("\t\t(5)删除图书\t\t(6)借阅图书\n"); printf("\t\t(7)归还图书\t\t(8)退出系统\n"); } int main() { char Step = 'Y'; int choice=0, count =0; struct book* lib = (struct book*)malloc(sizeof(struct book) * 100); load_books(lib, &count, file); do { menu(); printf("请按数字键:\n"); scanf("%d", &choice); switch (choice) { case 1: do { add_book(lib, &count); printf("输入(Y)继续添加图书 or 输入(N)结束添加:\n"); scanf("%s", &Step); } while (Step != 'N'); case 2: Show_books(lib, count); break; case 3: search_book(lib, count); break; case 4: modify_book(lib, count); break; case 5: delete_book(lib, &count); break; case 6: borrow_book(lib, count); break; case 7: return_book(lib, count); break; case 8: printf("感谢使用图书馆管理系统!\n"); break; default: printf("请输入正确的选项!\n"); break; } } while (choice != 8); save_books(lib, count, file); free(lib); return 0; }

以上内容参考文章:http://t.csdnimg.cn/wOwn7



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有