大一c语言图书管理系统_C语言结构体类型名

大一c语言图书管理系统_C语言结构体类型名图书管理系统1.前言在大一下,我们的C语言课程布置了一次大作业,要求做出一个管理系统,整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。各种信息管理系统本质上是没有太大区别的,对于数据的操作都是差不多的。2.功能及其相关函数2.1菜单界面的构建建立两个界面函数,用来搭建主页,这里用到两个头文件#include<conio.h>定义了通过控制台的数据输入与输出函数#include<windows.h>用来调整方框大小与背景颜色

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

图书管理系统

1.前言

在大一下,我们的C语言课程布置了一次大作业,要求做出一个管理系统,整个系统可以设计为数据插入模块、数据修改模块、数据删除模块、数据显示模块和数据查询模块。各种信息管理系统本质上是没有太大区别的,对于数据的操作都是差不多的。

2.功能及其相关函数

2.1 菜单界面的构建

建立两个界面函数,用来搭建主页,这里用到两个头文件
#include<conio.h>
定义了通过控制台的数据输入与输出函数
#include<windows.h>
用来调整方框大小与背景颜色

#include<conio.h>
#include<windows.h>
void Menu1()
{ 
   

	system("mode con cols=54 lines=30");
	system("color F2");
	printf("**********欢迎使用****大学图书管理系统***********\n");

}//标题函数1

void Menu2()
{ 
   
	printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("\t\t1.录入图书\t\t\n");
	printf("\t\t2.显示图书\t\t\n");
	printf("\t\t3.查询图书\t\t\n");
	printf("\t\t4.修改图书\t\t\n");
	printf("\t\t5.删除图书\t\t\n");
	printf("\t\t0.退出\t\t\n");
	printf("\t\t输入你的操作:");

}//标题函数2

2.2 功能一 录入图书

设置一个WriteToFile()函数,利用scanf函数将数据输入给结构体,利用fwrite函数将结构体数据写入”book1.dat”这个二进制文件中。利用while函数可以进行反复录入。

2.3 功能二 显示图书

利用fread()函数将数据读出二进制文件

while (!feof(fp))
	{ 
   
		if (fread(&stu, LEN, 1, fp))
		{ 
   
			printf("%10s\t%8s\t\t%5s\n", stu.id, stu.name, stu.author);
		}
	}

此时利用if语句可以有效避免结构体数据被重复读出。

2.4 功能三 查询图书

此时利用strcmp函数进行图书ID的“检索”,利用fread函数读出,再利用printf函数读出来。

2.5 功能四 修改图书

此时利用strcmp函数进行图书ID的“检索”,并将其结构体内的所有数据进行重新输入,达到修改的目的。此时的fseek函数有确定文件指针的效果。

2.6 功能五 删除图书

删除图书原理:重新建立一个临时文件,将除了需要旧文件删除的内容全部复制到临时文件中,再利用remove函数删除掉旧文件,使用rename函数将临时文件改名为旧文件名字。达到删除的目的

3.注意事项

(1):可以利用链表简化程序
(2):应该要尽可能
扩充管理系统的功能
(3):本人使用VS2017编写程序,不同的版本可能不兼容
(4):main()中利用到do-while和switch函数实现主页菜单的效果
在这里插入图片描述

4.源程序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#define LEN sizeof(book)

typedef struct book //确认结构体
{ 
   

	char id[8];
	char name[31];
	char author[27];
	char publish[31];
	double price;

}book;

void Menu1();//标题函数

void Menu2();//菜单函数

void WriteToFile();//书籍信息输入的函数

void ReadFromFile();//显示所有信息的函数

void QueryFile();//书籍的查询函数

void ModifyFile();//书籍的修改函数

void DeletFile();//删除数据的函数

int main()
{ 
   
	int select;
	
	do 
	{ 
   
		Menu1();
		Menu2();
		scanf("%d", &select);
		switch (select)
		{ 
   
		case 1:
			WriteToFile();
			break;

		case 2:
			ReadFromFile();
			break;

		case 3:
			QueryFile();
			break;

		case 4:
			ModifyFile();
			break;

		case 5:
			DeletFile();
			break;

		default:
			printf("退出程序!");
			exit(0);
			break;
		}
	}while ((select == 1 || select == 2)||(select == 3|| select == 4)||( select == 5));

	return 0;
}//利用switch函数进行菜单的选择

void Menu1()
{ 
   

	system("mode con cols=54 lines=30");
	system("color F2");
	printf("**********欢迎使用长沙理工大学图书管理系统***********\n");

}//标题函数1

void Menu2()
{ 
   
	printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	printf("\t\t1.录入图书\t\t\n");
	printf("\t\t2.显示图书\t\t\n");
	printf("\t\t3.查询图书\t\t\n");
	printf("\t\t4.修改图书\t\t\n");
	printf("\t\t5.删除图书\t\t\n");
	printf("\t\t0.退出\t\t\n");
	printf("\t\t输入你的操作:");

}//标题函数2

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183711.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • InetAddress类的使用示例

    InetAddress类的使用示例packagecom.hpeu.inetaddress;importjava.net.InetAddress;importjava.net.UnknownHostException;importorg.junit.Test;/***InetAddress类的使用*1.获取InetAddress类的方式:* 1)getByName(Stringhost):…

  • 【学习笔记】sklearn库基本功能介绍[通俗易懂]

    【学习笔记】sklearn库基本功能介绍[通俗易懂]sklearn(Scikit-learn)是python中一个提供机器学习算法的库,安装Scikit-learn库地址如下:http://scikit-learn.org/stable/sklearn库的共分为6大部分,分别用于完成分类任务、回归任务、聚类任务、降维任务、模型选择以及数据的预处理。1分类任务分类任务可以用于异常检测,图像识别,对应的模型及加载模块如下:|分类模型|加载模块||最近邻算法|neighbors.NearestNeighbors||||分类(Class

  • 使用sqlyog链接多个主机的数据库

    使用sqlyog链接多个主机的数据库

    2021年10月16日
  • Android apk中so库文件未压缩

    Android apk中so库文件未压缩背景:升级AS3.6.1,并且升级projectbuild.gradleAGP到3.6.1,一个项目发现打包后文件骤然增大,查看apk包,发现apk包中so库文件未被压缩.但是一个类似项目,相同版本却没有问题升级前升级后升级后RawFileSize正好是未压缩的大小可能原因不同版本AGPgradlebuildtask实现不一样,再某情况下回不进行…

  • [python]异步 async

    [python]异步 async#-*-encoding:utf-8-*-“””ankus@ModifyTime@Author@Version@Description————————————–2021/12/314:02xlgui21.0asynciopy3.8异步IO:就是发起一个IO操作(如:网络请求,文件读写等),这些操作一般是比较耗时的,不用等待它结束,可以继续做

  • 1024是程序员的什么节日(重阳节的时候干什么)

    1024程序员节1024程序员节是广大程序员的共同节日。1024是2的十次方,二进制计数的基本计量单位之一。针对程序员经常周末加班与工作日熬夜的情况,部分互联网机构倡议每年的10月24日为1024程序员节,在这一天建议程序员拒绝加班。程序员就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世界。1G=1024M,而1G与1级谐音,也有一级棒的意思。1、节日背景程序员(英文Programmer)是从事前端、后端程序开发、系统运维、测试等的专业人员。一般将程序员分为程序设计人员和程序.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号