IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 图书管理系统(C文件读、存) -> 正文阅读

[C++知识库]图书管理系统(C文件读、存)

?

读取给定的图书文件book.txt?中的信息,完成一个图书信息管理系统,该系统的各个功能模块利用菜单选项进行选择,要求程序具有正确性、可读性(变量函数命名规范、核心语句添加注释)、健壮性(数据非法时能够进行相应处理)。

系统的功能如下(利用结构体数组来完成):
1.输出:读取book.txt中的文件信息并依次输出所有图书信息(书号、书名、价格)。
2.插入:根据指定的位置i?(1≤j≤n+1)和给定的一本图书信息,?将该图书插入到位置i?并将变化后的图书信息回写到book.txt。
3.删除根据指定的位置i?(1≤j≤n),?删除该位置上的图书信息,并将变化后的图书信息回写到book.txt
4. 4.1?按位置进行查找:根据输入的位置j(1≤j≤n),查找位置i上的图书信息并输出;

? ? 4.2 按书名进行查找:根据输入的书名,查找该图书的信息并输出(如果有多本,则全部输出)。
5.修改:将价格小于25元的图书价格提高20%,价格大于等于25元的图书价格提高10%,?将修改后的图书信息写入文件book_?newprice.?txt中。
6.排序(冒泡排序):按书的价格由低到高排序写入文件book_?newsort.?txt中。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000 //图书数量的默认上限值,可根据需要修改 

struct book {
	char number[20];
	char name[40];
	float price;
} Book[N];

char s1[40] = {" "}, s2[20] = {" "}, s3[20] = {" "}, s4[20] = {" "}; //表头数据
int n;//图书的数量 

void output();//输出函数:输出所有图书信息
void insert();//插入函数:插入一个图书信息
void del();   //删除函数:删除指定位置的图书信息
void seek();  //查找函数:根据位置或者书名查找和输出信息
void display();//修改函数:将修改后的图书价格信息写入文件
void sort();  //排序函数:按图书价格由高到低排序后写入文件
void read();  //文件写入函数:将文件写入缓存 
void write(); //文件写出函数:将缓存写出到文件 

struct book *init() {
	memset(Book->number, ' ', sizeof(char) * 20);
	memset(Book->name, ' ', sizeof(char) * 40);
	Book->price = (float)0;
	return Book;
}//结构体初始化函数 

void read() {
	FILE *fp;
	if ((fp = fopen("book.txt", "r+")) == NULL) { //判断文件打开是否正确,若错误,直接退出 
		printf("文件打开错误!!!\n");
		return ;
	}
	fscanf(fp, "%s%s%s%s", s1, s2, s3, s4) == 4;//表头值缓存存入 
	int i = 0;
	//列表值缓存存入 
	for ( ; fscanf(fp, "%s%s%f", Book[i].number, Book[i].name, &Book[i].price) == 3; i++);
	n = i;//存入多少数据 
	fclose(fp);
	return;
}

void write() {
	FILE *fp;
	if ((fp =fopen("book.txt", "w+")) == NULL) {
		printf("文件打开错误!!!\n");
		return ;
	}
	fprintf(fp, "%s\n%s\t%s\t%s\n", s1, s2, s3, s4) == 4;
	for (int i = 0; i < n; i++) {
		fprintf(fp, "%s\t%s\t%g\n", Book[i].number, Book[i].name, Book[i].price) == 3;
	}
	fclose(fp);
	return ;
}

void insert() {
	printf("请输入指定的位置: ");
	int index;
	scanf("%d", &index);
	if (index < 1 || index > n + 1) {
		printf("输入错误!!!即将退出!!!\n");
		return ;
	}
	index -= 1;//数组下标从0开始,输入值减一 
	for (int i = n - 1; i >= index; i--) {
		Book[i + 1] = Book[i];
	}  //腾出空间来存放待插入数据
	printf("请输入待输入的图书编号: ");
	scanf("%s", Book[index].number);
	printf("请输入待输入的图书书名: ");
	scanf("%s", Book[index].name);
	printf("请输入待输入的图书价格: ");
	scanf("%f", &Book[index].price);
	n += 1;
	write();
	return ;
}

void del() {
	printf("请输入指定的位置: ");
	int index;
	scanf("%d", &index);
	if (index < 1 || index > n + 1) {
		printf("输入错误!!!即将退出!!! \n");
		return ;
	}
	index -= 1;
	for (int i = index; i < n; i++) {
		Book[i] = Book[i + 1];
	}  
	n -= 1;
	write();
	return ;
}

void seek() {
	while (1) {
		int item;
		printf("-----------------\n");
		printf("1.按位置查找     \n");
		printf("2.按书名查找     \n");
		printf("0.退出子菜单     \n");
		printf("-----------------\n");
		printf("请输入编号: ");
		scanf("%d", &item);
		switch (item) {
			case 1:	{
				int index;
				printf("请输入位置: ");
				scanf("%d", &index);
				if (index < 1 || index > n + 1) {
					printf("输入错误!!!即将退出!!!\n");
					return ;
				}
				index -= 1;
				printf("书号\t\t 书名\t\t\t 价格\n");
				printf("%s\t%s\t%g\n", Book[index].number, Book[index].name, Book[index].price);
				break;
			}
			case 2: {
				char s1[40] = {" "};
				printf("请输入待查询书籍的书名: ");
				scanf("%s", s1); 
				int flag = 1;
				for (int i = 0; i < n; i++) {
					if (strcmp(s1, Book[i].name) != 0) continue;
					printf("书号\t\t 书名\t\t\t 价格\n");
					printf("%s\t%s\t%g\n", Book[i].number, Book[i].name, Book[i].price);
					flag = 0;
				}
				if (flag == 1) printf("查询不到该书籍,请检查输入!!!\n");
				break;
			}
			case 0: return ;
			default: printf("请输入正确的编号!!!\n");	
		}
	}
	return ;
}

void display() {
	for (int i = 0; i < n; i++) {
	 	if (Book[i].price < 25) Book[i].price *= (float)1.2;
	 	else Book[i].price *= (float)1.1;
	}
	FILE *fp;
	if ((fp = fopen("book_newprice.txt", "w+")) == NULL) {
		printf("文件打开错误!!!\n");
		return ;
	}
	fprintf(fp, "%s\n%s\t%s\t%s\n", s1, s2, s3, s4) == 4;
	for (int i = 0; i < n; i++) {
		fprintf(fp, "%s\t%s\t%g\n", Book[i].number, Book[i].name, Book[i].price) == 3;
	}
	fclose(fp);
	printf("数据修改成功!!!\n");
	return ;
}

void sort() {
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < n - 1 - i; j++) {
			if (Book[j].price > Book[j + 1].price) {
				float temp = Book[j].price;
				Book[j].price = Book[j + 1].price;
				Book[j + 1].price = temp;
			}
		}
	}
	FILE *fp;
	if ((fp = fopen("book_newsort.txt", "w+")) == NULL) {
		printf("文件打开错误!!!\n");
		return ;
	}
	fprintf(fp, "%s\n%s\t%s\t%s\n", s1, s2, s3, s4) == 4;
	for (int i = 0; i < n; i++) {
		fprintf(fp, "%s\t%s\t%g\n", Book[i].number, Book[i].name, Book[i].price) == 3;
	}
	fclose(fp);
	printf("数据排序成功!!!\n");
	return ;
}
void menu() {
	int item; 
	while(1) {
		printf("*************************************\n");
		printf("             图书管理系统            \n");
		printf("-------------------------------------\n");
		printf("\t1.输出\n");
		printf("\t2.插入\n");
		printf("\t3.删除\n");
		printf("\t4.查找\n");
		printf("\t5.修改\n");
		printf("\t6.排序\n");
		printf("\t0.退出\n");
		printf("*************************************\n");
		printf("\n");
		printf("请输入编号: ");
		scanf("%d", &item);
		switch (item) {
		case 1: read(), output();break;
		case 2: read(), insert();break;
		case 3: read(), del();break;
		case 4: read(), seek();break;
		case 5: read(), display();break;
		case 6: read(), sort();break;
		case 0: exit(1);
		default: printf("请输入正确的编号!!!\n");
		}
		system("pause");
	}
	return ;
}
void output() {
	printf("%s\n%s\t\t\t%s\t\t\t%s\n", s1, s2, s3, s4);
	for (int i = 0; i < n; i++) {
		printf("%s\t%s\t%g\n", Book[i].number, Book[i].name, Book[i].price);
	}
	return ; 
}
int main() {
	init();
	menu();
	return 0;
}

以下为book.txt文件内容(需和源代码放在同一文件夹下)

XX大学图书馆计算机类图书采购列表
ISBN	书名	定价
9787302257646	程序设计基础	25
9787302164340	程序设计基础(第2版)	20
9787302219972	单片机技术及应用	32
9787302203513	单片机原理与应用技术	26
9787810827430	工业计算机控制技术——原理与应用	29
9787811234923	汇编语言程序设计教程	21
9787512100831	计算机操作系统	17
9787302202844	计算机操作系统基础与应用(第二版)	30
9787302265436	计算机导论实验指导	18
9787302131304	计算机数学	20
9787302162834	计算机数学	30
9787302221630	计算机数学(第二版)	25
9787811235388	计算机网络基础	32
9787302137849	计算机维护与维修	26
9787302188308	计算机系统组装与维护	26
9787512101517	计算机应用基础与信息处理案例教程	25
9787811239447	计算机英语	29
9787302257448	计算机硬件与维护	29.8
9787302125679	计算机专业英语	25
9787302235682	计算机专业英语	28
9787302149286	计算机专业英语(第2版)	25
9787302211860	计算机组成原理(第2版)	29.5
9787302215530	计算机组装与维护	27
9787302232629	计算机组装与维护	24
9787302180630	实用数据结构	29
9787302225065	数据结构(C/C#语言版)	28
9787302135180	数据结构	21
9787302228141	数据结构	28
9787302163282	数据结构实验与实训教程(第2版)	23
9787302194934	微机原理与汇编语言实用教程	32
9787302133841	微机原理与接口技术	31
9787302223771	微型计算机原理及应用技术	29
9787302171973	微型计算机原理与结构(第二版)	28
9787302184898	微型计算机原理与结构习题解答与实验指导	21
9787302162988	ARM9嵌入式系统设计与开发应用	35
9787302197850	ARM体系结构与程序设计	30
9787302222705	EDA技术与VerilogHDL	38
9787302250708	基于ARM的嵌入式系统接口技术	43
9787302225515	嵌入式LinuxC语言应用程序设计与实践	36
9787302250753	嵌入式Linux实时操作系统及应用编程	48
9787302253402	ARM9嵌入式系统设计与应用	39
9787302188667	ASP.NET&IIS7高级编程	79.8
9787302259596	ASP.NET程序设计实训教程	26
9787302195252	ASP.NET程序设计与软件项目实训	34
9787302220763	ASP.NET实践教程	29
9787302258117	ASP.NET网站开发案例教程	36
9787302197867	ASP案例汇编	25
9787302212850	ASP语言程序设计	33
9787302198499	Authorware7.0实用教程	28
9787811230710	C#程序设计易懂易会教程	32
9787302219583	C#程序设计与开发	27
9787302171676	C#面向对象程序设计	39.5
9787302266341	C#面向对象程序设计(第2版)	58
9787302250692	C语言程序设计	42
9787302201090	C语言程序设计(第2版)	35
9787302137634	C语言程序设计基础与实训教程	25
9787810824125	C语言程序设计教程(修订本)	22
9787302127970	C语言程序设计与应用开发	29
9787302202646	C语言简明教程	26
9787302254454	C语言课程设计案例精编(第二版)	52
9787302150664	J2ME无线开发实训教程	25
9787302176091	Java2程序设计基础	27
9787302246909	Java高级程序设计	29
9787302260806	Java编程与实践	36
9787302210542	Java程序设计	29
9787302170037	Java程序设计教程(第2版)	29.5
9787302252887	Java程序设计与应用教程	39
9787302129226	Java高级编程实用教程	28
9787302214953	Java应用案例教程	33
9787302266211	Java语言程序设计实用教程	39
9787302202059	JSP动态网站开发实用教程	35
9787302256502	MATLAB程序设计与应用基础教程	24
9787302127956	UML基础与应用(高等学校规划教材)	22
9787302179306	VB.NET程序设计实用教程	31
9787302195696	VB.NET程序设计与软件项目实训	29
9787302220381	VB程序设计案例汇编	22
9787302229070	VC++程序设计基础教程	28
9787302214489	VC++程序设计项目实践	26
9787302176909	VisualBasic.NET程序设计	24
9787302172246	VisualBasic程序设计实用教程	30
9787302176060	VisualBasic程序设计与应用	30
9787302255604	VisualBasic项目化教程同步训练题	28
9787302254461	VisualC#2008程序设计与应用教程	38
9787302241522	VisualC#程序设计与项目实践	35
9787302218753	Web应用程序设计技术——ASP.NET(C#)	29
9787302231660	Web应用程序设计技术——ASP.NET(第2版)	30
9787811232554	XML基础教程	25
9787302179832	XML实用教程	20
9787302165156	基于C#的WindowsCE程序开发实例教程	23
9787302215356	基于工作过程的Java程序设计	27
9787302198505	嵌入式操作系统及编程	25
9787302169666	软件测试	24
9787811232301	软件测试	17
9787302167884	软件测试教程	22
9787302204862	软件工程	23
9787302186137	软件开发生命周期	23
9787302198697	软件开发与管理	28
9787302226024	软件项目综合实训(.NET篇)	29
9787811231991	实用Java程序设计	25
9787811235890	实用软件工程	26
9787302195863	实用软件工程与实训	25
9787302199519	新编Java实用教程	48
9787811231557	Eclipse基础与应用	35

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:08:38  更:2021-09-14 13:09:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:43:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码