大一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)
blank

相关推荐

  • SQL语句order by两个字段同时排序。

    SQL语句order by两个字段同时排序。

  • 简述django请求生命周期_django请求的生命周期

    简述django请求生命周期_django请求的生命周期Django请求生命周期分析1.客户端发送请求在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都

  • Java葵花宝典(一)

    Java葵花宝典(一)1.面向对象和面向过程的区别面向过程:是以事件为中心,按照我们编写的代码,根据完成步骤的过程来执行的优点:面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要考量的因素的时候,比如单片机开发,嵌入式开发,Linux一般采用面向过程开发缺点:没有面向对象易维护、易复用、易扩展面向对象:将事物高度抽象化,我们把要完成的功能高度抽象成一个个对象,调用对象的方法或者属性来完成所需功能优点:易维护、易复用、易扩展。因为面向对象有封装、继承、多态的特性,所以可以设计

  • Mybatisplus 相关操作之 IService BaseMapper ServiceImpl 简单应用

    本篇主要介绍mybatisplus的简单应用这里对mybatisplus中配置遇到的问题及extent、implement所导入的包也为大家方便引入依赖1引入相关依赖依赖只是参考,每人的仓库不同,代码块内容仅作参考<dependencies><dependency><groupId>org.springframework.boot</groupId><artifac

  • 安装软件提示:必须首先安装.NET Framework

    安装软件提示:必须首先安装.NET Framework安装软件提示:必须首先安装.NET Framework

  • java中常见的运行时异常_java五种常见异常

    java中常见的运行时异常_java五种常见异常运行时异常:编译时不会报错,但程序运行起来如果有错误就会报异常。以下为常见的运行时异常:ArithmeticException算数运算异常,由于除数为0引起的异常;ClassCastException类型转换异常,当把一个对象归为某个类,但实际上此对象并不是由这个类创建的,也不是其子类创建的,则会引起异常;ArrayStoreException由于数组存储空间不够引起的异…

发表回复

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

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