C语言做一个图书管理系统源码,使用txt文件保存数据

我使用的IDE为 VS2022,仅实现对文件内容的的添加以及修改,一本书是否被删除,我这里是以图书的状态来划分,如果这本书的状态为删除,则不显示出来,但是存在文本里;并且我这里是退出程序才会进行修改文本内容,删除则直接修改保存文本。

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include <Windows.h>
int BookNumber;//书的总数量

struct BookInfo
{
	int ID;
	char Name[50];
	char Author[30];
	float Price;
	char State[10];
};
struct BookInfo BI[200];
void InitializeBookInfo();//初始化图书信息
void ReadBookInfo(int number);//输出书籍信息
void AddBook(int OneOrTwo);//添加书籍
void SearchBook(int OneOrTwo);//查询
void Menu();//菜单
void UpBookInfo();//修改图书信息
void DelBook();//删除图书信息
void SaveFile();//保存文件
/*
* strcpy(字符串1,字符串2);将字符串2的内容复制给字符串1
* strtok(字符串1,字符串2);将字符串1分割,分隔符为字符串2
* atoi(字符串);将字符串转换为int类型的,失败则返回0
* atof(字符串);将字符串转换为float类型的
* strstr(字符串1,字符串2);在字符串1里找字符串2;
*/
main() {
	HWND hwnd = GetConsoleWindow();
	LONG Style;    //窗口风格
	Style = GetWindowLong(hwnd, GWL_STYLE);   // 得到窗口风格   
	Style = Style & ~WS_CAPTION;             //去掉标题栏
	SetWindowLong(hwnd, GWL_STYLE, Style);     //为窗口设置新的风格
	InitializeBookInfo();
	Menu();
}
void InitializeBookInfo() {
	char c[1000];
	int CurrentLine = 0;
	FILE* fp1 = fopen("../BookInfo1.txt", "r");//打开文件
	if (fp1 == NULL) {//若文件不存,则新建一个;
		//printf("文件不存在!");
		fp1 = fopen("../BookInfo1.txt", "w");
		fclose(fp1);
	}
	else {
		while (!feof(fp1))
		{
			char* result = NULL;
			int line = 0;
			//fgets(c, 100, fp1); //从输入文件读取一行字符串
			char delims[] = "|";
			result = fgets(c, 100, fp1);
			if (result == NULL) {
				continue;
			}
			result = strtok(result, delims);
			while (result != NULL && result != "" && result != "\n")
			{
				if (line == 0) {
					BI[CurrentLine].ID=atoi(result);
				}
				if (line == 1) {
					strcpy(BI[CurrentLine].Name, result);
				}
				if (line == 2) {
					strcpy(BI[CurrentLine].Author, result);
				}
				if (line == 3) {
					BI[CurrentLine].Price= atof(result);
				}
				if (line == 4) {
					strcpy(BI[CurrentLine].State, result);
				}
				result = strtok(NULL, delims);
				line++;
			}
			CurrentLine++;
		}
		fclose(fp1);//关闭输入文件
		BookNumber = CurrentLine;
	}
}
void Menu()
{
	int c, number;
	printf("\n\n*******************************************\n");
	printf("1:新增图书信息             2:查找图书信息\n");
	printf("3:修改图书信息             4:删除图书信息\n");
	printf("5:显示图书信息             6:退出系统\n");
	printf("*******************************************\n");
	printf("请输入操作选项:\n");
	scanf_s("%d", &c);
	switch (c)
	{
	case 1:
		printf("请输入本次添加的书籍有多少本");
		scanf_s("%d", &number);
		AddBook(number);
		break;
	case 2:
		printf("1:按照书名查询             2:按作者查询\n");
		scanf_s("%d", &number);
		SearchBook(number);
		break;
	case 3:
		ReadBookInfo(0);
		UpBookInfo();
		break;
	case 4:
		DelBook();
		break;
	case 5:
		ReadBookInfo(0);
		Menu();
		break;
	case 6:
		SaveFile();
		exit(0);
		break;
	default:
		SaveFile();
		exit(0);
		break;
	}
}
void ReadBookInfo(int number) {
	int i;
	printf("序号\t书名\t作者\t价格\t状态\n");
	if (number == 0) {
		for (i = 0; i < BookNumber; i++) {
			if (!strstr(BI[i].State, "删除")) {//状态为删除的不显示
				printf("%d\t", BI[i].ID);
				printf("%s\t", BI[i].Name);
				printf("%s\t", BI[i].Author);
				printf("%.2f\t", BI[i].Price);
				printf("%s", BI[i].State);
			}
		}
	}
	else {
		printf("%d\t", BI[number-1].ID);
		printf("%s\t", BI[number - 1].Name);
		printf("%s\t", BI[number - 1].Author);
		printf("%.2f\t", BI[number - 1].Price);
		printf("%s", BI[number - 1].State);
	}
}
void AddBook(int number) {
	int i;
	for (i = 0; i < number; i++) {
		printf("\n请输入第%d本书的书名:\n", i + 1);
		scanf_s("%s", BI[BookNumber].Name, 30);
		printf("请输入作者:\n");
		scanf_s("%s", BI[BookNumber].Author, 20);
		printf("请输入价格:\n");
		scanf_s("%f", &BI[BookNumber].Price);

		strcpy(BI[BookNumber].State,"正常\n");
		BI[BookNumber].ID = BookNumber + 1;
		BookNumber = BookNumber + 1;
	}
	Menu();
}
void SearchBook(int OneOrTwo) {
	char Name[20] = { "\0" };
	int i;
	if (OneOrTwo == 1) {
		printf("请输入书名:\n");
		scanf_s("%s", Name, 20);
		printf("序号\t书名\t作者\t价格\t状态\n");
		for (i = 0; i < BookNumber; i++) {
			if (strstr(BI[i].Name, Name)&& !strstr(BI[i].State, "删除")) {
				printf("%d\t", BI[i].ID);
				printf("%s\t", BI[i].Name);
				printf("%s\t", BI[i].Author);
				printf("%.2f\t", BI[i].Price);
				printf("%s", BI[i].State);
			}
		}
	}
	else {
		printf("请输入书名:\n");
		scanf_s("%s", Name, 20);
		printf("序号\t书名\t作者\t价格\t状态\n");
		for (i = 0; i < BookNumber; i++) {
			if (strstr(BI[i].Author, Name) && !strstr(BI[i].State, "删除")) {
				printf("%d\t", BI[i].ID);
				printf("%s\t", BI[i].Name);
				printf("%s\t", BI[i].Author);
				printf("%.2f\t", BI[i].Price);
				printf("%s", BI[i].State);
			}
		}
	}
	Menu();
}
void UpBookInfo() {
	int bookNumber;
	printf("请输入该书的编号:(输入0则返回上一层菜单)");
	scanf_s("%d", &bookNumber);
	if (bookNumber == 0) {
		Menu();
	}
	else {
		int i;
		ReadBookInfo(bookNumber);
		printf("书名:");
		scanf_s("%s", BI[bookNumber - 1].Name, 50);
		printf("作者:");
		scanf_s("%s", BI[bookNumber - 1].Author, 30);
		printf("价格:");
		scanf_s("%f", &BI[bookNumber - 1].Price);
		printf("状态:");
		scanf_s("%s", BI[bookNumber - 1].State, 10);
		strcat(BI[bookNumber - 1].State, "\n");
		Menu();
	}
}
void DelBook() {
	int num;
	printf("\n请输入要删除的编号:(输入0则返回上一层菜单)\n");
	scanf_s("%d",&num);//
	if (num != 0) {
		strcpy(BI[num - 1].State, "删除\n");//将相应图书的状态改为删除
		SaveFile();
	}
	Menu();
}
void SaveFile() {
	int i;
	FILE* fp1 = fopen("../BookInfo1.txt", "w");//打开文件
	for (i = 0; i < BookNumber; i++) {
		char str[1024];
		sprintf(str, "%d|%s|%s|%.2f|%s", BI[i].ID, BI[i].Name, BI[i].Author, BI[i].Price, BI[i].State);//字符串拼接赋给str;
		fputs(str, fp1);//写入文件
	}
	fclose(fp1);
}
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值